提交 7cffd5da 编写于 作者: P Phil Elwell 提交者: Zheng Zengkai

net: bcmgenet: Workaround #2 for Pi4 Ethernet fail

raspberrypi inclusion
category: feature
bugzilla: 50432

--------------------------------

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: https://github.com/raspberrypi/linux/issues/3108Signed-off-by: NPhil Elwell <phil@raspberrypi.org>
Signed-off-by: NFang Yafen <yafen@iscas.ac.cn>
Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
上级 5712b6c1
......@@ -67,6 +67,9 @@
/* Forward declarations */
static void bcmgenet_set_rx_mode(struct net_device *dev);
static bool skip_umac_reset = true;
module_param(skip_umac_reset, bool, 0444);
MODULE_PARM_DESC(skip_umac_reset, "Skip UMAC reset step");
static inline void bcmgenet_writel(u32 value, void __iomem *offset)
{
......@@ -2425,6 +2428,11 @@ static void reset_umac(struct bcmgenet_priv *priv)
bcmgenet_rbuf_ctrl_set(priv, 0);
udelay(10);
if (skip_umac_reset) {
pr_warn("Skipping UMAC reset\n");
return;
}
/* issue soft reset and disable MAC while updating its registers */
bcmgenet_umac_writel(priv, CMD_SW_RESET, UMAC_CMD);
udelay(2);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册