From patchwork Wed May 23 16:38:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Lendacky X-Patchwork-Id: 919179 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="LGbJ/0Me"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40rdWB3rC7z9s15 for ; Thu, 24 May 2018 02:38:46 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933655AbeEWQih (ORCPT ); Wed, 23 May 2018 12:38:37 -0400 Received: from mail-sn1nam01on0058.outbound.protection.outlook.com ([104.47.32.58]:24519 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932915AbeEWQi1 (ORCPT ); Wed, 23 May 2018 12:38:27 -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:X-MS-Exchange-SenderADCheck; bh=8DkRZfd7QUoFamJ2u7aSFk6bjUY+zxX8Cj3Xi64RruE=; b=LGbJ/0MewbQn65Wws31dY0849OJZ7LustS9+xzS3AGrZFzEsUZq49uomf2Y/VSYZch3p4p21P5OMYqb7cpqBatmBsbTGJlcEEPXJQ3CKEC99+flh8++c9fqqn/n98Ub9XhUUSqe24cNxnNrfNViw70FgyMyl1kKdtpW7d5n+LUs= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Thomas.Lendacky@amd.com; Received: from tlendack-t1.amdoffice.net (165.204.77.1) by DM2PR12MB0169.namprd12.prod.outlook.com (2a01:111:e400:50ce::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.776.16; Wed, 23 May 2018 16:38:23 +0000 From: Tom Lendacky Subject: [PATCH net-next v2 02/12] amd-xgbe: Read and save the port property registers during probe To: netdev@vger.kernel.org Cc: David Miller Date: Wed, 23 May 2018 11:38:20 -0500 Message-ID: <20180523163819.31625.95947.stgit@tlendack-t1.amdoffice.net> In-Reply-To: <20180523163802.31625.76572.stgit@tlendack-t1.amdoffice.net> References: <20180523163802.31625.76572.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: SN4PR0401CA0016.namprd04.prod.outlook.com (2603:10b6:803:21::26) To DM2PR12MB0169.namprd12.prod.outlook.com (2a01:111:e400:50ce::20) 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:DM2PR12MB0169; X-Microsoft-Exchange-Diagnostics: 1; DM2PR12MB0169; 3:Z5vVj2F3igVVq8KQRuL5CT3G1Y5phvURlIYXTf59NiUvDXqK8p/vp3E6Nh2Evpx1vhnVor6y0OZWleliwfjtgARR7CeaE4RnKxYwzALbTSOx0bXOFyR49ho2+ACqeBapAmA9w0WVhRlaRLfchw1L5b7r53rd24b6a1DhHiTGXfswtr2q8aSqoKVBaC99x8qOMjx9maBKBHcyypgt6XpZn+mDutyg0Rff5Zyx+QrDhsSw+dgPIko1AQUjsnGzGYsK; 25:ppvmqblVwt3685gEoABqTcqw8js7SciUkpdByse+q/yGkzGJpdhKAp2ZuuzKrF8WwRlBeUGyPBqxr70iznLmasU0UdzRzrvO2iOiP3/9j9q9fVLCMLWUdXXB5Jv9kqbanJZDklBNOq7vzcj7JLg+ZZHglMiqYo1c+6yiugAz/n7/apeKuiAqyZ2pIOvXOd7yURslwJ9RHFs0c1kThxdRPy9BUJEOv28GZD+QF2684NeEAMRQlNRSI4zigb1zfv56VVY9mU9F1fWpIp9v8Qzopre192nZwbheaDl8+TTXu8FTKnI4R2y1FwcD+cL6KiGI9MlAwPwWoLTSMksRXd4nIA==; 31:b8urxXy3aZf1Zywcnmd2ZwEPVBibE7vvThnhOfmzbXPNkKy0mpKMbM+FbaU0t/CbWpsg3P4ILZ2WwcoIhDDc00ohSFONuoEh8ZIGb/NMO/XNoL9HiUXQs+o99mohJZqqa0Q7T/dndTMY4GqZXMIJIIS2y1loAoH9QD5lfM5LrDBPE2IcoduYxCV1Jm8kAzoF4J/91p9J+fLHppCqISZOZGJL9N9470bxH9UjJAi10T0= X-MS-TrafficTypeDiagnostic: DM2PR12MB0169: X-Microsoft-Exchange-Diagnostics: 1; DM2PR12MB0169; 20:llMXKeYGRrigenZsVcHtSilzO7D3yhrrr7Z/4QopDjTvNlbr1vGWEhw5q6cWxvFylZaWiAfkGfva6f4U7GfXoyRGVvB888LGXGedxLjAtjs/pBNe/MzbpiOv/4PVJNBlAIkAD/Sc0goWy94C+5nLZtyJSXQJfZWE4iyLxJns388BKalQ0A8nFYKWNbb3h2dM+FsrgXQ8suox1ZmujXI2Obt+I2wFBKw4ks/4D+AeYSJDDh6EKHjJNBdG8xP+SZvhLk4rn677eRusdMqe8TYI+BAzI1L72VlOnI29seBFZ6sOfgiAyVReI31cjly++/LhzPYeYGISHP+53K9iMT2u3aSvBSp/etKM+CeDoK9K+24KoOX/+7IyQa/amsG3d5VtdkmzVjSJDGryugz8lQVSAz/2HOi07siC2J9nE85kho7+O6KEFzRAMigaGLTo8fyYae9c5iIcmL3fuTS5cbzvTAhvBcSMF27JN37C9GpQ7myXER6H2zqoFoShqcs+o2We; 4:LYK7z4GKSswi/wvWUCsN1HGu2g1CT5/HwmzIhGvSKUjCLVpS8lSIHCYTRzLtXhpA+Bh67fLsQIuBhNeygUp2HM6dX0qACSP9HVFSOR/MoPL4w0xOGk8e4Q+5aCw/2KwCTANaIcIyCVdpub6jDtEj8+AgKYWloPuqXfLjcFgNZQnRSVXvedGTxQA8qNyybtW+t/lkwt6T6NmbwDmwXevMzOb1dyjEc7NVywoxokZaloCdSjdNIzOg3PJ2Tzo+LmU59LH2bwK9Z3PnBKpN4hcLu2/dIf8zeYKcmrnLen5tys1VUV8asljrg3/X4YgmhVlr X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3002001)(10201501046)(3231254)(944501410)(52105095)(93006095)(93001095)(6055026)(149027)(150027)(6041310)(20161123564045)(20161123560045)(20161123558120)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011)(7699016); SRVR:DM2PR12MB0169; BCL:0; PCL:0; RULEID:; SRVR:DM2PR12MB0169; X-Forefront-PRVS: 06818431B9 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(396003)(346002)(39380400002)(366004)(376002)(39860400002)(199004)(189003)(55016002)(386003)(6116002)(86362001)(8676002)(8936002)(230700001)(23676004)(7696005)(5660300001)(2486003)(6916009)(76176011)(52116002)(69596002)(305945005)(3846002)(6506007)(47776003)(1076002)(68736007)(66066001)(7736002)(103116003)(58126008)(59450400001)(105586002)(446003)(316002)(81166006)(26005)(81156014)(9686003)(97736004)(2361001)(106356001)(11346002)(97746001)(53416004)(956004)(50466002)(478600001)(72206003)(2351001)(186003)(16526019)(476003)(486006)(53936002)(2906002)(25786009)(4326008); DIR:OUT; SFP:1101; SCL:1; SRVR:DM2PR12MB0169; H:tlendack-t1.amdoffice.net; 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-Microsoft-Exchange-Diagnostics: =?utf-8?q?1=3BDM2PR12MB0169=3B23=3ANUul?= =?utf-8?q?TQNKxg2VqJhbxpf3sxk5Iuf1GeP8nAC8LcN2CdIyh3DxkR8PHsejuwHq?= =?utf-8?q?nqWFIPo4BkaymfgDxhP+uGdLro8D4c3h6sQwlJ7LgLHV7xOBlD3i/uQQ?= =?utf-8?q?xDAr+Z7Mxz9b1e2wjHNVJyGisa1wdT68xvKQl09pTDqBiOBS3/FMyW/8?= =?utf-8?q?Sng8V9zwauzTEKXWPXdiY9CEos9VOvcmqY8uOZQL/gIRWwBX5Uo46h/s?= =?utf-8?q?0zooggCtXTaebHvPyFbiNKmX5h2cnhHNVLPhu34C1YIpd/swSTTXkZ1h?= =?utf-8?q?iJESCQ5+GDcqNC9A5blyodvBnlT+Er9nCZYo/hcXTnHnIIpHo5ysKRWm?= =?utf-8?q?FJ4rHwr7PE/TRCrt7HuaoToVMdYnJftxXcpWHfthDJOd1i0Kztw3nFV4?= =?utf-8?q?Z10O0R9o1DaIJxzikjPsriULRgcKiUUfkW9rUvvI8LF18XWdgT7hoIQ6?= =?utf-8?q?KE6tQYThKlZQ4+hrA11TnjqP9gsQNJ/IGmCsoBUWkryv0ljrE7GaXVqk?= =?utf-8?q?1JPWX7fvXQoFKsQSSeqtRpHpnIAHuLViM/KPdsdwXSILvagh8w/eReqv?= =?utf-8?q?HuAw167slx6bpVpiljZFgXRDn8ff12ODW5zZlXHRHL7Po1RK2rAPtVFR?= =?utf-8?q?cDetA5xKR9NNLiJYQ4HHVBMcT58VTPWkh6xvmEfCgw9nZuXKpNdmV9R9?= =?utf-8?q?zGl0KxP89oli5zsD8If8SdaI/MWXbt7AuVzmzceGvouT5JetynKQBb7H?= =?utf-8?q?7dZtme+hP+8fQxGtwKqM/6mdDWPDDcSluxubF9Rcx5R+zRmbvh0/RO7R?= =?utf-8?q?o7UbX8mSsah8XT2O7qIMVFS4NeaX2XvRpLTGNVf2EQMIiypYYC+Q+Ufk?= =?utf-8?q?t3ATPMRm8JhKO1IDqCMxFOUwLKx3syILwPgqAme8qhLymiJz3ZeENhmP?= =?utf-8?q?5GzLf7TDVlsXvapY6rpRLcR/ecMyaeWykRLTM1EBC1jidKnRUBBMS7GX?= =?utf-8?q?4QIO0VtyiSQu/WXA6iRZq8322YebEWzV3Ubp/TtIchxI3jQpg0QKC+F/?= =?utf-8?q?zpgjHqVwAHruH0/1me0LswzUe3dgyekRFlNjFB9ZQob8HfMzc77ik++3?= =?utf-8?q?tNUJWQbmSeAxgMAnmKPlLE1F5O48PIvat8SwYpsUy7cooouzAEQsOJsP?= =?utf-8?q?8RJ+sM3gCpT9CHSiH94Eo9hdxV/h3QHrC3aPr0OFn2xe8tuSx1270Rn2?= =?utf-8?q?jE+G3H5esZfhmN/eO6tL26rX++1+Z9oK4pklSCGGriYQucGqO05gDFe+?= =?utf-8?q?LMY1SjgSs+fm7UNgPJ4BIpCOxMMCvNEkiOOPIyxcbFepX/LDl0pE9dxO?= =?utf-8?q?fzpFl86DegzmTlVmWu3r/NiC8mbeS2qOaBgjoZf9LlvMWtF0p7Fy?= X-Microsoft-Antispam-Message-Info: IBNE6lPrhbOYREpm1132rxNLzTWh6YzXcbCOphQJkAIe+5gjeng/rCrc92Ws5AF4g1Dz5nnE76AswMHMJL8skJw8M8n1wLt9Q6l2E7wTgDz5GPlKbxWD/bVqMnQ7+97WnK3kAnWrDQ48U9tNRUHBJhmeZCN6Mk27M6foMXKhoX3jqt37E/00EqynBmgt7QHJ X-Microsoft-Exchange-Diagnostics: 1; DM2PR12MB0169; 6:Gl6XArefqVLC9miW1e1WWFmv2CZt3pxj4Sa1l6tUmaGurv3kJYF4aasiGyoEtdkrZMEAgmgZfUHpDMKXSQATSE/T5CsmjWUS7BaYCYuM4kFFVWUN8jR5q/sjONjvzaCZynWuTjDL5MwiwMPijyKAVG90eVGuxse7lbVQOdCskEeGZsvtS4CnY4BgkSpl1qZxRFrl4kmI54cs0YHv64gLOinPlYMzt3wEShseHy8qj7L07+3aybelWM8sZG817U5WPlcCM4iSo/B7sJTwukFxeLY7Mh6JLEW8q7Ir+byQi+xWbTm1/cU9i70E+V+1rR+qZDvhoeRiDf9a1cQOSEcLxGwzVNv5QC9xeWUFXutQRjFcRfZzS2EeTBl5BEkl5ma34sQgZsBWog0QDLuiDa1cakLsuqVz9TiU2YMSxfYo0f+vlbw7m+P/OzikblH2w5AXbXpEGD/+lQRrboaEh37FbA==; 5:plrd/GySQJ3o5lhjzBI9Lifd0lNI1ANOia4kpu378NrVPgfVv04bfUg++es5EGUaKdGWbrLIrHxLv6ZAnRgXSCrjpJWBx1LSl73c5i4icUgrBnEUMb7UGtrnC031UC+2F+3506JxXOAuNkn80GL7+XYOOThA+NCyJvhTvSdes/I=; 24:LkDEQzVRhft6RyHxK0yVS6di9Z2Wv1XoSesckCipeVPO5YoWcqTYiJ5EFQm5CwJfi/sgHFD7CS+bjbOVBhhxqOEAIbOVb4VgewFtHZ5LMqY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM2PR12MB0169; 7:Wl6T28AA9PyVwzKsSot+AjN5uoGAfAPx8Uu1Hn/uq0uD5XK6FARZ0XQv453GVD4y/te6IXXuFgPD+l3B2o8IbGzAhaR3XjEcOze9scR5Nuc0YWIbWJJJmwbz4DujNW3UMufn8Secljd3emHvqhA2qHUWtOCXL5ghmQ8t1P2UVO0JhS7z1Zy0RdisekuchK5JfEFvNXV4et0JQSM+uUrwkdYIrbOH6ayqE5ILagzwyZov3HAkeeiBDLXQ9tt/YWc1; 20:ysTSkmq3qA3in3IqgjXTKy9r2wBPQ/Srb7wiRpWKLSZ+BhVsIt3+2bfpZLd6GTwQ6UzKbZd4rFEAG/kGMPI/CwI69kiSYDEYpVKQa6mDA8DrY7Z7ctydoBmbnUdv0j7szdT3nSHt1bvCjeIWCeerQCwJRsqT/E4i8KvfxG5EFsLvL/s9Kadr9gi3DwLeOvVpakshCz+bEa+tn4Piutd1ol4UM2O3nyqLVXSTYzYMWPgXFzDg5RK9lsGWeP2tvG0l X-MS-Office365-Filtering-Correlation-Id: cd74b2ca-c06c-40c9-a263-08d5c0cb9a40 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 May 2018 16:38:23.9114 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: cd74b2ca-c06c-40c9-a263-08d5c0cb9a40 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR12MB0169 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Read and save the port property registers once during the device probe and then use the saved values as they are needed. Signed-off-by: Tom Lendacky --- drivers/net/ethernet/amd/xgbe/xgbe-pci.c | 34 ++++++++++---- drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 68 ++++++++++++--------------- drivers/net/ethernet/amd/xgbe/xgbe.h | 7 +++ 3 files changed, 62 insertions(+), 47 deletions(-) diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-pci.c b/drivers/net/ethernet/amd/xgbe/xgbe-pci.c index 7b63521..7b86240 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-pci.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-pci.c @@ -335,12 +335,29 @@ static int xgbe_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) pdata->awcr = XGBE_DMA_PCI_AWCR; pdata->awarcr = XGBE_DMA_PCI_AWARCR; + /* Read the port property registers */ + pdata->pp0 = XP_IOREAD(pdata, XP_PROP_0); + pdata->pp1 = XP_IOREAD(pdata, XP_PROP_1); + pdata->pp2 = XP_IOREAD(pdata, XP_PROP_2); + pdata->pp3 = XP_IOREAD(pdata, XP_PROP_3); + pdata->pp4 = XP_IOREAD(pdata, XP_PROP_4); + if (netif_msg_probe(pdata)) { + dev_dbg(dev, "port property 0 = %#010x\n", pdata->pp0); + dev_dbg(dev, "port property 1 = %#010x\n", pdata->pp1); + dev_dbg(dev, "port property 2 = %#010x\n", pdata->pp2); + dev_dbg(dev, "port property 3 = %#010x\n", pdata->pp3); + dev_dbg(dev, "port property 4 = %#010x\n", pdata->pp4); + } + /* Set the maximum channels and queues */ - reg = XP_IOREAD(pdata, XP_PROP_1); - pdata->tx_max_channel_count = XP_GET_BITS(reg, XP_PROP_1, MAX_TX_DMA); - pdata->rx_max_channel_count = XP_GET_BITS(reg, XP_PROP_1, MAX_RX_DMA); - pdata->tx_max_q_count = XP_GET_BITS(reg, XP_PROP_1, MAX_TX_QUEUES); - pdata->rx_max_q_count = XP_GET_BITS(reg, XP_PROP_1, MAX_RX_QUEUES); + pdata->tx_max_channel_count = XP_GET_BITS(pdata->pp1, XP_PROP_1, + MAX_TX_DMA); + pdata->rx_max_channel_count = XP_GET_BITS(pdata->pp1, XP_PROP_1, + MAX_RX_DMA); + pdata->tx_max_q_count = XP_GET_BITS(pdata->pp1, XP_PROP_1, + MAX_TX_QUEUES); + pdata->rx_max_q_count = XP_GET_BITS(pdata->pp1, XP_PROP_1, + MAX_RX_QUEUES); if (netif_msg_probe(pdata)) { dev_dbg(dev, "max tx/rx channel count = %u/%u\n", pdata->tx_max_channel_count, @@ -353,12 +370,13 @@ static int xgbe_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) xgbe_set_counts(pdata); /* Set the maximum fifo amounts */ - reg = XP_IOREAD(pdata, XP_PROP_2); - pdata->tx_max_fifo_size = XP_GET_BITS(reg, XP_PROP_2, TX_FIFO_SIZE); + pdata->tx_max_fifo_size = XP_GET_BITS(pdata->pp2, XP_PROP_2, + TX_FIFO_SIZE); pdata->tx_max_fifo_size *= 16384; pdata->tx_max_fifo_size = min(pdata->tx_max_fifo_size, pdata->vdata->tx_max_fifo_size); - pdata->rx_max_fifo_size = XP_GET_BITS(reg, XP_PROP_2, RX_FIFO_SIZE); + pdata->rx_max_fifo_size = XP_GET_BITS(pdata->pp2, XP_PROP_2, + RX_FIFO_SIZE); pdata->rx_max_fifo_size *= 16384; pdata->rx_max_fifo_size = min(pdata->rx_max_fifo_size, pdata->vdata->rx_max_fifo_size); diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c index aac8843..123ceb0 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c @@ -2421,22 +2421,21 @@ static int xgbe_phy_link_status(struct xgbe_prv_data *pdata, int *an_restart) static void xgbe_phy_sfp_gpio_setup(struct xgbe_prv_data *pdata) { struct xgbe_phy_data *phy_data = pdata->phy_data; - unsigned int reg; - - reg = XP_IOREAD(pdata, XP_PROP_3); phy_data->sfp_gpio_address = XGBE_GPIO_ADDRESS_PCA9555 + - XP_GET_BITS(reg, XP_PROP_3, GPIO_ADDR); + XP_GET_BITS(pdata->pp3, XP_PROP_3, + GPIO_ADDR); - phy_data->sfp_gpio_mask = XP_GET_BITS(reg, XP_PROP_3, GPIO_MASK); + phy_data->sfp_gpio_mask = XP_GET_BITS(pdata->pp3, XP_PROP_3, + GPIO_MASK); - phy_data->sfp_gpio_rx_los = XP_GET_BITS(reg, XP_PROP_3, + phy_data->sfp_gpio_rx_los = XP_GET_BITS(pdata->pp3, XP_PROP_3, GPIO_RX_LOS); - phy_data->sfp_gpio_tx_fault = XP_GET_BITS(reg, XP_PROP_3, + phy_data->sfp_gpio_tx_fault = XP_GET_BITS(pdata->pp3, XP_PROP_3, GPIO_TX_FAULT); - phy_data->sfp_gpio_mod_absent = XP_GET_BITS(reg, XP_PROP_3, + phy_data->sfp_gpio_mod_absent = XP_GET_BITS(pdata->pp3, XP_PROP_3, GPIO_MOD_ABS); - phy_data->sfp_gpio_rate_select = XP_GET_BITS(reg, XP_PROP_3, + phy_data->sfp_gpio_rate_select = XP_GET_BITS(pdata->pp3, XP_PROP_3, GPIO_RATE_SELECT); if (netif_msg_probe(pdata)) { @@ -2458,18 +2457,17 @@ static void xgbe_phy_sfp_gpio_setup(struct xgbe_prv_data *pdata) static void xgbe_phy_sfp_comm_setup(struct xgbe_prv_data *pdata) { struct xgbe_phy_data *phy_data = pdata->phy_data; - unsigned int reg, mux_addr_hi, mux_addr_lo; + unsigned int mux_addr_hi, mux_addr_lo; - reg = XP_IOREAD(pdata, XP_PROP_4); - - mux_addr_hi = XP_GET_BITS(reg, XP_PROP_4, MUX_ADDR_HI); - mux_addr_lo = XP_GET_BITS(reg, XP_PROP_4, MUX_ADDR_LO); + mux_addr_hi = XP_GET_BITS(pdata->pp4, XP_PROP_4, MUX_ADDR_HI); + mux_addr_lo = XP_GET_BITS(pdata->pp4, XP_PROP_4, MUX_ADDR_LO); if (mux_addr_lo == XGBE_SFP_DIRECT) return; phy_data->sfp_comm = XGBE_SFP_COMM_PCA9545; phy_data->sfp_mux_address = (mux_addr_hi << 2) + mux_addr_lo; - phy_data->sfp_mux_channel = XP_GET_BITS(reg, XP_PROP_4, MUX_CHAN); + phy_data->sfp_mux_channel = XP_GET_BITS(pdata->pp4, XP_PROP_4, + MUX_CHAN); if (netif_msg_probe(pdata)) { dev_dbg(pdata->dev, "SFP: mux_address=%#x\n", @@ -2592,13 +2590,11 @@ static bool xgbe_phy_redrv_error(struct xgbe_phy_data *phy_data) static int xgbe_phy_mdio_reset_setup(struct xgbe_prv_data *pdata) { struct xgbe_phy_data *phy_data = pdata->phy_data; - unsigned int reg; if (phy_data->conn_type != XGBE_CONN_TYPE_MDIO) return 0; - reg = XP_IOREAD(pdata, XP_PROP_3); - phy_data->mdio_reset = XP_GET_BITS(reg, XP_PROP_3, MDIO_RESET); + phy_data->mdio_reset = XP_GET_BITS(pdata->pp3, XP_PROP_3, MDIO_RESET); switch (phy_data->mdio_reset) { case XGBE_MDIO_RESET_NONE: case XGBE_MDIO_RESET_I2C_GPIO: @@ -2612,12 +2608,12 @@ static int xgbe_phy_mdio_reset_setup(struct xgbe_prv_data *pdata) if (phy_data->mdio_reset == XGBE_MDIO_RESET_I2C_GPIO) { phy_data->mdio_reset_addr = XGBE_GPIO_ADDRESS_PCA9555 + - XP_GET_BITS(reg, XP_PROP_3, + XP_GET_BITS(pdata->pp3, XP_PROP_3, MDIO_RESET_I2C_ADDR); - phy_data->mdio_reset_gpio = XP_GET_BITS(reg, XP_PROP_3, + phy_data->mdio_reset_gpio = XP_GET_BITS(pdata->pp3, XP_PROP_3, MDIO_RESET_I2C_GPIO); } else if (phy_data->mdio_reset == XGBE_MDIO_RESET_INT_GPIO) { - phy_data->mdio_reset_gpio = XP_GET_BITS(reg, XP_PROP_3, + phy_data->mdio_reset_gpio = XP_GET_BITS(pdata->pp3, XP_PROP_3, MDIO_RESET_INT_GPIO); } @@ -2707,12 +2703,9 @@ static bool xgbe_phy_conn_type_mismatch(struct xgbe_prv_data *pdata) static bool xgbe_phy_port_enabled(struct xgbe_prv_data *pdata) { - unsigned int reg; - - reg = XP_IOREAD(pdata, XP_PROP_0); - if (!XP_GET_BITS(reg, XP_PROP_0, PORT_SPEEDS)) + if (!XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_SPEEDS)) return false; - if (!XP_GET_BITS(reg, XP_PROP_0, CONN_TYPE)) + if (!XP_GET_BITS(pdata->pp0, XP_PROP_0, CONN_TYPE)) return false; return true; @@ -2921,7 +2914,6 @@ static int xgbe_phy_init(struct xgbe_prv_data *pdata) struct ethtool_link_ksettings *lks = &pdata->phy.lks; struct xgbe_phy_data *phy_data; struct mii_bus *mii; - unsigned int reg; int ret; /* Check if enabled */ @@ -2940,12 +2932,11 @@ static int xgbe_phy_init(struct xgbe_prv_data *pdata) return -ENOMEM; pdata->phy_data = phy_data; - reg = XP_IOREAD(pdata, XP_PROP_0); - phy_data->port_mode = XP_GET_BITS(reg, XP_PROP_0, PORT_MODE); - phy_data->port_id = XP_GET_BITS(reg, XP_PROP_0, PORT_ID); - phy_data->port_speeds = XP_GET_BITS(reg, XP_PROP_0, PORT_SPEEDS); - phy_data->conn_type = XP_GET_BITS(reg, XP_PROP_0, CONN_TYPE); - phy_data->mdio_addr = XP_GET_BITS(reg, XP_PROP_0, MDIO_ADDR); + phy_data->port_mode = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_MODE); + phy_data->port_id = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_ID); + phy_data->port_speeds = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_SPEEDS); + phy_data->conn_type = XP_GET_BITS(pdata->pp0, XP_PROP_0, CONN_TYPE); + phy_data->mdio_addr = XP_GET_BITS(pdata->pp0, XP_PROP_0, MDIO_ADDR); if (netif_msg_probe(pdata)) { dev_dbg(pdata->dev, "port mode=%u\n", phy_data->port_mode); dev_dbg(pdata->dev, "port id=%u\n", phy_data->port_id); @@ -2954,12 +2945,11 @@ static int xgbe_phy_init(struct xgbe_prv_data *pdata) dev_dbg(pdata->dev, "mdio addr=%u\n", phy_data->mdio_addr); } - reg = XP_IOREAD(pdata, XP_PROP_4); - phy_data->redrv = XP_GET_BITS(reg, XP_PROP_4, REDRV_PRESENT); - phy_data->redrv_if = XP_GET_BITS(reg, XP_PROP_4, REDRV_IF); - phy_data->redrv_addr = XP_GET_BITS(reg, XP_PROP_4, REDRV_ADDR); - phy_data->redrv_lane = XP_GET_BITS(reg, XP_PROP_4, REDRV_LANE); - phy_data->redrv_model = XP_GET_BITS(reg, XP_PROP_4, REDRV_MODEL); + phy_data->redrv = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_PRESENT); + phy_data->redrv_if = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_IF); + phy_data->redrv_addr = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_ADDR); + phy_data->redrv_lane = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_LANE); + phy_data->redrv_model = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_MODEL); if (phy_data->redrv && netif_msg_probe(pdata)) { dev_dbg(pdata->dev, "redrv present\n"); dev_dbg(pdata->dev, "redrv i/f=%u\n", phy_data->redrv_if); diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h index 95d4b56..54e43ad3 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe.h +++ b/drivers/net/ethernet/amd/xgbe/xgbe.h @@ -1027,6 +1027,13 @@ struct xgbe_prv_data { void __iomem *xprop_regs; /* XGBE property registers */ void __iomem *xi2c_regs; /* XGBE I2C CSRs */ + /* Port property registers */ + unsigned int pp0; + unsigned int pp1; + unsigned int pp2; + unsigned int pp3; + unsigned int pp4; + /* Overall device lock */ spinlock_t lock;