mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-08 21:53:54 +08:00
net: dsa: mv88e6xxx: extract ATU data write access
Other ATU commands need to write the ATU data register. To ease the introduction of such commands, extract the ATU data write access from _mv88e6xxx_atu_load to its own function. Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
70cc99d10c
commit
37705b7315
@ -1047,6 +1047,29 @@ static int _mv88e6xxx_atu_cmd(struct dsa_switch *ds, u16 cmd)
|
||||
return _mv88e6xxx_atu_wait(ds);
|
||||
}
|
||||
|
||||
static int _mv88e6xxx_atu_data_write(struct dsa_switch *ds,
|
||||
struct mv88e6xxx_atu_entry *entry)
|
||||
{
|
||||
u16 data = entry->state & GLOBAL_ATU_DATA_STATE_MASK;
|
||||
|
||||
if (entry->state != GLOBAL_ATU_DATA_STATE_UNUSED) {
|
||||
unsigned int mask, shift;
|
||||
|
||||
if (entry->trunk) {
|
||||
data |= GLOBAL_ATU_DATA_TRUNK;
|
||||
mask = GLOBAL_ATU_DATA_TRUNK_ID_MASK;
|
||||
shift = GLOBAL_ATU_DATA_TRUNK_ID_SHIFT;
|
||||
} else {
|
||||
mask = GLOBAL_ATU_DATA_PORT_VECTOR_MASK;
|
||||
shift = GLOBAL_ATU_DATA_PORT_VECTOR_SHIFT;
|
||||
}
|
||||
|
||||
data |= (entry->portv_trunkid << shift) & mask;
|
||||
}
|
||||
|
||||
return _mv88e6xxx_reg_write(ds, REG_GLOBAL, GLOBAL_ATU_DATA, data);
|
||||
}
|
||||
|
||||
static int _mv88e6xxx_flush_fid(struct dsa_switch *ds, int fid)
|
||||
{
|
||||
int ret;
|
||||
@ -1761,7 +1784,6 @@ static int _mv88e6xxx_atu_mac_read(struct dsa_switch *ds, unsigned char *addr)
|
||||
static int _mv88e6xxx_atu_load(struct dsa_switch *ds,
|
||||
struct mv88e6xxx_atu_entry *entry)
|
||||
{
|
||||
u16 reg = 0;
|
||||
int ret;
|
||||
|
||||
ret = _mv88e6xxx_atu_wait(ds);
|
||||
@ -1772,24 +1794,7 @@ static int _mv88e6xxx_atu_load(struct dsa_switch *ds,
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (entry->state != GLOBAL_ATU_DATA_STATE_UNUSED) {
|
||||
unsigned int mask, shift;
|
||||
|
||||
if (entry->trunk) {
|
||||
reg |= GLOBAL_ATU_DATA_TRUNK;
|
||||
mask = GLOBAL_ATU_DATA_TRUNK_ID_MASK;
|
||||
shift = GLOBAL_ATU_DATA_TRUNK_ID_SHIFT;
|
||||
} else {
|
||||
mask = GLOBAL_ATU_DATA_PORT_VECTOR_MASK;
|
||||
shift = GLOBAL_ATU_DATA_PORT_VECTOR_SHIFT;
|
||||
}
|
||||
|
||||
reg |= (entry->portv_trunkid << shift) & mask;
|
||||
}
|
||||
|
||||
reg |= entry->state & GLOBAL_ATU_DATA_STATE_MASK;
|
||||
|
||||
ret = _mv88e6xxx_reg_write(ds, REG_GLOBAL, GLOBAL_ATU_DATA, reg);
|
||||
ret = _mv88e6xxx_atu_data_write(ds, entry);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user