[uClinux-dev] 2.4.X coldfire fec multicast
Greg Ungerer
gerg at snapgear.com
Tue Feb 12 22:01:41 EST 2008
Hi Mathias,
Mathias Kuester wrote:
> sounds good to me.
Ok, good. I have commited that the uClinux-2.4.x CVS.
Regards
Greg
> Greg Ungerer wrote:
>> Hi Mathias,
>>
>> Mathias Kuester wrote:
>>>> 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;
>>
>> Looking at this it seems to me that the renaming the fields of
>> the 5272 struct to "fec_grp_hash_table*" is probably more correct.
>> According to the 5272 documentation those registers are a group
>> hash setup. So I think the struct fields are actually misnamed.
>>
>> If we change the field names in the 5272 fec struct, and
>> then change all occurrences in fec.c then there is no need
>> for all the "#ifdef"ery. Much cleaner.
>>
>> Regards
>> Greg
>>
>>
>>
>>
>>>> The command (from remote computer on the same network)
>>>>
>>>>> ping 224.0.0.1
>>>> works then.
>>>>
>>>>
>>>>
>>>> Thanks,
>>>>
>>>>
>>>> Mathias
>>>> _______________________________________________
>>>> uClinux-dev mailing list
>>>> uClinux-dev at uclinux.org
>>>> http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
>>>> This message was resent by uclinux-dev at uclinux.org
>>>> 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
>>> uClinux-dev at uclinux.org
>>> http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
>>> This message was resent by uclinux-dev at uclinux.org
>>> To unsubscribe see:
>>> http://mailman.uclinux.org/mailman/options/uclinux-dev
>>
>
> _______________________________________________
> uClinux-dev mailing list
> uClinux-dev at uclinux.org
> http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
> This message was resent by uclinux-dev at uclinux.org
> To unsubscribe see:
> http://mailman.uclinux.org/mailman/options/uclinux-dev
>
--
------------------------------------------------------------------------
Greg Ungerer -- Chief Software Dude EMAIL: gerg at snapgear.com
Secure Computing Corporation PHONE: +61 7 3435 2888
825 Stanley St, FAX: +61 7 3891 3630
Woolloongabba, QLD, 4102, Australia WEB: http://www.SnapGear.com
More information about the uClinux-dev
mailing list