Skip to content

Commit d8291a9

Browse files
viviendavem330
authored andcommitted
net: dsa: mv88e6xxx: complete ATU state definitions
Marvell has different values for the state of a MAC address, depending on its multicast bit. This patch completes the definitions for these states. At the same time, use 0 which is intuitive enough and simplifies the code a bit, instead of the UC or MC unused value. Signed-off-by: Vivien Didelot <[email protected]> Reviewed-by: Andrew Lunn <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent c21815f commit d8291a9

File tree

3 files changed

+41
-27
lines changed

3 files changed

+41
-27
lines changed

drivers/net/dsa/mv88e6xxx/chip.c

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1497,7 +1497,7 @@ static int mv88e6xxx_port_db_load_purge(struct mv88e6xxx_chip *chip, int port,
14971497
fid = vlan.fid;
14981498
}
14991499

1500-
entry.state = MV88E6XXX_G1_ATU_DATA_STATE_UNUSED;
1500+
entry.state = 0;
15011501
ether_addr_copy(entry.mac, addr);
15021502
eth_addr_dec(entry.mac);
15031503

@@ -1506,17 +1506,16 @@ static int mv88e6xxx_port_db_load_purge(struct mv88e6xxx_chip *chip, int port,
15061506
return err;
15071507

15081508
/* Initialize a fresh ATU entry if it isn't found */
1509-
if (entry.state == MV88E6XXX_G1_ATU_DATA_STATE_UNUSED ||
1510-
!ether_addr_equal(entry.mac, addr)) {
1509+
if (!entry.state || !ether_addr_equal(entry.mac, addr)) {
15111510
memset(&entry, 0, sizeof(entry));
15121511
ether_addr_copy(entry.mac, addr);
15131512
}
15141513

15151514
/* Purge the ATU entry only if no port is using it anymore */
1516-
if (state == MV88E6XXX_G1_ATU_DATA_STATE_UNUSED) {
1515+
if (!state) {
15171516
entry.portvec &= ~BIT(port);
15181517
if (!entry.portvec)
1519-
entry.state = MV88E6XXX_G1_ATU_DATA_STATE_UNUSED;
1518+
entry.state = 0;
15201519
} else {
15211520
entry.portvec |= BIT(port);
15221521
entry.state = state;
@@ -1732,8 +1731,7 @@ static int mv88e6xxx_port_fdb_del(struct dsa_switch *ds, int port,
17321731
int err;
17331732

17341733
mv88e6xxx_reg_lock(chip);
1735-
err = mv88e6xxx_port_db_load_purge(chip, port, addr, vid,
1736-
MV88E6XXX_G1_ATU_DATA_STATE_UNUSED);
1734+
err = mv88e6xxx_port_db_load_purge(chip, port, addr, vid, 0);
17371735
mv88e6xxx_reg_unlock(chip);
17381736

17391737
return err;
@@ -1747,15 +1745,15 @@ static int mv88e6xxx_port_db_dump_fid(struct mv88e6xxx_chip *chip,
17471745
bool is_static;
17481746
int err;
17491747

1750-
addr.state = MV88E6XXX_G1_ATU_DATA_STATE_UNUSED;
1748+
addr.state = 0;
17511749
eth_broadcast_addr(addr.mac);
17521750

17531751
do {
17541752
err = mv88e6xxx_g1_atu_getnext(chip, fid, &addr);
17551753
if (err)
17561754
return err;
17571755

1758-
if (addr.state == MV88E6XXX_G1_ATU_DATA_STATE_UNUSED)
1756+
if (!addr.state)
17591757
break;
17601758

17611759
if (addr.trunk || (addr.portvec & BIT(port)) == 0)
@@ -4690,8 +4688,7 @@ static int mv88e6xxx_port_mdb_del(struct dsa_switch *ds, int port,
46904688
int err;
46914689

46924690
mv88e6xxx_reg_lock(chip);
4693-
err = mv88e6xxx_port_db_load_purge(chip, port, mdb->addr, mdb->vid,
4694-
MV88E6XXX_G1_ATU_DATA_STATE_UNUSED);
4691+
err = mv88e6xxx_port_db_load_purge(chip, port, mdb->addr, mdb->vid, 0);
46954692
mv88e6xxx_reg_unlock(chip);
46964693

46974694
return err;

drivers/net/dsa/mv88e6xxx/global1.h

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -128,19 +128,36 @@
128128
#define MV88E6XXX_G1_ATU_OP_FULL_VIOLATION BIT(4)
129129

130130
/* Offset 0x0C: ATU Data Register */
131-
#define MV88E6XXX_G1_ATU_DATA 0x0c
132-
#define MV88E6XXX_G1_ATU_DATA_TRUNK 0x8000
133-
#define MV88E6XXX_G1_ATU_DATA_TRUNK_ID_MASK 0x00f0
134-
#define MV88E6XXX_G1_ATU_DATA_PORT_VECTOR_MASK 0x3ff0
135-
#define MV88E6XXX_G1_ATU_DATA_STATE_MASK 0x000f
136-
#define MV88E6XXX_G1_ATU_DATA_STATE_UNUSED 0x0000
137-
#define MV88E6XXX_G1_ATU_DATA_STATE_UC_MGMT 0x000d
138-
#define MV88E6XXX_G1_ATU_DATA_STATE_UC_STATIC 0x000e
139-
#define MV88E6XXX_G1_ATU_DATA_STATE_UC_PRIO_OVER 0x000f
140-
#define MV88E6XXX_G1_ATU_DATA_STATE_MC_NONE_RATE 0x0005
141-
#define MV88E6XXX_G1_ATU_DATA_STATE_MC_STATIC 0x0007
142-
#define MV88E6XXX_G1_ATU_DATA_STATE_MC_MGMT 0x000e
143-
#define MV88E6XXX_G1_ATU_DATA_STATE_MC_PRIO_OVER 0x000f
131+
#define MV88E6XXX_G1_ATU_DATA 0x0c
132+
#define MV88E6XXX_G1_ATU_DATA_TRUNK 0x8000
133+
#define MV88E6XXX_G1_ATU_DATA_TRUNK_ID_MASK 0x00f0
134+
#define MV88E6XXX_G1_ATU_DATA_PORT_VECTOR_MASK 0x3ff0
135+
#define MV88E6XXX_G1_ATU_DATA_STATE_MASK 0x000f
136+
#define MV88E6XXX_G1_ATU_DATA_STATE_UC_UNUSED 0x0000
137+
#define MV88E6XXX_G1_ATU_DATA_STATE_UC_AGE_1_OLDEST 0x0001
138+
#define MV88E6XXX_G1_ATU_DATA_STATE_UC_AGE_2 0x0002
139+
#define MV88E6XXX_G1_ATU_DATA_STATE_UC_AGE_3 0x0003
140+
#define MV88E6XXX_G1_ATU_DATA_STATE_UC_AGE_4 0x0004
141+
#define MV88E6XXX_G1_ATU_DATA_STATE_UC_AGE_5 0x0005
142+
#define MV88E6XXX_G1_ATU_DATA_STATE_UC_AGE_6 0x0006
143+
#define MV88E6XXX_G1_ATU_DATA_STATE_UC_AGE_7_NEWEST 0x0007
144+
#define MV88E6XXX_G1_ATU_DATA_STATE_UC_STATIC_POLICY 0x0008
145+
#define MV88E6XXX_G1_ATU_DATA_STATE_UC_STATIC_POLICY_PO 0x0009
146+
#define MV88E6XXX_G1_ATU_DATA_STATE_UC_STATIC_AVB_NRL 0x000a
147+
#define MV88E6XXX_G1_ATU_DATA_STATE_UC_STATIC_AVB_NRL_PO 0x000b
148+
#define MV88E6XXX_G1_ATU_DATA_STATE_UC_STATIC_DA_MGMT 0x000c
149+
#define MV88E6XXX_G1_ATU_DATA_STATE_UC_STATIC_DA_MGMT_PO 0x000d
150+
#define MV88E6XXX_G1_ATU_DATA_STATE_UC_STATIC 0x000e
151+
#define MV88E6XXX_G1_ATU_DATA_STATE_UC_STATIC_PO 0x000f
152+
#define MV88E6XXX_G1_ATU_DATA_STATE_MC_UNUSED 0x0000
153+
#define MV88E6XXX_G1_ATU_DATA_STATE_MC_STATIC_POLICY 0x0004
154+
#define MV88E6XXX_G1_ATU_DATA_STATE_MC_STATIC_AVB_NRL 0x0005
155+
#define MV88E6XXX_G1_ATU_DATA_STATE_MC_STATIC_DA_MGMT 0x0006
156+
#define MV88E6XXX_G1_ATU_DATA_STATE_MC_STATIC 0x0007
157+
#define MV88E6XXX_G1_ATU_DATA_STATE_MC_STATIC_POLICY_PO 0x000c
158+
#define MV88E6XXX_G1_ATU_DATA_STATE_MC_STATIC_AVB_NRL_PO 0x000d
159+
#define MV88E6XXX_G1_ATU_DATA_STATE_MC_STATIC_DA_MGMT_PO 0x000e
160+
#define MV88E6XXX_G1_ATU_DATA_STATE_MC_STATIC_PO 0x000f
144161

145162
/* Offset 0x0D: ATU MAC Address Register Bytes 0 & 1
146163
* Offset 0x0E: ATU MAC Address Register Bytes 2 & 3

drivers/net/dsa/mv88e6xxx/global1_atu.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ static int mv88e6xxx_g1_atu_data_read(struct mv88e6xxx_chip *chip,
135135
return err;
136136

137137
entry->state = val & 0xf;
138-
if (entry->state != MV88E6XXX_G1_ATU_DATA_STATE_UNUSED) {
138+
if (entry->state) {
139139
entry->trunk = !!(val & MV88E6XXX_G1_ATU_DATA_TRUNK);
140140
entry->portvec = (val >> 4) & mv88e6xxx_port_mask(chip);
141141
}
@@ -148,7 +148,7 @@ static int mv88e6xxx_g1_atu_data_write(struct mv88e6xxx_chip *chip,
148148
{
149149
u16 data = entry->state & 0xf;
150150

151-
if (entry->state != MV88E6XXX_G1_ATU_DATA_STATE_UNUSED) {
151+
if (entry->state) {
152152
if (entry->trunk)
153153
data |= MV88E6XXX_G1_ATU_DATA_TRUNK;
154154

@@ -209,7 +209,7 @@ int mv88e6xxx_g1_atu_getnext(struct mv88e6xxx_chip *chip, u16 fid,
209209
return err;
210210

211211
/* Write the MAC address to iterate from only once */
212-
if (entry->state == MV88E6XXX_G1_ATU_DATA_STATE_UNUSED) {
212+
if (!entry->state) {
213213
err = mv88e6xxx_g1_atu_mac_write(chip, entry);
214214
if (err)
215215
return err;

0 commit comments

Comments
 (0)