Thread (10 messages) flat view 10 messages, 4 authors, 2021-03-25

Re: lantiq_xrx200: Ethernet MAC with multiple TX queues

From: Florian Fainelli <f.fainelli@gmail.com>
Date: 2021-03-24 22:59:18


On 3/24/2021 3:50 PM, Hauke Mehrtens wrote:
On 3/24/21 10:09 PM, Florian Fainelli wrote:
quoted

On 3/24/2021 1:13 PM, Vladimir Oltean wrote:
quoted
Hi Martin,

On Wed, Mar 24, 2021 at 09:04:16PM +0100, Martin Blumenstingl wrote:
quoted
Hello,

the PMAC (Ethernet MAC) IP built into the Lantiq xRX200 SoCs has
support for multiple (TX) queues.
This MAC is connected to the SoC's built-in switch IP (called GSWIP).

Right now the lantiq_xrx200 driver only uses one TX and one RX queue.
The vendor driver (which mixes DSA/switch and MAC functionality in one
driver) uses the following approach:
- eth0 ("lan") uses the first TX queue
- eth1 ("wan") uses the second TX queue

With the current (mainline) lantiq_xrx200 driver some users are able
to fill up the first (and only) queue.
This is why I am thinking about adding support for the second queue to
the lantiq_xrx200 driver.

My main question is: how do I do it properly?
Initializing the second TX queue seems simple (calling
netif_tx_napi_add for a second time).
But how do I choose the "right" TX queue in xrx200_start_xmit then?
If you use DSA you will have a DSA slave network device which will be
calling into dev_queue_xmit() into the DSA master which will be the
xrx200 driver, so it's fairly simple for you to implement a queue
selection within the xrx200 tagger for instance.

You can take a look at how net/dsa/tag_brcm.c and
drivers/net/ethernet/broadcom/bcmsysport.c work as far as mapping queues
from the DSA slave network device queue/port number into a queue number
for the DSA master.
Hi,

The PMAC in the xrx200 has 4 TX queues and 8 RX queues. We can not map
one queue to each port as there are more ports than queues. I am also
unsure if the DSL part which is using an out of tree driver uses some of
these DMA resources.
bcmsysport.c for the "Lite" version has the same kind of limitation, so
what it does is limit the number of DSA slave queues to continue to
support a 1:1 mapping.
Is it possible to configure a mapping between a DSA bridge and a queue
on the mater device with tc from user space? We could expose these 4 TX
queues on the mac driver to Linux and then Linux configure somehow a
mapping between ports or bridges and queues.
There is not a way to establish a mapping from user-space between the
DSA slave queues and the DSA master queues, I am not too sure what would
be the right way to do that but it would likely require changes to the
'tc' tool and ndo_setup_tc() most likely.
-- 
Florian
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help