net: bcmgenet: Add 'eee' module parameter
authorPhil Elwell <phil@raspberrypi.com>
Wed, 14 Dec 2022 15:00:51 +0000 (15:00 +0000)
committerPhil Elwell <8911409+pelwell@users.noreply.github.com>
Thu, 15 Dec 2022 19:43:10 +0000 (19:43 +0000)
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 <phil@raspberrypi.com>
drivers/net/ethernet/broadcom/genet/bcmgenet.c

index 9a90637..cce31d5 100644 (file)
@@ -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)
 {
@@ -3389,6 +3392,17 @@ static int bcmgenet_open(struct net_device *dev)
                goto err_irq1;
        }
 
+       if (!eee) {
+               struct ethtool_eee 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);