diff options
author | Antoine Tenart | 2018-07-12 13:54:20 +0200 |
---|---|---|
committer | David S. Miller | 2018-07-13 02:30:48 +0200 |
commit | 8179642b52d945852c0cd9f1372e70b09ed153b7 (patch) | |
tree | c566bd2bd01ce99599430a2337645bf21a804023 /drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c | |
parent | net: mvpp2: use one RSS table per port (diff) | |
download | kernel-qcow2-linux-8179642b52d945852c0cd9f1372e70b09ed153b7.tar.gz kernel-qcow2-linux-8179642b52d945852c0cd9f1372e70b09ed153b7.tar.xz kernel-qcow2-linux-8179642b52d945852c0cd9f1372e70b09ed153b7.zip |
net: mvpp2: RSS indirection table support
This patch adds the RSS indirection table support, allowing to use the
ethtool -x and -X options to dump and set this table.
Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com>
[Maxime: Small warning fixes, use one table per port]
Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c')
-rw-r--r-- | drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c index c8cf3db85ffe..c80a1a549224 100644 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c @@ -107,6 +107,20 @@ void mvpp2_cls_oversize_rxq_set(struct mvpp2_port *port) mvpp2_write(port->priv, MVPP2_CLS_SWFWD_PCTRL_REG, val); } +void mvpp22_rss_fill_table(struct mvpp2_port *port, u32 table) +{ + struct mvpp2 *priv = port->priv; + int i; + + for (i = 0; i < MVPP22_RSS_TABLE_ENTRIES; i++) { + u32 sel = MVPP22_RSS_INDEX_TABLE(table) | + MVPP22_RSS_INDEX_TABLE_ENTRY(i); + mvpp2_write(priv, MVPP22_RSS_INDEX, sel); + + mvpp2_write(priv, MVPP22_RSS_TABLE_ENTRY, port->indir[i]); + } +} + void mvpp22_init_rss(struct mvpp2_port *port) { struct mvpp2 *priv = port->priv; @@ -129,12 +143,8 @@ void mvpp22_init_rss(struct mvpp2_port *port) /* Configure the first table to evenly distribute the packets across * real Rx Queues. The table entries map a hash to a port Rx Queue. */ - for (i = 0; i < MVPP22_RSS_TABLE_ENTRIES; i++) { - u32 sel = MVPP22_RSS_INDEX_TABLE(port->id) | - MVPP22_RSS_INDEX_TABLE_ENTRY(i); - mvpp2_write(priv, MVPP22_RSS_INDEX, sel); - - mvpp2_write(priv, MVPP22_RSS_TABLE_ENTRY, i % port->nrxqs); - } + for (i = 0; i < MVPP22_RSS_TABLE_ENTRIES; i++) + port->indir[i] = ethtool_rxfh_indir_default(i, port->nrxqs); + mvpp22_rss_fill_table(port, port->id); } |