]> git.karo-electronics.de Git - linux-beck.git/blobdiff - drivers/net/ethernet/broadcom/bcmsysport.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[linux-beck.git] / drivers / net / ethernet / broadcom / bcmsysport.c
index 71068d7d930dd2b51ebee496beeec208d50469b7..07568818864440190918e314425f697a26d93ff6 100644 (file)
@@ -139,6 +139,15 @@ static int bcm_sysport_set_rx_csum(struct net_device *dev,
        else
                reg &= ~RXCHK_SKIP_FCS;
 
+       /* If Broadcom tags are enabled (e.g: using a switch), make
+        * sure we tell the RXCHK hardware to expect a 4-bytes Broadcom
+        * tag after the Ethernet MAC Source Address.
+        */
+       if (netdev_uses_dsa(dev))
+               reg |= RXCHK_BRCM_TAG_EN;
+       else
+               reg &= ~RXCHK_BRCM_TAG_EN;
+
        rxchk_writel(priv, reg, RXCHK_CONTROL);
 
        return 0;
@@ -1070,16 +1079,19 @@ static void bcm_sysport_adj_link(struct net_device *dev)
        if (!phydev->pause)
                cmd_bits |= CMD_RX_PAUSE_IGNORE | CMD_TX_PAUSE_IGNORE;
 
-       if (changed) {
+       if (!changed)
+               return;
+
+       if (phydev->link) {
                reg = umac_readl(priv, UMAC_CMD);
                reg &= ~((CMD_SPEED_MASK << CMD_SPEED_SHIFT) |
                        CMD_HD_EN | CMD_RX_PAUSE_IGNORE |
                        CMD_TX_PAUSE_IGNORE);
                reg |= cmd_bits;
                umac_writel(priv, reg, UMAC_CMD);
-
-               phy_print_status(priv->phydev);
        }
+
+       phy_print_status(priv->phydev);
 }
 
 static int bcm_sysport_init_tx_ring(struct bcm_sysport_priv *priv,