From patchwork Fri Apr 12 12:52:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Venkat Kumar Ande X-Patchwork-Id: 139269 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 264D143E52; Fri, 12 Apr 2024 14:55:42 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E307F42D95; Fri, 12 Apr 2024 14:54:36 +0200 (CEST) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2066.outbound.protection.outlook.com [40.107.93.66]) by mails.dpdk.org (Postfix) with ESMTP id 81DA141148 for ; Fri, 12 Apr 2024 14:54:30 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DN8CxWJphB1E2XmIEDcXABaNJyS42ZRD2Wy1WHLgof5YPpVyWA5+/beQfKaJsOHRKIK3W9Vm4gsHuLxIiLJJ60AkRY+XSFm9u4f0YFfSChhFuNfpMXU6cLiykF4dp6vqiDnH/yrmTkXNvhg/xhEzChNzFO7vX/c1nHVx8Fjt/if3oWvY1/1+GzlwPBmBtUw9pTqAE6UMYynoLRhAv3rsCerMKqfPrLNOEpj9yLTnwP0R9Wgn7kxGP9YSg+5OLsG2oiSfMLE67tFUYcAijLKNnN6gUlF4H5PwOvynvsP/iDaUjmy3AJG5JbbQnZ3BzfN3cAF37DliMnhEDlTYWsbuhQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=dZX5hQfbNhxt3vfw4RTTqrYMF1OI9rxE4GTxfJeEIcI=; b=mD11JWNYAs4ydd3MnK/nAhtylnBPrNAyCvmNji5dDbMCrA5UheoeIGg1WBLOXvBggjtCm5xtMb/eH0ScNfeXqsgu5XWRSmK26+lZ9jDzCzgtYRY20/cFytHZj/XQxeCZXrgfNs+1iPWXop1j09UKYM+jbafjKyYfKW0iiEHUnSO7Mf0P0vBZFv63NVB6XzLeKO++4tRkR0sv5UQfAXSXxLZjpnCElFYmJez1zwFLdKgzqqF57K3noSN8+koZaERb5dLUkBcId/DPtoW1uoxyZx/AOVWoPHJTwnEr6tEwhQQ/1AYlUtBU/xP7I9i+tIFOPQKfRWZIZQFikr3GyOs6cg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=dpdk.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dZX5hQfbNhxt3vfw4RTTqrYMF1OI9rxE4GTxfJeEIcI=; b=1izZgaub5kU7IGUcAKJCbDM01HWxLm3zU3tMk2Yo1DflNWI4H2/Y5Kd3sQjcJ1ca7X9p3sRPB4G8evveSKtnkhmXz8vF3MbrZYPE1jDvojmad267guh/DNQ0/C6ydJwIMrLvn1bu+RE7uhgAMCSrLNTTXbOxu5qw8MIJZxzJEdM= Received: from BL0PR05CA0009.namprd05.prod.outlook.com (2603:10b6:208:91::19) by SA1PR12MB7199.namprd12.prod.outlook.com (2603:10b6:806:2bc::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.46; Fri, 12 Apr 2024 12:54:27 +0000 Received: from BL6PEPF00020E5F.namprd04.prod.outlook.com (2603:10b6:208:91:cafe::63) by BL0PR05CA0009.outlook.office365.com (2603:10b6:208:91::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7495.12 via Frontend Transport; Fri, 12 Apr 2024 12:54:26 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BL6PEPF00020E5F.mail.protection.outlook.com (10.167.249.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.7452.22 via Frontend Transport; Fri, 12 Apr 2024 12:54:26 +0000 Received: from cae-Lilac-RMB.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Fri, 12 Apr 2024 07:54:17 -0500 From: Venkat Kumar Ande To: CC: , Venkat Kumar Ande Subject: [PATCH 19/24] net/axgbe: separate C22 and C45 transactions Date: Fri, 12 Apr 2024 08:52:44 -0400 Message-ID: <20240412125249.10625-19-VenkatKumar.Ande@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240412125249.10625-1-VenkatKumar.Ande@amd.com> References: <20240412125249.10625-1-VenkatKumar.Ande@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF00020E5F:EE_|SA1PR12MB7199:EE_ X-MS-Office365-Filtering-Correlation-Id: a6916e94-916f-44ae-7e33-08dc5aefaf77 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: M7GIq0ky1jNPihI1fmwUBbYMylDJa1NT/xPdCR1srFefbrCSv/UENtT+wiSCG53BTyWcjbkJ3mzEWJowHBnPF+ecH111nUZpc56tk2UdYGjEhpYFbJVxjcjzpTCx0yRb7BHz927hvRwaB7qIb/mxy1wMVi2b4y9wIyrJuq9tIQ9PQlVWax3Y9U2VoVaKTp1rhL1l8r3p55X4Qv7G5QLN9ccXdkRL0NlnvFyBcZABkFD3IaQbRs7x4dq9KVX6UAgvKFB4EKX/xgsk4LsNCXMPWa0q8abk+e1CvjCY9LB104g+TiSA+JdC3Rl18K+o7vVqHQnn+65xmON8exgFDLC6xxrP1WwDFQCweEjnT1X1SldyMspAr1iDX8lgmbplvWBeMfGpP75rjoDrBt880+8JnvvjeDXNUavb4VVdtXaDg6yEYSiFoJxeaPnIixNF9NrlnHTcSHSbeDOaoA0xhYeg2uGpupux6R6vjyWkby9k962l99HDZY8MgCtOPqAPY0GxBqyM3zOgsl0H+BYMQ2+mcB2CyPf44Agf4+zXDH2JwWu4g94kDBPTHirw3LLlj3PMj8N53HIf7Hb8wD24er7Ch8gQ9/GGLaqDGQtoCU4yrZz1ybIKkOO5l4Hb2S+3V7CYPlG+wUHgXW5MVI6D/Y4Vrp/KxciznszqEONeuqoo+VTlwenx+qhlv/tsECMO3EjtFTerjAMgeEES6IP0qHKdOOJELu1uLNw6iPzvKzaHUUF7CTxj0fTrarRIB+BkY/LC X-Forefront-Antispam-Report: CIP:165.204.84.17; CTRY:US; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:SATLEXMB04.amd.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230031)(376005)(1800799015)(82310400014)(36860700004); DIR:OUT; SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Apr 2024 12:54:26.6982 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a6916e94-916f-44ae-7e33-08dc5aefaf77 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF00020E5F.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB7199 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The xgbe MDIO bus driver can perform both C22 and C45 transfers, when using its MDIO bus hardware. The SFP I2C mdio bus driver only supports C22. Create separate functions for each and register the C45 versions using the new API calls where appropriate. Signed-off-by: Venkat Kumar Ande --- drivers/net/axgbe/axgbe_dev.c | 77 +++++++++++++++++++++++++----- drivers/net/axgbe/axgbe_ethdev.h | 7 ++- drivers/net/axgbe/axgbe_phy_impl.c | 4 +- 3 files changed, 71 insertions(+), 17 deletions(-) diff --git a/drivers/net/axgbe/axgbe_dev.c b/drivers/net/axgbe/axgbe_dev.c index 6b413160c2..fa7324efa7 100644 --- a/drivers/net/axgbe/axgbe_dev.c +++ b/drivers/net/axgbe/axgbe_dev.c @@ -63,11 +63,20 @@ static int mdio_complete(struct axgbe_port *pdata) return 0; } -static unsigned int axgbe_create_mdio_sca(int port, int reg) +static unsigned int axgbe_create_mdio_sca_c22(int port, int reg) { - unsigned int mdio_sca, da; + unsigned int mdio_sca; - da = (reg & MII_ADDR_C45) ? reg >> 16 : 0; + mdio_sca = 0; + AXGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, RA, reg); + AXGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, PA, port); + + return mdio_sca; +} + +static unsigned int axgbe_create_mdio_sca_c45(int port, unsigned int da, int reg) +{ + unsigned int mdio_sca; mdio_sca = 0; AXGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, RA, reg); @@ -77,13 +86,12 @@ static unsigned int axgbe_create_mdio_sca(int port, int reg) return mdio_sca; } -static int axgbe_write_ext_mii_regs(struct axgbe_port *pdata, int addr, - int reg, u16 val) +static int axgbe_write_ext_mii_regs(struct axgbe_port *pdata, + unsigned int mdio_sca, u16 val) { - unsigned int mdio_sca, mdio_sccd; + unsigned int mdio_sccd; uint64_t timeout; - mdio_sca = axgbe_create_mdio_sca(addr, reg); AXGMAC_IOWRITE(pdata, MAC_MDIOSCAR, mdio_sca); mdio_sccd = 0; @@ -103,13 +111,34 @@ static int axgbe_write_ext_mii_regs(struct axgbe_port *pdata, int addr, return -ETIMEDOUT; } -static int axgbe_read_ext_mii_regs(struct axgbe_port *pdata, int addr, - int reg) + +static int axgbe_write_ext_mii_regs_c22(struct axgbe_port *pdata, + int addr, int reg, u16 val) +{ + unsigned int mdio_sca; + + mdio_sca = axgbe_create_mdio_sca_c22(addr, reg); + + return axgbe_write_ext_mii_regs(pdata, mdio_sca, val); +} + +static int axgbe_write_ext_mii_regs_c45(struct axgbe_port *pdata, + int addr, int devad, int reg, u16 val) { - unsigned int mdio_sca, mdio_sccd; + unsigned int mdio_sca; + + mdio_sca = axgbe_create_mdio_sca_c45(addr, devad, reg); + + return axgbe_write_ext_mii_regs(pdata, mdio_sca, val); +} + + +static int axgbe_read_ext_mii_regs(struct axgbe_port *pdata, + unsigned int mdio_sca) +{ + unsigned int mdio_sccd; uint64_t timeout; - mdio_sca = axgbe_create_mdio_sca(addr, reg); AXGMAC_IOWRITE(pdata, MAC_MDIOSCAR, mdio_sca); mdio_sccd = 0; @@ -132,6 +161,25 @@ static int axgbe_read_ext_mii_regs(struct axgbe_port *pdata, int addr, return AXGMAC_IOREAD_BITS(pdata, MAC_MDIOSCCDR, DATA); } +static int axgbe_read_ext_mii_regs_c22(struct axgbe_port *pdata, int addr, int reg) +{ + unsigned int mdio_sca; + + mdio_sca = axgbe_create_mdio_sca_c22(addr, reg); + + return axgbe_read_ext_mii_regs(pdata, mdio_sca); +} + +static int axgbe_read_ext_mii_regs_c45(struct axgbe_port *pdata, int addr, + int devad, int reg) +{ + unsigned int mdio_sca; + + mdio_sca = axgbe_create_mdio_sca_c45(addr, devad, reg); + + return axgbe_read_ext_mii_regs(pdata, mdio_sca); +} + static int axgbe_set_ext_mii_mode(struct axgbe_port *pdata, unsigned int port, enum axgbe_mdio_mode mode) { @@ -1373,8 +1421,11 @@ void axgbe_init_function_ptrs_dev(struct axgbe_hw_if *hw_if) hw_if->set_speed = axgbe_set_speed; hw_if->set_ext_mii_mode = axgbe_set_ext_mii_mode; - hw_if->read_ext_mii_regs = axgbe_read_ext_mii_regs; - hw_if->write_ext_mii_regs = axgbe_write_ext_mii_regs; + hw_if->read_ext_mii_regs_c22 = axgbe_read_ext_mii_regs_c22; + hw_if->write_ext_mii_regs_c22 = axgbe_write_ext_mii_regs_c22; + hw_if->read_ext_mii_regs_c45 = axgbe_read_ext_mii_regs_c45; + hw_if->write_ext_mii_regs_c45 = axgbe_write_ext_mii_regs_c45; + /* For FLOW ctrl */ hw_if->config_tx_flow_control = axgbe_config_tx_flow_control; hw_if->config_rx_flow_control = axgbe_config_rx_flow_control; diff --git a/drivers/net/axgbe/axgbe_ethdev.h b/drivers/net/axgbe/axgbe_ethdev.h index 4dcbf6d9a2..cb3df47a63 100644 --- a/drivers/net/axgbe/axgbe_ethdev.h +++ b/drivers/net/axgbe/axgbe_ethdev.h @@ -325,8 +325,11 @@ struct axgbe_hw_if { int (*set_ext_mii_mode)(struct axgbe_port *, unsigned int, enum axgbe_mdio_mode); - int (*read_ext_mii_regs)(struct axgbe_port *, int, int); - int (*write_ext_mii_regs)(struct axgbe_port *, int, int, uint16_t); + int (*read_ext_mii_regs_c22)(struct axgbe_port *pdata, int addr, int reg); + int (*write_ext_mii_regs_c22)(struct axgbe_port *pdata, int addr, int reg, uint16_t val); + int (*read_ext_mii_regs_c45)(struct axgbe_port *pdata, int addr, int devad, int reg); + int (*write_ext_mii_regs_c45)(struct axgbe_port *pdata, int addr, int devad, + int reg, uint16_t val); /* For FLOW ctrl */ int (*config_tx_flow_control)(struct axgbe_port *); diff --git a/drivers/net/axgbe/axgbe_phy_impl.c b/drivers/net/axgbe/axgbe_phy_impl.c index 9c2c411b4f..d173545e83 100644 --- a/drivers/net/axgbe/axgbe_phy_impl.c +++ b/drivers/net/axgbe/axgbe_phy_impl.c @@ -1148,8 +1148,8 @@ static int axgbe_phy_set_redrv_mode_mdio(struct axgbe_port *pdata, redrv_reg = AXGBE_PHY_REDRV_MODE_REG + (phy_data->redrv_lane * 0x1000); redrv_val = (u16)mode; - return pdata->hw_if.write_ext_mii_regs(pdata, phy_data->redrv_addr, - redrv_reg, redrv_val); + return pdata->hw_if.write_ext_mii_regs_c22(pdata, + phy_data->redrv_addr, redrv_reg, redrv_val); } static int axgbe_phy_set_redrv_mode_i2c(struct axgbe_port *pdata,