igb: add flushes between RAR writes when setting mac address
authorAlexander Duyck <alexander.h.duyck@intel.com>
Mon, 5 Oct 2009 06:36:01 +0000 (06:36 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 6 Oct 2009 21:59:24 +0000 (14:59 -0700)
There are some switches that will do write combining when they see two
sequential regions written. In order to avoid any possible write combining
issues it is necessary to add a flush after writing each piece of a rar
register.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/igb/e1000_mac.c

index 4969a5b1cf3c9aed55e14286c073a7816c7db8fb..2ad358a240bf742848c997a7bf8689ab92fe0a4a 100644 (file)
@@ -247,8 +247,15 @@ void igb_rar_set(struct e1000_hw *hw, u8 *addr, u32 index)
        if (rar_low || rar_high)
                rar_high |= E1000_RAH_AV;
 
+       /*
+        * Some bridges will combine consecutive 32-bit writes into
+        * a single burst write, which will malfunction on some parts.
+        * The flushes avoid this.
+        */
        wr32(E1000_RAL(index), rar_low);
+       wrfl();
        wr32(E1000_RAH(index), rar_high);
+       wrfl();
 }
 
 /**