From patchwork Mon Feb 26 17:56:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Asmaa Mnebhi X-Patchwork-Id: 1904680 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ubuntu.com (client-ip=185.125.189.65; helo=lists.ubuntu.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=patchwork.ozlabs.org) Received: from lists.ubuntu.com (lists.ubuntu.com [185.125.189.65]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Tk7fN5spBz23qD for ; Tue, 27 Feb 2024 04:59:08 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=lists.ubuntu.com) by lists.ubuntu.com with esmtp (Exim 4.86_2) (envelope-from ) id 1refFV-0007bz-UP; Mon, 26 Feb 2024 17:58:47 +0000 Received: from mail-bn8nam04on2058.outbound.protection.outlook.com ([40.107.100.58] helo=NAM04-BN8-obe.outbound.protection.outlook.com) by lists.ubuntu.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1refDp-0007PN-Nq for kernel-team@lists.ubuntu.com; Mon, 26 Feb 2024 17:57:05 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KXL6ZvxtMg4X/zbUewiYCglOb9909wJI9U3YJfESPNa5A+l8lCksUq3K+1pFRWdoJuRWgoLiWij5C5jPfxZe5JGR+IfcZNrHg6sxSVEwSgs8hEtYqI+VlfuzzFRHO25eJjQM1JiOXghDt5sozb234R8DTNvmdGSqGLgGLZ7R6tApqRsXAOUfPb1MPGF1SC4qNxv0L9/rHPjRPfUwO/I3f0BTtUG6oWrxaZayra2A7SmOF61VuwvVMFpAvIGO/OBDTELAxEdukO9DDhuCq+1UKThrYG98cizwr5XCT1qQAONy2N5bkEpA4V03mSKJpLgvdv/v3JluvNNL3/IFqC+EjA== 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=+ED+Yo5E9WQG7WjyoYoU4ELRLbjCCy2xmdVDIKd90lE=; b=gz+OxklzvJjfS8fK4lLnW/jC8y4yvUjcmVU/fAn0lwpuVRYHASUmf3FW2yNGkhtRT5o2+YAlJPb4WJu7c04oT/AIohhWiOQ4TPrZ9JqAv4DrQsPmXLdozzhVSg+yYgeVr2AbSqqRZH42ZSG7BDOAkgn3ifeL8YC9LhyQBZARUmpltcqw9B/sXQPJNOWoWSLrfeuJwsMZbfAIUNY+SdRfR/ZriOoHw5CkuqYxJarl/tePMfD8HdNHND1IYoaD1hN1e0YMAajMhIuj/gsk+C51LWJ/egwJlDM82p4mPexq9KKhuSpJ1MUiZJf0zNJ7TDrsOLrUrV8I6p9Ex6a3JEXhqQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) smtp.rcpttodomain=lists.ubuntu.com smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) Received: from SJ0PR13CA0137.namprd13.prod.outlook.com (2603:10b6:a03:2c6::22) by DS0PR12MB8272.namprd12.prod.outlook.com (2603:10b6:8:fc::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7316.24; Mon, 26 Feb 2024 17:56:58 +0000 Received: from CO1PEPF000042AB.namprd03.prod.outlook.com (2603:10b6:a03:2c6:cafe::cf) by SJ0PR13CA0137.outlook.office365.com (2603:10b6:a03:2c6::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7339.25 via Frontend Transport; Mon, 26 Feb 2024 17:56:58 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.118.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.232) by CO1PEPF000042AB.mail.protection.outlook.com (10.167.243.40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7292.25 via Frontend Transport; Mon, 26 Feb 2024 17:56:57 +0000 Received: from drhqmail203.nvidia.com (10.126.190.182) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Mon, 26 Feb 2024 09:56:46 -0800 Received: from drhqmail202.nvidia.com (10.126.190.181) by drhqmail203.nvidia.com (10.126.190.182) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.12; Mon, 26 Feb 2024 09:56:46 -0800 Received: from vdi.nvidia.com (10.127.8.14) by mail.nvidia.com (10.126.190.181) with Microsoft SMTP Server id 15.2.1258.12 via Frontend Transport; Mon, 26 Feb 2024 09:56:45 -0800 From: Asmaa Mnebhi To: Subject: [SRU][J:linux-bluefield][PATCH v2 1/1] UBUNTU: SAUCE: mlxbf-gige: support fixed phy for Bobcat Date: Mon, 26 Feb 2024 12:56:41 -0500 Message-ID: <20240226175641.21215-2-asmaa@nvidia.com> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20240226175641.21215-1-asmaa@nvidia.com> References: <20240226175641.21215-1-asmaa@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000042AB:EE_|DS0PR12MB8272:EE_ X-MS-Office365-Filtering-Correlation-Id: fb883e70-6a88-4575-b80e-08dc36f45374 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zJYujnF9mYfa2XDPjBO9HPVKnXrx714BJBdslnPsrgfSypcn/Neivk8fPQYmldbUMh06gLkFDweevY1TdMWrC4nfJyf2tcD62pjdzMAAUQQVwvkuxonRIPlk9wDnHndCtuLaWYwJVbmKxWV5TpA4Z/SH7f+HWHAv2RYRaMn3n4S9HHNXC73X/LiXW2it4Wqs6Z1V2yEYsKvcQrnelomn9tCNRJf4m8X5ZlJuZV8eGGfghZ+TXRPMp4zOjoHxXCOc2Ji1nxEeKxV7uTBYqPlbCMsUdmHy1W+DMVdsWvwSWn+dcY3nI9qEJgf1347Kz3ebdW4UzYWb8R1d4pZHcK8/kMor6hIpn7TaZg73JGRcp6YaIwKUEDiv4dA6UIa4PD8ydGqwo1tH5LOLKehrlvve6Xjqm/XEhsLZ0UCNCxyDTNAcMm9k3McV63oVAxdk20Y4kjW0ie1QFB1cPeRat4RbjZYWkIRBxsgrnoMrozFvn6qYCNxM6JcJ1FQzok6hMUWKMv6CVlfZFtKwpyJyx4rGsLK4+9qmwTa8BulbrddB7iOGIGEoMeFiWFGXIcvu1mDtfItFXtnbnnw3NbW1WUft/5QMjk6AtM77RZHd7yf6RhDSHR4zp4+C/xB9Fe4f0I8tB6GmSi1zIZSiPfojL42gWvZjH/xE2n5s2cihuPZaxlW1jWfVxKwSJ2S5W4gRBqr6q35fscdjGVKouRCiHeouddOy+wGwJ4OITYPi65m2foPuh4swR4NDtEXlH2a5WWeLCSs9pPsFn7dycTjmtErF6xcAb+JiK0w+IhO8mquNoS8= X-Forefront-Antispam-Report: CIP:216.228.118.232; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc7edge1.nvidia.com; CAT:NONE; SFS:(13230031)(230273577357003)(36860700004); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Feb 2024 17:56:57.9064 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: fb883e70-6a88-4575-b80e-08dc36f45374 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.118.232]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000042AB.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB8272 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: asmaa@nvidia.com, David Thompson Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" BugLink: https://bugs.launchpad.net/bugs/2054845 There is no external PHY connected to the OOB MAC on the Bobcat board and no access to the MDIO bus. The OOB MAC is directly connected to the Marvell switch. So support a "fake PHY" and simulate an MDIO bus. If "fixed-link" property is supported in the ACPI table, register the fixed PHY driver. Signed-off-by: Asmaa Mnebhi Reviewed-by: David Thompson Acked-by: Bartlomiej Zolnierkiewicz --- .../ethernet/mellanox/mlxbf_gige/mlxbf_gige.h | 2 - .../mellanox/mlxbf_gige/mlxbf_gige_main.c | 62 ++++++++++++++++--- 2 files changed, 53 insertions(+), 11 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige.h b/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige.h index a453b9cd9033..a85823a64d94 100644 --- a/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige.h +++ b/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige.h @@ -175,8 +175,6 @@ enum mlxbf_gige_res { int mlxbf_gige_mdio_probe(struct platform_device *pdev, struct mlxbf_gige *priv); void mlxbf_gige_mdio_remove(struct mlxbf_gige *priv); -irqreturn_t mlxbf_gige_mdio_handle_phy_interrupt(int irq, void *dev_id); -void mlxbf_gige_mdio_enable_phy_int(struct mlxbf_gige *priv); void mlxbf_gige_set_mac_rx_filter(struct mlxbf_gige *priv, unsigned int index, u64 dmac); diff --git a/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_main.c b/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_main.c index c0da9c05b12a..74ef75e00739 100644 --- a/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_main.c +++ b/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_main.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -364,6 +365,7 @@ static struct mlxbf_gige_link_cfg mlxbf_gige_link_cfgs[] = { static int mlxbf_gige_probe(struct platform_device *pdev) { + struct fixed_phy_status fphy_status = {}; struct phy_device *phydev; struct net_device *netdev; struct mlxbf_gige *priv; @@ -428,16 +430,53 @@ static int mlxbf_gige_probe(struct platform_device *pdev) priv->rx_irq = platform_get_irq(pdev, MLXBF_GIGE_RECEIVE_PKT_INTR_IDX); priv->llu_plu_irq = platform_get_irq(pdev, MLXBF_GIGE_LLU_PLU_INTR_IDX); - phy_irq = acpi_dev_gpio_irq_get_by(ACPI_COMPANION(&pdev->dev), "phy-gpios", 0); - if (phy_irq < 0) { - dev_err(&pdev->dev, "Error getting PHY irq. Use polling instead"); + if (device_property_read_bool(&pdev->dev, "fixed-link")) { + fphy_status.link = 1; + err = device_property_read_u32(&pdev->dev, "full-duplex", &fphy_status.duplex); + if (err) { + dev_err(&pdev->dev, "Failed to get duplex\n"); + err = -EINVAL; + goto out; + } + err = device_property_read_u32(&pdev->dev, "speed", &fphy_status.speed); + if (err) { + dev_err(&pdev->dev, "Failed to get speed\n"); + err = -EINVAL; + goto out; + } + err = device_property_read_u32(&pdev->dev, "pause", &fphy_status.pause); + if (err) { + dev_err(&pdev->dev, "Failed to get pause\n"); + err = -EINVAL; + goto out; + } + err = device_property_read_u32(&pdev->dev, "asym-pause", &fphy_status.asym_pause); + if (err) { + dev_err(&pdev->dev, "Failed to get asym-pause\n"); + err = -EINVAL; + goto out; + } + + phydev = fixed_phy_register(PHY_POLL, &fphy_status, NULL); + if (IS_ERR(phydev)) { + dev_err(&pdev->dev, "Failed to register fixed PHY device\n"); + err = PTR_ERR(phydev); + goto out; + } + phy_irq = PHY_POLL; - } + } else { + phy_irq = acpi_dev_gpio_irq_get_by(ACPI_COMPANION(&pdev->dev), "phy-gpios", 0); + if (phy_irq < 0) { + dev_err(&pdev->dev, "Error getting PHY irq. Use polling instead"); + phy_irq = PHY_POLL; + } - phydev = phy_find_first(priv->mdiobus); - if (!phydev) { - err = -ENODEV; - goto out; + phydev = phy_find_first(priv->mdiobus); + if (!phydev) { + err = -ENODEV; + goto out; + } } addr = phydev->mdio.addr; @@ -474,9 +513,14 @@ static int mlxbf_gige_probe(struct platform_device *pdev) static int mlxbf_gige_remove(struct platform_device *pdev) { struct mlxbf_gige *priv = platform_get_drvdata(pdev); + struct phy_device *phydev = priv->netdev->phydev; unregister_netdev(priv->netdev); - phy_disconnect(priv->netdev->phydev); + phy_disconnect(phydev); + + if (phy_is_pseudo_fixed_link(phydev)) + fixed_phy_unregister(phydev); + mlxbf_gige_mdio_remove(priv); platform_set_drvdata(pdev, NULL);