Subject: [PATCH] net: bgmac: connect to PHY even if it is BGMAC_PHY_NOREGS
From: Rafał Miłecki <[email-masked]>
Date: Sun, 7 Nov 2021 14:20:40 +0100

Recent bgmac change was meant to just fix a race between "Generic PHY"
and "bcm53xx" drivers after -EPROBE_DEFER. It modified bgmac to use
phy_connect() only if there is a real PHY device connected.

That change broke bgmac on bcm47xx. bcma_phy_connect() now registers a
fixed PHY with the bgmac_phy_connect_direct(). That fails as another
fixed PHY (also using address 0) is already registered - by bcm47xx arch
code bcm47xx_register_bus_complete().

This change brings origial behaviour. It connects Ethernet interface
with pseudo-PHY (switch device) and adjusts Ethernet interface link to
match connected switch.

This fixes:
[    2.548098] bgmac_bcma bcma0:1: Failed to register fixed PHY device
[    2.554584] bgmac_bcma bcma0:1: Cannot connect to phy

Fixes: b5375509184d ("net: bgmac: improve handling PHY")
Link: https://lore.kernel.org/netdev/[email-masked]/T/#u
Signed-off-by: Rafał Miłecki <[email-masked]>
---
 drivers/net/ethernet/broadcom/bgmac-bcma.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/net/ethernet/broadcom/bgmac-bcma.c
+++ b/drivers/net/ethernet/broadcom/bgmac-bcma.c
@@ -94,7 +94,7 @@ static int bcma_phy_connect(struct bgmac
 		return 0;
 
 	/* Connect to the PHY */
-	if (bgmac->mii_bus && bgmac->phyaddr != BGMAC_PHY_NOREGS) {
+	if (bgmac->mii_bus) {
 		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,