From patchwork Tue Mar 18 22:06:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans-Frieder Vogt via B4 Relay X-Patchwork-Id: 14021635 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5BE022063DB; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742335638; cv=none; b=XaNG/ULv8K8wipYfHHtyh7P74QMT/piRM+SRKmOdUhH4ahrf3elx3QfhOVh8kvje/fQpwyA/lG8sdIJw755fL3vXzxUaB24crlyxHGSblAu0SNVjnGvtsVlrDQgDVvF2tFbLKVovLNyL2xBe+CjNPXHwgLDinFeRN6Tu7kd6EY0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742335638; c=relaxed/simple; bh=z15Ls+N2f4qhQa8zHLA/8pAS/OD9DivM6Ks6EyIuxMQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=p21br/o2xW5EuTPhHS/5bT2gNPn5dYu6lF8Qs4NoT+Qp6QUkAk3nhCjuX7taS/TioUdf7vV5Nooezem7O6bc3Rqe2pqQf6nmUQxugF4lt7TWHFlDgQC3eNHeY8vTNgVwYhwqu/P98hgeWRsEoWLoM8Aa29sL1joEqDMi4yYGAv4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=sYuyM7eY; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="sYuyM7eY" Received: by smtp.kernel.org (Postfix) with ESMTPS id 2E51FC4CEF0; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742335638; bh=z15Ls+N2f4qhQa8zHLA/8pAS/OD9DivM6Ks6EyIuxMQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=sYuyM7eYgOIg1TUayAEGE3wv1u1h98toEAI7iwnVwnC9TFfSX1i5gSYsrbN9/W/Dm bQg+ZapJ6tAlhRHXBTXtIWjdERy6Jn2RfgBdq3fdkcHS+B1MPqGcy5F3LDl3HRVnun z6xk31XrJYvBnW5UNGV0CixMrPgVC3RAHRR4wrcdagoQTf2QV9f5lim9leemNc9Gsg XACQd4Au/fM+TcQyavWzgVoNrHRvjjz/nz/8kYRwobOCy4WkF5JXx042fKGt5p8Jy/ NUtFr25cjz6gSkaulUHc5m24ib9jmE7MmUlkLWJRTS1WXqn0mDs4q7M+0dcB0yReQZ m4hiBrNYs3FWQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 19869C35FF8; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) From: Hans-Frieder Vogt via B4 Relay Date: Tue, 18 Mar 2025 23:06:52 +0100 Subject: [PATCH net-next v6 1/7] net: phy: Add swnode support to mdiobus_scan Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250318-tn9510-v3a-v6-1-808a9089d24b@gmx.net> References: <20250318-tn9510-v3a-v6-0-808a9089d24b@gmx.net> In-Reply-To: <20250318-tn9510-v3a-v6-0-808a9089d24b@gmx.net> To: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , FUJITA Tomonori , Andrew Lunn Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Hans-Frieder Vogt X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1742335636; l=1936; i=hfdevel@gmx.net; s=20240915; h=from:subject:message-id; bh=eboV90jxD+Bku0BOXjDGCNU60DTUE9kSyEbR0D3C8dU=; b=BBFK0D+bzMirEJuwUbn+Gj2hKJBmo7eC8cXE3v2eeiURfLhONRulpN0Zsg/XF5SwGa3ClvjAX ow9ecsbYkWTBOEDip/IHJx67lDAa1ndFEGvYNzuaHiJHMvBG7qnFu2c X-Developer-Key: i=hfdevel@gmx.net; a=ed25519; pk=s3DJ3DFe6BJDRAcnd7VGvvwPXcLgV8mrfbpt8B9coRc= X-Endpoint-Received: by B4 Relay for hfdevel@gmx.net/20240915 with auth_id=209 X-Original-From: Hans-Frieder Vogt Reply-To: hfdevel@gmx.net X-Patchwork-Delegate: kuba@kernel.org From: Hans-Frieder Vogt This patch will allow to use a swnode/fwnode defined for a phy_device. The MDIO bus (mii_bus) needs to contain nodes for the PHY devices, named "ethernet-phy@i", with i being the MDIO address (0 .. PHY_MAX_ADDR - 1). The fwnode is only attached to the phy_device if there isn't already an fwnode attached. fwnode_get_named_child_node will increase the usage counter of the fwnode. However, no new code is needed to decrease the counter again, since this is already implemented in the phy_device_release function. Signed-off-by: Hans-Frieder Vogt --- drivers/net/phy/mdio_bus.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c index 7e2f10182c0cf37bef4cea1820863f047b5cb466..ede596c1a69d1b2b986e9eef51c3beb4a5fbc805 100644 --- a/drivers/net/phy/mdio_bus.c +++ b/drivers/net/phy/mdio_bus.c @@ -551,6 +551,8 @@ static int mdiobus_create_device(struct mii_bus *bus, static struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr, bool c45) { struct phy_device *phydev = ERR_PTR(-ENODEV); + struct fwnode_handle *fwnode; + char node_name[16]; int err; phydev = get_phy_device(bus, addr, c45); @@ -562,6 +564,18 @@ static struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr, bool c45) */ of_mdiobus_link_mdiodev(bus, &phydev->mdio); + /* Search for a swnode for the phy in the swnode hierarchy of the bus. + * If there is no swnode for the phy provided, just ignore it. + */ + if (dev_fwnode(&bus->dev) && !dev_fwnode(&phydev->mdio.dev)) { + snprintf(node_name, sizeof(node_name), "ethernet-phy@%d", + addr); + fwnode = fwnode_get_named_child_node(dev_fwnode(&bus->dev), + node_name); + if (fwnode) + device_set_node(&phydev->mdio.dev, fwnode); + } + err = phy_device_register(phydev); if (err) { phy_device_free(phydev); From patchwork Tue Mar 18 22:06:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans-Frieder Vogt via B4 Relay X-Patchwork-Id: 14021638 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B35C92066EE; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742335638; cv=none; b=FPUw0ZKPA/fqrDP3IIzUUwfKNfZky66raft+s8lH/AYZhxG76cWS5z+dH8A/EMwx1rQ+f0eB+xZlINbXxq8wHX+2T9m+DanGI/kLhqi1Vrj3AZqpvLAIF0Ks3RQWpZWuGRlZUyJ8vq7sOspiy4yiTBH8+RovuZEVokSvDavGSZo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742335638; c=relaxed/simple; bh=YMuS4jq16SQY005HovXWqkuXwTsXCArwDObAf38rCgY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=J2Of4Z9EBcNeciekckvJy7GclwZgF6oc7Giwc9b8MbJY1v4UppkPqSweXNYPFMCl6zdtyEJjg3HHgL40nlHe8bD7Ozbc0GxkQsXdTXDq8ikGPHoKoC++9gFdIPCxA/AYvDyCUmkvcQ573Me0OeigJJwfST2tF96P5LzM6qv0ZYY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qFPNxIDq; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qFPNxIDq" Received: by smtp.kernel.org (Postfix) with ESMTPS id 3D1C1C4CEEE; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742335638; bh=YMuS4jq16SQY005HovXWqkuXwTsXCArwDObAf38rCgY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=qFPNxIDqHWrOotzEkBskJSYskV3ahW/vogwMALoclJhArgl/xqVFO/p7vQn8t/K77 zPVmN+xVRCYP2cXDTumuCs/JJtjpP3ynnyrhysmCN9pWiBoqChWyOPqeBHkWfOuFI0 a33DEIvymKEHgc3KM/XnC/Piy6JA9lP+tAVwrmndndFKYyJEM4kEil2vXUoUf1Zo/e tQf8lRT1ymc8KhUNvPjwueX0lQn+EU/dvIhp6z039gU1rKkPRUHKapmec95s9t9krb hJlFcw1iLiqb28rG0lDajNHACh1wD1aQ8a4S0mvbzCDC66LnW+ggRgvnabWrk6Mzqg WBHFVbzPtR9aw== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 30611C35FF3; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) From: Hans-Frieder Vogt via B4 Relay Date: Tue, 18 Mar 2025 23:06:53 +0100 Subject: [PATCH net-next v6 2/7] net: phy: aquantia: add probe function to aqr105 for firmware loading Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250318-tn9510-v3a-v6-2-808a9089d24b@gmx.net> References: <20250318-tn9510-v3a-v6-0-808a9089d24b@gmx.net> In-Reply-To: <20250318-tn9510-v3a-v6-0-808a9089d24b@gmx.net> To: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , FUJITA Tomonori , Andrew Lunn Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Hans-Frieder Vogt X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1742335636; l=900; i=hfdevel@gmx.net; s=20240915; h=from:subject:message-id; bh=vEeavGZyiKSDFemLfNRy5gMMBOs/2nb7oTqi4HS4XIQ=; b=oyS43WSmFx+ES8/DCIG31nGgeWDUQTwWPqExHYDP2jF5t8uGejyNcJrapyPFocBk6keS7d/XW nryh0EyZZzwAIAVPoK51rUwaYAimf3quiDzgS6eYCKungHUWiTmNpdA X-Developer-Key: i=hfdevel@gmx.net; a=ed25519; pk=s3DJ3DFe6BJDRAcnd7VGvvwPXcLgV8mrfbpt8B9coRc= X-Endpoint-Received: by B4 Relay for hfdevel@gmx.net/20240915 with auth_id=209 X-Original-From: Hans-Frieder Vogt Reply-To: hfdevel@gmx.net X-Patchwork-Delegate: kuba@kernel.org From: Hans-Frieder Vogt Re-use the AQR107 probe function to load the firmware on the AQR105 (and to probe the HWMON). Signed-off-by: Hans-Frieder Vogt Reviewed-by: Andrew Lunn --- drivers/net/phy/aquantia/aquantia_main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/net/phy/aquantia/aquantia_main.c b/drivers/net/phy/aquantia/aquantia_main.c index e42ace4e682aacf56199b7fdb9613d20f240fa27..86b0e63de5d88fa1050919a8826bdbec4bbcf8ba 100644 --- a/drivers/net/phy/aquantia/aquantia_main.c +++ b/drivers/net/phy/aquantia/aquantia_main.c @@ -912,6 +912,7 @@ static struct phy_driver aqr_driver[] = { PHY_ID_MATCH_MODEL(PHY_ID_AQR105), .name = "Aquantia AQR105", .config_aneg = aqr_config_aneg, + .probe = aqr107_probe, .config_intr = aqr_config_intr, .handle_interrupt = aqr_handle_interrupt, .read_status = aqr_read_status, From patchwork Tue Mar 18 22:06:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans-Frieder Vogt via B4 Relay X-Patchwork-Id: 14021637 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C2F472066F6; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742335638; cv=none; b=N1U1SaiEBOnb83EKi89gPEyDkLVDsS0RXv7P7hei3aMwtLUFSR6K30+g7rCMH+ST4x3tu8D5U2VzEuKJb2NHhteLEXE56o67lj5903sSvqlPL0KxrF0iFzxOB0+6q+iP9lokz2gpvwTOqnXV0/yTqoeyAPnVHJ9Pi+KMu3TGwKQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742335638; c=relaxed/simple; bh=uVlmDwv5wWEDBvC4S2R9sJZkHok3EH5U4Ugh6RJb8xM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FezV9qd5o5wlnMYGDeENISpvLLjmxU3JwekYx3LtrJTjHZ0+skxvrrqY1iXBQHQFjpMVjaCUqfHU2dpyWju7b8gQgG7K+UzjPvr9aeNV/nrNw63WNf4Mnphc3/CaVt3ADkZF6Rh8vi+hlxG8MUC53cP6E4zpXFH+JvyY9ZM354E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Mpcvd1MB; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Mpcvd1MB" Received: by smtp.kernel.org (Postfix) with ESMTPS id 55C0AC4CEF3; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742335638; bh=uVlmDwv5wWEDBvC4S2R9sJZkHok3EH5U4Ugh6RJb8xM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=Mpcvd1MBrrRREIdkVUa4WzT2SuDi0YmnCQYifhwvQysF909Ee0gPWRqExURJfB3Vd xSOsBzRHMRHG0jxK8BYuh4Z4vUZyS/qGY25WkvSsY1fc7oQyB73A9cfkDIe23gS7G1 NV0Fb+rygcphFa1lokkY0ZETbi2499I0Dlx4ih+gBm80mjaLED1Fjs4FlSxSwKlM29 G5qgu409vuBghB6LM0UhE5fqDpBayuVBgYOygEdI/gRwD2/T29S9Dc6ovs7OuJUsqB TxWol8aFn7EKVF+4JuQyEmZ4Hs7I7mKB4Un2wrpy8y4wwCK3YaFinPm/3Yupu12j0c f/jBgEzYhZLWg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 48F59C282EC; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) From: Hans-Frieder Vogt via B4 Relay Date: Tue, 18 Mar 2025 23:06:54 +0100 Subject: [PATCH net-next v6 3/7] net: phy: aquantia: search for firmware-name in fwnode Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250318-tn9510-v3a-v6-3-808a9089d24b@gmx.net> References: <20250318-tn9510-v3a-v6-0-808a9089d24b@gmx.net> In-Reply-To: <20250318-tn9510-v3a-v6-0-808a9089d24b@gmx.net> To: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , FUJITA Tomonori , Andrew Lunn Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Hans-Frieder Vogt X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1742335636; l=1169; i=hfdevel@gmx.net; s=20240915; h=from:subject:message-id; bh=0zRi7Vk41IU72s/8DzrXAvCvexTz79in+5DW1aumMeg=; b=wljGj2lw59kqmSW492zIjI0eH+/ZzkqBoEAr3NxRMQVviKUuuXPSKoqzlIXhsJrqbPOzpT1Pb OsnPbeNqvnQC7RsbKyu6Qi6Tu36+aX+oV9cSuZDHYtIjPJnzAsFuK14 X-Developer-Key: i=hfdevel@gmx.net; a=ed25519; pk=s3DJ3DFe6BJDRAcnd7VGvvwPXcLgV8mrfbpt8B9coRc= X-Endpoint-Received: by B4 Relay for hfdevel@gmx.net/20240915 with auth_id=209 X-Original-From: Hans-Frieder Vogt Reply-To: hfdevel@gmx.net X-Patchwork-Delegate: kuba@kernel.org From: Hans-Frieder Vogt Allow the firmware name of an Aquantia PHY alternatively be provided by the property "firmware-name" of a swnode. This software node may be provided by the MAC or MDIO driver. Signed-off-by: Hans-Frieder Vogt Reviewed-by: Andrew Lunn --- drivers/net/phy/aquantia/aquantia_firmware.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/net/phy/aquantia/aquantia_firmware.c b/drivers/net/phy/aquantia/aquantia_firmware.c index dab3af80593f51ff6dc670dfb54ae358c2458c40..bbbcc9736b00e1cfa193f4398889a4c172ca27a4 100644 --- a/drivers/net/phy/aquantia/aquantia_firmware.c +++ b/drivers/net/phy/aquantia/aquantia_firmware.c @@ -328,10 +328,11 @@ static int aqr_firmware_load_fs(struct phy_device *phydev) const char *fw_name; int ret; - ret = of_property_read_string(dev->of_node, "firmware-name", - &fw_name); - if (ret) + ret = device_property_read_string(dev, "firmware-name", &fw_name); + if (ret) { + phydev_err(phydev, "failed to read firmware-name: %d\n", ret); return ret; + } ret = request_firmware(&fw, fw_name, dev); if (ret) { From patchwork Tue Mar 18 22:06:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans-Frieder Vogt via B4 Relay X-Patchwork-Id: 14021640 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C2FA22066FF; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742335638; cv=none; b=F4hBMezdgaHchsfM3M6aSn441DuKtYe2nonGOMNc+MSQXm00RIp6XLLZhSgUkdBKp4pTWY/F7zQ9x9o7lB61pgodVuCE6/zxjTE366Y+twhYVujfOj1vYWLNJoFLQx4F5ty+QjcjQ/YlBaufFGm2JmIdF4pIZNx3ecJcvJ4AlLI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742335638; c=relaxed/simple; bh=RwxhfF8LyQu3rrtS2AK58FFCF1ul2y+qQzbpO8e2MAw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=g5wJ/DhIGMLOn8XnaUvIGY92GbAmH819dFbOPFw0c5iUYZZkJm+IRVGoHVDhGBhoXq3cTgGmR+wQjuDYbTNWKpIQb5qmkBv20AA5OUR4dX7Q7/ynd1hVD9v+2bFnG+oh7NuX1YKPxHxybujHOHuHXpSkG61OPajrLliTOi3p6BQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=aCD+boeI; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="aCD+boeI" Received: by smtp.kernel.org (Postfix) with ESMTPS id 69A88C4CEF5; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742335638; bh=RwxhfF8LyQu3rrtS2AK58FFCF1ul2y+qQzbpO8e2MAw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=aCD+boeIvse/7bb39/0aNmlHX1baeZwzZaJdcKGVIkJUrlDdERs9ONe5HL6c7e0rP R+pnm1pSa7zE0cZ0VJBdKwHdrMgCZmahOC6cEN4iNoYTtF0ZGFGBZSY5z/IACBgwcf tzqXfOU8tAlkAem6nEBaxHOX0ursWxFO6ZG1kVlp1Flg64856QWWlugrLexHclYknv 80EWgQNSzES8x2El60pLabVJTXtBymJdADU2CKxSH6GfsDsh2g3YUnqBLZMWtt1rR0 TK2/lrFDneqKP67kRTS+wxawzOAm6rmHAyggdU9ZzYUR1VoxxsQkfeVda7qTwtb933 sMrVc98P/1nKA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 61936C35FF3; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) From: Hans-Frieder Vogt via B4 Relay Date: Tue, 18 Mar 2025 23:06:55 +0100 Subject: [PATCH net-next v6 4/7] net: phy: aquantia: add essential functions to aqr105 driver Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250318-tn9510-v3a-v6-4-808a9089d24b@gmx.net> References: <20250318-tn9510-v3a-v6-0-808a9089d24b@gmx.net> In-Reply-To: <20250318-tn9510-v3a-v6-0-808a9089d24b@gmx.net> To: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , FUJITA Tomonori , Andrew Lunn Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Hans-Frieder Vogt X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1742335636; l=8764; i=hfdevel@gmx.net; s=20240915; h=from:subject:message-id; bh=/eA6SDWVHD3SADXqLt2kQjcqtjSVgIlrVW1BBWTFIvY=; b=nnh5GDoVac3ptJYnt9TaGoadUXJB3nRKUZ6IDFTtEf1fp6WmbIjiarTPcCOeUM6majVPhLn7V 1Csf4ZzIHDTB/wcSPgMlDid6pErGEsLINsA/RMiHjzcKKEHLJeLynaI X-Developer-Key: i=hfdevel@gmx.net; a=ed25519; pk=s3DJ3DFe6BJDRAcnd7VGvvwPXcLgV8mrfbpt8B9coRc= X-Endpoint-Received: by B4 Relay for hfdevel@gmx.net/20240915 with auth_id=209 X-Original-From: Hans-Frieder Vogt Reply-To: hfdevel@gmx.net X-Patchwork-Delegate: kuba@kernel.org From: Hans-Frieder Vogt This patch makes functions that were provided for aqr107 applicable to aqr105, or replaces generic functions with specific ones. Since the aqr105 was introduced before NBASE-T was defined (or 802.3bz), there are a number of vendor specific registers involved in the definition of the advertisement, in auto-negotiation and in the setting of the speed. The functions have been written following the downstream driver for TN4010 cards with aqr105 PHY, and use code from aqr107 functions wherever it seemed to make sense. Signed-off-by: Hans-Frieder Vogt --- drivers/net/phy/aquantia/aquantia_main.c | 239 ++++++++++++++++++++++++++++++- 1 file changed, 237 insertions(+), 2 deletions(-) diff --git a/drivers/net/phy/aquantia/aquantia_main.c b/drivers/net/phy/aquantia/aquantia_main.c index 86b0e63de5d88fa1050919a8826bdbec4bbcf8ba..ce479b588a34ff4c705a7c9bf770d8864ea0d77a 100644 --- a/drivers/net/phy/aquantia/aquantia_main.c +++ b/drivers/net/phy/aquantia/aquantia_main.c @@ -50,6 +50,7 @@ #define MDIO_AN_VEND_PROV_1000BASET_HALF BIT(14) #define MDIO_AN_VEND_PROV_5000BASET_FULL BIT(11) #define MDIO_AN_VEND_PROV_2500BASET_FULL BIT(10) +#define MDIO_AN_VEND_PROV_EXC_PHYID_INFO BIT(6) #define MDIO_AN_VEND_PROV_DOWNSHIFT_EN BIT(4) #define MDIO_AN_VEND_PROV_DOWNSHIFT_MASK GENMASK(3, 0) #define MDIO_AN_VEND_PROV_DOWNSHIFT_DFLT 4 @@ -333,6 +334,238 @@ static int aqr_read_status(struct phy_device *phydev) return genphy_c45_read_status(phydev); } +static int aqr105_get_features(struct phy_device *phydev) +{ + int ret; + + /* Normal feature discovery */ + ret = genphy_c45_pma_read_abilities(phydev); + if (ret) + return ret; + + /* The AQR105 PHY misses to indicate the 2.5G and 5G modes, so add them + * here + */ + linkmode_set_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT, + phydev->supported); + linkmode_set_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT, + phydev->supported); + + /* The AQR105 PHY suppports both RJ45 and SFP+ interfaces */ + linkmode_set_bit(ETHTOOL_LINK_MODE_TP_BIT, phydev->supported); + linkmode_set_bit(ETHTOOL_LINK_MODE_FIBRE_BIT, phydev->supported); + + return 0; +} + +static int aqr105_config_speed(struct phy_device *phydev) +{ + int vend = MDIO_AN_VEND_PROV_EXC_PHYID_INFO; + int ctrl10 = 0; + int adv = ADVERTISE_CSMA; + int ret; + + switch (phydev->speed) { + case SPEED_100: + adv |= ADVERTISE_100FULL; + break; + case SPEED_1000: + adv |= ADVERTISE_NPAGE; + if (phydev->duplex == DUPLEX_FULL) + vend |= MDIO_AN_VEND_PROV_1000BASET_FULL; + else + vend |= MDIO_AN_VEND_PROV_1000BASET_HALF; + break; + case SPEED_2500: + adv |= (ADVERTISE_NPAGE | ADVERTISE_RESV); + vend |= MDIO_AN_VEND_PROV_2500BASET_FULL; + break; + case SPEED_5000: + adv |= (ADVERTISE_NPAGE | ADVERTISE_RESV); + vend |= MDIO_AN_VEND_PROV_5000BASET_FULL; + break; + case SPEED_10000: + adv |= (ADVERTISE_NPAGE | ADVERTISE_RESV); + ctrl10 |= MDIO_AN_10GBT_CTRL_ADV10G; + break; + default: + return -EINVAL; + } + ret = phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE, adv); + if (ret < 0) + return ret; + ret = phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_VEND_PROV, vend); + if (ret < 0) + return ret; + ret = phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_10GBT_CTRL, ctrl10); + if (ret < 0) + return ret; + + /* set by vendor driver, but should be on by default */ + ret = phy_set_bits_mmd(phydev, MDIO_MMD_AN, MDIO_CTRL1, + MDIO_AN_CTRL1_XNP); + if (ret < 0) + return ret; + + return genphy_c45_an_disable_aneg(phydev); +} + +static int aqr105_config_aneg(struct phy_device *phydev) +{ + bool changed = false; + u16 reg; + int ret; + + ret = aqr_set_mdix(phydev, phydev->mdix_ctrl); + if (ret < 0) + return ret; + if (ret > 0) + changed = true; + + if (phydev->autoneg == AUTONEG_DISABLE) + return aqr105_config_speed(phydev); + + ret = genphy_c45_an_config_aneg(phydev); + if (ret < 0) + return ret; + if (ret > 0) + changed = true; + + /* Clause 45 has no standardized support for 1000BaseT, therefore + * use vendor registers for this mode. + */ + reg = 0; + if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, + phydev->advertising)) + reg |= MDIO_AN_VEND_PROV_1000BASET_FULL; + + if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT, + phydev->advertising)) + reg |= MDIO_AN_VEND_PROV_1000BASET_HALF; + + /* Handle the case when the 2.5G and 5G speeds are not advertised */ + if (linkmode_test_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT, + phydev->advertising)) + reg |= MDIO_AN_VEND_PROV_2500BASET_FULL; + + if (linkmode_test_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT, + phydev->advertising)) + reg |= MDIO_AN_VEND_PROV_5000BASET_FULL; + + ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_VEND_PROV, + MDIO_AN_VEND_PROV_1000BASET_HALF | + MDIO_AN_VEND_PROV_1000BASET_FULL | + MDIO_AN_VEND_PROV_2500BASET_FULL | + MDIO_AN_VEND_PROV_5000BASET_FULL, reg); + if (ret < 0) + return ret; + if (ret > 0) + changed = true; + + return genphy_c45_check_and_restart_aneg(phydev, changed); +} + +static int aqr105_read_rate(struct phy_device *phydev) +{ + int val; + + val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_TX_VEND_STATUS1); + if (val < 0) + return val; + + if (val & MDIO_AN_TX_VEND_STATUS1_FULL_DUPLEX) + phydev->duplex = DUPLEX_FULL; + else + phydev->duplex = DUPLEX_HALF; + + switch (FIELD_GET(MDIO_AN_TX_VEND_STATUS1_RATE_MASK, val)) { + case MDIO_AN_TX_VEND_STATUS1_10BASET: + phydev->speed = SPEED_10; + break; + case MDIO_AN_TX_VEND_STATUS1_100BASETX: + phydev->speed = SPEED_100; + break; + case MDIO_AN_TX_VEND_STATUS1_1000BASET: + phydev->speed = SPEED_1000; + break; + case MDIO_AN_TX_VEND_STATUS1_2500BASET: + phydev->speed = SPEED_2500; + break; + case MDIO_AN_TX_VEND_STATUS1_5000BASET: + phydev->speed = SPEED_5000; + break; + case MDIO_AN_TX_VEND_STATUS1_10GBASET: + phydev->speed = SPEED_10000; + break; + default: + phydev->speed = SPEED_UNKNOWN; + } + + return 0; +} + +static int aqr105_read_status(struct phy_device *phydev) +{ + int ret; + int val; + + ret = aqr_read_status(phydev); + if (ret) + return ret; + + if (!phydev->link || phydev->autoneg == AUTONEG_DISABLE) + return 0; + + /** + * The status register is not immediately correct on line side link up. + * Poll periodically until it reflects the correct ON state. + * Only return fail for read error, timeout defaults to OFF state. + */ + ret = phy_read_mmd_poll_timeout(phydev, MDIO_MMD_PHYXS, + MDIO_PHYXS_VEND_IF_STATUS, val, + (FIELD_GET(MDIO_PHYXS_VEND_IF_STATUS_TYPE_MASK, val) != + MDIO_PHYXS_VEND_IF_STATUS_TYPE_OFF), + AQR107_OP_IN_PROG_SLEEP, + AQR107_OP_IN_PROG_TIMEOUT, false); + if (ret && ret != -ETIMEDOUT) + return ret; + + switch (FIELD_GET(MDIO_PHYXS_VEND_IF_STATUS_TYPE_MASK, val)) { + case MDIO_PHYXS_VEND_IF_STATUS_TYPE_KR: + phydev->interface = PHY_INTERFACE_MODE_10GKR; + break; + case MDIO_PHYXS_VEND_IF_STATUS_TYPE_KX: + phydev->interface = PHY_INTERFACE_MODE_1000BASEKX; + break; + case MDIO_PHYXS_VEND_IF_STATUS_TYPE_XFI: + phydev->interface = PHY_INTERFACE_MODE_10GBASER; + break; + case MDIO_PHYXS_VEND_IF_STATUS_TYPE_USXGMII: + phydev->interface = PHY_INTERFACE_MODE_USXGMII; + break; + case MDIO_PHYXS_VEND_IF_STATUS_TYPE_XAUI: + phydev->interface = PHY_INTERFACE_MODE_XAUI; + break; + case MDIO_PHYXS_VEND_IF_STATUS_TYPE_SGMII: + phydev->interface = PHY_INTERFACE_MODE_SGMII; + break; + case MDIO_PHYXS_VEND_IF_STATUS_TYPE_RXAUI: + phydev->interface = PHY_INTERFACE_MODE_RXAUI; + break; + case MDIO_PHYXS_VEND_IF_STATUS_TYPE_OCSGMII: + phydev->interface = PHY_INTERFACE_MODE_2500BASEX; + break; + case MDIO_PHYXS_VEND_IF_STATUS_TYPE_OFF: + default: + phydev->link = false; + phydev->interface = PHY_INTERFACE_MODE_NA; + break; + } + + /* Read rate from vendor register */ + return aqr105_read_rate(phydev); +} + static int aqr107_read_rate(struct phy_device *phydev) { u32 config_reg; @@ -911,11 +1144,13 @@ static struct phy_driver aqr_driver[] = { { PHY_ID_MATCH_MODEL(PHY_ID_AQR105), .name = "Aquantia AQR105", - .config_aneg = aqr_config_aneg, + .get_features = aqr105_get_features, .probe = aqr107_probe, + .config_init = aqr107_config_init, + .config_aneg = aqr105_config_aneg, .config_intr = aqr_config_intr, .handle_interrupt = aqr_handle_interrupt, - .read_status = aqr_read_status, + .read_status = aqr105_read_status, .suspend = aqr107_suspend, .resume = aqr107_resume, }, From patchwork Tue Mar 18 22:06:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans-Frieder Vogt via B4 Relay X-Patchwork-Id: 14021636 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A7CA72066DE; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742335638; cv=none; b=MVLb4rPAGnbLLBYrmJ8i6RIbviQyUs2rkZOwxIJ4BxCkUClyFC7y5VgTxG2NXcNtt3/dOVmOLUmItc3+NBV5wnsIVRqSdsP/iI1YRUEvno3cAloZkdc5eNYfAjwrN/7VIJAtSnfxt+QK9jT1F908/Lka2+Kjspg6dyo1CXUGhZc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742335638; c=relaxed/simple; bh=5f+IJsP63/Z7/OMJfYFOS4xKbRa2yuTEyjBBeJ2zjZI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aQkBht6vZrxdUBubbAX3XZAQwoAGKwrgLRdcm8AYkUyHQikc0ql8pmwkeiJ7zpW6xog3aHLLiqtBBIUKOf5ErOmgaAE/F0cAVCW4PJa+oNHppXOLLnY9oxdacyrv8TJtIhJr1bRrApSmfJwqUDYTzfB/WCPkTLbHcMKbvsTdcNY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OUDXY20i; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="OUDXY20i" Received: by smtp.kernel.org (Postfix) with ESMTPS id 81DB3C4CEEF; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742335638; bh=5f+IJsP63/Z7/OMJfYFOS4xKbRa2yuTEyjBBeJ2zjZI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=OUDXY20iJ3dcrT7BM7Gk9bqKgtRtF17mWxYpvAfGgCQmmvGBUDDg70UtWWo5Enepq HPNxcvPeCkKiq83CL9weOkEPxl8PyhRHvlrnrP258BHuzjZpwNuAvH4cP7hZgFoiFG G8TbB1zgMB4qPXP/4JaZywguiOw4iP+dyegy5xT3OLqsRJpAogfXByMV6yMqS+IDsm Vhonz4UlZPluqtgZwnuvbGFPm6BkOWJxy5j/0Dzg0wlZw58ljs2mlpJaZne7O4EG45 qCbGtE0A5JP+oINyB+Qivd+H88EdV3J5tXnMmaOGPrOImzbsMZTgCUXwXjkBzIr8Vm XtA4l9cPuf1cQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 76F36C282EC; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) From: Hans-Frieder Vogt via B4 Relay Date: Tue, 18 Mar 2025 23:06:56 +0100 Subject: [PATCH net-next v6 5/7] net: tn40xx: create swnode for mdio and aqr105 phy and add to mdiobus Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250318-tn9510-v3a-v6-5-808a9089d24b@gmx.net> References: <20250318-tn9510-v3a-v6-0-808a9089d24b@gmx.net> In-Reply-To: <20250318-tn9510-v3a-v6-0-808a9089d24b@gmx.net> To: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , FUJITA Tomonori , Andrew Lunn Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Hans-Frieder Vogt X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1742335636; l=7064; i=hfdevel@gmx.net; s=20240915; h=from:subject:message-id; bh=TheMBkAIrtsWrq0yO83z1AzOEhJeMjlY5igOu5aEWOk=; b=IM0RpITEXDHs8Ydf8Xi9PlYuzyk+gd5zW1a2y25CURu//16DR7XTRGL5Ct8C1ZjGGuIgYkrd7 kndeqIb3yR5ArYwoLhzN4ftkQYwdgVkRUkYLr4qkRxHuYIjHMaGz/aG X-Developer-Key: i=hfdevel@gmx.net; a=ed25519; pk=s3DJ3DFe6BJDRAcnd7VGvvwPXcLgV8mrfbpt8B9coRc= X-Endpoint-Received: by B4 Relay for hfdevel@gmx.net/20240915 with auth_id=209 X-Original-From: Hans-Frieder Vogt Reply-To: hfdevel@gmx.net X-Patchwork-Delegate: kuba@kernel.org From: Hans-Frieder Vogt In case of an AQR105-based device, create a software node for the mdio function, with a child node for the Aquantia AQR105 PHY, providing a firmware-name (and a bit more, which may be used for future checks) to allow the PHY to load a MAC specific firmware from the file system. The name of the PHY software node follows the naming convention suggested in the patch for the mdiobus_scan function (in the same patch series). Signed-off-by: Hans-Frieder Vogt --- drivers/net/ethernet/tehuti/tn40.c | 5 +- drivers/net/ethernet/tehuti/tn40.h | 31 +++++++++++++ drivers/net/ethernet/tehuti/tn40_mdio.c | 82 ++++++++++++++++++++++++++++++++- 3 files changed, 115 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/tehuti/tn40.c b/drivers/net/ethernet/tehuti/tn40.c index 259bdac24cf211113b8f80934feb093d61e46f2d..a4dd04fc6d89e7f7efd77145a5dd883884b30c4b 100644 --- a/drivers/net/ethernet/tehuti/tn40.c +++ b/drivers/net/ethernet/tehuti/tn40.c @@ -1778,7 +1778,7 @@ static int tn40_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ret = tn40_phy_register(priv); if (ret) { dev_err(&pdev->dev, "failed to set up PHY.\n"); - goto err_free_irq; + goto err_cleanup_swnodes; } ret = tn40_priv_init(priv); @@ -1795,6 +1795,8 @@ static int tn40_probe(struct pci_dev *pdev, const struct pci_device_id *ent) return 0; err_unregister_phydev: tn40_phy_unregister(priv); +err_cleanup_swnodes: + tn40_swnodes_cleanup(priv); err_free_irq: pci_free_irq_vectors(pdev); err_unset_drvdata: @@ -1816,6 +1818,7 @@ static void tn40_remove(struct pci_dev *pdev) unregister_netdev(ndev); tn40_phy_unregister(priv); + tn40_swnodes_cleanup(priv); pci_free_irq_vectors(priv->pdev); pci_set_drvdata(pdev, NULL); iounmap(priv->regs); diff --git a/drivers/net/ethernet/tehuti/tn40.h b/drivers/net/ethernet/tehuti/tn40.h index 490781fe512053d0d2cf0d6e819fc11d078a6733..ac48c1dc555480ccea41b6815bcfafb150b0a47c 100644 --- a/drivers/net/ethernet/tehuti/tn40.h +++ b/drivers/net/ethernet/tehuti/tn40.h @@ -4,6 +4,7 @@ #ifndef _TN40_H_ #define _TN40_H_ +#include #include "tn40_regs.h" #define TN40_DRV_NAME "tn40xx" @@ -102,10 +103,39 @@ struct tn40_txdb { int size; /* Number of elements in the db */ }; +#define NODE_PROP(_NAME, _PROP) ( \ + (const struct software_node) { \ + .name = _NAME, \ + .properties = _PROP, \ + }) + +#define NODE_PAR_PROP(_NAME, _PAR, _PROP) ( \ + (const struct software_node) { \ + .name = _NAME, \ + .parent = _PAR, \ + .properties = _PROP, \ + }) + +enum tn40_swnodes { + SWNODE_MDIO, + SWNODE_PHY, + SWNODE_MAX +}; + +struct tn40_nodes { + char phy_name[32]; + char mdio_name[32]; + struct property_entry phy_props[3]; + struct software_node swnodes[SWNODE_MAX]; + const struct software_node *group[SWNODE_MAX + 1]; +}; + struct tn40_priv { struct net_device *ndev; struct pci_dev *pdev; + struct tn40_nodes nodes; + struct napi_struct napi; /* RX FIFOs: 1 for data (full) descs, and 2 for free descs */ struct tn40_rxd_fifo rxd_fifo0; @@ -225,6 +255,7 @@ static inline void tn40_write_reg(struct tn40_priv *priv, u32 reg, u32 val) int tn40_set_link_speed(struct tn40_priv *priv, u32 speed); +void tn40_swnodes_cleanup(struct tn40_priv *priv); int tn40_mdiobus_init(struct tn40_priv *priv); int tn40_phy_register(struct tn40_priv *priv); diff --git a/drivers/net/ethernet/tehuti/tn40_mdio.c b/drivers/net/ethernet/tehuti/tn40_mdio.c index af18615d64a8a290c7f79e56260b9aacf82c0386..342b4a6317021578bbbce1f38ae1b1e909fe9faf 100644 --- a/drivers/net/ethernet/tehuti/tn40_mdio.c +++ b/drivers/net/ethernet/tehuti/tn40_mdio.c @@ -14,6 +14,8 @@ (FIELD_PREP(TN40_MDIO_PRTAD_MASK, (port)))) #define TN40_MDIO_CMD_READ BIT(15) +#define AQR105_FIRMWARE "tehuti/aqr105-tn40xx.cld" + static void tn40_mdio_set_speed(struct tn40_priv *priv, u32 speed) { void __iomem *regs = priv->regs; @@ -111,6 +113,56 @@ static int tn40_mdio_write_c45(struct mii_bus *mii_bus, int addr, int devnum, return tn40_mdio_write(mii_bus->priv, addr, devnum, regnum, val); } +/* registers an mdio node and an aqr105 PHY at address 1 + * tn40_mdio-%id { + * ethernet-phy@1 { + * compatible = "ethernet-phy-id03a1.b4a3"; + * reg = <1>; + * firmware-name = AQR105_FIRMWARE; + * }; + * }; + */ +static int tn40_swnodes_register(struct tn40_priv *priv) +{ + struct tn40_nodes *nodes = &priv->nodes; + struct pci_dev *pdev = priv->pdev; + struct software_node *swnodes; + u32 id; + + id = pci_dev_id(pdev); + + snprintf(nodes->phy_name, sizeof(nodes->phy_name), "ethernet-phy@1"); + snprintf(nodes->mdio_name, sizeof(nodes->mdio_name), "tn40_mdio-%x", + id); + + swnodes = nodes->swnodes; + + swnodes[SWNODE_MDIO] = NODE_PROP(nodes->mdio_name, NULL); + + nodes->phy_props[0] = PROPERTY_ENTRY_STRING("compatible", + "ethernet-phy-id03a1.b4a3"); + nodes->phy_props[1] = PROPERTY_ENTRY_U32("reg", 1); + nodes->phy_props[2] = PROPERTY_ENTRY_STRING("firmware-name", + AQR105_FIRMWARE); + swnodes[SWNODE_PHY] = NODE_PAR_PROP(nodes->phy_name, + &swnodes[SWNODE_MDIO], + nodes->phy_props); + + nodes->group[SWNODE_PHY] = &swnodes[SWNODE_PHY]; + nodes->group[SWNODE_MDIO] = &swnodes[SWNODE_MDIO]; + return software_node_register_node_group(nodes->group); +} + +void tn40_swnodes_cleanup(struct tn40_priv *priv) +{ + /* cleanup of swnodes is only needed for AQR105-based cards */ + if (priv->pdev->device == 0x4025) { + fwnode_handle_put(dev_fwnode(&priv->mdio->dev)); + device_remove_software_node(&priv->mdio->dev); + software_node_unregister_node_group(priv->nodes.group); + } +} + int tn40_mdiobus_init(struct tn40_priv *priv) { struct pci_dev *pdev = priv->pdev; @@ -129,14 +181,40 @@ int tn40_mdiobus_init(struct tn40_priv *priv) bus->read_c45 = tn40_mdio_read_c45; bus->write_c45 = tn40_mdio_write_c45; + priv->mdio = bus; + + /* provide swnodes for AQR105-based cards only */ + if (pdev->device == 0x4025) { + ret = tn40_swnodes_register(priv); + if (ret) { + pr_err("swnodes failed\n"); + return ret; + } + + ret = device_add_software_node(&bus->dev, + priv->nodes.group[SWNODE_MDIO]); + if (ret) { + dev_err(&pdev->dev, + "device_add_software_node failed: %d\n", ret); + goto err_swnodes_unregister; + } + } ret = devm_mdiobus_register(&pdev->dev, bus); if (ret) { dev_err(&pdev->dev, "failed to register mdiobus %d %u %u\n", ret, bus->state, MDIOBUS_UNREGISTERED); - return ret; + goto err_swnodes_cleanup; } tn40_mdio_set_speed(priv, TN40_MDIO_SPEED_6MHZ); - priv->mdio = bus; return 0; + +err_swnodes_unregister: + software_node_unregister_node_group(priv->nodes.group); + return ret; +err_swnodes_cleanup: + tn40_swnodes_cleanup(priv); + return ret; } + +MODULE_FIRMWARE(AQR105_FIRMWARE); From patchwork Tue Mar 18 22:06:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans-Frieder Vogt via B4 Relay X-Patchwork-Id: 14021642 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F1F60207644; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742335639; cv=none; b=GqEstq0ocxSMBOPmnHvYxlh4aSY75Zfa3W3tvteDVH//MST+ZJ1JdHIJ8me3d4q1iWuqpG780qxc06viyeY2xCeozxqjf0XqiS026JbLgPpbS6Up3Zxw/IX1fZS9smzE0HKePi0IxFMYjBrBgonr6c4A0IsWzkcRnSovfH6zngA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742335639; c=relaxed/simple; bh=EM/HTJTYUy4cmOhlXtI75NuIViEmrNIODNKg+zDNqvQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GeMkExhWXUr5ieLX+Ed0kKBmIug0Mb/3jaqC/Ioyk3saTAB3510ASA+AxC+fpNMBkl32mdtf9nMjFYV3V9OlgTkChYnTv6ECC08D/BY3CsFguFgHfc67L0KRqiGdBngtP6166ljnrNuM63AfFGqoQ8EizJ8R6Dc8YT1ES+kqKgY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fB7wEb3a; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="fB7wEb3a" Received: by smtp.kernel.org (Postfix) with ESMTPS id 9724CC4CEF8; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742335638; bh=EM/HTJTYUy4cmOhlXtI75NuIViEmrNIODNKg+zDNqvQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=fB7wEb3aYoEqtL2O7emmNkWpephKD7eT+WiCz7qvxGpLQT0CXkgX0hGUCbVQtP/KF IhG9Rn5QGclPDiAy1UmHob9X3cxsyUL3hH78wJGWFa42L5V3eHBnQn2lglABrW9s9x b9PXh5kw4mBZbMMKWRhrceSGsn+Iyy5dsXvoQw9SvY5VsRdUIKuRFL4C7aCdtFs208 vOZLAkenvF3pUmeVQ2VB7OXYn4FfU0EO43WELtNS5Y0YTYtJwmjWkoKGsaw7zP6bq+ wjyDeokmAl/z282IfVj5CjICMi6RpyfIhpO4Or4QNJlXjs/m8OJrNPgJsJq5a0K76U 7A+RXEOSYaBSA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8FEF6C35FFA; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) From: Hans-Frieder Vogt via B4 Relay Date: Tue, 18 Mar 2025 23:06:57 +0100 Subject: [PATCH net-next v6 6/7] net: tn40xx: prepare tn40xx driver to find phy of the TN9510 card Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250318-tn9510-v3a-v6-6-808a9089d24b@gmx.net> References: <20250318-tn9510-v3a-v6-0-808a9089d24b@gmx.net> In-Reply-To: <20250318-tn9510-v3a-v6-0-808a9089d24b@gmx.net> To: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , FUJITA Tomonori , Andrew Lunn Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Hans-Frieder Vogt X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1742335636; l=1514; i=hfdevel@gmx.net; s=20240915; h=from:subject:message-id; bh=aZl1HKZEv54c7prm4pCHWas0s9cQ/IoY2mjVEEro9Xw=; b=eZceaLzia6W8xLw+tUi4NniFa+5xzG2bW7tzjdWK3Iqgk9XWqVtuyhbL0fSpNJccphPWnRf4Z jF/6kNd7UAGAPgKeoAK5yfkgqXaS8zFF+ZCF8eZpVfZE2sLwKbvJl3x X-Developer-Key: i=hfdevel@gmx.net; a=ed25519; pk=s3DJ3DFe6BJDRAcnd7VGvvwPXcLgV8mrfbpt8B9coRc= X-Endpoint-Received: by B4 Relay for hfdevel@gmx.net/20240915 with auth_id=209 X-Original-From: Hans-Frieder Vogt Reply-To: hfdevel@gmx.net X-Patchwork-Delegate: kuba@kernel.org From: Hans-Frieder Vogt Prepare the tn40xx driver to load for Tehuti TN9510 cards, which require bit 3 in the register TN40_REG_MDIO_CMD_STAT to be set. The function of bit 3 is unclear, but may have something to do with the length of the preamble in the MDIO communication. If bit 3 is not set, the PHY will not be found when performing a scan for PHYs. Use the available tn40_mdio_set_speed function which includes setting bit 3. Just move the function to before the devm_mdio_register function, which scans the mdio bus for PHYs. Signed-off-by: Hans-Frieder Vogt Reviewed-by: Andrew Lunn Reviewed-by: FUJITA Tomonori --- drivers/net/ethernet/tehuti/tn40_mdio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/tehuti/tn40_mdio.c b/drivers/net/ethernet/tehuti/tn40_mdio.c index 342b4a6317021578bbbce1f38ae1b1e909fe9faf..973785cde8ef940b804589c650830f385164402c 100644 --- a/drivers/net/ethernet/tehuti/tn40_mdio.c +++ b/drivers/net/ethernet/tehuti/tn40_mdio.c @@ -200,13 +200,13 @@ int tn40_mdiobus_init(struct tn40_priv *priv) } } + tn40_mdio_set_speed(priv, TN40_MDIO_SPEED_6MHZ); ret = devm_mdiobus_register(&pdev->dev, bus); if (ret) { dev_err(&pdev->dev, "failed to register mdiobus %d %u %u\n", ret, bus->state, MDIOBUS_UNREGISTERED); goto err_swnodes_cleanup; } - tn40_mdio_set_speed(priv, TN40_MDIO_SPEED_6MHZ); return 0; err_swnodes_unregister: From patchwork Tue Mar 18 22:06:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans-Frieder Vogt via B4 Relay X-Patchwork-Id: 14021641 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D67A1206F06; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742335638; cv=none; b=Nv99tVEj+ghrjCYLZ604aRX4SMat93GxN0pJJYCJB981CwulUKMNPcyHAmN6A46GhvJehb1Nuee0rVQtOlCb1eAnvnVxIb3dRqRL60BrXDZZ/KsIgBmc31CjIVzpVNEIJKj1r3NQL8FSMWEBuXm0AIFUSiLVYOLWF34MW5Gr+DI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742335638; c=relaxed/simple; bh=93+PXTcdrckZb/2Nnne1jF/O10OyK0HSaybtl4UJ5hA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ugFQ3XMOl6QkbI/HYm8TeCQ4VnOX+ZmikArVay1LoVglqaW7x5Ls1GhCZY1EVECJuvFSQ6EYtobCuyr98KeMKcVXrb5BA7vBC+4/obQQ8ymUnSidELc+ulQfV+fwItVsHWZR8PxHQg/bhzkduHjUEI90Mm15hEUNwKIs8qzYh9Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=aQYQXhje; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="aQYQXhje" Received: by smtp.kernel.org (Postfix) with ESMTPS id AAC8DC4CEF2; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742335638; bh=93+PXTcdrckZb/2Nnne1jF/O10OyK0HSaybtl4UJ5hA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=aQYQXhjep3yMrlQxZnm4ejj/O55eIJ1CFno/iKvKhfN98IXohNKIw6ebybINU4xZj xuDKBHWTCsJPCkYFq4gBpOxIthkVMNj9XqCRBdOdVKrXwuQm2Evzd4JZjE4ixyZUDN vGyybxnAnIF9E5SAA4uLWkBYwK5unXX9vEH1v2biKq+QfLeZeVzelT6e+2OIbXeLBX aEMfhXyCE0mXbCJrjJxWV+Tu7HmDnS9N0MHPX0CG44Z6oQSjReiUITiw1hiLlYkTxl o8ZlXLLRUgarE0mv9R2rJh4Vx8/RcpfN88z2ZJvlgg8NghBbtLW8zmJwxTA/XPN13w 8sCE9xv/D9DpA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id A255BC35FF3; Tue, 18 Mar 2025 22:07:18 +0000 (UTC) From: Hans-Frieder Vogt via B4 Relay Date: Tue, 18 Mar 2025 23:06:58 +0100 Subject: [PATCH net-next v6 7/7] net: tn40xx: add pci-id of the aqr105-based Tehuti TN4010 cards Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250318-tn9510-v3a-v6-7-808a9089d24b@gmx.net> References: <20250318-tn9510-v3a-v6-0-808a9089d24b@gmx.net> In-Reply-To: <20250318-tn9510-v3a-v6-0-808a9089d24b@gmx.net> To: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , FUJITA Tomonori , Andrew Lunn Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Hans-Frieder Vogt X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1742335636; l=1329; i=hfdevel@gmx.net; s=20240915; h=from:subject:message-id; bh=dE9RmcpNBtcvMxg1vX89VIDp9W8qYafc8S1ojRZqfFQ=; b=MN2H7uPpui2QTdoK0iLkRlEww6811ySz1NtkVNG/uYbGDhVo1SuIAJn9jKMSPO3UZsYa6XLWv W4pVLXwJuTbAj4Ux1YfobsI/6R8bFOROtALQ/iUlT1zXH+QNfnxsmEM X-Developer-Key: i=hfdevel@gmx.net; a=ed25519; pk=s3DJ3DFe6BJDRAcnd7VGvvwPXcLgV8mrfbpt8B9coRc= X-Endpoint-Received: by B4 Relay for hfdevel@gmx.net/20240915 with auth_id=209 X-Original-From: Hans-Frieder Vogt Reply-To: hfdevel@gmx.net X-Patchwork-Delegate: kuba@kernel.org From: Hans-Frieder Vogt Add the PCI-ID of the AQR105-based Tehuti TN4010 cards to allow loading of the tn40xx driver on these cards. Here, I chose the detailed definition with the subvendor ID similar to the QT2025 cards with the PCI-ID TEHUTI:0x4022, because there is a card with an AQ2104 hiding amongst the AQR105 cards, and they all come with the same PCI-ID (TEHUTI:0x4025). But the AQ2104 is currently not supported. Signed-off-by: Hans-Frieder Vogt Reviewed-by: Andrew Lunn Reviewed-by: FUJITA Tomonori --- drivers/net/ethernet/tehuti/tn40.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/net/ethernet/tehuti/tn40.c b/drivers/net/ethernet/tehuti/tn40.c index a4dd04fc6d89e7f7efd77145a5dd883884b30c4b..aaad40c916ef83f457e1b5983c01dff2de148fea 100644 --- a/drivers/net/ethernet/tehuti/tn40.c +++ b/drivers/net/ethernet/tehuti/tn40.c @@ -1835,6 +1835,10 @@ static const struct pci_device_id tn40_id_table[] = { PCI_VENDOR_ID_ASUSTEK, 0x8709) }, { PCI_DEVICE_SUB(PCI_VENDOR_ID_TEHUTI, 0x4022, PCI_VENDOR_ID_EDIMAX, 0x8103) }, + { PCI_DEVICE_SUB(PCI_VENDOR_ID_TEHUTI, 0x4025, + PCI_VENDOR_ID_TEHUTI, 0x3015) }, + { PCI_DEVICE_SUB(PCI_VENDOR_ID_TEHUTI, 0x4025, + PCI_VENDOR_ID_EDIMAX, 0x8102) }, { } };