From 8108b387d05f461d65679596d02c7265e8975b32 Mon Sep 17 00:00:00 2001 From: Florian Fainelli Date: Tue, 31 Aug 2010 14:10:25 +0000 Subject: [PATCH] backport upstream multicast fix (#7848) SVN-Revision: 22852 --- .../015-r6040_fix_multicast.patch | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 target/linux/rdc/patches-2.6.32/015-r6040_fix_multicast.patch diff --git a/target/linux/rdc/patches-2.6.32/015-r6040_fix_multicast.patch b/target/linux/rdc/patches-2.6.32/015-r6040_fix_multicast.patch new file mode 100644 index 000000000000..f41b4b5423a5 --- /dev/null +++ b/target/linux/rdc/patches-2.6.32/015-r6040_fix_multicast.patch @@ -0,0 +1,35 @@ +--- +--- a/drivers/net/r6040.c ++++ b/drivers/net/r6040.c +@@ -136,7 +136,7 @@ + #define RX_DESC_SIZE (RX_DCNT * sizeof(struct r6040_descriptor)) + #define TX_DESC_SIZE (TX_DCNT * sizeof(struct r6040_descriptor)) + #define MBCR_DEFAULT 0x012A /* MAC Bus Control Register */ +-#define MCAST_MAX 4 /* Max number multicast addresses to filter */ ++#define MCAST_MAX 3 /* Max number multicast addresses to filter */ + + /* Descriptor status */ + #define DSC_OWNER_MAC 0x8000 /* MAC is the owner of this descriptor */ +@@ -887,9 +887,6 @@ static void r6040_multicast_list(struct + crc >>= 26; + hash_table[crc >> 4] |= 1 << (15 - (crc & 0xf)); + } +- /* Write the index of the hash table */ +- for (i = 0; i < 4; i++) +- iowrite16(hash_table[i] << 14, ioaddr + MCR1); + /* Fill the MAC hash tables with their values */ + iowrite16(hash_table[0], ioaddr + MAR0); + iowrite16(hash_table[1], ioaddr + MAR1); +@@ -905,9 +902,9 @@ static void r6040_multicast_list(struct + dmi = dmi->next; + } + for (i = dev->mc_count; i < MCAST_MAX; i++) { +- iowrite16(0xffff, ioaddr + MID_0L + 8*i); +- iowrite16(0xffff, ioaddr + MID_0M + 8*i); +- iowrite16(0xffff, ioaddr + MID_0H + 8*i); ++ iowrite16(0xffff, ioaddr + MID_1L + 8 * i); ++ iowrite16(0xffff, ioaddr + MID_1M + 8 * i); ++ iowrite16(0xffff, ioaddr + MID_1H + 8 * i); + } + } + -- 2.30.2