mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
net: dsa: qca8k: use dsa_for_each macro instead of for loop
Convert for loop to dsa_for_each macro to save some redundant write on unconnected/unused port and tidy things up. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com> Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com> Link: https://lore.kernel.org/r/20230730074113.21889-5-ansuelsmth@gmail.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
a9108b0712
commit
01e6f8ad8d
1 changed files with 52 additions and 51 deletions
|
@ -1800,7 +1800,8 @@ static int
|
|||
qca8k_setup(struct dsa_switch *ds)
|
||||
{
|
||||
struct qca8k_priv *priv = ds->priv;
|
||||
int cpu_port, ret, i;
|
||||
struct dsa_port *dp;
|
||||
int cpu_port, ret;
|
||||
u32 mask;
|
||||
|
||||
cpu_port = qca8k_find_cpu_port(ds);
|
||||
|
@ -1855,27 +1856,27 @@ qca8k_setup(struct dsa_switch *ds)
|
|||
dev_warn(priv->dev, "mib init failed");
|
||||
|
||||
/* Initial setup of all ports */
|
||||
for (i = 0; i < QCA8K_NUM_PORTS; i++) {
|
||||
dsa_switch_for_each_port(dp, ds) {
|
||||
/* Disable forwarding by default on all ports */
|
||||
ret = qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(i),
|
||||
ret = qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(dp->index),
|
||||
QCA8K_PORT_LOOKUP_MEMBER, 0);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Enable QCA header mode on all cpu ports */
|
||||
if (dsa_is_cpu_port(ds, i)) {
|
||||
ret = qca8k_write(priv, QCA8K_REG_PORT_HDR_CTRL(i),
|
||||
FIELD_PREP(QCA8K_PORT_HDR_CTRL_TX_MASK, QCA8K_PORT_HDR_CTRL_ALL) |
|
||||
FIELD_PREP(QCA8K_PORT_HDR_CTRL_RX_MASK, QCA8K_PORT_HDR_CTRL_ALL));
|
||||
if (ret) {
|
||||
dev_err(priv->dev, "failed enabling QCA header mode");
|
||||
return ret;
|
||||
}
|
||||
/* Disable MAC by default on all user ports */
|
||||
dsa_switch_for_each_user_port(dp, ds)
|
||||
qca8k_port_set_status(priv, dp->index, 0);
|
||||
|
||||
/* Enable QCA header mode on all cpu ports */
|
||||
dsa_switch_for_each_cpu_port(dp, ds) {
|
||||
ret = qca8k_write(priv, QCA8K_REG_PORT_HDR_CTRL(dp->index),
|
||||
FIELD_PREP(QCA8K_PORT_HDR_CTRL_TX_MASK, QCA8K_PORT_HDR_CTRL_ALL) |
|
||||
FIELD_PREP(QCA8K_PORT_HDR_CTRL_RX_MASK, QCA8K_PORT_HDR_CTRL_ALL));
|
||||
if (ret) {
|
||||
dev_err(priv->dev, "failed enabling QCA header mode on port %d", dp->index);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Disable MAC by default on all user ports */
|
||||
if (dsa_is_user_port(ds, i))
|
||||
qca8k_port_set_status(priv, i, 0);
|
||||
}
|
||||
|
||||
/* Forward all unknown frames to CPU port for Linux processing
|
||||
|
@ -1897,48 +1898,48 @@ qca8k_setup(struct dsa_switch *ds)
|
|||
return ret;
|
||||
|
||||
/* Setup connection between CPU port & user ports
|
||||
* Configure specific switch configuration for ports
|
||||
* Individual user ports get connected to CPU port only
|
||||
*/
|
||||
for (i = 0; i < QCA8K_NUM_PORTS; i++) {
|
||||
/* Individual user ports get connected to CPU port only */
|
||||
if (dsa_is_user_port(ds, i)) {
|
||||
ret = qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(i),
|
||||
QCA8K_PORT_LOOKUP_MEMBER,
|
||||
BIT(cpu_port));
|
||||
if (ret)
|
||||
return ret;
|
||||
dsa_switch_for_each_user_port(dp, ds) {
|
||||
u8 port = dp->index;
|
||||
|
||||
ret = regmap_clear_bits(priv->regmap, QCA8K_PORT_LOOKUP_CTRL(i),
|
||||
QCA8K_PORT_LOOKUP_LEARN);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(port),
|
||||
QCA8K_PORT_LOOKUP_MEMBER,
|
||||
BIT(cpu_port));
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* For port based vlans to work we need to set the
|
||||
* default egress vid
|
||||
*/
|
||||
ret = qca8k_rmw(priv, QCA8K_EGRESS_VLAN(i),
|
||||
QCA8K_EGREES_VLAN_PORT_MASK(i),
|
||||
QCA8K_EGREES_VLAN_PORT(i, QCA8K_PORT_VID_DEF));
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = regmap_clear_bits(priv->regmap, QCA8K_PORT_LOOKUP_CTRL(port),
|
||||
QCA8K_PORT_LOOKUP_LEARN);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = qca8k_write(priv, QCA8K_REG_PORT_VLAN_CTRL0(i),
|
||||
QCA8K_PORT_VLAN_CVID(QCA8K_PORT_VID_DEF) |
|
||||
QCA8K_PORT_VLAN_SVID(QCA8K_PORT_VID_DEF));
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* The port 5 of the qca8337 have some problem in flood condition. The
|
||||
* original legacy driver had some specific buffer and priority settings
|
||||
* for the different port suggested by the QCA switch team. Add this
|
||||
* missing settings to improve switch stability under load condition.
|
||||
* This problem is limited to qca8337 and other qca8k switch are not affected.
|
||||
/* For port based vlans to work we need to set the
|
||||
* default egress vid
|
||||
*/
|
||||
if (priv->switch_id == QCA8K_ID_QCA8337)
|
||||
qca8k_setup_hol_fixup(priv, i);
|
||||
ret = qca8k_rmw(priv, QCA8K_EGRESS_VLAN(port),
|
||||
QCA8K_EGREES_VLAN_PORT_MASK(port),
|
||||
QCA8K_EGREES_VLAN_PORT(port, QCA8K_PORT_VID_DEF));
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = qca8k_write(priv, QCA8K_REG_PORT_VLAN_CTRL0(port),
|
||||
QCA8K_PORT_VLAN_CVID(QCA8K_PORT_VID_DEF) |
|
||||
QCA8K_PORT_VLAN_SVID(QCA8K_PORT_VID_DEF));
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* The port 5 of the qca8337 have some problem in flood condition. The
|
||||
* original legacy driver had some specific buffer and priority settings
|
||||
* for the different port suggested by the QCA switch team. Add this
|
||||
* missing settings to improve switch stability under load condition.
|
||||
* This problem is limited to qca8337 and other qca8k switch are not affected.
|
||||
*/
|
||||
if (priv->switch_id == QCA8K_ID_QCA8337)
|
||||
dsa_switch_for_each_available_port(dp, ds)
|
||||
qca8k_setup_hol_fixup(priv, dp->index);
|
||||
|
||||
/* Special GLOBAL_FC_THRESH value are needed for ar8327 switch */
|
||||
if (priv->switch_id == QCA8K_ID_QCA8327) {
|
||||
mask = QCA8K_GLOBAL_FC_GOL_XON_THRES(288) |
|
||||
|
|
Loading…
Add table
Reference in a new issue