Commit a1ca9f8b authored by Vladimir Oltean's avatar Vladimir Oltean Committed by Jakub Kicinski
Browse files

net: dsa: felix: act upon the mqprio qopt in taprio offload



The mqprio queue configuration can appear either through
TC_SETUP_QDISC_MQPRIO or through TC_SETUP_QDISC_TAPRIO. Make sure both
are treated in the same way.

Code does nothing new for now (except for rejecting multiple TXQs per
TC, which is a useless concept with DSA switches).

Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: default avatarFerenc Fejes <fejes@inf.elte.hu>
Reviewed-by: default avatarSimon Horman <simon.horman@corigine.com>
Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent aac80140
Loading
Loading
Loading
Loading
+17 −5
Original line number Diff line number Diff line
@@ -1424,6 +1424,7 @@ static int vsc9959_qos_port_tas_set(struct ocelot *ocelot, int port,
	mutex_lock(&ocelot->tas_lock);

	if (!taprio->enable) {
		ocelot_port_mqprio(ocelot, port, &taprio->mqprio);
		ocelot_rmw_rix(ocelot, 0, QSYS_TAG_CONFIG_ENABLE,
			       QSYS_TAG_CONFIG, port);

@@ -1436,15 +1437,19 @@ static int vsc9959_qos_port_tas_set(struct ocelot *ocelot, int port,
		return 0;
	}

	ret = ocelot_port_mqprio(ocelot, port, &taprio->mqprio);
	if (ret)
		goto err_unlock;

	if (taprio->cycle_time > NSEC_PER_SEC ||
	    taprio->cycle_time_extension >= NSEC_PER_SEC) {
		ret = -EINVAL;
		goto err;
		goto err_reset_tc;
	}

	if (taprio->num_entries > VSC9959_TAS_GCL_ENTRY_MAX) {
		ret = -ERANGE;
		goto err;
		goto err_reset_tc;
	}

	/* Enable guard band. The switch will schedule frames without taking
@@ -1468,7 +1473,7 @@ static int vsc9959_qos_port_tas_set(struct ocelot *ocelot, int port,
	val = ocelot_read(ocelot, QSYS_PARAM_STATUS_REG_8);
	if (val & QSYS_PARAM_STATUS_REG_8_CONFIG_PENDING) {
		ret = -EBUSY;
		goto err;
		goto err_reset_tc;
	}

	ocelot_rmw_rix(ocelot,
@@ -1503,12 +1508,19 @@ static int vsc9959_qos_port_tas_set(struct ocelot *ocelot, int port,
				 !(val & QSYS_TAS_PARAM_CFG_CTRL_CONFIG_CHANGE),
				 10, 100000);
	if (ret)
		goto err;
		goto err_reset_tc;

	ocelot_port->taprio = taprio_offload_get(taprio);
	vsc9959_tas_guard_bands_update(ocelot, port);

err:
	mutex_unlock(&ocelot->tas_lock);

	return 0;

err_reset_tc:
	taprio->mqprio.qopt.num_tc = 0;
	ocelot_port_mqprio(ocelot, port, &taprio->mqprio);
err_unlock:
	mutex_unlock(&ocelot->tas_lock);

	return ret;