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)