From: Matt Carlson Date: Wed, 20 Jul 2011 10:20:55 +0000 (+0000) Subject: tg3: Fix int selftest for recent devices. X-Git-Tag: v3.0.5~81 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=352d0ff21f7a8ce23b0a70a80cd61e5ae566fe60;p=karo-tx-linux.git tg3: Fix int selftest for recent devices. commit 3aa1cdf87c0b3f2345e75c474acc32ebbf0a4724 upstream. This patch fixes interrupt selftest failures for recent devices (57765, 5717, 5718. 5719, 5720) by disabling MSI one-shot mode and applying the status tag workaround to the selftest code. Signed-off-by: Matt Carlson Reviewed-by: Michael Chan Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 122bde5bb5a4..38f68594f76b 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c @@ -8982,7 +8982,7 @@ static int tg3_test_interrupt(struct tg3 *tp) * Turn off MSI one shot mode. Otherwise this test has no * observable way to know whether the interrupt was delivered. */ - if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) { + if (tg3_flag(tp, 57765_PLUS)) { val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE; tw32(MSGINT_MODE, val); } @@ -9010,6 +9010,10 @@ static int tg3_test_interrupt(struct tg3 *tp) break; } + if (tg3_flag(tp, 57765_PLUS) && + tnapi->hw_status->status_tag != tnapi->last_tag) + tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); + msleep(10); } @@ -9024,7 +9028,7 @@ static int tg3_test_interrupt(struct tg3 *tp) if (intr_ok) { /* Reenable MSI one shot mode. */ - if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) { + if (tg3_flag(tp, 57765_PLUS)) { val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE; tw32(MSGINT_MODE, val); }