Skip to content

Commit

Permalink
net: pch_gbe: Clean up pch_gbe_set_multi
Browse files Browse the repository at this point in the history
Refactor pch_gbe_set_multi in order to avoid unnecessary indentation &
make it clearer what the code is doing.

The one behavioral change from this patch is that we'll no longer
configure the MAC address registers for multicast addresses when the
IFF_PROMISC or IFF_ALLMULTI flags are set. In these cases, just as when
we want to monitor more multicast addresses than we have MAC address
registers, we disable multicast filtering so the MAC address registers
are unused.

Signed-off-by: Paul Burton <paul.burton@mips.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Paul Burton authored and David S. Miller committed Jun 23, 2018
1 parent 6ab91e4 commit 418e7da
Showing 1 changed file with 16 additions and 17 deletions.
33 changes: 16 additions & 17 deletions drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2110,28 +2110,27 @@ static void pch_gbe_set_multi(struct net_device *netdev)

netdev_dbg(netdev, "netdev->flags : 0x%08x\n", netdev->flags);

/* Check for Promiscuous and All Multicast modes */
/* By default enable address & multicast filtering */
rctl = ioread32(&hw->reg->RX_MODE);
rctl |= PCH_GBE_ADD_FIL_EN | PCH_GBE_MLT_FIL_EN;

/* Promiscuous mode disables all hardware address filtering */
if (netdev->flags & IFF_PROMISC)
rctl &= ~(PCH_GBE_ADD_FIL_EN | PCH_GBE_MLT_FIL_EN);

/* If we want to monitor more multicast addresses than the hardware can
* support then disable hardware multicast filtering.
*/
mc_count = netdev_mc_count(netdev);
if ((netdev->flags & IFF_PROMISC)) {
rctl &= ~PCH_GBE_ADD_FIL_EN;
if ((netdev->flags & IFF_ALLMULTI) || mc_count >= PCH_GBE_MAR_ENTRIES)
rctl &= ~PCH_GBE_MLT_FIL_EN;
} else if ((netdev->flags & IFF_ALLMULTI)) {
/* all the multicasting receive permissions */
rctl |= PCH_GBE_ADD_FIL_EN;
rctl &= ~PCH_GBE_MLT_FIL_EN;
} else {
if (mc_count >= PCH_GBE_MAR_ENTRIES) {
/* all the multicasting receive permissions */
rctl |= PCH_GBE_ADD_FIL_EN;
rctl &= ~PCH_GBE_MLT_FIL_EN;
} else {
rctl |= (PCH_GBE_ADD_FIL_EN | PCH_GBE_MLT_FIL_EN);
}
}

iowrite32(rctl, &hw->reg->RX_MODE);

if (mc_count >= PCH_GBE_MAR_ENTRIES)
/* If we're not using multicast filtering then there's no point
* configuring the unused MAC address registers.
*/
if (!(rctl & PCH_GBE_MLT_FIL_EN))
return;

/* Load the first set of multicast addresses into MAC address registers
Expand Down

0 comments on commit 418e7da

Please sign in to comment.