From patchwork Mon Apr 23 16:43:08 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Lendacky X-Patchwork-Id: 903019 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="ozY4XHEY"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40VC2G0lj7z9ry1 for ; Tue, 24 Apr 2018 02:43:18 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755510AbeDWQnQ (ORCPT ); Mon, 23 Apr 2018 12:43:16 -0400 Received: from mail-sn1nam01on0052.outbound.protection.outlook.com ([104.47.32.52]:33491 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754788AbeDWQnO (ORCPT ); Mon, 23 Apr 2018 12:43:14 -0400 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; bh=qkyEz9xjCSiM4C/lErFp1HCmgTnMLjVvL27Pd4yG9So=; b=ozY4XHEYj0fcLRz7xQroP9qDNNzRHRDXhydLm0WVSnEWfSPlkaJQZ5qvz5SAZrNKeiJhYy82DMobfuA2vanS86wTtB43mOe6xAFQyPXVsRc0j8CdN1HOfo19LOhiArbovzvxyrbj7sXXU6+SYFaGVndbakX4mLPTI1othlLeea4= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=amd.com; Received: from tlendack-t1.amdoffice.net (165.204.77.1) by SN1PR12MB0174.namprd12.prod.outlook.com (2a01:111:e400:5144::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.696.13; Mon, 23 Apr 2018 16:43:11 +0000 From: Tom Lendacky Subject: [PATCH net 1/3] amd-xgbe: Add pre/post auto-negotiation phy hooks To: netdev@vger.kernel.org Cc: David Miller Date: Mon, 23 Apr 2018 11:43:08 -0500 Message-ID: <20180423164307.18740.66109.stgit@tlendack-t1.amdoffice.net> In-Reply-To: <20180423164258.18740.98574.stgit@tlendack-t1.amdoffice.net> References: <20180423164258.18740.98574.stgit@tlendack-t1.amdoffice.net> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: MWHPR12CA0059.namprd12.prod.outlook.com (2603:10b6:300:103::21) To SN1PR12MB0174.namprd12.prod.outlook.com (2a01:111:e400:5144::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4534165)(4627221)(201703031133081)(201702281549075)(48565401081)(2017052603328)(7153060)(7193020); SRVR:SN1PR12MB0174; X-Microsoft-Exchange-Diagnostics: 1; SN1PR12MB0174; 3:z4m5kITnGEicSSyoJ3uLlPwJI3P6pv1AhFZtJSpR8+YGBSVtD4PCKFXRpT/+OPkCtyCKfmujfmI1kXyx7Y//uVlpliNjDQt16KAh7R0BY5XlxWVXlYd6P7DUAymMSjhKs+D/10B9+ZBPXy/TNFxDCxbBYzBfXF40iEOYSeYi9kwHkgeulST6tqg5Ek3BPMP1Q2WSXGK036wQbD9yTqFORSax85m3MbNznVV9IO9ZDzPWc/NbEwp3nHt159eFJB5M; 25:k6ssozP9nqPI5hT5MFFZxTxZ4+EdxUsGB2KZ8gPj5WUd41V6Ttr3dvSrkJhM8LGXKUkTSMTMZHH5OogHUbK1KGLz5kTfje2VfhW6mB9N1faTUlCDHGFwOhoNeK43pjwtq+TRLPTMdWg6Z9bir4+pccVY62tVCHldo9MPqvKxFXIOf6A9kFO9mK3CCd1ps+M205mrykUQviWvi7UC01q6MfRxOWGZTBxG9XXOhZ8QzYkuOE45vRj/74fojn2OAoM9AWJRKJ2E1LvvpiGuYqoQP3n6mfiLbHRy2mxdTuGxalzBoAJCaHHmVOC/HRCLvh2pOsnugwLhklvcsrhTTaAh3A==; 31:7mrjtXQmiESJm8bCuv1fdENdBjBi3LheEuhYRmwltfD7tjpPFx3CCBFH8wP7454oFZ/5118QAG2VWvGbKZ/syrlrmCMwRcGQCMc9N2bD/WAyo4N2dr/hEf28oPLllC+phXZq869h6PDrTI/0gSJwnImzfLv99ZBpOm46MD33fLg11Br9ddpMhPoapd6xlk/bgnaBoONqAZAAdZaoj/cyRAkYFmn7BIlm1qbctcImHi8= X-MS-TrafficTypeDiagnostic: SN1PR12MB0174: X-Microsoft-Exchange-Diagnostics: 1; SN1PR12MB0174; 20:6me5GLxieEtdR0oOnxsfyNC7sfBE6o+HZxCNBc94HFrkrE2X0vHSJ7Xi/KZNAmwL1xB1beBlWCXV2MxCTqFjFnfiUfISqNIHSiRQanKqfaNxXGhhK/xKPvZoAwMHAlhM435ulNCVEen/ttoaQS0r4lss5sKVQIaJuKmzAu0MyeOg1OxJCrGqkpjfnqNCk/rPPWk+Na8qEvssnseRzxRnirRwClpk3+U9EmzyROu08dz8tAAJ/tH1XdH4RoEBW49GI/zWaaE2fdeJa/EGd1mS6VNa1W9H6ECdvnQrAZPrEG3ndOH/xCo73Vq1QY0LA1+kiP4XCb1twcKnXsR9hkZqddfq2fz5bKqNXFmiTRN7JrqRaQAR1jrzISDCD2F2jsIawCSfyzkp3WqYhb7Fn/3WnGTveT4O5nAj/kApkFx90NYfy/h40o/wI9XZoX6zFh11JXCihdKgWVlYum+eAevsX95X0j0zO0zoY8ieeis52/1PZQaTgnnK09CjEswPNcRu; 4:tU4CP/UmyyetM3B1wvqEs2YjaaAUtu88qaDHSVoH7gi/+oOHTjhRNMnoXdnIppfaIddJtTD05Yo7wZ6sI6C72dNy6RBevLAkCCiX1WdqDHnc3rnxtX/atUuRUe6RKshegkco4DzFsIzwscm//Lndf6XYU0e5PHGARfsyG3nO/Li4GXpT40MPnexN5buuk0rSs47vvOkYusk41Xi1jSiZtWd6EKtDLxr/RVsTAC5SPuqcqJ24SxQHWS/wRYyyXBdEvdw662gYTQSVYhS2X1nf+pOeVzcPjrMJN9WDJ+YRP+8CMUhbUBRu4iv/ykGKAsCb X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(3231232)(944501410)(52105095)(3002001)(10201501046)(6055026)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123558120)(20161123560045)(20161123562045)(6072148)(201708071742011); SRVR:SN1PR12MB0174; BCL:0; PCL:0; RULEID:; SRVR:SN1PR12MB0174; X-Forefront-PRVS: 06515DA04B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39860400002)(346002)(376002)(366004)(396003)(39380400002)(230700001)(52116002)(6116002)(6666003)(3846002)(9686003)(53936002)(72206003)(2906002)(446003)(476003)(956004)(11346002)(478600001)(1076002)(25786009)(6916009)(55016002)(4326008)(316002)(86362001)(47776003)(7736002)(186003)(16526019)(66066001)(305945005)(5660300001)(50466002)(103116003)(6506007)(8676002)(386003)(8936002)(81166006)(76176011)(53416004)(575784001)(26005)(23676004)(2486003)(7696005)(2361001)(2351001); DIR:OUT; SFP:1101; SCL:1; SRVR:SN1PR12MB0174; H:tlendack-t1.amdoffice.net; FPR:; SPF:None; LANG:en; MLV:sfv; X-Microsoft-Exchange-Diagnostics: =?utf-8?q?1=3BSN1PR12MB0174=3B23=3A6bpk?= =?utf-8?q?sl5j6uOmI6fD3r9UcjIcbV2AdNR5jFsJ/7juhbT4SaOSg35O1ApN1d0P?= =?utf-8?q?4zoeOWKORxFG79jPdfNTRDphrfVt8t2noYxiL2FfI38mohC9RndMWPLa?= =?utf-8?q?hmrMZEgz7bPSngYLmmo7RHt7szuOOG3Zj497gCdCB3fjOtiECWjVtcJL?= =?utf-8?q?O52W+ofZ/75s3wiwKYk4m4nfYjYzWRjbCUBr/3jCz7Rpp/N1B/6W0RlY?= =?utf-8?q?RqIJzB2jUtzHTMXSol/rcbwfO5UbKfsxe25qcGLYIFVBxiHp7GXI6rxk?= =?utf-8?q?48xXIpXKnfAM/GeJu0u3hRp/JkIOGLc8gyoSzp/LmhHn327/yFcDcgnD?= =?utf-8?q?htFVzDfA2hXQMwgoKqP237RYZkjI3WasfAzqOAPYr5yC8/ywZZsWvP+S?= =?utf-8?q?kzdWlSa5Wx4VovTTnaO0GHHEDSyfIVkPXiRV2/Oq50pVpcEjY5AXfWV3?= =?utf-8?q?tbpdLK3SRyhP6AyVmQDfOcmB0U5EDy4zOW0oVS11RBTD/pHNZGsg6Ocf?= =?utf-8?q?s6Boum0XdEJh1yFzcu8UP9D5RALObtbzSwh7i5nFqrHmUTiqqu5PiNQU?= =?utf-8?q?a37tBdvt2rNc/dMCrdDd0QEUXxUA9Av1C90fzP+dJWUVDXi+6OHqy0wG?= =?utf-8?q?c0AINyc3j/4a1d3mNmBVvoqkObU45gROIQgBOeEmKyFXWvPT0sV1pe8t?= =?utf-8?q?qxWaXO2R/P+8dF0Y5wT/2xALAiv2Sp8c4eFqOOreNaYyNtDCa998Gg1R?= =?utf-8?q?iw/h8whyxF2bIoQwr4VH5mSMkD9KIjLflusjHfUWxwceBnD6gv7jOFhc?= =?utf-8?q?eErwmowAg0RKBYzojU8myDxWNIoXms7X8FRIv3jBL0mCDQRMt6TOBHzC?= =?utf-8?q?Xz2NdaCXFMxic8tZ09lopD/FdjN20fhxVnLYYkyDdc79yLzXwRIJ8B7H?= =?utf-8?q?qhh9sBBDM5bM3sU7GEbyLrVGDaPXfr+XgMYLqWwZC3OJC9Wc/utqGLv+?= =?utf-8?q?FqH/KAjUBCD5DFgPyAoEf3VEn8368zjrFQen8Dputc/cFRRMI5Sx1uwo?= =?utf-8?q?NQUui41C3NL4Qhgjc6SvnDNgcbhEaY6JLKZGWrx48qwLO8352zWdisJ9?= =?utf-8?q?s1lLM7+4MaeiNUP+O4ojeT2HYVguVHWMb/jWu+hxzX0X8/oKN0HvL16g?= =?utf-8?q?RO4GQrk=3D?= X-Microsoft-Antispam-Message-Info: 7s0QJB2igF+fHJ739eDqhyIv9JCGMobY0BF7hO+CBDlFmKbQEaz3WfcYDM3GnbY2sF3UIHy8gA8KtvLum7LO0Mb2amOaZZX4+/KJSQgqK/0d6TnCxu/+IGrvGLtAiqeu6c/xRKjFqanYzh0IHB+VRH5PQD3gTgaZ09rEhDzKR4baMWR1DxsjVc3GQPPWPzFn X-Microsoft-Exchange-Diagnostics: 1; SN1PR12MB0174; 6:mZG2qQXa2vnyRq1Rqz+dKxAzURNevaOdygG+wEAwPKz44M1iQ5uyAjLh/2i4LEt5QpzEpoMNB0ZIFpelXwpLdqectnA3ictD4jRf37ABeEBrxWcjiNFF9uVD+1o5SVUPF+8Gh7BMK+CaKbcCX7osGfb1ZjEgEgNeqqf15j9chx9+HWlo9eGQhr4ypEk6v8PxoN+U22jY1mtqP6Mx+6m4NgPihmadopjvzdU8xh359pI2D1+CNjPOM/DM7pLwAwwuHJJeUTFzIsyiLHHFkzjEFi2ohECI2wub5dyNkqGkOseL/q6Kb/LpjRzFIgpR7sADzezUNUQL5EBqbcBfTJoCNzFa/oHxnGf/jAZWDvXZ18Vi/JedwExGmYniOFMpBWXe8UG4b4C/sbq1BuQg3NiaDRcjRROFn+IG889xZfx2Jk9EkA4AQhI3eGiETm3YnuXFJipdi1WF7KDWUGxt9gNSUA==; 5:npCU3k3vB5oSwBeqKoQPnviI6Lf7bsogY7+Ym8iat40NuFW9hMMfK4MSWOLXlSBZB/5kWN65e7cDejuc7+glK1qgiZLxJ/8BUHtI/a3oUjTq5ht3JiHAvBppIJyz+mO469R5pENMCiLlBGi36gLXDezSK5pU/r1pzFZWPzb0fHU=; 24:bVgoggm9n6Ro0oQFYZAw2lkNQpzSX+NsdGG58dmTTqljnh314chz4gv4ihtv6Cpj9KyauFwfJVOE1kqwybB1DKjy/K8t9UkyQ4tJxl2cv4g= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN1PR12MB0174; 7:gUUYdiWoMfLefrxsW+0tpTvY07nbonyLnjEU61Y6MQThq062zle6cgY1lbb34i/4HKfiXzq0hyJIJM1M+YaeR9ZufGm6FcNLCMRoGP7jdyoXtsRX2eBHE0kFbW8es8VtOMQ2qKRvoIzYV4n+x+0J2YQHf6v7vm2KLWe281XiJZHGXb8DAJWtUjBkiSmsUt9QjgD27TlHLY6dz0wpy9tf9FLhMG+GNPwIb5jbik4XKRzyRxA2dEyNqAJlcOztYtLK; 20:zJ8HnBItZJX2q/NUFQWHyuipJwxZxoiCTy44BBAALBwzNwRhIWpi/0w3GIx5NRM0HUvMy7LpeMAshYcv5DAo8D8I9t/oNFzKXqghP6xPs7RC+a5RiwlMcLGcFu5hOK679KfxJgOkeVPNN4dKadIA9mwJHeE7hecBHEaJ4Ge1UtZBqTKASrwR0CHhvibJBi29BbQA/NNqtJR1OBWRXCGGYAYz9jnXAl7YHA1MPrq3PBQBUpV36oRRfQcLoulR0eLp X-MS-Office365-Filtering-Correlation-Id: eb759ed0-60cd-4b03-8dff-08d5a9394d97 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Apr 2018 16:43:11.7801 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: eb759ed0-60cd-4b03-8dff-08d5a9394d97 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR12MB0174 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add hooks to the driver auto-negotiation (AN) flow to allow the different phy implementations to perform any steps necessary to improve AN. Signed-off-by: Tom Lendacky --- drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 16 ++++++++++++++-- drivers/net/ethernet/amd/xgbe/xgbe.h | 5 +++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c index 072b9f6..e3d361e 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c @@ -437,6 +437,9 @@ static void xgbe_an73_disable(struct xgbe_prv_data *pdata) static void xgbe_an_restart(struct xgbe_prv_data *pdata) { + if (pdata->phy_if.phy_impl.an_pre) + pdata->phy_if.phy_impl.an_pre(pdata); + switch (pdata->an_mode) { case XGBE_AN_MODE_CL73: case XGBE_AN_MODE_CL73_REDRV: @@ -453,6 +456,9 @@ static void xgbe_an_restart(struct xgbe_prv_data *pdata) static void xgbe_an_disable(struct xgbe_prv_data *pdata) { + if (pdata->phy_if.phy_impl.an_post) + pdata->phy_if.phy_impl.an_post(pdata); + switch (pdata->an_mode) { case XGBE_AN_MODE_CL73: case XGBE_AN_MODE_CL73_REDRV: @@ -637,11 +643,11 @@ static enum xgbe_an xgbe_an73_incompat_link(struct xgbe_prv_data *pdata) return XGBE_AN_NO_LINK; } - xgbe_an73_disable(pdata); + xgbe_an_disable(pdata); xgbe_switch_mode(pdata); - xgbe_an73_restart(pdata); + xgbe_an_restart(pdata); return XGBE_AN_INCOMPAT_LINK; } @@ -820,6 +826,9 @@ static void xgbe_an37_state_machine(struct xgbe_prv_data *pdata) pdata->an_result = pdata->an_state; pdata->an_state = XGBE_AN_READY; + if (pdata->phy_if.phy_impl.an_post) + pdata->phy_if.phy_impl.an_post(pdata); + netif_dbg(pdata, link, pdata->netdev, "CL37 AN result: %s\n", xgbe_state_as_string(pdata->an_result)); } @@ -903,6 +912,9 @@ static void xgbe_an73_state_machine(struct xgbe_prv_data *pdata) pdata->kx_state = XGBE_RX_BPA; pdata->an_start = 0; + if (pdata->phy_if.phy_impl.an_post) + pdata->phy_if.phy_impl.an_post(pdata); + netif_dbg(pdata, link, pdata->netdev, "CL73 AN result: %s\n", xgbe_state_as_string(pdata->an_result)); } diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h index ad102c8..fa0b51e 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe.h +++ b/drivers/net/ethernet/amd/xgbe/xgbe.h @@ -833,6 +833,7 @@ struct xgbe_hw_if { /* This structure represents implementation specific routines for an * implementation of a PHY. All routines are required unless noted below. * Optional routines: + * an_pre, an_post * kr_training_pre, kr_training_post */ struct xgbe_phy_impl_if { @@ -875,6 +876,10 @@ struct xgbe_phy_impl_if { /* Process results of auto-negotiation */ enum xgbe_mode (*an_outcome)(struct xgbe_prv_data *); + /* Pre/Post auto-negotiation support */ + void (*an_pre)(struct xgbe_prv_data *); + void (*an_post)(struct xgbe_prv_data *); + /* Pre/Post KR training enablement support */ void (*kr_training_pre)(struct xgbe_prv_data *); void (*kr_training_post)(struct xgbe_prv_data *); From patchwork Mon Apr 23 16:43:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Lendacky X-Patchwork-Id: 903020 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="Vv4YIqME"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40VC2h4vNYz9ry1 for ; Tue, 24 Apr 2018 02:43:40 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932139AbeDWQni (ORCPT ); Mon, 23 Apr 2018 12:43:38 -0400 Received: from mail-co1nam03on0084.outbound.protection.outlook.com ([104.47.40.84]:30819 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932092AbeDWQnb (ORCPT ); Mon, 23 Apr 2018 12:43:31 -0400 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; bh=5JuQoEMmaP3KkTZz//XW8RC4tdPUV8Xrbzhg6ybUot4=; b=Vv4YIqMEZKJYk8B1beCfJZ0wQpxmSDUk3Wbkth5rcfErAjUs0yYKPEOrsOwOXTCxxODpOiy6G9NI//VZSEUt1TnKfey3h352YFAz+mdoRwFqGu1Y7wiO+dJHuHtzmaOnmAS6eazsnuSn/VfRZco0JYaLUJJpNsvlXAzlkvv7B6M= Received: from tlendack-t1.amdoffice.net (165.204.77.1) by DM2PR12MB0170.namprd12.prod.outlook.com (2a01:111:e400:50ce::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.696.17; Mon, 23 Apr 2018 16:43:28 +0000 From: Tom Lendacky Subject: [PATCH net 2/3] amd-xgbe: Improve KR auto-negotiation and training To: netdev@vger.kernel.org Cc: David Miller Date: Mon, 23 Apr 2018 11:43:17 -0500 Message-ID: <20180423164317.18740.89304.stgit@tlendack-t1.amdoffice.net> In-Reply-To: <20180423164258.18740.98574.stgit@tlendack-t1.amdoffice.net> References: <20180423164258.18740.98574.stgit@tlendack-t1.amdoffice.net> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: BN6PR14CA0042.namprd14.prod.outlook.com (2603:10b6:404:13f::28) To DM2PR12MB0170.namprd12.prod.outlook.com (2a01:111:e400:50ce::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:DM2PR12MB0170; X-Microsoft-Exchange-Diagnostics: 1; DM2PR12MB0170; 3:VCeJrIqxuTgOZ3Qzpld7F15QrO/JpPbYjANdvXSjJ9zevqQ3IPQ/xd6U2NQvfzLBbbRIgec6Q7DZPkMp13dlYP+PWJkwnnV2z3t62moug42gPwnRCQsnEAwYdyGUSxIRnS3hVGhQLa33z7uraMOQJxVl6kkLwYZySzcuU1xUNlT80zWX13WeOAhBivQjX/ZqiPtfxLXsuaBz+2taV1N/U04KvWBqmzZ2FKb6Vj/GSziZ7tvGIRoSt5CmzBhDjPGP; 25:FVZdTSlcb5jYme2hClKm3otfbZQF1QJKaeZ0xphtO49di3B1smNyDkyZfdwrFKTjmB/Jca83bzDLsfQap5E2cMQxsVhYk25KKrMJkYcBl3y/26fRNLZRjbCq4aSEe9Za9jgenHAp1Qwq8wZAa2gDlTZhtNp2K3WjNAUVS8Q2d7x9NLjtk1hwCf6qB4ti4PO/Z8PIMGFhowD7DoXgOmWvLoBZfqOt5aTij1Vqh9jZ7B96VF1vWWDsRf16HhHY+xpGtt+6jmCk9EwefklhFh4aOWqYNCvSuqbOYV5DzqUyI+rZpXhTKB1gs9gYVfQJp1NRmQEzRcQo2yK6QstqFJ5E0Q==; 31:ADdUQrA2Oc7Ci0EhLGmnlHwAydzzjjl4edVpuiMbexur/HEMn//lDawBEHMUoN7Pg+ugL+BF3OWWm0wqwH5Hy4YsGXZT70QryFH3QjSBkXHsyHw4fkKPyYs9L3qyhQM0seqhvQTPCV7ukNiGVpcc0hfT9uyrJDAgLkqUE3pd+xZaHd+InxwGkUVYHCUnRJQC79AVBSBxXdRZ01lTAl+Ff1e8i+dtfsZQYzhL468S6kY= X-MS-TrafficTypeDiagnostic: DM2PR12MB0170: Authentication-Results: outbound.protection.outlook.com; spf=skipped (originating message); dkim=none (message not signed) header.d=none; dmarc=none action=none header.from=amd.com; X-Microsoft-Exchange-Diagnostics: 1; DM2PR12MB0170; 20:IaT2SuGg2dm93EeGVBXEAjnvUngwAeo5s0ZpF/kaYIdD2Q4ED21JLVLRJ7NaDiC1bDkCK824YEO7tPQ0MSFdtKKGBo4T9h3jaoUShtU4eg4Ej24ZSKe9+HKG739FVLFoQ/ZNYiakaisMG1qtkkFdVrA6xHqlPgxTpyQDdIy1bqOMly106ZhcJAM75V+6hX3ODzGV/R0oXlf3KV2/oP3giFUe/SLiq5lXy1UUsw7VVI44xJ9+Mf2HbLB40XFIZQ7I/jdTFeoU1OmEk1UT1pqoSoZRWIDLipA+AeEvrZtibCeAJn4ZhFVJPfsA5zob9eoALx8G9eV5GfE0piree7F+6sIp4IVtpvAXyYVPpNBpHVNbN7awXzp4/B0iNazh06EfjeZUQJ4WwZ48CSNhkvqDiZ/Y4Cd0EySbu4HFam8WBNkhZ/MTWu3Xo+iE/DMswc30bX6oA4KgWNxtSbmlbGTnZ5EOTIxEGggBE9KqXP3YI8I6EeXqq6B5AiXfR27doSib; 4:K5fAQVwA45GbegzdJR2A+PUbjFKXFpxeiegWaTJukujFrbLBHzpxcVEuMg2vNMtgDeEq7UWvDf9+zLNVRVJUVPUO+ZPmloUWCBSysmlRb++T1MeQJU3rrMw9Cz0yu9eXKBose742UymZpQfleuDAgD3ZQgsQTh2QtN9nRv7htcU7JUgiTgikaaoukEVOlB4Ji6fV21WD08JgIb+opc6i5QuuE2W2JpVKRSY9OouPY76RnwWkKXUyOJn3sVUBzZBr3+TB/UVbKDE2ylsTWhPh7l9Wu2aeNm89gOuKrFNZCE9uAkCaEsUGBqFBlTwYXXM6 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231232)(944501410)(52105095)(3002001)(93006095)(93001095)(10201501046)(6055026)(6041310)(20161123562045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123564045)(6072148)(201708071742011); SRVR:DM2PR12MB0170; BCL:0; PCL:0; RULEID:; SRVR:DM2PR12MB0170; X-Forefront-PRVS: 06515DA04B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39860400002)(376002)(346002)(396003)(39380400002)(8936002)(6916009)(9686003)(55016002)(6506007)(478600001)(230700001)(2486003)(386003)(23676004)(53416004)(3846002)(316002)(81166006)(86362001)(575784001)(4326008)(305945005)(8676002)(7736002)(47776003)(6666003)(66066001)(53936002)(103116003)(50466002)(186003)(16526019)(956004)(11346002)(476003)(26005)(446003)(72206003)(5660300001)(52116002)(1076002)(2906002)(7696005)(2351001)(59450400001)(2361001)(76176011)(6116002)(25786009); DIR:OUT; SFP:1101; SCL:1; SRVR:DM2PR12MB0170; H:tlendack-t1.amdoffice.net; FPR:; SPF:None; LANG:en; MLV:sfv; X-Microsoft-Exchange-Diagnostics: =?utf-8?q?1=3BDM2PR12MB0170=3B23=3AkiZX?= =?utf-8?q?cDVnSDost95YxtzXYcV7jRZegido9PWjHlkbT46uKj/2FwaJ8hO2Mgr+?= =?utf-8?q?J488SF3498u23rboIxbNkKx++zr8KsJXKPChD/jxcUZFD8nkhbxx59mD?= =?utf-8?q?JMpzlII6jIPfLNnfqHZkeYk7O8nKRD8Dux2tzRoeqayBmddeF2RqGpog?= =?utf-8?q?W2xn+uh3gB8DbIutjXyVGxNhSf6JbIPRt7hnc6/93/BMlXGV5/+W8/yB?= =?utf-8?q?nX5Z5ZxU3+oUL4SUFid81zTakVCDvDbzUeMwIe2fTp1mRQqaDgYS4Vc0?= =?utf-8?q?M5SAM0KrwhlhFZm0aa8LLSd6AFX1AyRlzXy9iC15AR9Nl88FBbtdY8Zq?= =?utf-8?q?84NNC7Uj1CLKMDqsA3o2c5LL1lj8VSfRZE51DOqS2f14eAtWmMaPMIZl?= =?utf-8?q?rv42O7U7AgztGEgXQGsb/T0MEEa6M6FkW7cVxIYS4jkbkKrLTpzTYmgr?= =?utf-8?q?RSnte5og5BsjB67D9uCJq+WTW6eqISnebSUa79H5QPjsd6phhFcYx4gu?= =?utf-8?q?Vj/upeebY4kKhckcilkeQLSvbCGdv4RV5xOT1QupthsR+/z0gr2ULM9Q?= =?utf-8?q?LL9xPGmdreBzwsIP4ql7aAyhLsEtCA1dXn/AOOc1m5r+aliN56RIxf66?= =?utf-8?q?2nN/vwh5ygrt2nTuQqwWkuHI0be04jOfG6cTX/hGh/k+JEkYddn7VyST?= =?utf-8?q?EBpMJXYnYwxsxLLXhySFnieRO8JT2xAEd7G2giSzWH6fli22BRQmZPkp?= =?utf-8?q?b7A5WfI+SWT3gdvDxXDzQjqtAududfx5rUFPNKph316tOtxKwZYCV/fK?= =?utf-8?q?lq3cuVYbuQVCA8Jnx7vLo/NxP5p/DG311T77Rl/E2KO0SIHjAKtPWBPP?= =?utf-8?q?w+xMBX+Buwx71ikF92cD1x+qHS/mmxD14JEXK+cuEjEa47gwFkQHy3t2?= =?utf-8?q?ZkSmkkJ9Xgvlbr8BqzitG6KXcnw4TKyAvAiT+OAT1OPyaC+bNKyl5S/y?= =?utf-8?q?BWbZBE2Gjn2DFSNEPW3CCsWziLwz/VYWOMud5XaBgztzCaWlWzh61Wr8?= =?utf-8?q?XEte6ornwrsoTkDljR4ziNz/tgZUDNYLN8mInvHv7Plwh9ISL35V0ANv?= =?utf-8?q?ugqn0fVWuEUaGdZaRX3eYLrF6ymshzeH2FmxslIw07oKy/HwFmaymRjy?= =?utf-8?q?M/Cleeexau6URf87tdHxCxEYvC80RbtS7x0G3MTXbwchPnkGJQ=3D=3D?= X-Microsoft-Antispam-Message-Info: hyjHZp53shdj9mYsId0gV1rKVugiu94mya1QfqjsKL603aTYimgYzg5Zelb0Ryz24spsO8L1/6aOkT/SNN1Qmh+Pjt5j95Xk/TGct6GUVRa2wlfBvo8opsWRyZmmT9y/kWbbmxccaL0vYlGj77yMdk9zYVDYuNDQVczT5VWs6vs6YnJ4CrJOerRqI3uPBCgu X-Microsoft-Exchange-Diagnostics: 1; DM2PR12MB0170; 6:+2aQbnqwa1CxoGyphVewlm+ywLyHWL5yNklpHQk671Bbb2ezg2Yn604VI1OyMlht3DmsP2KROem7sA0zmqi22U5q3D1nHUsJjXzNpfHOsCxSt318SH0cZCzU99+56MygjQWQzOaPHopviC9oZd80rIMkQ2J771R34cl8LrwLR+hub7M85N6tfZkgxzR1V3S/dwy+ynK3PNdbmlH0f7zIhRh1xcCVtS5ZPB8zHd5l7SSaWZKhasS/HZUcQRLxTXZt9FpxVoaOdFoA3JqIFLIRjIF03BMk2InjJdDgAeC79PQGjWICUD7zaGb4NrBcLsvJ+3IiyaDTqmN9p2Q38+su1iD2JuEIHDYDfzqJ0u1WH6WQ5e2+fxvnPBma4hs2Xv5ZWQsMjbmHc/zB8DOoIxAM6fwvykGc2VwfmJb92v/oHupJ3dHamdotqqyYhffRfn/mFMpb5Ku/OobebedsmiI5jQ==; 5:9RFxAyI4ExRcUfgfa5fimpXmBe8/CE7XbIfvJz1RFvLDHFCJo1mqjNKyabZmLE3Cg87Nm422zq3Ke53R5y3CGO03oP1oEt1yRd+Aq/st5GSLhWz50SgZBkX/x6BeZFOPFBVHYrloCpSPWKRn4+i30aHPaMdBxYh7tnvzPfu5IXE=; 24:t9NTG5xRkmuPBUSMW87UHKfjaEnpmN2I5xqJh+a7JQQLf9UZFgucXkQnV+VphKBCjLw0MTbk3xb/d72h/hyHzxLnayooZZXh/IMsRETjh9g= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM2PR12MB0170; 7:p7GCl8QYVgjTok+3kfagMvGTqXVPzAvYAXzPKahi095HRzszes56zSI4HfEgwzo+6H6bo9vRDgTSBJ7FB3fyUIzVbhNsy589Icd9nf4a5TpU97nmpqeEfUgdt7iq29lq76HeQk3z/Bd8BVl37eiVuemdDrogVfGTX8PFEFHKiOeJgl18nH9ONaIDUmcy2CJMBWuCln7j301q1sAryzTBPkBmgVPk6LLzpf1KRBXy0A7ZuRm6qDeurYzs1zp2STYI; 20:yGZvA9+kEVFjHH9SxbAmanNZofPzDpi/+KLRs3tErUA5x0NeBWVXf0bbYhAkrEn7vR34uuSIIBPytPOhlgHE0m22PrRaY7YQrs3uhiXega7HoyRCoBGOjlH8e1uwqyBAEE12ywemy0ZmFc9IrMEjwVDCzR4lMyYnOq6I/HyXvpOPyfoz8+Ejn70DDkbI7eqz50Tobk7biZDaf2MmicQTxruGYoS4uKimiUs8tIduuTcs+HjwnnXVZMRQwN8VLUMk X-MS-Office365-Filtering-Correlation-Id: 5e3bed11-e44d-4fe2-6c0a-08d5a9395754 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Apr 2018 16:43:28.1954 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5e3bed11-e44d-4fe2-6c0a-08d5a9395754 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR12MB0170 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Update xgbe-phy-v2.c to make use of the auto-negotiation (AN) phy hooks to improve the ability to successfully complete Clause 73 AN when running at 10gbps. Hardware can sometimes have issues with CDR lock when the AN DME page exchange is being performed. The AN and KR training hooks are used as follows: - The pre AN hook is used to disable CDR tracking in the PHY so that the DME page exchange can be successfully and consistently completed. - The post KR training hook is used to re-enable the CDR tracking so that KR training can successfully complete. - The post AN hook is used to check for an unsuccessful AN which will increase a CDR tracking enablement delay (up to a maximum value). Add two debugfs entries to allow control over use of the CDR tracking workaround. The debugfs entries allow the CDR tracking workaround to be disabled and determine whether to re-enable CDR tracking before or after link training has been initiated. Also, with these changes the receiver reset cycle that is performed during the link status check can be performed less often. Signed-off-by: Tom Lendacky --- drivers/net/ethernet/amd/xgbe/xgbe-common.h | 8 ++ drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c | 16 +++ drivers/net/ethernet/amd/xgbe/xgbe-main.c | 1 drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 8 +- drivers/net/ethernet/amd/xgbe/xgbe-pci.c | 2 drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 125 ++++++++++++++++++++++++++ drivers/net/ethernet/amd/xgbe/xgbe.h | 4 + 7 files changed, 160 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-common.h b/drivers/net/ethernet/amd/xgbe/xgbe-common.h index 7ea72ef..d272dc6 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-common.h +++ b/drivers/net/ethernet/amd/xgbe/xgbe-common.h @@ -1321,6 +1321,10 @@ #define MDIO_VEND2_AN_STAT 0x8002 #endif +#ifndef MDIO_VEND2_PMA_CDR_CONTROL +#define MDIO_VEND2_PMA_CDR_CONTROL 0x8056 +#endif + #ifndef MDIO_CTRL1_SPEED1G #define MDIO_CTRL1_SPEED1G (MDIO_CTRL1_SPEED10G & ~BMCR_SPEED100) #endif @@ -1369,6 +1373,10 @@ #define XGBE_AN_CL37_TX_CONFIG_MASK 0x08 #define XGBE_AN_CL37_MII_CTRL_8BIT 0x0100 +#define XGBE_PMA_CDR_TRACK_EN_MASK 0x01 +#define XGBE_PMA_CDR_TRACK_EN_OFF 0x00 +#define XGBE_PMA_CDR_TRACK_EN_ON 0x01 + /* Bit setting and getting macros * The get macro will extract the current bit field value from within * the variable diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c b/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c index 7d128be..b911439 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c @@ -519,6 +519,22 @@ void xgbe_debugfs_init(struct xgbe_prv_data *pdata) "debugfs_create_file failed\n"); } + if (pdata->vdata->an_cdr_workaround) { + pfile = debugfs_create_bool("an_cdr_workaround", 0600, + pdata->xgbe_debugfs, + &pdata->debugfs_an_cdr_workaround); + if (!pfile) + netdev_err(pdata->netdev, + "debugfs_create_bool failed\n"); + + pfile = debugfs_create_bool("an_cdr_track_early", 0600, + pdata->xgbe_debugfs, + &pdata->debugfs_an_cdr_track_early); + if (!pfile) + netdev_err(pdata->netdev, + "debugfs_create_bool failed\n"); + } + kfree(buf); } diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-main.c b/drivers/net/ethernet/amd/xgbe/xgbe-main.c index 795e556..441d0973 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-main.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-main.c @@ -349,6 +349,7 @@ int xgbe_config_netdev(struct xgbe_prv_data *pdata) XGMAC_SET_BITS(pdata->rss_options, MAC_RSSCR, UDP4TE, 1); /* Call MDIO/PHY initialization routine */ + pdata->debugfs_an_cdr_workaround = pdata->vdata->an_cdr_workaround; ret = pdata->phy_if.phy_init(pdata); if (ret) return ret; diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c index e3d361e..1b45cd7 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c @@ -432,6 +432,8 @@ static void xgbe_an73_disable(struct xgbe_prv_data *pdata) xgbe_an73_set(pdata, false, false); xgbe_an73_disable_interrupts(pdata); + pdata->an_start = 0; + netif_dbg(pdata, link, pdata->netdev, "CL73 AN disabled\n"); } @@ -511,11 +513,11 @@ static enum xgbe_an xgbe_an73_tx_training(struct xgbe_prv_data *pdata, XMDIO_WRITE(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL, reg); - if (pdata->phy_if.phy_impl.kr_training_post) - pdata->phy_if.phy_impl.kr_training_post(pdata); - netif_dbg(pdata, link, pdata->netdev, "KR training initiated\n"); + + if (pdata->phy_if.phy_impl.kr_training_post) + pdata->phy_if.phy_impl.kr_training_post(pdata); } return XGBE_AN_PAGE_RECEIVED; diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-pci.c b/drivers/net/ethernet/amd/xgbe/xgbe-pci.c index eb23f9b..82d1f41 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-pci.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-pci.c @@ -456,6 +456,7 @@ static int xgbe_pci_resume(struct pci_dev *pdev) .irq_reissue_support = 1, .tx_desc_prefetch = 5, .rx_desc_prefetch = 5, + .an_cdr_workaround = 1, }; static const struct xgbe_version_data xgbe_v2b = { @@ -470,6 +471,7 @@ static int xgbe_pci_resume(struct pci_dev *pdev) .irq_reissue_support = 1, .tx_desc_prefetch = 5, .rx_desc_prefetch = 5, + .an_cdr_workaround = 1, }; static const struct pci_device_id xgbe_pci_table[] = { diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c index 3304a29..b48efc0 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c @@ -147,6 +147,14 @@ /* Rate-change complete wait/retry count */ #define XGBE_RATECHANGE_COUNT 500 +/* CDR delay values for KR support (in usec) */ +#define XGBE_CDR_DELAY_INIT 10000 +#define XGBE_CDR_DELAY_INC 10000 +#define XGBE_CDR_DELAY_MAX 100000 + +/* RRC frequency during link status check */ +#define XGBE_RRC_FREQUENCY 10 + enum xgbe_port_mode { XGBE_PORT_MODE_RSVD = 0, XGBE_PORT_MODE_BACKPLANE, @@ -355,6 +363,10 @@ struct xgbe_phy_data { unsigned int redrv_addr; unsigned int redrv_lane; unsigned int redrv_model; + + /* KR AN support */ + unsigned int phy_cdr_notrack; + unsigned int phy_cdr_delay; }; /* I2C, MDIO and GPIO lines are muxed, so only one device at a time */ @@ -2361,7 +2373,7 @@ static int xgbe_phy_link_status(struct xgbe_prv_data *pdata, int *an_restart) return 1; /* No link, attempt a receiver reset cycle */ - if (phy_data->rrc_count++) { + if (phy_data->rrc_count++ > XGBE_RRC_FREQUENCY) { phy_data->rrc_count = 0; xgbe_phy_rrc(pdata); } @@ -2669,6 +2681,103 @@ static bool xgbe_phy_port_enabled(struct xgbe_prv_data *pdata) return true; } +static void xgbe_phy_cdr_track(struct xgbe_prv_data *pdata) +{ + struct xgbe_phy_data *phy_data = pdata->phy_data; + + if (!pdata->debugfs_an_cdr_workaround) + return; + + if (!phy_data->phy_cdr_notrack) + return; + + usleep_range(phy_data->phy_cdr_delay, + phy_data->phy_cdr_delay + 500); + + XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_VEND2_PMA_CDR_CONTROL, + XGBE_PMA_CDR_TRACK_EN_MASK, + XGBE_PMA_CDR_TRACK_EN_ON); + + phy_data->phy_cdr_notrack = 0; +} + +static void xgbe_phy_cdr_notrack(struct xgbe_prv_data *pdata) +{ + struct xgbe_phy_data *phy_data = pdata->phy_data; + + if (!pdata->debugfs_an_cdr_workaround) + return; + + if (phy_data->phy_cdr_notrack) + return; + + XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_VEND2_PMA_CDR_CONTROL, + XGBE_PMA_CDR_TRACK_EN_MASK, + XGBE_PMA_CDR_TRACK_EN_OFF); + + xgbe_phy_rrc(pdata); + + phy_data->phy_cdr_notrack = 1; +} + +static void xgbe_phy_kr_training_post(struct xgbe_prv_data *pdata) +{ + if (!pdata->debugfs_an_cdr_track_early) + xgbe_phy_cdr_track(pdata); +} + +static void xgbe_phy_kr_training_pre(struct xgbe_prv_data *pdata) +{ + if (pdata->debugfs_an_cdr_track_early) + xgbe_phy_cdr_track(pdata); +} + +static void xgbe_phy_an_post(struct xgbe_prv_data *pdata) +{ + struct xgbe_phy_data *phy_data = pdata->phy_data; + + switch (pdata->an_mode) { + case XGBE_AN_MODE_CL73: + case XGBE_AN_MODE_CL73_REDRV: + if (phy_data->cur_mode != XGBE_MODE_KR) + break; + + xgbe_phy_cdr_track(pdata); + + switch (pdata->an_result) { + case XGBE_AN_READY: + case XGBE_AN_COMPLETE: + break; + default: + if (phy_data->phy_cdr_delay < XGBE_CDR_DELAY_MAX) + phy_data->phy_cdr_delay += XGBE_CDR_DELAY_INC; + else + phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT; + break; + } + break; + default: + break; + } +} + +static void xgbe_phy_an_pre(struct xgbe_prv_data *pdata) +{ + struct xgbe_phy_data *phy_data = pdata->phy_data; + + switch (pdata->an_mode) { + case XGBE_AN_MODE_CL73: + case XGBE_AN_MODE_CL73_REDRV: + if (phy_data->cur_mode != XGBE_MODE_KR) + break; + + xgbe_phy_cdr_notrack(pdata); + break; + default: + break; + } +} + static void xgbe_phy_stop(struct xgbe_prv_data *pdata) { struct xgbe_phy_data *phy_data = pdata->phy_data; @@ -2680,6 +2789,9 @@ static void xgbe_phy_stop(struct xgbe_prv_data *pdata) xgbe_phy_sfp_reset(phy_data); xgbe_phy_sfp_mod_absent(pdata); + /* Reset CDR support */ + xgbe_phy_cdr_track(pdata); + /* Power off the PHY */ xgbe_phy_power_off(pdata); @@ -2712,6 +2824,9 @@ static int xgbe_phy_start(struct xgbe_prv_data *pdata) /* Start in highest supported mode */ xgbe_phy_set_mode(pdata, phy_data->start_mode); + /* Reset CDR support */ + xgbe_phy_cdr_track(pdata); + /* After starting the I2C controller, we can check for an SFP */ switch (phy_data->port_mode) { case XGBE_PORT_MODE_SFP: @@ -3019,6 +3134,8 @@ static int xgbe_phy_init(struct xgbe_prv_data *pdata) } } + phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT; + /* Register for driving external PHYs */ mii = devm_mdiobus_alloc(pdata->dev); if (!mii) { @@ -3071,4 +3188,10 @@ void xgbe_init_function_ptrs_phy_v2(struct xgbe_phy_if *phy_if) phy_impl->an_advertising = xgbe_phy_an_advertising; phy_impl->an_outcome = xgbe_phy_an_outcome; + + phy_impl->an_pre = xgbe_phy_an_pre; + phy_impl->an_post = xgbe_phy_an_post; + + phy_impl->kr_training_pre = xgbe_phy_kr_training_pre; + phy_impl->kr_training_post = xgbe_phy_kr_training_post; } diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h index fa0b51e..95d4b56 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe.h +++ b/drivers/net/ethernet/amd/xgbe/xgbe.h @@ -994,6 +994,7 @@ struct xgbe_version_data { unsigned int irq_reissue_support; unsigned int tx_desc_prefetch; unsigned int rx_desc_prefetch; + unsigned int an_cdr_workaround; }; struct xgbe_vxlan_data { @@ -1262,6 +1263,9 @@ struct xgbe_prv_data { unsigned int debugfs_xprop_reg; unsigned int debugfs_xi2c_reg; + + bool debugfs_an_cdr_workaround; + bool debugfs_an_cdr_track_early; }; /* Function prototypes*/ From patchwork Mon Apr 23 16:43:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Lendacky X-Patchwork-Id: 903021 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="QwBVSf9z"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40VC2s4bXxz9ry1 for ; Tue, 24 Apr 2018 02:43:49 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755608AbeDWQns (ORCPT ); Mon, 23 Apr 2018 12:43:48 -0400 Received: from mail-sn1nam02on0074.outbound.protection.outlook.com ([104.47.36.74]:26800 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932092AbeDWQnj (ORCPT ); Mon, 23 Apr 2018 12:43:39 -0400 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; bh=RQg+lBIIendVgYpY6vNzhCHdMjYmbPz2SYQDSaVmrVs=; b=QwBVSf9zEr1ABV2nlfRjwkVNxLbwjdQ7dgqnWyN7MmFWRtnwwlOlqolkJBcFGLlwv+vEav4ejdV0fWqLaFIjGq01ta9NRRWG9Idn88cAzLk5+TP+TT3LgAeq8CLY7Zy5J1yHiOG7LtLNfGM5v2uP2+a+3evMIoUJs+Vy+qbt4PY= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=amd.com; Received: from tlendack-t1.amdoffice.net (165.204.77.1) by BY2PR12MB0163.namprd12.prod.outlook.com (2a01:111:e400:585a::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.696.12; Mon, 23 Apr 2018 16:43:38 +0000 From: Tom Lendacky Subject: [PATCH net 3/3] amd-xgbe: Only use the SFP supported transceiver signals To: netdev@vger.kernel.org Cc: David Miller Date: Mon, 23 Apr 2018 11:43:34 -0500 Message-ID: <20180423164334.18740.76379.stgit@tlendack-t1.amdoffice.net> In-Reply-To: <20180423164258.18740.98574.stgit@tlendack-t1.amdoffice.net> References: <20180423164258.18740.98574.stgit@tlendack-t1.amdoffice.net> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: MWHPR2201CA0038.namprd22.prod.outlook.com (2603:10b6:301:16::12) To BY2PR12MB0163.namprd12.prod.outlook.com (2a01:111:e400:585a::24) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:BY2PR12MB0163; X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0163; 3:WF8nBr0XARAkyxCL8vi/2bEWlOiU+hdJ0ucl3EDn6L2ZF3wDnQAAMeg2ZY1aMY+wRLfCYjwT4XjmEG54348zRFkCLxNdiVsQoNC3eIeJGaYL/TeS9LO0tVx7WG6Jk/aRVAiy95qUIW/kFlObAb7BxM0RYAgnyoH6wmd3EctT+5EfsQSPPhz3Lt7gbMEr9qGPcydmX6/wiaBwSakwY5+t0ZlZ7mPEqvD1nLTToFZucnM1GObuI+qwYfRjwAc0Zjh5; 25:V3UcQ3q+460A0bHRnYV+WBu4ao+bGLVYRcTQnANNfCDDf1kvkj45sp5ugIj8IvhroukpAqshymil9/0uRmb26gMyu8kyVMt54pV7ITWpA+s7yMaA4OiagF+3cswsVxu5rufod5E7BAk6ndFV28LXvhEQCsS4IZFiO1VHS0AuQo3lOlLNxm1TFYRVSh1HMahWkG4wXgCWSknKfi10Y2cc+++JBIXVTTx6w4aEnAZY/WKheaL7I++T0/3KEBiMgN2qedZOMevQyPRrN4/NNakyTNNy4x/JXWZKDuH6D6aQQzxibDVGonu9MCAPqP+xmPRrgJXdvomLalAQB4LkMWFU1Q==; 31:XmFyOnAJD2VESz6sm39SveTcJPRY+OZ0M/EvJQO7zYOyay4Dk/zN3O9QTYJC7+t+IFRDxBx0xuWCKlJj95ZRM039egJptvoxfJY6TKBue5Q6ll4dmrQuDdDXBAbMORJ7P8HUpM2H+QSZQ88j+PfKXVYMKGCVcn36s3My6x5qk/bLV+keF3ed2ZVAGuA31wX/6DfXxvbD/wcbi8YKWUPczAj0uM2sHVBwjkiem7kDp9Y= X-MS-TrafficTypeDiagnostic: BY2PR12MB0163: X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0163; 20:Ho6MQubfOLtozzTbCmmmSFOoVIpsVVfFYV4mKM7uMEcbRjZcy8g/5szhtGumP/bHLDNjE6KMkRH2nVZr+h9bPz6IDDLq8J8IZqiyFhaar30yM+7W6OmwEOhY7egp2vP+aT7Pm/ODkz5gK6FaGQB9sR6P0co8SrkpIRlpp5dVH0wQCSIs0u4w6BiU8Xqe4j4iRBcNF6N8KvPF3gWSgtC/ykHfE8iJ/LVTPOu6mYZFk3uvYJ9gi9E215q55cq2/ckmc5F3XDYXlBe48syCwT6CtiY0xPUP9eXTUPEJZvdZTK9ieEAj+Dk2maQljKrw5BgJUXZx0j7nexjLTW88hNuPTxB1g5i4MxCFxkqy8V38O/LQv1wVYv+u0wnKea2HiRmjuU4KqVB0zZR42o60B55Zs8NDuBu0c+juxlsEMAG9l+GLj0qW0sAmd0fjcRehvI4GcCSNT5v8K2YgNIuNEOpou7PLtCesfKErjDoMKZm0o0aA9gG81wHFrzubs7m361ec; 4:4pYoTc3G41tOGopQQfid3A5UZ7lDqYqMkfwWaAh1sU/98aqB9py7/PyqqqB9TrDhuxtcQwpXf15l7h3CUceQumawAFFdy8jLd+MphWjDYOvcaCT2kSIOLndOAFD8WY3m4JFMOTHziS/hZYAfwnvt+tYvqii7KlOgUctu5yrujGcIOtNQflaH3XMxQpOAaGhojXQfZcgBmTgxB4duZq+t3M5pcQ8hNJ//ZdiyBM1KCR9aMuygBWUAzTFk4GOTMbESUsnTV28cza3T2B297NmqLBt96XEWOBzH3zlUG1hcPJZx9sgrNiTIvGcUBJ15F0ha X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231232)(944501410)(52105095)(10201501046)(3002001)(93006095)(93001095)(6055026)(6041310)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123560045)(20161123564045)(6072148)(201708071742011); SRVR:BY2PR12MB0163; BCL:0; PCL:0; RULEID:; SRVR:BY2PR12MB0163; X-Forefront-PRVS: 06515DA04B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39860400002)(39380400002)(376002)(396003)(346002)(366004)(316002)(6916009)(2486003)(59450400001)(26005)(50466002)(8676002)(55016002)(53416004)(4326008)(2906002)(2351001)(47776003)(25786009)(8936002)(66066001)(386003)(9686003)(7696005)(305945005)(230700001)(7736002)(1076002)(53936002)(2361001)(6506007)(446003)(81166006)(16526019)(6666003)(476003)(11346002)(86362001)(52116002)(956004)(186003)(23676004)(6116002)(76176011)(72206003)(103116003)(5660300001)(3846002)(478600001); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR12MB0163; H:tlendack-t1.amdoffice.net; FPR:; SPF:None; LANG:en; MLV:sfv; X-Microsoft-Exchange-Diagnostics: =?utf-8?q?1=3BBY2PR12MB0163=3B23=3AbT/r?= =?utf-8?q?zr6wcS7+9FjLKIKjrGxRmmLl7WqZlYboF5x+Bgf7wWGHJgHgb2dBfkhB?= =?utf-8?q?6yOnLmIWq9f1fwjiXM9YcHNUPIWhva6DXjkXNeJLRiTr3Eadsd348VOM?= =?utf-8?q?edPHtxDg2fpUqt2GhR2rWv6zIxHfORpV04Rvq5UQMHGihZuPoj6l6aIY?= =?utf-8?q?POEf9keQ6cjrCBbgpV6iPKV2Sm6bec60XM82qYH8y7kR33F2T5q8GDLy?= =?utf-8?q?KvsNf0z/8MJSGkYiz+L3ca0le+UCrRbABiS3fo/KmjvvL4me5Dp3QobA?= =?utf-8?q?Rb1KSGVz3JfGPI4GR7RrRDPZzjr3wTPMXnkGK9lCKmT4DfGzbAqAWwxC?= =?utf-8?q?4jNMGprP9gf2qX3aCfUs62hkukZJGJXb795luOj3NXYbk0yQ0F6z7rA8?= =?utf-8?q?2WLT7ghThgt+rtoJaxe4x+CT394m7vrr4J1x5XRoFQbnFbRqH8HT6MO/?= =?utf-8?q?JmZ//9pFAgvL7uShg4ZK7jz9kcLYNxd83/OEYpnEuyA8mZvzJLMbOkBD?= =?utf-8?q?ib8V/iyQZlvvT7jzf/u/lQ/+Wu2Hs9groRBbi/V88FhVQMEhwJFupp/k?= =?utf-8?q?8hyDrY4Gv5DFyIS6mMsSJjn5mF5tCHMLlZGO5s3nsQOHX6UcHs8IHGSI?= =?utf-8?q?6AYf8BKnzeGOSQCLkHOxcTaaOpj2efQWKog69K8j4gyYvti4V7sd1JVK?= =?utf-8?q?j22QSGhJJMq2HdQZgXJEtvcdxeeK3dMhjrhEITSqj7r08y0LFtg6b772?= =?utf-8?q?VdZrnCgsXgtIjd3dpeiFsRaLGxLRMM3sr79Hb9k0bQKaIEV2MyqxJTZd?= =?utf-8?q?pp0UIBPN8Nqjk8h+HU4kGpsgf9aLZNkFFHu76vVRUn56oo9E0jj5OOIB?= =?utf-8?q?v0NUziExLJIzJpB2aDgvVv0S58XpZ1aMlFPux63Mv8yc/yTe4fvmJbll?= =?utf-8?q?vWHqxwIJIO4H+cgdcvnUl64c6oB3R0OQogkHcVkexkAnXS3ySee7yNB8?= =?utf-8?q?rc5SMBCJTYDU4/gTqCJEAQwENhoCKJM6tsjPYEOt2qucaNP51Au07/2m?= =?utf-8?q?+zwvgCjjTMU3Wa3OaEl4de0oru3OX94hHsdVkB1QrA01oSocJflzmgAJ?= =?utf-8?q?Dwvel5xZZYfWgzX4wj49cX+lZzRfdlEjPOQnzjIucbXOfhqzuAzYfd3X?= =?utf-8?q?H8T2hcQ=3D?= X-Microsoft-Antispam-Message-Info: rWH6P20/tDBVHXlu2w1uVN1CPUjYaRI3Azn25oUlzYzt3GhtCuZ9nlCy+1mNwUK7ENmp/qNlhY4Ns0l6J04jzyoB9+GBg5I1DdPlTCsVamsN0aJ5q6PNZVEj0ieBbYhIfrWKUWJSTSnEESY6GxqHaiDF5EfIke+mkFCxw1IznG83YGmv0KV5vAS1s8TljwmH X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0163; 6:i9yhJSO0kF2v6FKwSZK2GnyDx2DiHjNNmLc+g25MgQJmFL41o0ZTX9t2whLLARo+ZiGc+3Gd7J3IUCJPjAdO7ueHDVmmWd/dQ9TlBsszS5XYu3vBm0hx1DFLHRmdtN4u/1mTnANVYduAziLM7f0eaDWM6RDL1hO1pc0dopIafsKHjIE0XnRTZmHKddSWiJczPntZ1FcBaIHntujze05FUKNi2Zo9kHkDh8ySHv1xrFw5H/ztyDPodnMh869wroYTO62N0zemcWFCQyXvxgsJFB1OkgagXdInEeOrgN5iS6kBeqTUEqtmUP+pBWRr1QIwNRfwRWM4MuhuqMRbvZbbPu4xYjUA1KCt3/p2nujz8v/ADO4amzIVHSjH4Bs6G4bAW1N/VB9mvT0D9oz4SSVQXbKxh7B4RMWMoCp8XWCT9df6xorbe5dkiYH1QXppUrrxnKEPkRIsmWO1Wu+RGI7cMw==; 5:XlgFc7xuooJcNmP8htSkG8gamMMiKwHAKeagLtOSSJcqnUBcjSEVXD4KmWdWsTKUjmvNFaY0TqrspVdIczrGJMAHCMrJsbVLInOor35OmTv50YYrfAZO/WnIFWSdU5pg8w6DnXhHImV2Lpq3VttZGogNNgqa3ey+K+k3953r03g=; 24:g+JdXfvQaXBpB8EGyvNoj6j9fafxpDeBRxiqc0c0i17m1ss9pUgdqkhuQ5f2PUkI3+sdPb2LMzfT3epJgGTv3+uNU0Fqqab4gAIsW9Irsvk= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0163; 7:McfZkBMKeR0PM9XwZRDX5FNw4A8ADlzWzvLGNmZv7mHZiHiQeLwO+pzslrjDXsc+5bFC1tNkWP9xqCo/Yzmb0Y/bc192uWDtKxgN/rgzGvu0unObexVcQb+tzKE9BFOWdOg8vmNQBmrnQHRy9VAGgUbNw0Z2bOxcEQZvNGj8/xra1vLb9+g9YwqUEDF/prww3S+QhtjzM3TEc3TEpxE4XQERhgPC4uAUNgurTKE62iUDc/N5WK7RKW18Hufa6u/M; 20:J8O/Wwt/YZm96g5uXnBPY9oLGns0uU1rNHCMmsL0POHUGdQy8PN3/woUy2wb2Ph+dMxh1ApjpKhpmuFyYHQZw7wmZjPGynNYByHTvKnhsLjMHiQ1jRNW8AgZNVXKLoP9bAoYytgLkYnAzLnvUvjEZPhGRuS8fX6khLEhDq5xghdgrgSrLhmft3Z0F3Xrjj6ZdCS+8+fJcuyeUpiTFOD2T8Ifs1zJF6cud0izG6XHR3y4kR0QoK7n4soK5AnqJxEL X-MS-Office365-Filtering-Correlation-Id: 470975d5-85f1-48ef-75a2-08d5a9395d38 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Apr 2018 16:43:38.1211 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 470975d5-85f1-48ef-75a2-08d5a9395d38 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR12MB0163 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The SFP eeprom indicates the transceiver signals (Rx LOS, Tx Fault, etc.) that it supports. Update the driver to include checking the eeprom data when deciding whether to use a transceiver signal. Signed-off-by: Tom Lendacky --- drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 71 +++++++++++++++++++++------ 1 file changed, 54 insertions(+), 17 deletions(-) diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c index b48efc0..aac8843 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c @@ -253,6 +253,10 @@ enum xgbe_sfp_speed { #define XGBE_SFP_BASE_VENDOR_SN 4 #define XGBE_SFP_BASE_VENDOR_SN_LEN 16 +#define XGBE_SFP_EXTD_OPT1 1 +#define XGBE_SFP_EXTD_OPT1_RX_LOS BIT(1) +#define XGBE_SFP_EXTD_OPT1_TX_FAULT BIT(3) + #define XGBE_SFP_EXTD_DIAG 28 #define XGBE_SFP_EXTD_DIAG_ADDR_CHANGE BIT(2) @@ -332,6 +336,7 @@ struct xgbe_phy_data { unsigned int sfp_gpio_address; unsigned int sfp_gpio_mask; + unsigned int sfp_gpio_inputs; unsigned int sfp_gpio_rx_los; unsigned int sfp_gpio_tx_fault; unsigned int sfp_gpio_mod_absent; @@ -986,6 +991,49 @@ static void xgbe_phy_sfp_external_phy(struct xgbe_prv_data *pdata) phy_data->sfp_phy_avail = 1; } +static bool xgbe_phy_check_sfp_rx_los(struct xgbe_phy_data *phy_data) +{ + u8 *sfp_extd = phy_data->sfp_eeprom.extd; + + if (!(sfp_extd[XGBE_SFP_EXTD_OPT1] & XGBE_SFP_EXTD_OPT1_RX_LOS)) + return false; + + if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_RX_LOS) + return false; + + if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_rx_los)) + return true; + + return false; +} + +static bool xgbe_phy_check_sfp_tx_fault(struct xgbe_phy_data *phy_data) +{ + u8 *sfp_extd = phy_data->sfp_eeprom.extd; + + if (!(sfp_extd[XGBE_SFP_EXTD_OPT1] & XGBE_SFP_EXTD_OPT1_TX_FAULT)) + return false; + + if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_TX_FAULT) + return false; + + if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_tx_fault)) + return true; + + return false; +} + +static bool xgbe_phy_check_sfp_mod_absent(struct xgbe_phy_data *phy_data) +{ + if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_MOD_ABSENT) + return false; + + if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_mod_absent)) + return true; + + return false; +} + static bool xgbe_phy_belfuse_parse_quirks(struct xgbe_prv_data *pdata) { struct xgbe_phy_data *phy_data = pdata->phy_data; @@ -1031,6 +1079,10 @@ static void xgbe_phy_sfp_parse_eeprom(struct xgbe_prv_data *pdata) if (sfp_base[XGBE_SFP_BASE_EXT_ID] != XGBE_SFP_EXT_ID_SFP) return; + /* Update transceiver signals (eeprom extd/options) */ + phy_data->sfp_tx_fault = xgbe_phy_check_sfp_tx_fault(phy_data); + phy_data->sfp_rx_los = xgbe_phy_check_sfp_rx_los(phy_data); + if (xgbe_phy_sfp_parse_quirks(pdata)) return; @@ -1196,7 +1248,6 @@ static int xgbe_phy_sfp_read_eeprom(struct xgbe_prv_data *pdata) static void xgbe_phy_sfp_signals(struct xgbe_prv_data *pdata) { struct xgbe_phy_data *phy_data = pdata->phy_data; - unsigned int gpio_input; u8 gpio_reg, gpio_ports[2]; int ret; @@ -1211,23 +1262,9 @@ static void xgbe_phy_sfp_signals(struct xgbe_prv_data *pdata) return; } - gpio_input = (gpio_ports[1] << 8) | gpio_ports[0]; - - if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_MOD_ABSENT) { - /* No GPIO, just assume the module is present for now */ - phy_data->sfp_mod_absent = 0; - } else { - if (!(gpio_input & (1 << phy_data->sfp_gpio_mod_absent))) - phy_data->sfp_mod_absent = 0; - } - - if (!(phy_data->sfp_gpio_mask & XGBE_GPIO_NO_RX_LOS) && - (gpio_input & (1 << phy_data->sfp_gpio_rx_los))) - phy_data->sfp_rx_los = 1; + phy_data->sfp_gpio_inputs = (gpio_ports[1] << 8) | gpio_ports[0]; - if (!(phy_data->sfp_gpio_mask & XGBE_GPIO_NO_TX_FAULT) && - (gpio_input & (1 << phy_data->sfp_gpio_tx_fault))) - phy_data->sfp_tx_fault = 1; + phy_data->sfp_mod_absent = xgbe_phy_check_sfp_mod_absent(phy_data); } static void xgbe_phy_sfp_mod_absent(struct xgbe_prv_data *pdata)