Commit d3585edf authored by David S. Miller's avatar David S. Miller

Merge branch 'cpsw-add-MQPRIO-and-CBS-Qdisc-offload'

Ivan Khoronzhuk says:

====================
net: ethernet: ti: cpsw: add MQPRIO and CBS Qdisc offload

This series adds MQPRIO and CBS Qdisc offload for TI cpsw driver.
It potentially can be used in audio video bridging (AVB) and time
sensitive networking (TSN).

Patchset was tested on AM572x EVM and BBB boards. Last patch from this
series adds detailed description of configuration with examples. For
consistency reasons, in role of talker and listener, tools from
patchset "TSN: Add qdisc based config interface for CBS" were used and
can be seen here: https://www.spinics.net/lists/netdev/msg460869.html

Based on net-next/master

v5..v4:
- corrected typo of "am57xx" board name, no functional changes

v4..v3:
 - nothing, just rebase

v3..v2:
 - corrected typo of "shaper" word, no functional changes

v2..v1:
 - changed name cpsw.txt on ti-cpsw.txt
 - changed name cpsw_set_tc() on cpsw_set_mqprio()
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents b19c7bb1 ae62372f
This diff is collapsed.
This diff is collapsed.
...@@ -406,37 +406,36 @@ static int cpdma_chan_fit_rate(struct cpdma_chan *ch, u32 rate, ...@@ -406,37 +406,36 @@ static int cpdma_chan_fit_rate(struct cpdma_chan *ch, u32 rate,
struct cpdma_chan *chan; struct cpdma_chan *chan;
u32 old_rate = ch->rate; u32 old_rate = ch->rate;
u32 new_rmask = 0; u32 new_rmask = 0;
int rlim = 1; int rlim = 0;
int i; int i;
*prio_mode = 0;
for (i = tx_chan_num(0); i < tx_chan_num(CPDMA_MAX_CHANNELS); i++) { for (i = tx_chan_num(0); i < tx_chan_num(CPDMA_MAX_CHANNELS); i++) {
chan = ctlr->channels[i]; chan = ctlr->channels[i];
if (!chan) { if (!chan)
rlim = 0;
continue; continue;
}
if (chan == ch) if (chan == ch)
chan->rate = rate; chan->rate = rate;
if (chan->rate) { if (chan->rate) {
if (rlim) { rlim = 1;
new_rmask |= chan->mask; new_rmask |= chan->mask;
} else { continue;
ch->rate = old_rate;
dev_err(ctlr->dev, "Prev channel of %dch is not rate limited\n",
chan->chan_num);
return -EINVAL;
}
} else {
*prio_mode = 1;
rlim = 0;
} }
if (rlim)
goto err;
} }
*rmask = new_rmask; *rmask = new_rmask;
*prio_mode = rlim;
return 0; return 0;
err:
ch->rate = old_rate;
dev_err(ctlr->dev, "Upper cpdma ch%d is not rate limited\n",
chan->chan_num);
return -EINVAL;
} }
static u32 cpdma_chan_set_factors(struct cpdma_ctlr *ctlr, static u32 cpdma_chan_set_factors(struct cpdma_ctlr *ctlr,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment