Просмотр исходного кода

backport upstream multicast fix (#7848)

SVN-Revision: 22852
Florian Fainelli 15 лет назад
Родитель
Сommit
8108b387d0
1 измененных файлов с 35 добавлено и 0 удалено
  1. 35 0
      target/linux/rdc/patches-2.6.32/015-r6040_fix_multicast.patch

+ 35 - 0
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);
+ 	}
+ }
+