]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.drivers/bnx2x-Indirection-table-initialization-index.patch
Reenabled linux-xen, added patches for Xen Kernel Version 2.6.27.31,
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.drivers / bnx2x-Indirection-table-initialization-index.patch
diff --git a/src/patches/suse-2.6.27.31/patches.drivers/bnx2x-Indirection-table-initialization-index.patch b/src/patches/suse-2.6.27.31/patches.drivers/bnx2x-Indirection-table-initialization-index.patch
new file mode 100644 (file)
index 0000000..17c6164
--- /dev/null
@@ -0,0 +1,50 @@
+From 26c8fa4d8a08b6e7a61f23339e2236218957ecc0 Mon Sep 17 00:00:00 2001
+From: Eilon Greenstein <eilong@broadcom.com>
+Date: Wed, 14 Jan 2009 21:29:55 -0800
+Subject: bnx2x: Indirection table initialization index
+Acked-by: Karsten Keil <kkeil@novell.com>
+Reference: bnc#472500
+
+Wrong initialization of the multi-queue indirection table - it should
+be using the function and not the port index
+
+Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/bnx2x_main.c |    9 ++++-----
+ 1 files changed, 4 insertions(+), 5 deletions(-)
+
+Index: linux-2.6.27-bnx2x_2/drivers/net/bnx2x_main.c
+===================================================================
+--- linux-2.6.27-bnx2x_2.orig/drivers/net/bnx2x_main.c
++++ linux-2.6.27-bnx2x_2/drivers/net/bnx2x_main.c
+@@ -4527,7 +4527,7 @@ static void bnx2x_init_context(struct bn
+ static void bnx2x_init_ind_table(struct bnx2x *bp)
+ {
+-      int port = BP_PORT(bp);
++      int func = BP_FUNC(bp);
+       int i;
+       if (!is_multi(bp))
+@@ -4536,10 +4536,8 @@ static void bnx2x_init_ind_table(struct 
+       DP(NETIF_MSG_IFUP, "Initializing indirection table\n");
+       for (i = 0; i < TSTORM_INDIRECTION_TABLE_SIZE; i++)
+               REG_WR8(bp, BAR_TSTRORM_INTMEM +
+-                      TSTORM_INDIRECTION_TABLE_OFFSET(port) + i,
+-                      i % bp->num_queues);
+-
+-      REG_WR(bp, PRS_REG_A_PRSU_20, 0xf);
++                      TSTORM_INDIRECTION_TABLE_OFFSET(func) + i,
++                      BP_CL_ID(bp) + (i % bp->num_queues));
+ }
+ static void bnx2x_set_client_config(struct bnx2x *bp)
+@@ -5243,6 +5241,7 @@ static int bnx2x_init_common(struct bnx2
+       }
+       bnx2x_init_block(bp, PRS_COMMON_START, PRS_COMMON_END);
++      REG_WR(bp, PRS_REG_A_PRSU_20, 0xf);
+       /* set NIC mode */
+       REG_WR(bp, PRS_REG_NIC_MODE, 1);
+       if (CHIP_IS_E1H(bp))