mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-07-07 09:55:19 +02:00
net: stmmac: Report taprio offload status
Report taprio offload status. This includes per txq and global counters of window_drops and tx_overruns. Window_drops count include count of frames dropped because of queueMaxSDU setting and HLBF error. Transmission overrun counter inform the user application whether any packets are currently being transmitted on a particular queue during a gate-close event.DWMAC IPs takes care Transmission overrun won't happen hence this is always 0. Signed-off-by: Rohan G Thomas <rohan.g.thomas@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
fd5a6a7131
commit
5ca63ffdb9
|
@ -937,7 +937,7 @@ static void tc_taprio_map_maxsdu_txq(struct stmmac_priv *priv,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tc_setup_taprio(struct stmmac_priv *priv,
|
static int tc_taprio_configure(struct stmmac_priv *priv,
|
||||||
struct tc_taprio_qopt_offload *qopt)
|
struct tc_taprio_qopt_offload *qopt)
|
||||||
{
|
{
|
||||||
u32 size, wid = priv->dma_cap.estwid, dep = priv->dma_cap.estdep;
|
u32 size, wid = priv->dma_cap.estwid, dep = priv->dma_cap.estdep;
|
||||||
|
@ -990,8 +990,6 @@ static int tc_setup_taprio(struct stmmac_priv *priv,
|
||||||
|
|
||||||
if (qopt->cmd == TAPRIO_CMD_DESTROY)
|
if (qopt->cmd == TAPRIO_CMD_DESTROY)
|
||||||
goto disable;
|
goto disable;
|
||||||
else if (qopt->cmd != TAPRIO_CMD_REPLACE)
|
|
||||||
return -EOPNOTSUPP;
|
|
||||||
|
|
||||||
if (qopt->num_entries >= dep)
|
if (qopt->num_entries >= dep)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -1102,6 +1100,11 @@ disable:
|
||||||
priv->plat->est->enable = false;
|
priv->plat->est->enable = false;
|
||||||
stmmac_est_configure(priv, priv, priv->plat->est,
|
stmmac_est_configure(priv, priv, priv->plat->est,
|
||||||
priv->plat->clk_ptp_rate);
|
priv->plat->clk_ptp_rate);
|
||||||
|
/* Reset taprio status */
|
||||||
|
for (i = 0; i < priv->plat->tx_queues_to_use; i++) {
|
||||||
|
priv->xstats.max_sdu_txq_drop[i] = 0;
|
||||||
|
priv->xstats.mtl_est_txq_hlbf[i] = 0;
|
||||||
|
}
|
||||||
mutex_unlock(&priv->plat->est->lock);
|
mutex_unlock(&priv->plat->est->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1119,6 +1122,57 @@ disable:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void tc_taprio_stats(struct stmmac_priv *priv,
|
||||||
|
struct tc_taprio_qopt_offload *qopt)
|
||||||
|
{
|
||||||
|
u64 window_drops = 0;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < priv->plat->tx_queues_to_use; i++)
|
||||||
|
window_drops += priv->xstats.max_sdu_txq_drop[i] +
|
||||||
|
priv->xstats.mtl_est_txq_hlbf[i];
|
||||||
|
qopt->stats.window_drops = window_drops;
|
||||||
|
|
||||||
|
/* Transmission overrun doesn't happen for stmmac, hence always 0 */
|
||||||
|
qopt->stats.tx_overruns = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void tc_taprio_queue_stats(struct stmmac_priv *priv,
|
||||||
|
struct tc_taprio_qopt_offload *qopt)
|
||||||
|
{
|
||||||
|
struct tc_taprio_qopt_queue_stats *q_stats = &qopt->queue_stats;
|
||||||
|
int queue = qopt->queue_stats.queue;
|
||||||
|
|
||||||
|
q_stats->stats.window_drops = priv->xstats.max_sdu_txq_drop[queue] +
|
||||||
|
priv->xstats.mtl_est_txq_hlbf[queue];
|
||||||
|
|
||||||
|
/* Transmission overrun doesn't happen for stmmac, hence always 0 */
|
||||||
|
q_stats->stats.tx_overruns = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int tc_setup_taprio(struct stmmac_priv *priv,
|
||||||
|
struct tc_taprio_qopt_offload *qopt)
|
||||||
|
{
|
||||||
|
int err = 0;
|
||||||
|
|
||||||
|
switch (qopt->cmd) {
|
||||||
|
case TAPRIO_CMD_REPLACE:
|
||||||
|
case TAPRIO_CMD_DESTROY:
|
||||||
|
err = tc_taprio_configure(priv, qopt);
|
||||||
|
break;
|
||||||
|
case TAPRIO_CMD_STATS:
|
||||||
|
tc_taprio_stats(priv, qopt);
|
||||||
|
break;
|
||||||
|
case TAPRIO_CMD_QUEUE_STATS:
|
||||||
|
tc_taprio_queue_stats(priv, qopt);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
err = -EOPNOTSUPP;
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
static int tc_setup_etf(struct stmmac_priv *priv,
|
static int tc_setup_etf(struct stmmac_priv *priv,
|
||||||
struct tc_etf_qopt_offload *qopt)
|
struct tc_etf_qopt_offload *qopt)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user