Commit 2696c15c authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'net-xilinx-axienet-multicast-fixes-and-improvements'

Sean Anderson says:

====================
net: xilinx: axienet: Multicast fixes and improvements [part]
====================

First two patches of the series which are fixes.

Link: https://patch.msgid.link/20240822154059.1066595-1-sean.anderson@linux.dev


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents a812a3f4 797a68c9
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -170,6 +170,7 @@
#define XAE_UAW0_OFFSET		0x00000700 /* Unicast address word 0 */
#define XAE_UAW1_OFFSET		0x00000704 /* Unicast address word 1 */
#define XAE_FMI_OFFSET		0x00000708 /* Frame Filter Control */
#define XAE_FFE_OFFSET		0x0000070C /* Frame Filter Enable */
#define XAE_AF0_OFFSET		0x00000710 /* Address Filter 0 */
#define XAE_AF1_OFFSET		0x00000714 /* Address Filter 1 */

+13 −12
Original line number Diff line number Diff line
@@ -432,7 +432,7 @@ static int netdev_set_mac_address(struct net_device *ndev, void *p)
 */
static void axienet_set_multicast_list(struct net_device *ndev)
{
	int i;
	int i = 0;
	u32 reg, af0reg, af1reg;
	struct axienet_local *lp = netdev_priv(ndev);

@@ -450,7 +450,10 @@ static void axienet_set_multicast_list(struct net_device *ndev)
	} else if (!netdev_mc_empty(ndev)) {
		struct netdev_hw_addr *ha;

		i = 0;
		reg = axienet_ior(lp, XAE_FMI_OFFSET);
		reg &= ~XAE_FMI_PM_MASK;
		axienet_iow(lp, XAE_FMI_OFFSET, reg);

		netdev_for_each_mc_addr(ha, ndev) {
			if (i >= XAE_MULTICAST_CAM_TABLE_NUM)
				break;
@@ -469,6 +472,7 @@ static void axienet_set_multicast_list(struct net_device *ndev)
			axienet_iow(lp, XAE_FMI_OFFSET, reg);
			axienet_iow(lp, XAE_AF0_OFFSET, af0reg);
			axienet_iow(lp, XAE_AF1_OFFSET, af1reg);
			axienet_iow(lp, XAE_FFE_OFFSET, 1);
			i++;
		}
	} else {
@@ -476,17 +480,14 @@ static void axienet_set_multicast_list(struct net_device *ndev)
		reg &= ~XAE_FMI_PM_MASK;

		axienet_iow(lp, XAE_FMI_OFFSET, reg);
		dev_info(&ndev->dev, "Promiscuous mode disabled.\n");
	}

		for (i = 0; i < XAE_MULTICAST_CAM_TABLE_NUM; i++) {
	for (; i < XAE_MULTICAST_CAM_TABLE_NUM; i++) {
		reg = axienet_ior(lp, XAE_FMI_OFFSET) & 0xFFFFFF00;
		reg |= i;

		axienet_iow(lp, XAE_FMI_OFFSET, reg);
			axienet_iow(lp, XAE_AF0_OFFSET, 0);
			axienet_iow(lp, XAE_AF1_OFFSET, 0);
		}

		dev_info(&ndev->dev, "Promiscuous mode disabled.\n");
		axienet_iow(lp, XAE_FFE_OFFSET, 0);
	}
}