]> www.infradead.org Git - users/jedix/linux-maple.git/commit
e1000e: workaround invalid Tx/Rx tail descriptor register write
authorBruce Allan <bruce.w.allan@intel.com>
Fri, 29 Jul 2011 05:53:02 +0000 (05:53 +0000)
committerJoe Jin <joe.jin@oracle.com>
Thu, 2 Feb 2012 13:19:08 +0000 (21:19 +0800)
commit3a1817db2300f0f46c9f3c7a4dac3a6e7a7c5ddc
tree441a9b03d3e267e3dbfb490494d14e2dcc4037aa
parentbcded05e6634fc42f4026cf01bf95e64d48775b0
e1000e: workaround invalid Tx/Rx tail descriptor register write

When the Manageability Engine (ME) is enabled on 82579, it periodically
accesses some MAC CSR registers.  There is an arbiter in hardware which
prevents simultaneous access of these registers by the host software, i.e.
the driver.  There is a hardware bug in the aribter that signals a host
access of the registers later than it actually happens.  A write of the
Transmit or Receive Descriptor Tail register could result in an incorrect
value if the driver and ME perform simultaneous accesses which could result
in an access to an invalid memory address.  This would return an
Unsupported Request which could hang the hardware.  Workaround the issue by
checking the FWSM register bit24 which is set by ME before it accesses the
MAC CSR registers.

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
(cherry picked from commit c6e7f51e73c1bc6044bce989ec503ef2e4758d55)

Signed-off-by: Joe Jin <joe.jin@oracle.com>
drivers/net/e1000e/e1000.h
drivers/net/e1000e/ich8lan.c
drivers/net/e1000e/netdev.c