Commit 411d466d authored by Ben Hutchings's avatar Ben Hutchings Committed by David S. Miller
Browse files

net: dsa: microchip: ksz8795: Don't use phy_port_cnt in VLAN table lookup



The magic number 4 in VLAN table lookup was the number of entries we
can read and write at once.  Using phy_port_cnt here doesn't make
sense and presumably broke VLAN filtering for 3-port switches.  Change
it back to 4.

Fixes: 4ce2a984 ("net: dsa: microchip: ksz8795: use phy_port_cnt ...")
Signed-off-by: default avatarBen Hutchings <ben.hutchings@mind.be>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 16484413
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -687,8 +687,8 @@ static void ksz8_r_vlan_entries(struct ksz_device *dev, u16 addr)
	shifts = ksz8->shifts;

	ksz8_r_table(dev, TABLE_VLAN, addr, &data);
	addr *= dev->phy_port_cnt;
	for (i = 0; i < dev->phy_port_cnt; i++) {
	addr *= 4;
	for (i = 0; i < 4; i++) {
		dev->vlan_cache[addr + i].table[0] = (u16)data;
		data >>= shifts[VLAN_TABLE];
	}
@@ -702,7 +702,7 @@ static void ksz8_r_vlan_table(struct ksz_device *dev, u16 vid, u16 *vlan)
	u64 buf;

	data = (u16 *)&buf;
	addr = vid / dev->phy_port_cnt;
	addr = vid / 4;
	index = vid & 3;
	ksz8_r_table(dev, TABLE_VLAN, addr, &buf);
	*vlan = data[index];
@@ -716,7 +716,7 @@ static void ksz8_w_vlan_table(struct ksz_device *dev, u16 vid, u16 vlan)
	u64 buf;

	data = (u16 *)&buf;
	addr = vid / dev->phy_port_cnt;
	addr = vid / 4;
	index = vid & 3;
	ksz8_r_table(dev, TABLE_VLAN, addr, &buf);
	data[index] = vlan;