From patchwork Thu Jan 17 14:20:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Lendacky X-Patchwork-Id: 1026671 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="OrZNMUOh"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43gR7v0m9sz9sCh for ; Fri, 18 Jan 2019 01:20:59 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727038AbfAQOU5 (ORCPT ); Thu, 17 Jan 2019 09:20:57 -0500 Received: from mail-eopbgr710077.outbound.protection.outlook.com ([40.107.71.77]:2993 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725878AbfAQOU4 (ORCPT ); Thu, 17 Jan 2019 09:20:56 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RsPB2NXF24CQ/QnEpAvI2pcxT669WTytZmw8c4hFzIY=; b=OrZNMUOhEY0U97TAMvgu7kCR8zXGQcv0WU46kirt+fkmfrRnISncaQu0SwAT55msRPI30nA1KThof/qLs8lVHjzpGTIglfkUjk5r712VNuQTQNOvcjWWaPSE7SNUTO5y70lVJdHMPOA+g293UK29Bxqbt4co0/xBXkzp1lAQ84c= Received: from MN2PR12MB3631.namprd12.prod.outlook.com (20.178.243.19) by MN2PR12MB3502.namprd12.prod.outlook.com (20.178.242.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1516.20; Thu, 17 Jan 2019 14:20:14 +0000 Received: from MN2PR12MB3631.namprd12.prod.outlook.com ([fe80::a861:43c0:476d:e044]) by MN2PR12MB3631.namprd12.prod.outlook.com ([fe80::a861:43c0:476d:e044%4]) with mapi id 15.20.1516.019; Thu, 17 Jan 2019 14:20:14 +0000 From: "Lendacky, Thomas" To: "netdev@vger.kernel.org" CC: "S-k, Shyam-sundar" , David Miller Subject: [PATCH] amd-xgbe: Fix mdio access for non-zero ports and clause 45 PHYs Thread-Topic: [PATCH] amd-xgbe: Fix mdio access for non-zero ports and clause 45 PHYs Thread-Index: AQHUrm/DxouN/RbSZ062BRmj4OoQ8Q== Date: Thu, 17 Jan 2019 14:20:14 +0000 Message-ID: <154773481238.25763.17562910524896559590.stgit@tlendack-t1.amdoffice.net> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0401CA0017.namprd04.prod.outlook.com (2603:10b6:803:21::27) To MN2PR12MB3631.namprd12.prod.outlook.com (2603:10b6:208:cc::19) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Thomas.Lendacky@amd.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; MN2PR12MB3502; 20:n8DvBcMijxo9rNv77Aof5NlDgbOYHDbzRGZ7lCH+loW7jHR9BRH1/3Qy6U4dK1iO2871NaChJH4+QTwD/l3gN3ee5si34kcGF3XfPY7+6FGZI3QIDWxIM1q0YgiLVoj5BvshTBnVOVLdDcHWGJ2u8V2j1D5OxjGJk2ODc/6PtihdqUmIteUrY1DeFCKnFA1xUWqAY6V1r80G7x1kD/9k+sgSF6mtz9+A2xuZ+jc9nmFANdZtMuaZqt6VuaIsl5zH x-ms-office365-filtering-correlation-id: 0a426e11-ca06-453e-294b-08d67c86e5d3 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600109)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:MN2PR12MB3502; x-ms-traffictypediagnostic: MN2PR12MB3502: x-microsoft-antispam-prvs: x-forefront-prvs: 0920602B08 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(376002)(39860400002)(346002)(396003)(366004)(199004)(189003)(476003)(71200400001)(54906003)(316002)(6436002)(68736007)(71190400001)(103116003)(4326008)(486006)(97736004)(6512007)(99286004)(6486002)(25786009)(3846002)(6116002)(66066001)(102836004)(53936002)(2906002)(81156014)(1730700003)(386003)(6506007)(8676002)(9686003)(52116002)(186003)(81166006)(86362001)(6916009)(305945005)(7736002)(33896004)(72206003)(5640700003)(5660300001)(2501003)(5024004)(14444005)(256004)(8936002)(14454004)(2351001)(106356001)(478600001)(105586002)(26005); DIR:OUT; SFP:1101; SCL:1; SRVR:MN2PR12MB3502; H:MN2PR12MB3631.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: wJoeEYgZtfjXIbWyGjF3u5shVPurLC66wpbZsMMewm0nB7jWmYmVnD7vOqVsPsbyFPNOTqK+4lPRWeCeCG8+no5mCweehQp7LsYw5ZjvShWQmNPS/DaY9yG8OReXul5b7VAE/qJoNOij65xuTeIEVZpaWljiyIJ03Sku8JV6zhMlC0JVc9VYIcBRN9LFGeUXJPwlkj10QTo5/siNh1WDqPHaShW1yW/W15u8/TnasoGsjoiBz0Hx+90awplxWSC0GtScth27G7wOagmy1nR9JPAb1ftmKGd7pMPUqF4lFvmpgRtYQaxG6tQTdrFP/ubJdpmpSucis9Zqpg9Zbdo3ZAbm3ooclXCf9LelCi+V1W9cqD5RYHcCbfYE0UZelTbhmVsXZJipTp33Kq01ragbSE+Dg/p6p9vgwuyWqAJteeI= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-ID: MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0a426e11-ca06-453e-294b-08d67c86e5d3 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Jan 2019 14:20:13.9505 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB3502 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The XGBE hardware has support for performing MDIO operations using an MDIO command request. The driver mistakenly uses the mdio port address as the MDIO command request device address instead of the MDIO command request port address. Additionally, the driver does not properly check for and create a clause 45 MDIO command. Check the supplied MDIO register to determine if the request is a clause 45 operation (MII_ADDR_C45). For a clause 45 operation, extract the device address and register number from the supplied MDIO register and use them to set the MDIO command request device address and register number fields. For a clause 22 operation, the MDIO request device address is set to zero and the MDIO command request register number is set to the supplied MDIO register. In either case, the supplied MDIO port address is used as the MDIO command request port address. Fixes: 732f2ab7afb9 ("amd-xgbe: Add support for MDIO attached PHYs") Signed-off-by: Tom Lendacky Tested-by: Shyam Sundar S K --- Please queue this patch up for stable, 4.14 and higher. drivers/net/ethernet/amd/xgbe/xgbe-common.h | 2 -- drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 22 ++++++++++++++++------ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-common.h b/drivers/net/ethernet/amd/xgbe/xgbe-common.h index d272dc6984ac..b40d4377cc71 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-common.h +++ b/drivers/net/ethernet/amd/xgbe/xgbe-common.h @@ -431,8 +431,6 @@ #define MAC_MDIOSCAR_PA_WIDTH 5 #define MAC_MDIOSCAR_RA_INDEX 0 #define MAC_MDIOSCAR_RA_WIDTH 16 -#define MAC_MDIOSCAR_REG_INDEX 0 -#define MAC_MDIOSCAR_REG_WIDTH 21 #define MAC_MDIOSCCDR_BUSY_INDEX 22 #define MAC_MDIOSCCDR_BUSY_WIDTH 1 #define MAC_MDIOSCCDR_CMD_INDEX 16 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c index 1e929a1e4ca7..4666084eda16 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c @@ -1284,6 +1284,20 @@ static void xgbe_write_mmd_regs(struct xgbe_prv_data *pdata, int prtad, } } +static unsigned int xgbe_create_mdio_sca(int port, int reg) +{ + unsigned int mdio_sca, da; + + da = (reg & MII_ADDR_C45) ? reg >> 16 : 0; + + mdio_sca = 0; + XGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, RA, reg); + XGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, PA, port); + XGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, DA, da); + + return mdio_sca; +} + static int xgbe_write_ext_mii_regs(struct xgbe_prv_data *pdata, int addr, int reg, u16 val) { @@ -1291,9 +1305,7 @@ static int xgbe_write_ext_mii_regs(struct xgbe_prv_data *pdata, int addr, reinit_completion(&pdata->mdio_complete); - mdio_sca = 0; - XGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, REG, reg); - XGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, DA, addr); + mdio_sca = xgbe_create_mdio_sca(addr, reg); XGMAC_IOWRITE(pdata, MAC_MDIOSCAR, mdio_sca); mdio_sccd = 0; @@ -1317,9 +1329,7 @@ static int xgbe_read_ext_mii_regs(struct xgbe_prv_data *pdata, int addr, reinit_completion(&pdata->mdio_complete); - mdio_sca = 0; - XGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, REG, reg); - XGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, DA, addr); + mdio_sca = xgbe_create_mdio_sca(addr, reg); XGMAC_IOWRITE(pdata, MAC_MDIOSCAR, mdio_sca); mdio_sccd = 0;