powerpc: Fix multicast problem in fs_enet driver

mac-fec.c was setting individual UDP address registers instead of multicast
group address registers when joining a multicast group.
This prevented from correctly receiving UDP multicast packets.
According to datasheet, replaced hash_table_high and hash_table_low
with grp_hash_table_high and grp_hash_table_low respectively.
Also renamed hash_table_* with grp_hash_table_* in struct fec declaration
for 8xx: these registers are used only for multicast there.

Tested on a MPC5121 based board.
Build tested also against mpc866_ads_defconfig.

Signed-off-by: Andrea Galbusera <gizero@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Andrea Galbusera 2011-04-21 02:21:21 +00:00 committed by David S. Miller
parent a9cf73ea7f
commit e2a85aeceb
2 changed files with 6 additions and 6 deletions

View File

@ -393,8 +393,8 @@ typedef struct fec {
uint fec_addr_low; /* lower 32 bits of station address */ uint fec_addr_low; /* lower 32 bits of station address */
ushort fec_addr_high; /* upper 16 bits of station address */ ushort fec_addr_high; /* upper 16 bits of station address */
ushort res1; /* reserved */ ushort res1; /* reserved */
uint fec_hash_table_high; /* upper 32-bits of hash table */ uint fec_grp_hash_table_high; /* upper 32-bits of hash table */
uint fec_hash_table_low; /* lower 32-bits of hash table */ uint fec_grp_hash_table_low; /* lower 32-bits of hash table */
uint fec_r_des_start; /* beginning of Rx descriptor ring */ uint fec_r_des_start; /* beginning of Rx descriptor ring */
uint fec_x_des_start; /* beginning of Tx descriptor ring */ uint fec_x_des_start; /* beginning of Tx descriptor ring */
uint fec_r_buff_size; /* Rx buffer size */ uint fec_r_buff_size; /* Rx buffer size */

View File

@ -226,8 +226,8 @@ static void set_multicast_finish(struct net_device *dev)
} }
FC(fecp, r_cntrl, FEC_RCNTRL_PROM); FC(fecp, r_cntrl, FEC_RCNTRL_PROM);
FW(fecp, hash_table_high, fep->fec.hthi); FW(fecp, grp_hash_table_high, fep->fec.hthi);
FW(fecp, hash_table_low, fep->fec.htlo); FW(fecp, grp_hash_table_low, fep->fec.htlo);
} }
static void set_multicast_list(struct net_device *dev) static void set_multicast_list(struct net_device *dev)
@ -273,8 +273,8 @@ static void restart(struct net_device *dev)
/* /*
* Reset all multicast. * Reset all multicast.
*/ */
FW(fecp, hash_table_high, fep->fec.hthi); FW(fecp, grp_hash_table_high, fep->fec.hthi);
FW(fecp, hash_table_low, fep->fec.htlo); FW(fecp, grp_hash_table_low, fep->fec.htlo);
/* /*
* Set maximum receive buffer size. * Set maximum receive buffer size.