mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-17 03:36:59 +07:00
net: dsa: mv88e6xxx: replace ds with ps where possible
The dsa_switch structure ds is actually needed in very few places, mostly during setup of the switch. The private structure ps is however needed nearly everywhere. Pass ps, not ds internally. [vd: rebased Andrew's patch.] Signed-off-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8cd14ccbfd
commit
158bc065f2
@ -50,6 +50,7 @@ static const char *mv88e6123_drv_probe(struct device *dsa_dev,
|
||||
|
||||
static int mv88e6123_setup_global(struct dsa_switch *ds)
|
||||
{
|
||||
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
|
||||
u32 upstream_port = dsa_upstream_port(ds);
|
||||
int ret;
|
||||
u32 reg;
|
||||
@ -62,7 +63,7 @@ static int mv88e6123_setup_global(struct dsa_switch *ds)
|
||||
* external PHYs to poll), don't discard packets with
|
||||
* excessive collisions, and mask all interrupt sources.
|
||||
*/
|
||||
ret = mv88e6xxx_reg_write(ds, REG_GLOBAL, GLOBAL_CONTROL, 0x0000);
|
||||
ret = mv88e6xxx_reg_write(ps, REG_GLOBAL, GLOBAL_CONTROL, 0x0000);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@ -73,26 +74,29 @@ static int mv88e6123_setup_global(struct dsa_switch *ds)
|
||||
reg = upstream_port << GLOBAL_MONITOR_CONTROL_INGRESS_SHIFT |
|
||||
upstream_port << GLOBAL_MONITOR_CONTROL_EGRESS_SHIFT |
|
||||
upstream_port << GLOBAL_MONITOR_CONTROL_ARP_SHIFT;
|
||||
ret = mv88e6xxx_reg_write(ds, REG_GLOBAL, GLOBAL_MONITOR_CONTROL, reg);
|
||||
ret = mv88e6xxx_reg_write(ps, REG_GLOBAL, GLOBAL_MONITOR_CONTROL, reg);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Disable remote management for now, and set the switch's
|
||||
* DSA device number.
|
||||
*/
|
||||
return mv88e6xxx_reg_write(ds, REG_GLOBAL, GLOBAL_CONTROL_2,
|
||||
return mv88e6xxx_reg_write(ps, REG_GLOBAL, GLOBAL_CONTROL_2,
|
||||
ds->index & 0x1f);
|
||||
}
|
||||
|
||||
static int mv88e6123_setup(struct dsa_switch *ds)
|
||||
{
|
||||
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
|
||||
int ret;
|
||||
|
||||
ret = mv88e6xxx_setup_common(ds);
|
||||
ps->ds = ds;
|
||||
|
||||
ret = mv88e6xxx_setup_common(ps);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = mv88e6xxx_switch_reset(ds, false);
|
||||
ret = mv88e6xxx_switch_reset(ps, false);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
@ -56,6 +56,7 @@ static const char *mv88e6131_drv_probe(struct device *dsa_dev,
|
||||
|
||||
static int mv88e6131_setup_global(struct dsa_switch *ds)
|
||||
{
|
||||
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
|
||||
u32 upstream_port = dsa_upstream_port(ds);
|
||||
int ret;
|
||||
u32 reg;
|
||||
@ -69,14 +70,14 @@ static int mv88e6131_setup_global(struct dsa_switch *ds)
|
||||
* to arbitrate between packet queues, set the maximum frame
|
||||
* size to 1632, and mask all interrupt sources.
|
||||
*/
|
||||
ret = mv88e6xxx_reg_write(ds, REG_GLOBAL, GLOBAL_CONTROL,
|
||||
ret = mv88e6xxx_reg_write(ps, REG_GLOBAL, GLOBAL_CONTROL,
|
||||
GLOBAL_CONTROL_PPU_ENABLE |
|
||||
GLOBAL_CONTROL_MAX_FRAME_1632);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Set the VLAN ethertype to 0x8100. */
|
||||
ret = mv88e6xxx_reg_write(ds, REG_GLOBAL, GLOBAL_CORE_TAG_TYPE, 0x8100);
|
||||
ret = mv88e6xxx_reg_write(ps, REG_GLOBAL, GLOBAL_CORE_TAG_TYPE, 0x8100);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@ -87,7 +88,7 @@ static int mv88e6131_setup_global(struct dsa_switch *ds)
|
||||
reg = upstream_port << GLOBAL_MONITOR_CONTROL_INGRESS_SHIFT |
|
||||
upstream_port << GLOBAL_MONITOR_CONTROL_EGRESS_SHIFT |
|
||||
GLOBAL_MONITOR_CONTROL_ARP_DISABLED;
|
||||
ret = mv88e6xxx_reg_write(ds, REG_GLOBAL, GLOBAL_MONITOR_CONTROL, reg);
|
||||
ret = mv88e6xxx_reg_write(ps, REG_GLOBAL, GLOBAL_MONITOR_CONTROL, reg);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@ -96,11 +97,11 @@ static int mv88e6131_setup_global(struct dsa_switch *ds)
|
||||
* DSA device number.
|
||||
*/
|
||||
if (ds->dst->pd->nr_chips > 1)
|
||||
ret = mv88e6xxx_reg_write(ds, REG_GLOBAL, GLOBAL_CONTROL_2,
|
||||
ret = mv88e6xxx_reg_write(ps, REG_GLOBAL, GLOBAL_CONTROL_2,
|
||||
GLOBAL_CONTROL_2_MULTIPLE_CASCADE |
|
||||
(ds->index & 0x1f));
|
||||
else
|
||||
ret = mv88e6xxx_reg_write(ds, REG_GLOBAL, GLOBAL_CONTROL_2,
|
||||
ret = mv88e6xxx_reg_write(ps, REG_GLOBAL, GLOBAL_CONTROL_2,
|
||||
GLOBAL_CONTROL_2_NO_CASCADE |
|
||||
(ds->index & 0x1f));
|
||||
if (ret)
|
||||
@ -109,7 +110,7 @@ static int mv88e6131_setup_global(struct dsa_switch *ds)
|
||||
/* Force the priority of IGMP/MLD snoop frames and ARP frames
|
||||
* to the highest setting.
|
||||
*/
|
||||
return mv88e6xxx_reg_write(ds, REG_GLOBAL2, GLOBAL2_PRIO_OVERRIDE,
|
||||
return mv88e6xxx_reg_write(ps, REG_GLOBAL2, GLOBAL2_PRIO_OVERRIDE,
|
||||
GLOBAL2_PRIO_OVERRIDE_FORCE_SNOOP |
|
||||
7 << GLOBAL2_PRIO_OVERRIDE_SNOOP_SHIFT |
|
||||
GLOBAL2_PRIO_OVERRIDE_FORCE_ARP |
|
||||
@ -118,15 +119,18 @@ static int mv88e6131_setup_global(struct dsa_switch *ds)
|
||||
|
||||
static int mv88e6131_setup(struct dsa_switch *ds)
|
||||
{
|
||||
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
|
||||
int ret;
|
||||
|
||||
ret = mv88e6xxx_setup_common(ds);
|
||||
ps->ds = ds;
|
||||
|
||||
ret = mv88e6xxx_setup_common(ps);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
mv88e6xxx_ppu_state_init(ds);
|
||||
mv88e6xxx_ppu_state_init(ps);
|
||||
|
||||
ret = mv88e6xxx_switch_reset(ds, false);
|
||||
ret = mv88e6xxx_switch_reset(ps, false);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
@ -56,6 +56,7 @@ static const char *mv88e6171_drv_probe(struct device *dsa_dev,
|
||||
|
||||
static int mv88e6171_setup_global(struct dsa_switch *ds)
|
||||
{
|
||||
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
|
||||
u32 upstream_port = dsa_upstream_port(ds);
|
||||
int ret;
|
||||
u32 reg;
|
||||
@ -67,7 +68,7 @@ static int mv88e6171_setup_global(struct dsa_switch *ds)
|
||||
/* Discard packets with excessive collisions, mask all
|
||||
* interrupt sources, enable PPU.
|
||||
*/
|
||||
ret = mv88e6xxx_reg_write(ds, REG_GLOBAL, GLOBAL_CONTROL,
|
||||
ret = mv88e6xxx_reg_write(ps, REG_GLOBAL, GLOBAL_CONTROL,
|
||||
GLOBAL_CONTROL_PPU_ENABLE |
|
||||
GLOBAL_CONTROL_DISCARD_EXCESS);
|
||||
if (ret)
|
||||
@ -81,26 +82,29 @@ static int mv88e6171_setup_global(struct dsa_switch *ds)
|
||||
upstream_port << GLOBAL_MONITOR_CONTROL_EGRESS_SHIFT |
|
||||
upstream_port << GLOBAL_MONITOR_CONTROL_ARP_SHIFT |
|
||||
upstream_port << GLOBAL_MONITOR_CONTROL_MIRROR_SHIFT;
|
||||
ret = mv88e6xxx_reg_write(ds, REG_GLOBAL, GLOBAL_MONITOR_CONTROL, reg);
|
||||
ret = mv88e6xxx_reg_write(ps, REG_GLOBAL, GLOBAL_MONITOR_CONTROL, reg);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Disable remote management for now, and set the switch's
|
||||
* DSA device number.
|
||||
*/
|
||||
return mv88e6xxx_reg_write(ds, REG_GLOBAL, GLOBAL_CONTROL_2,
|
||||
return mv88e6xxx_reg_write(ps, REG_GLOBAL, GLOBAL_CONTROL_2,
|
||||
ds->index & 0x1f);
|
||||
}
|
||||
|
||||
static int mv88e6171_setup(struct dsa_switch *ds)
|
||||
{
|
||||
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
|
||||
int ret;
|
||||
|
||||
ret = mv88e6xxx_setup_common(ds);
|
||||
ps->ds = ds;
|
||||
|
||||
ret = mv88e6xxx_setup_common(ps);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = mv88e6xxx_switch_reset(ds, true);
|
||||
ret = mv88e6xxx_switch_reset(ps, true);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
@ -73,6 +73,7 @@ static const char *mv88e6352_drv_probe(struct device *dsa_dev,
|
||||
|
||||
static int mv88e6352_setup_global(struct dsa_switch *ds)
|
||||
{
|
||||
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
|
||||
u32 upstream_port = dsa_upstream_port(ds);
|
||||
int ret;
|
||||
u32 reg;
|
||||
@ -84,7 +85,7 @@ static int mv88e6352_setup_global(struct dsa_switch *ds)
|
||||
/* Discard packets with excessive collisions,
|
||||
* mask all interrupt sources, enable PPU (bit 14, undocumented).
|
||||
*/
|
||||
ret = mv88e6xxx_reg_write(ds, REG_GLOBAL, GLOBAL_CONTROL,
|
||||
ret = mv88e6xxx_reg_write(ps, REG_GLOBAL, GLOBAL_CONTROL,
|
||||
GLOBAL_CONTROL_PPU_ENABLE |
|
||||
GLOBAL_CONTROL_DISCARD_EXCESS);
|
||||
if (ret)
|
||||
@ -97,14 +98,14 @@ static int mv88e6352_setup_global(struct dsa_switch *ds)
|
||||
reg = upstream_port << GLOBAL_MONITOR_CONTROL_INGRESS_SHIFT |
|
||||
upstream_port << GLOBAL_MONITOR_CONTROL_EGRESS_SHIFT |
|
||||
upstream_port << GLOBAL_MONITOR_CONTROL_ARP_SHIFT;
|
||||
ret = mv88e6xxx_reg_write(ds, REG_GLOBAL, GLOBAL_MONITOR_CONTROL, reg);
|
||||
ret = mv88e6xxx_reg_write(ps, REG_GLOBAL, GLOBAL_MONITOR_CONTROL, reg);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Disable remote management for now, and set the switch's
|
||||
* DSA device number.
|
||||
*/
|
||||
return mv88e6xxx_reg_write(ds, REG_GLOBAL, 0x1c, ds->index & 0x1f);
|
||||
return mv88e6xxx_reg_write(ps, REG_GLOBAL, 0x1c, ds->index & 0x1f);
|
||||
}
|
||||
|
||||
static int mv88e6352_setup(struct dsa_switch *ds)
|
||||
@ -112,13 +113,15 @@ static int mv88e6352_setup(struct dsa_switch *ds)
|
||||
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
|
||||
int ret;
|
||||
|
||||
ret = mv88e6xxx_setup_common(ds);
|
||||
ps->ds = ds;
|
||||
|
||||
ret = mv88e6xxx_setup_common(ps);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
mutex_init(&ps->eeprom_mutex);
|
||||
|
||||
ret = mv88e6xxx_switch_reset(ds, true);
|
||||
ret = mv88e6xxx_switch_reset(ps, true);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
@ -136,7 +139,7 @@ static int mv88e6352_read_eeprom_word(struct dsa_switch *ds, int addr)
|
||||
|
||||
mutex_lock(&ps->eeprom_mutex);
|
||||
|
||||
ret = mv88e6xxx_reg_write(ds, REG_GLOBAL2, GLOBAL2_EEPROM_OP,
|
||||
ret = mv88e6xxx_reg_write(ps, REG_GLOBAL2, GLOBAL2_EEPROM_OP,
|
||||
GLOBAL2_EEPROM_OP_READ |
|
||||
(addr & GLOBAL2_EEPROM_OP_ADDR_MASK));
|
||||
if (ret < 0)
|
||||
@ -146,7 +149,7 @@ static int mv88e6352_read_eeprom_word(struct dsa_switch *ds, int addr)
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
|
||||
ret = mv88e6xxx_reg_read(ds, REG_GLOBAL2, GLOBAL2_EEPROM_DATA);
|
||||
ret = mv88e6xxx_reg_read(ps, REG_GLOBAL2, GLOBAL2_EEPROM_DATA);
|
||||
error:
|
||||
mutex_unlock(&ps->eeprom_mutex);
|
||||
return ret;
|
||||
@ -217,9 +220,10 @@ static int mv88e6352_get_eeprom(struct dsa_switch *ds,
|
||||
|
||||
static int mv88e6352_eeprom_is_readonly(struct dsa_switch *ds)
|
||||
{
|
||||
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
|
||||
int ret;
|
||||
|
||||
ret = mv88e6xxx_reg_read(ds, REG_GLOBAL2, GLOBAL2_EEPROM_OP);
|
||||
ret = mv88e6xxx_reg_read(ps, REG_GLOBAL2, GLOBAL2_EEPROM_OP);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
@ -237,11 +241,11 @@ static int mv88e6352_write_eeprom_word(struct dsa_switch *ds, int addr,
|
||||
|
||||
mutex_lock(&ps->eeprom_mutex);
|
||||
|
||||
ret = mv88e6xxx_reg_write(ds, REG_GLOBAL2, GLOBAL2_EEPROM_DATA, data);
|
||||
ret = mv88e6xxx_reg_write(ps, REG_GLOBAL2, GLOBAL2_EEPROM_DATA, data);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
|
||||
ret = mv88e6xxx_reg_write(ds, REG_GLOBAL2, GLOBAL2_EEPROM_OP,
|
||||
ret = mv88e6xxx_reg_write(ps, REG_GLOBAL2, GLOBAL2_EEPROM_OP,
|
||||
GLOBAL2_EEPROM_OP_WRITE |
|
||||
(addr & GLOBAL2_EEPROM_OP_ADDR_MASK));
|
||||
if (ret < 0)
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -388,6 +388,9 @@ struct mv88e6xxx_priv_state {
|
||||
/* The dsa_switch this private structure is related to */
|
||||
struct dsa_switch *ds;
|
||||
|
||||
/* The device this structure is associated to */
|
||||
struct device *dev;
|
||||
|
||||
/* When using multi-chip addressing, this mutex protects
|
||||
* access to the indirect access registers. (In single-chip
|
||||
* mode, this mutex is effectively useless.)
|
||||
@ -446,17 +449,18 @@ struct mv88e6xxx_hw_stat {
|
||||
enum stat_type type;
|
||||
};
|
||||
|
||||
int mv88e6xxx_switch_reset(struct dsa_switch *ds, bool ppu_active);
|
||||
int mv88e6xxx_switch_reset(struct mv88e6xxx_priv_state *ps, bool ppu_active);
|
||||
const char *mv88e6xxx_drv_probe(struct device *dsa_dev, struct device *host_dev,
|
||||
int sw_addr, void **priv,
|
||||
const struct mv88e6xxx_info *table,
|
||||
unsigned int num);
|
||||
|
||||
int mv88e6xxx_setup_ports(struct dsa_switch *ds);
|
||||
int mv88e6xxx_setup_common(struct dsa_switch *ds);
|
||||
int mv88e6xxx_setup_common(struct mv88e6xxx_priv_state *ps);
|
||||
int mv88e6xxx_setup_global(struct dsa_switch *ds);
|
||||
int mv88e6xxx_reg_read(struct dsa_switch *ds, int addr, int reg);
|
||||
int mv88e6xxx_reg_write(struct dsa_switch *ds, int addr, int reg, u16 val);
|
||||
int mv88e6xxx_reg_read(struct mv88e6xxx_priv_state *ps, int addr, int reg);
|
||||
int mv88e6xxx_reg_write(struct mv88e6xxx_priv_state *ps, int addr,
|
||||
int reg, u16 val);
|
||||
int mv88e6xxx_set_addr_direct(struct dsa_switch *ds, u8 *addr);
|
||||
int mv88e6xxx_set_addr_indirect(struct dsa_switch *ds, u8 *addr);
|
||||
int mv88e6xxx_phy_read(struct dsa_switch *ds, int port, int regnum);
|
||||
@ -464,7 +468,7 @@ int mv88e6xxx_phy_write(struct dsa_switch *ds, int port, int regnum, u16 val);
|
||||
int mv88e6xxx_phy_read_indirect(struct dsa_switch *ds, int port, int regnum);
|
||||
int mv88e6xxx_phy_write_indirect(struct dsa_switch *ds, int port, int regnum,
|
||||
u16 val);
|
||||
void mv88e6xxx_ppu_state_init(struct dsa_switch *ds);
|
||||
void mv88e6xxx_ppu_state_init(struct mv88e6xxx_priv_state *ps);
|
||||
int mv88e6xxx_phy_read_ppu(struct dsa_switch *ds, int addr, int regnum);
|
||||
int mv88e6xxx_phy_write_ppu(struct dsa_switch *ds, int addr,
|
||||
int regnum, u16 val);
|
||||
|
Loading…
Reference in New Issue
Block a user