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:
		| @@ -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; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Rafał Miłecki
					Rafał Miłecki