Hello,
patch included.
# the multicast filter use now the correct registers
# add missing defines in fec.h
Regards,
Mathias
Mathias Kuester wrote:
> Hello,
>
>
> the current fec driver (kernel 2.4.X) is not able to receive multicast
> packages. Please initialise the registers of the fec like this:
>
> fec_grp_hash_table_high = 0xffffffff;
> fec_grp_hash_table_low = 0xffffffff;
>
>
> The command (from remote computer on the same network)
>
>> ping 224.0.0.1
>
> works then.
>
>
>
> Thanks,
>
>
> Mathias
> _______________________________________________
> uClinux-dev mailing list
> [email protected]
> http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
> This message was resent by [email protected]
> To unsubscribe see:
> http://mailman.uclinux.org/mailman/options/uclinux-dev
>
--- fec_orig.c 2007-01-17 07:41:08.000000000 +0100
+++ fec.c 2008-01-30 14:47:50.000000000 +0100
@@ -2275,14 +2275,27 @@
/* Catch all multicast addresses, so set the
* filter to all 1's.
*/
+#if defined(CONFIG_M5235) || defined(CONFIG_M527x) || \
+ defined(CONFIG_M5282) || defined(CONFIG_M5280) || \
+ defined(CONFIG_M5208)
+ ep->fec_grp_hash_table_high = 0xffffffff;
+ ep->fec_grp_hash_table_low = 0xffffffff;
+#else
ep->fec_hash_table_high = 0xffffffff;
ep->fec_hash_table_low = 0xffffffff;
+#endif
} else {
/* Clear filter and add the addresses in hash register.
*/
+#if defined(CONFIG_M5235) || defined(CONFIG_M527x) || \
+ defined(CONFIG_M5282) || defined(CONFIG_M5280) || \
+ defined(CONFIG_M5208)
+ ep->fec_grp_hash_table_high = 0;
+ ep->fec_grp_hash_table_low = 0;
+#else
ep->fec_hash_table_high = 0;
ep->fec_hash_table_low = 0;
-
+#endif
dmi = dev->mc_list;
for (j = 0; j < dev->mc_count; j++, dmi = dmi->next) {
@@ -2309,10 +2322,23 @@
*/
hash = (crc >> (32 - HASH_BITS)) & 0x3f;
- if (hash > 31)
+ if (hash > 31) {
+#if defined(CONFIG_M5235) || defined(CONFIG_M527x) || \
+ defined(CONFIG_M5282) || defined(CONFIG_M5280) || \
+ defined(CONFIG_M5208)
+ ep->fec_grp_hash_table_high |= 1 << (hash - 32);
+#else
ep->fec_hash_table_high |= 1 << (hash - 32);
- else
+#endif
+ } else {
+#if defined(CONFIG_M5235) || defined(CONFIG_M527x) || \
+ defined(CONFIG_M5282) || defined(CONFIG_M5280) || \
+ defined(CONFIG_M5208)
+ ep->fec_grp_hash_table_low |= 1 << hash;
+#else
ep->fec_hash_table_low |= 1 << hash;
+#endif
+ }
}
}
}
@@ -2406,6 +2432,14 @@
FEC_ENET_RXF | FEC_ENET_RXB | FEC_ENET_MII);
fecp->fec_hash_table_high = 0;
fecp->fec_hash_table_low = 0;
+ /* Set initial multicast address filter.
+ */
+#if defined(CONFIG_M5235) || defined(CONFIG_M527x) || \
+ defined(CONFIG_M5282) || defined(CONFIG_M5280) || \
+ defined(CONFIG_M5208)
+ fecp->fec_grp_hash_table_high = 0;
+ fecp->fec_grp_hash_table_low = 0;
+#endif
fecp->fec_r_buff_size = PKT_MAXBLR_SIZE;
//fecp->fec_ecntrl = 2; // this is too early PSW
fecp->fec_r_des_active = 0x01000000;
--- fec_orig.h 2005-08-10 07:13:34.000000000 +0200
+++ fec.h 2008-01-30 13:10:34.000000000 +0100
@@ -148,6 +148,8 @@
#define BD_ENET_RX_LAST ((ushort)0x0800)
#define BD_ENET_RX_FIRST ((ushort)0x0400)
#define BD_ENET_RX_MISS ((ushort)0x0100)
+#define BD_ENET_RX_BC ((ushort)0x0080)
+#define BD_ENET_RX_MC ((ushort)0x0040)
#define BD_ENET_RX_LG ((ushort)0x0020)
#define BD_ENET_RX_NO ((ushort)0x0010)
#define BD_ENET_RX_SH ((ushort)0x0008)
_______________________________________________
uClinux-dev mailing list
[email protected]
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by [email protected]
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev