tg3: Fix TSO CAP for 5704 devs w / ASF enabled
Cherry-picked based on an upstream bug report by a Debian user. svn path=/dists/sid/linux/; revision=19413
This commit is contained in:
parent
d9b6943846
commit
dc33059883
|
@ -2,6 +2,7 @@ linux (3.2.30-2) UNRELEASED; urgency=low
|
|||
|
||||
* codel: refine one condition to avoid a nul rec_inv_sqrt
|
||||
* [mips,mipsel] Ignore NFS/SunRPC ABI changes in 3.2.30 (fixes FTBFS)
|
||||
* tg3: Fix TSO CAP for 5704 devs w / ASF enabled
|
||||
|
||||
-- Ben Hutchings <ben@decadent.org.uk> Sat, 29 Sep 2012 14:19:46 +0200
|
||||
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
From: Matt Carlson <mcarlson@broadcom.com>
|
||||
Date: Mon, 28 Nov 2011 09:41:03 +0000
|
||||
Subject: tg3: Fix TSO CAP for 5704 devs w / ASF enabled
|
||||
|
||||
commit cf9ecf4b631f649a964fa611f1a5e8874f2a76db upstream.
|
||||
|
||||
On the earliest TSO capable devices, TSO was accomplished through
|
||||
firmware. The TSO cannot coexist with ASF management firmware though.
|
||||
The tg3 driver determines whether or not ASF is enabled by calling
|
||||
tg3_get_eeprom_hw_cfg(), which checks a particular bit of NIC memory.
|
||||
Commit dabc5c670d3f86d15ee4f42ab38ec5bd2682487d, entitled "tg3: Move
|
||||
TSO_CAPABLE assignment", accidentally moved the code that determines
|
||||
TSO capabilities earlier than the call to tg3_get_eeprom_hw_cfg(). As a
|
||||
consequence, the driver was attempting to determine TSO capabilities
|
||||
before it had all the data it needed to make the decision.
|
||||
|
||||
This patch fixes the problem by revisiting and reevaluating the decision
|
||||
after tg3_get_eeprom_hw_cfg() is called.
|
||||
|
||||
Signed-off-by: Matt Carlson <mcarlson@broadcom.com>
|
||||
Signed-off-by: Michael Chan <mchan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/tg3.c | 14 ++++++++++++--
|
||||
1 file changed, 12 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
|
||||
index 0acb279..0c695dc 100644
|
||||
--- a/drivers/net/ethernet/broadcom/tg3.c
|
||||
+++ b/drivers/net/ethernet/broadcom/tg3.c
|
||||
@@ -13988,9 +13988,13 @@ static int __devinit tg3_get_invariants(struct tg3 *tp)
|
||||
if (tg3_flag(tp, HW_TSO_1) ||
|
||||
tg3_flag(tp, HW_TSO_2) ||
|
||||
tg3_flag(tp, HW_TSO_3) ||
|
||||
- (tp->fw_needed && !tg3_flag(tp, ENABLE_ASF)))
|
||||
+ tp->fw_needed) {
|
||||
+ /* For firmware TSO, assume ASF is disabled.
|
||||
+ * We'll disable TSO later if we discover ASF
|
||||
+ * is enabled in tg3_get_eeprom_hw_cfg().
|
||||
+ */
|
||||
tg3_flag_set(tp, TSO_CAPABLE);
|
||||
- else {
|
||||
+ } else {
|
||||
tg3_flag_clear(tp, TSO_CAPABLE);
|
||||
tg3_flag_clear(tp, TSO_BUG);
|
||||
tp->fw_needed = NULL;
|
||||
@@ -14266,6 +14270,12 @@ static int __devinit tg3_get_invariants(struct tg3 *tp)
|
||||
*/
|
||||
tg3_get_eeprom_hw_cfg(tp);
|
||||
|
||||
+ if (tp->fw_needed && tg3_flag(tp, ENABLE_ASF)) {
|
||||
+ tg3_flag_clear(tp, TSO_CAPABLE);
|
||||
+ tg3_flag_clear(tp, TSO_BUG);
|
||||
+ tp->fw_needed = NULL;
|
||||
+ }
|
||||
+
|
||||
if (tg3_flag(tp, ENABLE_APE)) {
|
||||
/* Allow reads and writes to the
|
||||
* APE register and memory space.
|
|
@ -398,3 +398,4 @@ bugfix/x86/drm-i915-i8xx-interrupt-handler.patch
|
|||
features/arm/ahci-Add-JMicron-362-device-IDs.patch
|
||||
bugfix/all/speakup-lower-default-software-speech-rate.patch
|
||||
debian/perf-hide-abi-change-in-3.2.30.patch
|
||||
bugfix/all/tg3-Fix-TSO-CAP-for-5704-devs-w-ASF-enabled.patch
|
||||
|
|
Loading…
Reference in New Issue