net: systemport: Utilize bcm_sysport_set_features() during resume/open
authorFlorian Fainelli <f.fainelli@gmail.com>
Thu, 27 Sep 2018 22:36:11 +0000 (15:36 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 2 Oct 2018 06:11:52 +0000 (23:11 -0700)
During driver resume and open, the HW may have lost its context/state,
utilize bcm_sysport_set_features() to make sure we do restore the
correct set of features that were previously configured.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bcmsysport.c

index 654a07b849c4b2893f1bf282f95add758603e124..3b4cb906a275d256f8e865cace00e4cc4fb1a233 100644 (file)
@@ -1972,6 +1972,11 @@ static int bcm_sysport_open(struct net_device *dev)
        else
                gib_set_pad_extension(priv);
 
+       /* Apply features again in case we changed them while interface was
+        * down
+        */
+       bcm_sysport_set_features(dev, dev->features);
+
        /* Set MAC address */
        umac_set_hw_addr(priv, dev->dev_addr);
 
@@ -2708,7 +2713,6 @@ static int __maybe_unused bcm_sysport_resume(struct device *d)
        struct net_device *dev = dev_get_drvdata(d);
        struct bcm_sysport_priv *priv = netdev_priv(dev);
        unsigned int i;
-       u32 reg;
        int ret;
 
        if (!netif_running(dev))
@@ -2752,12 +2756,8 @@ static int __maybe_unused bcm_sysport_resume(struct device *d)
                goto out_free_rx_ring;
        }
 
-       /* Enable rxhck */
-       if (priv->rx_chk_en) {
-               reg = rxchk_readl(priv, RXCHK_CONTROL);
-               reg |= RXCHK_EN;
-               rxchk_writel(priv, reg, RXCHK_CONTROL);
-       }
+       /* Restore enabled features */
+       bcm_sysport_set_features(dev, dev->features);
 
        rbuf_init(priv);