diff options
author | Florian Fainelli <florian@openwrt.org> | 2010-08-31 14:10:25 +0000 |
---|---|---|
committer | Florian Fainelli <florian@openwrt.org> | 2010-08-31 14:10:25 +0000 |
commit | 8108b387d05f461d65679596d02c7265e8975b32 (patch) | |
tree | 2db5f232feac62edb4b0f48958015b0ad1d0e8ce /target | |
parent | 685d598adda292d55b6f3a9f62f1d63d1329568d (diff) | |
download | master-31e0f0ae-8108b387d05f461d65679596d02c7265e8975b32.tar.gz master-31e0f0ae-8108b387d05f461d65679596d02c7265e8975b32.tar.bz2 master-31e0f0ae-8108b387d05f461d65679596d02c7265e8975b32.zip |
backport upstream multicast fix (#7848)
SVN-Revision: 22852
Diffstat (limited to 'target')
-rw-r--r-- | target/linux/rdc/patches-2.6.32/015-r6040_fix_multicast.patch | 35 |
1 files changed, 35 insertions, 0 deletions
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 0000000000..f41b4b5423 --- /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); + } + } + |