From 6dae2f1bc0f94a49ed55034b2e5747e252febac0 Mon Sep 17 00:00:00 2001 From: Matt Carlson Date: Wed, 20 Jul 2011 10:20:54 +0000 Subject: [PATCH] --- yaml --- r: 256529 b: refs/heads/master c: 9d53fa129628d4899083b06fa66b7ca10fed8eb4 h: refs/heads/master i: 256527: b7799deef40a5d20ead88f468c5b38070c9bb98a v: v3 --- [refs] | 2 +- trunk/drivers/net/tg3.c | 21 +++++++++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 0037ed44fe2b..e1ca9341b6aa 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5baa5e9aa28baccd2a1227095c25bb3e999f250d +refs/heads/master: 9d53fa129628d4899083b06fa66b7ca10fed8eb4 diff --git a/trunk/drivers/net/tg3.c b/trunk/drivers/net/tg3.c index 5110ea0be910..e5c1bc919b4d 100644 --- a/trunk/drivers/net/tg3.c +++ b/trunk/drivers/net/tg3.c @@ -8723,15 +8723,24 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) udelay(100); if (tg3_flag(tp, ENABLE_RSS)) { + int i = 0; u32 reg = MAC_RSS_INDIR_TBL_0; - u8 *ent = (u8 *)&val; - /* Setup the indirection table */ - for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) { - int idx = i % sizeof(val); + if (tp->irq_cnt == 2) { + for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i += 8) { + tw32(reg, 0x0); + reg += 4; + } + } else { + u32 val; - ent[idx] = i % (tp->irq_cnt - 1); - if (idx == sizeof(val) - 1) { + while (i < TG3_RSS_INDIR_TBL_SIZE) { + val = i % (tp->irq_cnt - 1); + i++; + for (; i % 8; i++) { + val <<= 4; + val |= (i % (tp->irq_cnt - 1)); + } tw32(reg, val); reg += 4; }