mirror of https://gitee.com/openkylin/linux.git
net: dsa: mv88e6xxx: factorize GLOBAL_CONTROL_2 setup
All switch models setup the GLOBAL_CONTROL_2 register with slightly differences. Since the cascade mode is valid even in a single chip setup, factorize such configuration. Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b0745e8794
commit
50484ff4d1
|
@ -51,17 +51,6 @@ static const char *mv88e6123_drv_probe(struct device *dsa_dev,
|
|||
ARRAY_SIZE(mv88e6123_table));
|
||||
}
|
||||
|
||||
static int mv88e6123_setup_global(struct dsa_switch *ds)
|
||||
{
|
||||
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
|
||||
|
||||
/* Disable remote management for now, and set the switch's
|
||||
* DSA device number.
|
||||
*/
|
||||
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);
|
||||
|
@ -73,10 +62,6 @@ static int mv88e6123_setup(struct dsa_switch *ds)
|
|||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = mv88e6123_setup_global(ds);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return mv88e6xxx_setup_ports(ds);
|
||||
}
|
||||
|
||||
|
|
|
@ -61,22 +61,6 @@ 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);
|
||||
int ret;
|
||||
|
||||
/* Disable cascade port functionality unless this device
|
||||
* is used in a cascade configuration, and set the switch's
|
||||
* DSA device number.
|
||||
*/
|
||||
if (ds->dst->pd->nr_chips > 1)
|
||||
ret = mv88e6xxx_reg_write(ps, REG_GLOBAL, GLOBAL_CONTROL_2,
|
||||
GLOBAL_CONTROL_2_MULTIPLE_CASCADE |
|
||||
(ds->index & 0x1f));
|
||||
else
|
||||
ret = mv88e6xxx_reg_write(ps, REG_GLOBAL, GLOBAL_CONTROL_2,
|
||||
GLOBAL_CONTROL_2_NO_CASCADE |
|
||||
(ds->index & 0x1f));
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Force the priority of IGMP/MLD snoop frames and ARP frames
|
||||
* to the highest setting.
|
||||
|
|
|
@ -58,17 +58,6 @@ static const char *mv88e6171_drv_probe(struct device *dsa_dev,
|
|||
ARRAY_SIZE(mv88e6171_table));
|
||||
}
|
||||
|
||||
static int mv88e6171_setup_global(struct dsa_switch *ds)
|
||||
{
|
||||
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
|
||||
|
||||
/* Disable remote management for now, and set the switch's
|
||||
* DSA device number.
|
||||
*/
|
||||
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);
|
||||
|
@ -80,10 +69,6 @@ static int mv88e6171_setup(struct dsa_switch *ds)
|
|||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = mv88e6171_setup_global(ds);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return mv88e6xxx_setup_ports(ds);
|
||||
}
|
||||
|
||||
|
|
|
@ -77,16 +77,6 @@ static const char *mv88e6352_drv_probe(struct device *dsa_dev,
|
|||
ARRAY_SIZE(mv88e6352_table));
|
||||
}
|
||||
|
||||
static int mv88e6352_setup_global(struct dsa_switch *ds)
|
||||
{
|
||||
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
|
||||
|
||||
/* Disable remote management for now, and set the switch's
|
||||
* DSA device number.
|
||||
*/
|
||||
return mv88e6xxx_reg_write(ps, REG_GLOBAL, 0x1c, ds->index & 0x1f);
|
||||
}
|
||||
|
||||
static int mv88e6352_setup(struct dsa_switch *ds)
|
||||
{
|
||||
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
|
||||
|
@ -98,10 +88,6 @@ static int mv88e6352_setup(struct dsa_switch *ds)
|
|||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = mv88e6352_setup_global(ds);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return mv88e6xxx_setup_ports(ds);
|
||||
}
|
||||
|
||||
|
|
|
@ -2950,6 +2950,13 @@ static int mv88e6xxx_setup_global(struct mv88e6xxx_priv_state *ps)
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
/* Disable remote management, and set the switch's DSA device number. */
|
||||
err = _mv88e6xxx_reg_write(ps, REG_GLOBAL, GLOBAL_CONTROL_2,
|
||||
GLOBAL_CONTROL_2_MULTIPLE_CASCADE |
|
||||
(ds->index & 0x1f));
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
/* Set the default address aging time to 5 minutes, and
|
||||
* enable address learn messages to be sent to all message
|
||||
* ports.
|
||||
|
|
Loading…
Reference in New Issue