Commit 009a2b98 authored by Vivien Didelot's avatar Vivien Didelot Committed by David S. Miller

net: dsa: mv88e6xxx: add number of ports to info

Drop the ps->num_ports variable in favor of a new member of the info
structure. This removes the need to assign it at setup time.
Signed-off-by: default avatarVivien Didelot <vivien.didelot@savoirfairelinux.com>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 22356476
...@@ -22,14 +22,17 @@ static const struct mv88e6xxx_info mv88e6123_table[] = { ...@@ -22,14 +22,17 @@ static const struct mv88e6xxx_info mv88e6123_table[] = {
.prod_num = PORT_SWITCH_ID_PROD_NUM_6123, .prod_num = PORT_SWITCH_ID_PROD_NUM_6123,
.family = MV88E6XXX_FAMILY_6165, .family = MV88E6XXX_FAMILY_6165,
.name = "Marvell 88E6123", .name = "Marvell 88E6123",
.num_ports = 3,
}, { }, {
.prod_num = PORT_SWITCH_ID_PROD_NUM_6161, .prod_num = PORT_SWITCH_ID_PROD_NUM_6161,
.family = MV88E6XXX_FAMILY_6165, .family = MV88E6XXX_FAMILY_6165,
.name = "Marvell 88E6161", .name = "Marvell 88E6161",
.num_ports = 6,
}, { }, {
.prod_num = PORT_SWITCH_ID_PROD_NUM_6165, .prod_num = PORT_SWITCH_ID_PROD_NUM_6165,
.family = MV88E6XXX_FAMILY_6165, .family = MV88E6XXX_FAMILY_6165,
.name = "Marvell 88E6165", .name = "Marvell 88E6165",
.num_ports = 6,
} }
}; };
...@@ -80,25 +83,12 @@ static int mv88e6123_setup_global(struct dsa_switch *ds) ...@@ -80,25 +83,12 @@ static int mv88e6123_setup_global(struct dsa_switch *ds)
static int mv88e6123_setup(struct dsa_switch *ds) static int mv88e6123_setup(struct dsa_switch *ds)
{ {
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
int ret; int ret;
ret = mv88e6xxx_setup_common(ds); ret = mv88e6xxx_setup_common(ds);
if (ret < 0) if (ret < 0)
return ret; return ret;
switch (ps->id) {
case PORT_SWITCH_ID_6123:
ps->num_ports = 3;
break;
case PORT_SWITCH_ID_6161:
case PORT_SWITCH_ID_6165:
ps->num_ports = 6;
break;
default:
return -ENODEV;
}
ret = mv88e6xxx_switch_reset(ds, false); ret = mv88e6xxx_switch_reset(ds, false);
if (ret < 0) if (ret < 0)
return ret; return ret;
......
...@@ -22,18 +22,22 @@ static const struct mv88e6xxx_info mv88e6131_table[] = { ...@@ -22,18 +22,22 @@ static const struct mv88e6xxx_info mv88e6131_table[] = {
.prod_num = PORT_SWITCH_ID_PROD_NUM_6095, .prod_num = PORT_SWITCH_ID_PROD_NUM_6095,
.family = MV88E6XXX_FAMILY_6095, .family = MV88E6XXX_FAMILY_6095,
.name = "Marvell 88E6095/88E6095F", .name = "Marvell 88E6095/88E6095F",
.num_ports = 11,
}, { }, {
.prod_num = PORT_SWITCH_ID_PROD_NUM_6085, .prod_num = PORT_SWITCH_ID_PROD_NUM_6085,
.family = MV88E6XXX_FAMILY_6097, .family = MV88E6XXX_FAMILY_6097,
.name = "Marvell 88E6085", .name = "Marvell 88E6085",
.num_ports = 10,
}, { }, {
.prod_num = PORT_SWITCH_ID_PROD_NUM_6131, .prod_num = PORT_SWITCH_ID_PROD_NUM_6131,
.family = MV88E6XXX_FAMILY_6185, .family = MV88E6XXX_FAMILY_6185,
.name = "Marvell 88E6131", .name = "Marvell 88E6131",
.num_ports = 8,
}, { }, {
.prod_num = PORT_SWITCH_ID_PROD_NUM_6185, .prod_num = PORT_SWITCH_ID_PROD_NUM_6185,
.family = MV88E6XXX_FAMILY_6185, .family = MV88E6XXX_FAMILY_6185,
.name = "Marvell 88E6185", .name = "Marvell 88E6185",
.num_ports = 10,
} }
}; };
...@@ -110,7 +114,6 @@ static int mv88e6131_setup_global(struct dsa_switch *ds) ...@@ -110,7 +114,6 @@ static int mv88e6131_setup_global(struct dsa_switch *ds)
static int mv88e6131_setup(struct dsa_switch *ds) static int mv88e6131_setup(struct dsa_switch *ds)
{ {
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
int ret; int ret;
ret = mv88e6xxx_setup_common(ds); ret = mv88e6xxx_setup_common(ds);
...@@ -119,21 +122,6 @@ static int mv88e6131_setup(struct dsa_switch *ds) ...@@ -119,21 +122,6 @@ static int mv88e6131_setup(struct dsa_switch *ds)
mv88e6xxx_ppu_state_init(ds); mv88e6xxx_ppu_state_init(ds);
switch (ps->id) {
case PORT_SWITCH_ID_6085:
case PORT_SWITCH_ID_6185:
ps->num_ports = 10;
break;
case PORT_SWITCH_ID_6095:
ps->num_ports = 11;
break;
case PORT_SWITCH_ID_6131:
ps->num_ports = 8;
break;
default:
return -ENODEV;
}
ret = mv88e6xxx_switch_reset(ds, false); ret = mv88e6xxx_switch_reset(ds, false);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -149,7 +137,7 @@ static int mv88e6131_port_to_phy_addr(struct dsa_switch *ds, int port) ...@@ -149,7 +137,7 @@ static int mv88e6131_port_to_phy_addr(struct dsa_switch *ds, int port)
{ {
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds); struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
if (port >= 0 && port < ps->num_ports) if (port >= 0 && port < ps->info->num_ports)
return port; return port;
return -EINVAL; return -EINVAL;
......
...@@ -22,18 +22,22 @@ static const struct mv88e6xxx_info mv88e6171_table[] = { ...@@ -22,18 +22,22 @@ static const struct mv88e6xxx_info mv88e6171_table[] = {
.prod_num = PORT_SWITCH_ID_PROD_NUM_6171, .prod_num = PORT_SWITCH_ID_PROD_NUM_6171,
.family = MV88E6XXX_FAMILY_6351, .family = MV88E6XXX_FAMILY_6351,
.name = "Marvell 88E6171", .name = "Marvell 88E6171",
.num_ports = 7,
}, { }, {
.prod_num = PORT_SWITCH_ID_PROD_NUM_6175, .prod_num = PORT_SWITCH_ID_PROD_NUM_6175,
.family = MV88E6XXX_FAMILY_6351, .family = MV88E6XXX_FAMILY_6351,
.name = "Marvell 88E6175", .name = "Marvell 88E6175",
.num_ports = 7,
}, { }, {
.prod_num = PORT_SWITCH_ID_PROD_NUM_6350, .prod_num = PORT_SWITCH_ID_PROD_NUM_6350,
.family = MV88E6XXX_FAMILY_6351, .family = MV88E6XXX_FAMILY_6351,
.name = "Marvell 88E6350", .name = "Marvell 88E6350",
.num_ports = 7,
}, { }, {
.prod_num = PORT_SWITCH_ID_PROD_NUM_6351, .prod_num = PORT_SWITCH_ID_PROD_NUM_6351,
.family = MV88E6XXX_FAMILY_6351, .family = MV88E6XXX_FAMILY_6351,
.name = "Marvell 88E6351", .name = "Marvell 88E6351",
.num_ports = 7,
} }
}; };
...@@ -86,15 +90,12 @@ static int mv88e6171_setup_global(struct dsa_switch *ds) ...@@ -86,15 +90,12 @@ static int mv88e6171_setup_global(struct dsa_switch *ds)
static int mv88e6171_setup(struct dsa_switch *ds) static int mv88e6171_setup(struct dsa_switch *ds)
{ {
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
int ret; int ret;
ret = mv88e6xxx_setup_common(ds); ret = mv88e6xxx_setup_common(ds);
if (ret < 0) if (ret < 0)
return ret; return ret;
ps->num_ports = 7;
ret = mv88e6xxx_switch_reset(ds, true); ret = mv88e6xxx_switch_reset(ds, true);
if (ret < 0) if (ret < 0)
return ret; return ret;
......
...@@ -27,26 +27,32 @@ static const struct mv88e6xxx_info mv88e6352_table[] = { ...@@ -27,26 +27,32 @@ static const struct mv88e6xxx_info mv88e6352_table[] = {
.prod_num = PORT_SWITCH_ID_PROD_NUM_6320, .prod_num = PORT_SWITCH_ID_PROD_NUM_6320,
.family = MV88E6XXX_FAMILY_6320, .family = MV88E6XXX_FAMILY_6320,
.name = "Marvell 88E6320", .name = "Marvell 88E6320",
.num_ports = 7,
}, { }, {
.prod_num = PORT_SWITCH_ID_PROD_NUM_6321, .prod_num = PORT_SWITCH_ID_PROD_NUM_6321,
.family = MV88E6XXX_FAMILY_6320, .family = MV88E6XXX_FAMILY_6320,
.name = "Marvell 88E6321", .name = "Marvell 88E6321",
.num_ports = 7,
}, { }, {
.prod_num = PORT_SWITCH_ID_PROD_NUM_6172, .prod_num = PORT_SWITCH_ID_PROD_NUM_6172,
.family = MV88E6XXX_FAMILY_6352, .family = MV88E6XXX_FAMILY_6352,
.name = "Marvell 88E6172", .name = "Marvell 88E6172",
.num_ports = 7,
}, { }, {
.prod_num = PORT_SWITCH_ID_PROD_NUM_6176, .prod_num = PORT_SWITCH_ID_PROD_NUM_6176,
.family = MV88E6XXX_FAMILY_6352, .family = MV88E6XXX_FAMILY_6352,
.name = "Marvell 88E6176", .name = "Marvell 88E6176",
.num_ports = 7,
}, { }, {
.prod_num = PORT_SWITCH_ID_PROD_NUM_6240, .prod_num = PORT_SWITCH_ID_PROD_NUM_6240,
.family = MV88E6XXX_FAMILY_6352, .family = MV88E6XXX_FAMILY_6352,
.name = "Marvell 88E6240", .name = "Marvell 88E6240",
.num_ports = 7,
}, { }, {
.prod_num = PORT_SWITCH_ID_PROD_NUM_6352, .prod_num = PORT_SWITCH_ID_PROD_NUM_6352,
.family = MV88E6XXX_FAMILY_6352, .family = MV88E6XXX_FAMILY_6352,
.name = "Marvell 88E6352", .name = "Marvell 88E6352",
.num_ports = 7,
} }
}; };
...@@ -104,8 +110,6 @@ static int mv88e6352_setup(struct dsa_switch *ds) ...@@ -104,8 +110,6 @@ static int mv88e6352_setup(struct dsa_switch *ds)
if (ret < 0) if (ret < 0)
return ret; return ret;
ps->num_ports = 7;
mutex_init(&ps->eeprom_mutex); mutex_init(&ps->eeprom_mutex);
ret = mv88e6xxx_switch_reset(ds, true); ret = mv88e6xxx_switch_reset(ds, true);
......
...@@ -551,7 +551,7 @@ void mv88e6xxx_adjust_link(struct dsa_switch *ds, int port, ...@@ -551,7 +551,7 @@ void mv88e6xxx_adjust_link(struct dsa_switch *ds, int port,
reg |= PORT_PCS_CTRL_DUPLEX_FULL; reg |= PORT_PCS_CTRL_DUPLEX_FULL;
if ((mv88e6xxx_6352_family(ds) || mv88e6xxx_6351_family(ds)) && if ((mv88e6xxx_6352_family(ds) || mv88e6xxx_6351_family(ds)) &&
(port >= ps->num_ports - 2)) { (port >= ps->info->num_ports - 2)) {
if (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) if (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID)
reg |= PORT_PCS_CTRL_RGMII_DELAY_RXCLK; reg |= PORT_PCS_CTRL_RGMII_DELAY_RXCLK;
if (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID) if (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID)
...@@ -1132,7 +1132,7 @@ static int _mv88e6xxx_port_based_vlan_map(struct dsa_switch *ds, int port) ...@@ -1132,7 +1132,7 @@ static int _mv88e6xxx_port_based_vlan_map(struct dsa_switch *ds, int port)
{ {
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds); struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
struct net_device *bridge = ps->ports[port].bridge_dev; struct net_device *bridge = ps->ports[port].bridge_dev;
const u16 mask = (1 << ps->num_ports) - 1; const u16 mask = (1 << ps->info->num_ports) - 1;
u16 output_ports = 0; u16 output_ports = 0;
int reg; int reg;
int i; int i;
...@@ -1141,7 +1141,7 @@ static int _mv88e6xxx_port_based_vlan_map(struct dsa_switch *ds, int port) ...@@ -1141,7 +1141,7 @@ static int _mv88e6xxx_port_based_vlan_map(struct dsa_switch *ds, int port)
if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)) { if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)) {
output_ports = mask; output_ports = mask;
} else { } else {
for (i = 0; i < ps->num_ports; ++i) { for (i = 0; i < ps->info->num_ports; ++i) {
/* allow sending frames to every group member */ /* allow sending frames to every group member */
if (bridge && ps->ports[i].bridge_dev == bridge) if (bridge && ps->ports[i].bridge_dev == bridge)
output_ports |= BIT(i); output_ports |= BIT(i);
...@@ -1282,7 +1282,7 @@ static int _mv88e6xxx_vtu_stu_data_read(struct dsa_switch *ds, ...@@ -1282,7 +1282,7 @@ static int _mv88e6xxx_vtu_stu_data_read(struct dsa_switch *ds,
regs[i] = ret; regs[i] = ret;
} }
for (i = 0; i < ps->num_ports; ++i) { for (i = 0; i < ps->info->num_ports; ++i) {
unsigned int shift = (i % 4) * 4 + nibble_offset; unsigned int shift = (i % 4) * 4 + nibble_offset;
u16 reg = regs[i / 4]; u16 reg = regs[i / 4];
...@@ -1301,7 +1301,7 @@ static int _mv88e6xxx_vtu_stu_data_write(struct dsa_switch *ds, ...@@ -1301,7 +1301,7 @@ static int _mv88e6xxx_vtu_stu_data_write(struct dsa_switch *ds,
int i; int i;
int ret; int ret;
for (i = 0; i < ps->num_ports; ++i) { for (i = 0; i < ps->info->num_ports; ++i) {
unsigned int shift = (i % 4) * 4 + nibble_offset; unsigned int shift = (i % 4) * 4 + nibble_offset;
u8 data = entry->data[i]; u8 data = entry->data[i];
...@@ -1633,7 +1633,7 @@ static int _mv88e6xxx_fid_new(struct dsa_switch *ds, u16 *fid) ...@@ -1633,7 +1633,7 @@ static int _mv88e6xxx_fid_new(struct dsa_switch *ds, u16 *fid)
bitmap_zero(fid_bitmap, MV88E6XXX_N_FID); bitmap_zero(fid_bitmap, MV88E6XXX_N_FID);
/* Set every FID bit used by the (un)bridged ports */ /* Set every FID bit used by the (un)bridged ports */
for (i = 0; i < ps->num_ports; ++i) { for (i = 0; i < ps->info->num_ports; ++i) {
err = _mv88e6xxx_port_fid_get(ds, i, fid); err = _mv88e6xxx_port_fid_get(ds, i, fid);
if (err) if (err)
return err; return err;
...@@ -1683,7 +1683,7 @@ static int _mv88e6xxx_vtu_new(struct dsa_switch *ds, u16 vid, ...@@ -1683,7 +1683,7 @@ static int _mv88e6xxx_vtu_new(struct dsa_switch *ds, u16 vid,
return err; return err;
/* exclude all ports except the CPU and DSA ports */ /* exclude all ports except the CPU and DSA ports */
for (i = 0; i < ps->num_ports; ++i) for (i = 0; i < ps->info->num_ports; ++i)
vlan.data[i] = dsa_is_cpu_port(ds, i) || dsa_is_dsa_port(ds, i) vlan.data[i] = dsa_is_cpu_port(ds, i) || dsa_is_dsa_port(ds, i)
? GLOBAL_VTU_DATA_MEMBER_TAG_UNMODIFIED ? GLOBAL_VTU_DATA_MEMBER_TAG_UNMODIFIED
: GLOBAL_VTU_DATA_MEMBER_TAG_NON_MEMBER; : GLOBAL_VTU_DATA_MEMBER_TAG_NON_MEMBER;
...@@ -1772,7 +1772,7 @@ static int mv88e6xxx_port_check_hw_vlan(struct dsa_switch *ds, int port, ...@@ -1772,7 +1772,7 @@ static int mv88e6xxx_port_check_hw_vlan(struct dsa_switch *ds, int port,
if (vlan.vid > vid_end) if (vlan.vid > vid_end)
break; break;
for (i = 0; i < ps->num_ports; ++i) { for (i = 0; i < ps->info->num_ports; ++i) {
if (dsa_is_dsa_port(ds, i) || dsa_is_cpu_port(ds, i)) if (dsa_is_dsa_port(ds, i) || dsa_is_cpu_port(ds, i))
continue; continue;
...@@ -1921,7 +1921,7 @@ static int _mv88e6xxx_port_vlan_del(struct dsa_switch *ds, int port, u16 vid) ...@@ -1921,7 +1921,7 @@ static int _mv88e6xxx_port_vlan_del(struct dsa_switch *ds, int port, u16 vid)
/* keep the VLAN unless all ports are excluded */ /* keep the VLAN unless all ports are excluded */
vlan.valid = false; vlan.valid = false;
for (i = 0; i < ps->num_ports; ++i) { for (i = 0; i < ps->info->num_ports; ++i) {
if (dsa_is_cpu_port(ds, i) || dsa_is_dsa_port(ds, i)) if (dsa_is_cpu_port(ds, i) || dsa_is_dsa_port(ds, i))
continue; continue;
...@@ -2230,11 +2230,11 @@ int mv88e6xxx_port_bridge_join(struct dsa_switch *ds, int port, ...@@ -2230,11 +2230,11 @@ int mv88e6xxx_port_bridge_join(struct dsa_switch *ds, int port,
mutex_lock(&ps->smi_mutex); mutex_lock(&ps->smi_mutex);
/* Get or create the bridge FID and assign it to the port */ /* Get or create the bridge FID and assign it to the port */
for (i = 0; i < ps->num_ports; ++i) for (i = 0; i < ps->info->num_ports; ++i)
if (ps->ports[i].bridge_dev == bridge) if (ps->ports[i].bridge_dev == bridge)
break; break;
if (i < ps->num_ports) if (i < ps->info->num_ports)
err = _mv88e6xxx_port_fid_get(ds, i, &fid); err = _mv88e6xxx_port_fid_get(ds, i, &fid);
else else
err = _mv88e6xxx_fid_new(ds, &fid); err = _mv88e6xxx_fid_new(ds, &fid);
...@@ -2248,7 +2248,7 @@ int mv88e6xxx_port_bridge_join(struct dsa_switch *ds, int port, ...@@ -2248,7 +2248,7 @@ int mv88e6xxx_port_bridge_join(struct dsa_switch *ds, int port,
/* Assign the bridge and remap each port's VLANTable */ /* Assign the bridge and remap each port's VLANTable */
ps->ports[port].bridge_dev = bridge; ps->ports[port].bridge_dev = bridge;
for (i = 0; i < ps->num_ports; ++i) { for (i = 0; i < ps->info->num_ports; ++i) {
if (ps->ports[i].bridge_dev == bridge) { if (ps->ports[i].bridge_dev == bridge) {
err = _mv88e6xxx_port_based_vlan_map(ds, i); err = _mv88e6xxx_port_based_vlan_map(ds, i);
if (err) if (err)
...@@ -2279,7 +2279,7 @@ void mv88e6xxx_port_bridge_leave(struct dsa_switch *ds, int port) ...@@ -2279,7 +2279,7 @@ void mv88e6xxx_port_bridge_leave(struct dsa_switch *ds, int port)
/* Unassign the bridge and remap each port's VLANTable */ /* Unassign the bridge and remap each port's VLANTable */
ps->ports[port].bridge_dev = NULL; ps->ports[port].bridge_dev = NULL;
for (i = 0; i < ps->num_ports; ++i) for (i = 0; i < ps->info->num_ports; ++i)
if (i == port || ps->ports[i].bridge_dev == bridge) if (i == port || ps->ports[i].bridge_dev == bridge)
if (_mv88e6xxx_port_based_vlan_map(ds, i)) if (_mv88e6xxx_port_based_vlan_map(ds, i))
netdev_warn(ds->ports[i], "failed to remap\n"); netdev_warn(ds->ports[i], "failed to remap\n");
...@@ -2298,7 +2298,7 @@ static void mv88e6xxx_bridge_work(struct work_struct *work) ...@@ -2298,7 +2298,7 @@ static void mv88e6xxx_bridge_work(struct work_struct *work)
mutex_lock(&ps->smi_mutex); mutex_lock(&ps->smi_mutex);
for (port = 0; port < ps->num_ports; ++port) for (port = 0; port < ps->info->num_ports; ++port)
if (test_and_clear_bit(port, ps->port_state_update_mask) && if (test_and_clear_bit(port, ps->port_state_update_mask) &&
_mv88e6xxx_port_state(ds, port, ps->ports[port].state)) _mv88e6xxx_port_state(ds, port, ps->ports[port].state))
netdev_warn(ds->ports[port], "failed to update state to %s\n", netdev_warn(ds->ports[port], "failed to update state to %s\n",
...@@ -2630,7 +2630,7 @@ int mv88e6xxx_setup_ports(struct dsa_switch *ds) ...@@ -2630,7 +2630,7 @@ int mv88e6xxx_setup_ports(struct dsa_switch *ds)
int ret; int ret;
int i; int i;
for (i = 0; i < ps->num_ports; i++) { for (i = 0; i < ps->info->num_ports; i++) {
ret = mv88e6xxx_setup_port(ds, i); ret = mv88e6xxx_setup_port(ds, i);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -2737,7 +2737,7 @@ int mv88e6xxx_setup_global(struct dsa_switch *ds) ...@@ -2737,7 +2737,7 @@ int mv88e6xxx_setup_global(struct dsa_switch *ds)
err = _mv88e6xxx_reg_write(ds, REG_GLOBAL2, GLOBAL2_TRUNK_MASK, err = _mv88e6xxx_reg_write(ds, REG_GLOBAL2, GLOBAL2_TRUNK_MASK,
0x8000 | 0x8000 |
(i << GLOBAL2_TRUNK_MASK_NUM_SHIFT) | (i << GLOBAL2_TRUNK_MASK_NUM_SHIFT) |
((1 << ps->num_ports) - 1)); ((1 << ps->info->num_ports) - 1));
if (err) if (err)
goto unlock; goto unlock;
} }
...@@ -2790,7 +2790,7 @@ int mv88e6xxx_setup_global(struct dsa_switch *ds) ...@@ -2790,7 +2790,7 @@ int mv88e6xxx_setup_global(struct dsa_switch *ds)
* ingress rate limit registers to their initial * ingress rate limit registers to their initial
* state. * state.
*/ */
for (i = 0; i < ps->num_ports; i++) { for (i = 0; i < ps->info->num_ports; i++) {
err = _mv88e6xxx_reg_write(ds, REG_GLOBAL2, err = _mv88e6xxx_reg_write(ds, REG_GLOBAL2,
GLOBAL2_INGRESS_OP, GLOBAL2_INGRESS_OP,
0x9000 | (i << 8)); 0x9000 | (i << 8));
...@@ -2835,7 +2835,7 @@ int mv88e6xxx_switch_reset(struct dsa_switch *ds, bool ppu_active) ...@@ -2835,7 +2835,7 @@ int mv88e6xxx_switch_reset(struct dsa_switch *ds, bool ppu_active)
mutex_lock(&ps->smi_mutex); mutex_lock(&ps->smi_mutex);
/* Set all ports to the disabled state. */ /* Set all ports to the disabled state. */
for (i = 0; i < ps->num_ports; i++) { for (i = 0; i < ps->info->num_ports; i++) {
ret = _mv88e6xxx_reg_read(ds, REG_PORT(i), PORT_CONTROL); ret = _mv88e6xxx_reg_read(ds, REG_PORT(i), PORT_CONTROL);
if (ret < 0) if (ret < 0)
goto unlock; goto unlock;
...@@ -2918,7 +2918,7 @@ static int mv88e6xxx_port_to_phy_addr(struct dsa_switch *ds, int port) ...@@ -2918,7 +2918,7 @@ static int mv88e6xxx_port_to_phy_addr(struct dsa_switch *ds, int port)
{ {
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds); struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
if (port >= 0 && port < ps->num_ports) if (port >= 0 && port < ps->info->num_ports)
return port; return port;
return -EINVAL; return -EINVAL;
} }
......
...@@ -385,6 +385,7 @@ struct mv88e6xxx_info { ...@@ -385,6 +385,7 @@ struct mv88e6xxx_info {
enum mv88e6xxx_family family; enum mv88e6xxx_family family;
u16 prod_num; u16 prod_num;
const char *name; const char *name;
unsigned int num_ports;
}; };
struct mv88e6xxx_atu_entry { struct mv88e6xxx_atu_entry {
...@@ -456,8 +457,6 @@ struct mv88e6xxx_priv_state { ...@@ -456,8 +457,6 @@ struct mv88e6xxx_priv_state {
struct mutex eeprom_mutex; struct mutex eeprom_mutex;
int id; /* switch product id */ int id; /* switch product id */
int num_ports; /* number of switch ports */
struct mv88e6xxx_priv_port ports[DSA_MAX_PORTS]; struct mv88e6xxx_priv_port ports[DSA_MAX_PORTS];
DECLARE_BITMAP(port_state_update_mask, DSA_MAX_PORTS); DECLARE_BITMAP(port_state_update_mask, DSA_MAX_PORTS);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment