Patch "net: fec: fix multicast filtering hardware setup" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
net: fec: fix multicast filtering hardware setup
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
net-fec-fix-multicast-filtering-hardware-setup.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Wed Dec 6 17:39:55 CET 2017
From: Rui Sousa <[email protected]>
Date: Mon, 13 Feb 2017 10:01:25 +0800
Subject: net: fec: fix multicast filtering hardware setup
From: Rui Sousa <[email protected]>
[ Upstream commit 01f8902bcf3ff124d0aeb88a774180ebcec20ace ]
Fix hardware setup of multicast address hash:
- Never clear the hardware hash (to avoid packet loss)
- Construct the hash register values in software and then write once to hardware
--- drivers/net/ethernet/freescale/fec_main.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-)
drivers/net/ethernet/freescale/fec_main.c +9 -14
@@ -2923,6 +2923,7 @@ static void set_multicast_list(struct nestruct netdev_hw_addr *ha;unsigned int i, bit, data, crc, tmp;unsigned char hash; +unsigned int hash_high =0 , hash_low =0 ;if (ndev->flags &IFF_PROMISC ) { tmp =readl (fep->hwp +FEC_R_CNTRL );
@@ -2945,11 +2946,7 @@ static void set_multicast_list(struct nereturn ; } -/* Clear filter and add the addresses in hash register -*/ -writel (0 , fep->hwp +FEC_GRP_HASH_TABLE_HIGH ); -writel (0 , fep->hwp +FEC_GRP_HASH_TABLE_LOW ); - +/* Add the addresses in hash register */ netdev_for_each_mc_addr (ha, ndev) {/* calculate crc32 value of mac address */ crc =0xffffffff ;
@@ -2967,16 +2964,14 @@ static void set_multicast_list(struct ne*/ hash = (crc >> (32 -FEC_HASH_BITS )) &0x3f ; -if (hash >31 ) { - tmp =readl (fep->hwp +FEC_GRP_HASH_TABLE_HIGH ); - tmp |=1 << (hash -32 ); -writel (tmp, fep->hwp +FEC_GRP_HASH_TABLE_HIGH ); - }else { - tmp =readl (fep->hwp +FEC_GRP_HASH_TABLE_LOW ); - tmp |=1 << hash; -writel (tmp, fep->hwp +FEC_GRP_HASH_TABLE_LOW ); - } +if (hash >31 ) + hash_high |=1 << (hash -32 ); +else + hash_low |=1 << hash; } + +writel (hash_high, fep->hwp +FEC_GRP_HASH_TABLE_HIGH ); +writel (hash_low, fep->hwp +FEC_GRP_HASH_TABLE_LOW ); }/* Set a MAC change in hardware. */
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/net-fec-fix-multicast-filtering-hardware-setup.patch