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 029497e66bdc762e001880e4c85a91f35a54b1e2 Mon Sep 17 00:00:00 2001 | ||||||
| From: Christian Lamparter <chunkeey@gmail.com> | From: Christian Lamparter <chunkeey@gmail.com> | ||||||
| Date: Sun, 19 Sep 2021 13:57:25 +0200 | 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 | MIME-Version: 1.0 | ||||||
| Content-Type: text/plain; charset=UTF-8 | Content-Type: text/plain; charset=UTF-8 | ||||||
| Content-Transfer-Encoding: 8bit | 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 | --- a/drivers/net/ethernet/broadcom/bgmac-bcma.c | ||||||
| +++ b/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_CLKCTLST; | ||||||
|  		bgmac->feature_flags |= BGMAC_FEAT_NO_RESET; |  		bgmac->feature_flags |= BGMAC_FEAT_NO_RESET; | ||||||
|  		bgmac->feature_flags |= BGMAC_FEAT_FORCE_SPEED_2500; |  		bgmac->feature_flags |= BGMAC_FEAT_FORCE_SPEED_2500; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Rafał Miłecki
					Rafał Miłecki