]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/net/ethernet/marvell/sky2.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[karo-tx-linux.git] / drivers / net / ethernet / marvell / sky2.c
index bd3366267039bc233e526acf3926d4f8b6fb5638..867a6a3ef81f72c4c9da17ea861ab1bf30628833 100644 (file)
@@ -1290,14 +1290,6 @@ static void rx_set_checksum(struct sky2_port *sky2)
                     ? BMU_ENA_RX_CHKSUM : BMU_DIS_RX_CHKSUM);
 }
 
-/*
- * Fixed initial key as seed to RSS.
- */
-static const uint32_t rss_init_key[10] = {
-       0x7c3351da, 0x51c5cf4e, 0x44adbdd1, 0xe8d38d18, 0x48897c43,
-       0xb1d60e7e, 0x6a3dd760, 0x01a2e453, 0x16f46f13, 0x1a0e7b30
-};
-
 /* Enable/disable receive hash calculation (RSS) */
 static void rx_set_rss(struct net_device *dev, netdev_features_t features)
 {
@@ -1313,9 +1305,12 @@ static void rx_set_rss(struct net_device *dev, netdev_features_t features)
 
        /* Program RSS initial values */
        if (features & NETIF_F_RXHASH) {
+               u32 rss_key[10];
+
+               netdev_rss_key_fill(rss_key, sizeof(rss_key));
                for (i = 0; i < nkeys; i++)
                        sky2_write32(hw, SK_REG(sky2->port, RSS_KEY + i * 4),
-                                    rss_init_key[i]);
+                                    rss_key[i]);
 
                /* Need to turn on (undocumented) flag to make hashing work  */
                sky2_write32(hw, SK_REG(sky2->port, RX_GMF_CTRL_T),
@@ -1366,7 +1361,9 @@ static void sky2_rx_clean(struct sky2_port *sky2)
 {
        unsigned i;
 
-       memset(sky2->rx_le, 0, RX_LE_BYTES);
+       if (sky2->rx_le)
+               memset(sky2->rx_le, 0, RX_LE_BYTES);
+
        for (i = 0; i < sky2->rx_pending; i++) {
                struct rx_ring_info *re = sky2->rx_ring + i;
 
@@ -2419,6 +2416,7 @@ static int sky2_change_mtu(struct net_device *dev, int new_mtu)
 
        imask = sky2_read32(hw, B0_IMSK);
        sky2_write32(hw, B0_IMSK, 0);
+       sky2_read32(hw, B0_IMSK);
 
        dev->trans_start = jiffies;     /* prevent tx timeout */
        napi_disable(&hw->napi);
@@ -3487,8 +3485,8 @@ static void sky2_all_down(struct sky2_hw *hw)
        int i;
 
        if (hw->flags & SKY2_HW_IRQ_SETUP) {
-               sky2_read32(hw, B0_IMSK);
                sky2_write32(hw, B0_IMSK, 0);
+               sky2_read32(hw, B0_IMSK);
 
                synchronize_irq(hw->pdev->irq);
                napi_disable(&hw->napi);