Преглед изворни кода

net: ethernet: prueth: disable MC filtering when promisc mode enabled

When promiscuous mode is enabled, multicast filtering should be disabled
so that no packets are filtered out. When promiscuous mode is disabled,
the driver already re-enables multicast filtering.

Signed-off-by: Aaron Kramer <a-kramer@ti.com>
Aaron Kramer пре 6 година
родитељ
комит
88b88af985
1 измењених фајлова са 4 додато и 0 уклоњено
  1. 4 0
      drivers/net/ethernet/ti/prueth.c

+ 4 - 0
drivers/net/ethernet/ti/prueth.c

@@ -4133,6 +4133,8 @@ static void emac_ndo_set_rx_mode(struct net_device *ndev)
 	struct prueth *prueth = emac->prueth;
 	struct prueth *prueth = emac->prueth;
 	struct prueth_mmap_sram_cfg *s = &prueth->mmap_sram_cfg;
 	struct prueth_mmap_sram_cfg *s = &prueth->mmap_sram_cfg;
 	void __iomem *sram = prueth->mem[PRUETH_MEM_SHARED_RAM].va;
 	void __iomem *sram = prueth->mem[PRUETH_MEM_SHARED_RAM].va;
+	void __iomem *ram = emac->prueth->mem[emac->dram].va;
+	u32 mc_ctrl_byte = prueth->fw_offsets->mc_ctrl_byte;
 	u32 reg, mask;
 	u32 reg, mask;
 
 
 	if (PRUETH_HAS_RED(prueth))
 	if (PRUETH_HAS_RED(prueth))
@@ -4161,6 +4163,8 @@ static void emac_ndo_set_rx_mode(struct net_device *ndev)
 	if (ndev->flags & IFF_PROMISC) {
 	if (ndev->flags & IFF_PROMISC) {
 		/* Enable promiscuous mode */
 		/* Enable promiscuous mode */
 		reg |= mask;
 		reg |= mask;
+		/* Disable MC filtering when promiscuous mode enabled */
+		writeb(MULTICAST_FILTER_DISABLED, ram + mc_ctrl_byte);
 	} else {
 	} else {
 		/* Disable promiscuous mode */
 		/* Disable promiscuous mode */
 		reg &= ~mask;
 		reg &= ~mask;