diff options
Diffstat (limited to 'drivers/net/arm/ixp4xx_eth.c')
-rw-r--r-- | drivers/net/arm/ixp4xx_eth.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/net/arm/ixp4xx_eth.c b/drivers/net/arm/ixp4xx_eth.c index 24df0325090c..ee2f8425dbe7 100644 --- a/drivers/net/arm/ixp4xx_eth.c +++ b/drivers/net/arm/ixp4xx_eth.c | |||
@@ -738,6 +738,17 @@ static void eth_set_mcast_list(struct net_device *dev) | |||
738 | struct netdev_hw_addr *ha; | 738 | struct netdev_hw_addr *ha; |
739 | u8 diffs[ETH_ALEN], *addr; | 739 | u8 diffs[ETH_ALEN], *addr; |
740 | int i; | 740 | int i; |
741 | static const u8 allmulti[] = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 }; | ||
742 | |||
743 | if (dev->flags & IFF_ALLMULTI) { | ||
744 | for (i = 0; i < ETH_ALEN; i++) { | ||
745 | __raw_writel(allmulti[i], &port->regs->mcast_addr[i]); | ||
746 | __raw_writel(allmulti[i], &port->regs->mcast_mask[i]); | ||
747 | } | ||
748 | __raw_writel(DEFAULT_RX_CNTRL0 | RX_CNTRL0_ADDR_FLTR_EN, | ||
749 | &port->regs->rx_control[0]); | ||
750 | return; | ||
751 | } | ||
741 | 752 | ||
742 | if ((dev->flags & IFF_PROMISC) || netdev_mc_empty(dev)) { | 753 | if ((dev->flags & IFF_PROMISC) || netdev_mc_empty(dev)) { |
743 | __raw_writel(DEFAULT_RX_CNTRL0 & ~RX_CNTRL0_ADDR_FLTR_EN, | 754 | __raw_writel(DEFAULT_RX_CNTRL0 & ~RX_CNTRL0_ADDR_FLTR_EN, |