mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-20 12:54:36 +08:00
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: Vladimir Oltean <vladimir.oltean@nxp.com> Reviewed-by: Ferenc Fejes <fejes@inf.elte.hu> Reviewed-by: Simon Horman <simon.horman@corigine.com> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
aac80140dc
commit
a1ca9f8b07
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user