mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 14:34:27 -05:00 
			
		
		
		
	kernel: backport bgmac upstream commits from 5.15 / for 5.16
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
This commit is contained in:
		
							parent
							
								
									d69bf6601e
								
							
						
					
					
						commit
						fd71ef34b7
					
				@ -1,7 +1,8 @@
 | 
			
		||||
From 029497e66bdc762e001880e4c85a91f35a54b1e2 Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: Christian Lamparter <chunkeey@gmail.com>
 | 
			
		||||
Date: Sun, 19 Sep 2021 13:57:25 +0200
 | 
			
		||||
Subject: net: bgmac-bcma: handle deferred probe error due to mac-address
 | 
			
		||||
Subject: [PATCH] net: bgmac-bcma: handle deferred probe error due to
 | 
			
		||||
 mac-address
 | 
			
		||||
MIME-Version: 1.0
 | 
			
		||||
Content-Type: text/plain; charset=UTF-8
 | 
			
		||||
Content-Transfer-Encoding: 8bit
 | 
			
		||||
@ -0,0 +1,36 @@
 | 
			
		||||
From 763716a55cb1f480ffe1a9702e6b5d9ea1a80a24 Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: Matthew Hagan <mnhagan88@gmail.com>
 | 
			
		||||
Date: Sat, 25 Sep 2021 11:36:27 +0000
 | 
			
		||||
Subject: [PATCH] net: bgmac-platform: handle mac-address deferral
 | 
			
		||||
 | 
			
		||||
This patch is a replication of Christian Lamparter's "net: bgmac-bcma:
 | 
			
		||||
handle deferred probe error due to mac-address" patch for the
 | 
			
		||||
bgmac-platform driver [1].
 | 
			
		||||
 | 
			
		||||
As is the case with the bgmac-bcma driver, this change is to cover the
 | 
			
		||||
scenario where the MAC address cannot yet be discovered due to reliance
 | 
			
		||||
on an nvmem provider which is yet to be instantiated, resulting in a
 | 
			
		||||
random address being assigned that has to be manually overridden.
 | 
			
		||||
 | 
			
		||||
[1] https://lore.kernel.org/netdev/20210919115725.29064-1-chunkeey@gmail.com
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Matthew Hagan <mnhagan88@gmail.com>
 | 
			
		||||
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
 | 
			
		||||
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
 | 
			
		||||
Signed-off-by: David S. Miller <davem@davemloft.net>
 | 
			
		||||
---
 | 
			
		||||
 drivers/net/ethernet/broadcom/bgmac-platform.c | 3 +++
 | 
			
		||||
 1 file changed, 3 insertions(+)
 | 
			
		||||
 | 
			
		||||
--- a/drivers/net/ethernet/broadcom/bgmac-platform.c
 | 
			
		||||
+++ b/drivers/net/ethernet/broadcom/bgmac-platform.c
 | 
			
		||||
@@ -193,6 +193,9 @@ static int bgmac_probe(struct platform_d
 | 
			
		||||
 	bgmac->dma_dev = &pdev->dev;
 | 
			
		||||
 
 | 
			
		||||
 	ret = of_get_mac_address(np, bgmac->net_dev->dev_addr);
 | 
			
		||||
+	if (ret == -EPROBE_DEFER)
 | 
			
		||||
+		return ret;
 | 
			
		||||
+
 | 
			
		||||
 	if (ret)
 | 
			
		||||
 		dev_warn(&pdev->dev,
 | 
			
		||||
 			 "MAC address not present in device tree\n");
 | 
			
		||||
@ -0,0 +1,84 @@
 | 
			
		||||
From b5375509184dc23d2b7fa0c5ed8763899ccc9674 Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
 | 
			
		||||
Date: Sat, 2 Oct 2021 19:58:11 +0200
 | 
			
		||||
Subject: [PATCH] net: bgmac: improve handling PHY
 | 
			
		||||
MIME-Version: 1.0
 | 
			
		||||
Content-Type: text/plain; charset=UTF-8
 | 
			
		||||
Content-Transfer-Encoding: 8bit
 | 
			
		||||
 | 
			
		||||
1. Use info from DT if available
 | 
			
		||||
 | 
			
		||||
It allows describing for example a fixed link. It's more accurate than
 | 
			
		||||
just guessing there may be one (depending on a chipset).
 | 
			
		||||
 | 
			
		||||
2. Verify PHY ID before trying to connect PHY
 | 
			
		||||
 | 
			
		||||
PHY addr 0x1e (30) is special in Broadcom routers and means a switch
 | 
			
		||||
connected as MDIO devices instead of a real PHY. Don't try connecting to
 | 
			
		||||
it.
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
 | 
			
		||||
Signed-off-by: David S. Miller <davem@davemloft.net>
 | 
			
		||||
---
 | 
			
		||||
 drivers/net/ethernet/broadcom/bgmac-bcma.c | 33 ++++++++++++++--------
 | 
			
		||||
 1 file changed, 21 insertions(+), 12 deletions(-)
 | 
			
		||||
 | 
			
		||||
--- a/drivers/net/ethernet/broadcom/bgmac-bcma.c
 | 
			
		||||
+++ b/drivers/net/ethernet/broadcom/bgmac-bcma.c
 | 
			
		||||
@@ -11,6 +11,7 @@
 | 
			
		||||
 #include <linux/bcma/bcma.h>
 | 
			
		||||
 #include <linux/brcmphy.h>
 | 
			
		||||
 #include <linux/etherdevice.h>
 | 
			
		||||
+#include <linux/of_mdio.h>
 | 
			
		||||
 #include <linux/of_net.h>
 | 
			
		||||
 #include "bgmac.h"
 | 
			
		||||
 
 | 
			
		||||
@@ -86,17 +87,28 @@ static int bcma_phy_connect(struct bgmac
 | 
			
		||||
 	struct phy_device *phy_dev;
 | 
			
		||||
 	char bus_id[MII_BUS_ID_SIZE + 3];
 | 
			
		||||
 
 | 
			
		||||
+	/* DT info should be the most accurate */
 | 
			
		||||
+	phy_dev = of_phy_get_and_connect(bgmac->net_dev, bgmac->dev->of_node,
 | 
			
		||||
+					 bgmac_adjust_link);
 | 
			
		||||
+	if (phy_dev)
 | 
			
		||||
+		return 0;
 | 
			
		||||
+
 | 
			
		||||
 	/* Connect to the PHY */
 | 
			
		||||
-	snprintf(bus_id, sizeof(bus_id), PHY_ID_FMT, bgmac->mii_bus->id,
 | 
			
		||||
-		 bgmac->phyaddr);
 | 
			
		||||
-	phy_dev = phy_connect(bgmac->net_dev, bus_id, bgmac_adjust_link,
 | 
			
		||||
-			      PHY_INTERFACE_MODE_MII);
 | 
			
		||||
-	if (IS_ERR(phy_dev)) {
 | 
			
		||||
-		dev_err(bgmac->dev, "PHY connection failed\n");
 | 
			
		||||
-		return PTR_ERR(phy_dev);
 | 
			
		||||
+	if (bgmac->mii_bus && bgmac->phyaddr != BGMAC_PHY_NOREGS) {
 | 
			
		||||
+		snprintf(bus_id, sizeof(bus_id), PHY_ID_FMT, bgmac->mii_bus->id,
 | 
			
		||||
+			 bgmac->phyaddr);
 | 
			
		||||
+		phy_dev = phy_connect(bgmac->net_dev, bus_id, bgmac_adjust_link,
 | 
			
		||||
+				      PHY_INTERFACE_MODE_MII);
 | 
			
		||||
+		if (IS_ERR(phy_dev)) {
 | 
			
		||||
+			dev_err(bgmac->dev, "PHY connection failed\n");
 | 
			
		||||
+			return PTR_ERR(phy_dev);
 | 
			
		||||
+		}
 | 
			
		||||
+
 | 
			
		||||
+		return 0;
 | 
			
		||||
 	}
 | 
			
		||||
 
 | 
			
		||||
-	return 0;
 | 
			
		||||
+	/* Assume a fixed link to the switch port */
 | 
			
		||||
+	return bgmac_phy_connect_direct(bgmac);
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
 static const struct bcma_device_id bgmac_bcma_tbl[] = {
 | 
			
		||||
@@ -297,10 +309,7 @@ static int bgmac_probe(struct bcma_devic
 | 
			
		||||
 	bgmac->cco_ctl_maskset = bcma_bgmac_cco_ctl_maskset;
 | 
			
		||||
 	bgmac->get_bus_clock = bcma_bgmac_get_bus_clock;
 | 
			
		||||
 	bgmac->cmn_maskset32 = bcma_bgmac_cmn_maskset32;
 | 
			
		||||
-	if (bgmac->mii_bus)
 | 
			
		||||
-		bgmac->phy_connect = bcma_phy_connect;
 | 
			
		||||
-	else
 | 
			
		||||
-		bgmac->phy_connect = bgmac_phy_connect_direct;
 | 
			
		||||
+	bgmac->phy_connect = bcma_phy_connect;
 | 
			
		||||
 
 | 
			
		||||
 	err = bgmac_enet_probe(bgmac);
 | 
			
		||||
 	if (err)
 | 
			
		||||
@ -0,0 +1,54 @@
 | 
			
		||||
From 45c9d966688e7fad7f24bfc450547d91e4304d0b Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
 | 
			
		||||
Date: Sat, 2 Oct 2021 19:58:12 +0200
 | 
			
		||||
Subject: [PATCH] net: bgmac: support MDIO described in DT
 | 
			
		||||
MIME-Version: 1.0
 | 
			
		||||
Content-Type: text/plain; charset=UTF-8
 | 
			
		||||
Content-Transfer-Encoding: 8bit
 | 
			
		||||
 | 
			
		||||
Check ethernet controller DT node for "mdio" subnode and use it with
 | 
			
		||||
of_mdiobus_register() when present. That allows specifying MDIO and its
 | 
			
		||||
PHY devices in a standard DT based way.
 | 
			
		||||
 | 
			
		||||
This is required for BCM53573 SoC support. That family is sometimes
 | 
			
		||||
called Northstar (by marketing?) but is quite different from it. It uses
 | 
			
		||||
different CPU(s) and many different hw blocks.
 | 
			
		||||
 | 
			
		||||
One of shared blocks in BCM53573 is Ethernet controller. Switch however
 | 
			
		||||
is not SRAB accessible (as it Northstar) but is MDIO attached.
 | 
			
		||||
 | 
			
		||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
 | 
			
		||||
Signed-off-by: David S. Miller <davem@davemloft.net>
 | 
			
		||||
---
 | 
			
		||||
 drivers/net/ethernet/broadcom/bgmac-bcma-mdio.c | 6 +++++-
 | 
			
		||||
 1 file changed, 5 insertions(+), 1 deletion(-)
 | 
			
		||||
 | 
			
		||||
--- a/drivers/net/ethernet/broadcom/bgmac-bcma-mdio.c
 | 
			
		||||
+++ b/drivers/net/ethernet/broadcom/bgmac-bcma-mdio.c
 | 
			
		||||
@@ -10,6 +10,7 @@
 | 
			
		||||
 
 | 
			
		||||
 #include <linux/bcma/bcma.h>
 | 
			
		||||
 #include <linux/brcmphy.h>
 | 
			
		||||
+#include <linux/of_mdio.h>
 | 
			
		||||
 #include "bgmac.h"
 | 
			
		||||
 
 | 
			
		||||
 static bool bcma_mdio_wait_value(struct bcma_device *core, u16 reg, u32 mask,
 | 
			
		||||
@@ -211,6 +212,7 @@ struct mii_bus *bcma_mdio_mii_register(s
 | 
			
		||||
 {
 | 
			
		||||
 	struct bcma_device *core = bgmac->bcma.core;
 | 
			
		||||
 	struct mii_bus *mii_bus;
 | 
			
		||||
+	struct device_node *np;
 | 
			
		||||
 	int err;
 | 
			
		||||
 
 | 
			
		||||
 	mii_bus = mdiobus_alloc();
 | 
			
		||||
@@ -229,7 +231,9 @@ struct mii_bus *bcma_mdio_mii_register(s
 | 
			
		||||
 	mii_bus->parent = &core->dev;
 | 
			
		||||
 	mii_bus->phy_mask = ~(1 << bgmac->phyaddr);
 | 
			
		||||
 
 | 
			
		||||
-	err = mdiobus_register(mii_bus);
 | 
			
		||||
+	np = of_get_child_by_name(core->dev.of_node, "mdio");
 | 
			
		||||
+
 | 
			
		||||
+	err = of_mdiobus_register(mii_bus, np);
 | 
			
		||||
 	if (err) {
 | 
			
		||||
 		dev_err(&core->dev, "Registration of mii bus failed\n");
 | 
			
		||||
 		goto err_free_bus;
 | 
			
		||||
@ -14,7 +14,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
 | 
			
		||||
 | 
			
		||||
--- a/drivers/net/ethernet/broadcom/bgmac-bcma.c
 | 
			
		||||
+++ b/drivers/net/ethernet/broadcom/bgmac-bcma.c
 | 
			
		||||
@@ -266,6 +266,7 @@ static int bgmac_probe(struct bcma_devic
 | 
			
		||||
@@ -280,6 +280,7 @@ static int bgmac_probe(struct bcma_devic
 | 
			
		||||
 		bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST;
 | 
			
		||||
 		bgmac->feature_flags |= BGMAC_FEAT_NO_RESET;
 | 
			
		||||
 		bgmac->feature_flags |= BGMAC_FEAT_FORCE_SPEED_2500;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user