Skip to content

Commit 96bad92

Browse files
Phil Elwellpopcornmix
Phil Elwell
authored andcommitted
net: bcmgenet: Workaround #2 for Pi4 Ethernet fail
Some combinations of Pi 4Bs and Ethernet switches don't reliably get a DCHP-assigned IP address, leaving the unit with a self=assigned 169.254 address. In the failure case, the Pi is left able to receive packets but not send them, suggesting that the MAC<->PHY link is getting into a bad state. It has been found empirically that skipping a reset step by the genet driver prevents the failures. No downsides have been discovered yet, and unlike the forced renegotiation it doesn't increase the time to get an IP address, so the workaround is enabled by default; add genet.skip_umac_reset=n to the command line to disable it. See: #3108 Signed-off-by: Phil Elwell <[email protected]>
1 parent de5ec24 commit 96bad92

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

drivers/net/ethernet/broadcom/genet/bcmgenet.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@
6565

6666
/* Forward declarations */
6767
static void bcmgenet_set_rx_mode(struct net_device *dev);
68+
static bool skip_umac_reset = true;
69+
module_param(skip_umac_reset, bool, 0444);
70+
MODULE_PARM_DESC(skip_umac_reset, "Skip UMAC reset step");
6871

6972
static inline void bcmgenet_writel(u32 value, void __iomem *offset)
7073
{
@@ -2488,6 +2491,11 @@ static void reset_umac(struct bcmgenet_priv *priv)
24882491
bcmgenet_rbuf_ctrl_set(priv, 0);
24892492
udelay(10);
24902493

2494+
if (skip_umac_reset) {
2495+
pr_warn("Skipping UMAC reset\n");
2496+
return;
2497+
}
2498+
24912499
/* issue soft reset and disable MAC while updating its registers */
24922500
spin_lock_bh(&priv->reg_lock);
24932501
bcmgenet_umac_writel(priv, CMD_SW_RESET, UMAC_CMD);

0 commit comments

Comments
 (0)