forcedeth: multicast fix
Subsystems (2)
PATCH 5/5 forcedeth: multicast fix
This patch fixes the case where no multicast addresses are requested to be added to the multicast filter. The multicast mask must be set to all 1's instead of all 0's.
Signed-off-by Ayaz Abdulla <[email protected]>
drivers/net/forcedeth.c +9 -4
@@ -277,7 +277,9 @@#define NVREG_MCASTADDRA_FORCE 0x01 NvRegMulticastAddrB = 0xB4, NvRegMulticastMaskA = 0xB8, +#define NVREG_MCASTMASKA_NONE 0xffffffff NvRegMulticastMaskB = 0xBC, +#define NVREG_MCASTMASKB_NONE 0xffff NvRegPhyInterface = 0xC0,#define PHY_RGMII 0x10000000
@@ -2693,6 +2695,9 @@ addr[1 ] = alwaysOn[1 ]; mask[0 ] = alwaysOn[0 ] | alwaysOff[0 ]; mask[1 ] = alwaysOn[1 ] | alwaysOff[1 ]; + }else { + mask[0 ] =NVREG_MCASTMASKA_NONE ; + mask[1 ] =NVREG_MCASTMASKB_NONE ; } } addr[0 ] |=NVREG_MCASTADDRA_FORCE ;
@@ -4803,8 +4808,8 @@nv_mac_reset (dev);writel (NVREG_MCASTADDRA_FORCE , base + NvRegMulticastAddrA);writel (0 , base + NvRegMulticastAddrB); -writel (0 , base + NvRegMulticastMaskA); -writel (0 , base + NvRegMulticastMaskB); +writel (NVREG_MCASTMASKA_NONE , base + NvRegMulticastMaskA); +writel (NVREG_MCASTMASKB_NONE , base + NvRegMulticastMaskB);writel (0 , base + NvRegPacketFilterFlags);writel (0 , base + NvRegTransmitterControl);
@@ -4898,8 +4903,8 @@spin_lock_irq (&np->lock);writel (NVREG_MCASTADDRA_FORCE , base + NvRegMulticastAddrA);writel (0 , base + NvRegMulticastAddrB); -writel (0 , base + NvRegMulticastMaskA); -writel (0 , base + NvRegMulticastMaskB); +writel (NVREG_MCASTMASKA_NONE , base + NvRegMulticastMaskA); +writel (NVREG_MCASTMASKB_NONE , base + NvRegMulticastMaskB);writel (NVREG_PFF_ALWAYS |NVREG_PFF_MYADDR , base + NvRegPacketFilterFlags);/* One manual link speed update: Interrupts are enabled, future link * speed changes cause interrupts and are handled by nv_link_irq().