Commit e2a85aec authored by Andrea Galbusera's avatar Andrea Galbusera Committed by David S. Miller

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: default avatarAndrea Galbusera <gizero@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a9cf73ea
...@@ -393,8 +393,8 @@ typedef struct fec { ...@@ -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 */
......
...@@ -226,8 +226,8 @@ static void set_multicast_finish(struct net_device *dev) ...@@ -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) ...@@ -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.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment