dpaa2-switch: fix the translation between the bridge and dpsw STP states
The numerical values used for STP states are different between the bridge and the MC ABI therefore, the direct usage of the BR_STATE_* macros directly in the structures passed to the firmware is incorrect. Create a separate function that translates between the bridge STP states and the enum that holds the STP state as seen by the Management Complex. Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e48792a9ec
commit
6aa6791d1a
|
@ -318,17 +318,34 @@ static int dpaa2_switch_port_add_vlan(struct ethsw_port_priv *port_priv,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static enum dpsw_stp_state br_stp_state_to_dpsw(u8 state)
|
||||
{
|
||||
switch (state) {
|
||||
case BR_STATE_DISABLED:
|
||||
return DPSW_STP_STATE_DISABLED;
|
||||
case BR_STATE_LISTENING:
|
||||
return DPSW_STP_STATE_LISTENING;
|
||||
case BR_STATE_LEARNING:
|
||||
return DPSW_STP_STATE_LEARNING;
|
||||
case BR_STATE_FORWARDING:
|
||||
return DPSW_STP_STATE_FORWARDING;
|
||||
case BR_STATE_BLOCKING:
|
||||
return DPSW_STP_STATE_BLOCKING;
|
||||
default:
|
||||
return DPSW_STP_STATE_DISABLED;
|
||||
}
|
||||
}
|
||||
|
||||
static int dpaa2_switch_port_set_stp_state(struct ethsw_port_priv *port_priv, u8 state)
|
||||
{
|
||||
struct dpsw_stp_cfg stp_cfg = {
|
||||
.state = state,
|
||||
};
|
||||
struct dpsw_stp_cfg stp_cfg = {0};
|
||||
int err;
|
||||
u16 vid;
|
||||
|
||||
if (!netif_running(port_priv->netdev) || state == port_priv->stp_state)
|
||||
return 0; /* Nothing to do */
|
||||
|
||||
stp_cfg.state = br_stp_state_to_dpsw(state);
|
||||
for (vid = 0; vid <= VLAN_VID_MASK; vid++) {
|
||||
if (port_priv->vlans[vid] & ETHSW_VLAN_MEMBER) {
|
||||
stp_cfg.vlan_id = vid;
|
||||
|
|
Loading…
Reference in New Issue