From 48bec730adc77bda3910df7aebdface84d08d4c9 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Wed, 14 Dec 2022 15:00:51 +0000 Subject: [PATCH] net: bcmgenet: Add 'eee' module parameter On some switches, having EEE enabled causes the link to become unstable. With this patch, adding 'genet.eee=N' to the kernel command line will cause EEE to be disabled on the link. See: https://github.com/raspberrypi/linux/issues/4289 Signed-off-by: Phil Elwell --- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c index d8192cf662d6ec..d49a3e06b9e3e0 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c @@ -70,6 +70,9 @@ static void bcmgenet_set_rx_mode(struct net_device *dev); static bool skip_umac_reset = false; module_param(skip_umac_reset, bool, 0444); MODULE_PARM_DESC(skip_umac_reset, "Skip UMAC reset step"); +static bool eee = true; +module_param(eee, bool, 0444); +MODULE_PARM_DESC(eee, "Enable EEE (default Y)"); static inline void bcmgenet_writel(u32 value, void __iomem *offset) { @@ -3430,6 +3433,17 @@ static int bcmgenet_open(struct net_device *dev) bcmgenet_phy_pause_set(dev, priv->rx_pause, priv->tx_pause); + if (!eee) { + struct ethtool_keee eee_data; + + ret = bcmgenet_get_eee(dev, &eee_data); + if (ret == 0) { + eee_data.eee_enabled = 0; + bcmgenet_set_eee(dev, &eee_data); + netdev_warn(dev, "EEE disabled\n"); + } + } + bcmgenet_netif_start(dev); netif_tx_start_all_queues(dev);