Commit 01e6f8ad authored by Christian Marangi's avatar Christian Marangi Committed by Paolo Abeni
Browse files

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: default avatarChristian Marangi <ansuelsmth@gmail.com>
Reviewed-by: default avatarFlorian Fainelli <florian.fainelli@broadcom.com>
Link: https://lore.kernel.org/r/20230730074113.21889-5-ansuelsmth@gmail.com


Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent a9108b07
Loading
Loading
Loading
Loading
+54 −53
Original line number Diff line number Diff line
@@ -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,29 +1856,29 @@ 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;
	}

	/* 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 */
		if (dsa_is_cpu_port(ds, i)) {
			ret = qca8k_write(priv, QCA8K_REG_PORT_HDR_CTRL(i),
	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");
			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
	 * Notice that in multi-cpu config only one port should be set
	 * for igmp, unknown, multicast and broadcast packet
@@ -1897,18 +1898,18 @@ 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),
	dsa_switch_for_each_user_port(dp, ds) {
		u8 port = dp->index;

		ret = qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(port),
				QCA8K_PORT_LOOKUP_MEMBER,
				BIT(cpu_port));
		if (ret)
			return ret;

			ret = regmap_clear_bits(priv->regmap, QCA8K_PORT_LOOKUP_CTRL(i),
		ret = regmap_clear_bits(priv->regmap, QCA8K_PORT_LOOKUP_CTRL(port),
					QCA8K_PORT_LOOKUP_LEARN);
		if (ret)
			return ret;
@@ -1916,13 +1917,13 @@ qca8k_setup(struct dsa_switch *ds)
		/* 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));
		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(i),
		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)
@@ -1936,8 +1937,8 @@ qca8k_setup(struct dsa_switch *ds)
	 * This problem is limited to qca8337 and other qca8k switch are not affected.
	 */
	if (priv->switch_id == QCA8K_ID_QCA8337)
			qca8k_setup_hol_fixup(priv, i);
	}
		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) {