net/qede: replace config option with run-time arg
This patch adds support for handling run-time driver arguments.
We have removed config option for per VF Tx switching and added
a run-time argument vf_txswitch. By default, the VF Tx switching is
enabled however it can be disabled using run-time argument.
Sample usage to disable per port VF Tx switching is something like...
-w 05:00.0,vf_txswitch=0 -w 05:00.1,vf_txswitch=0
Fixes: 1282943aa0
("net/qede: fix default config option")
Cc: stable@dpdk.org
Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
This commit is contained in:
parent
785482203f
commit
f64b91b0eb
@ -397,7 +397,6 @@ CONFIG_RTE_LIBRTE_QEDE_PMD=y
|
||||
CONFIG_RTE_LIBRTE_QEDE_DEBUG_INFO=n
|
||||
CONFIG_RTE_LIBRTE_QEDE_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_QEDE_DEBUG_RX=n
|
||||
CONFIG_RTE_LIBRTE_QEDE_VF_TX_SWITCH=y
|
||||
#Provides abs path/name of the firmware file.
|
||||
#Empty string denotes driver will use default firmware
|
||||
CONFIG_RTE_LIBRTE_QEDE_FW=""
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include "qede_ethdev.h"
|
||||
#include <rte_alarm.h>
|
||||
#include <rte_version.h>
|
||||
#include <rte_kvargs.h>
|
||||
|
||||
/* Globals */
|
||||
int qede_logtype_init;
|
||||
@ -456,13 +457,13 @@ int qede_activate_vport(struct rte_eth_dev *eth_dev, bool flg)
|
||||
params.update_vport_active_tx_flg = 1;
|
||||
params.vport_active_rx_flg = flg;
|
||||
params.vport_active_tx_flg = flg;
|
||||
#ifndef RTE_LIBRTE_QEDE_VF_TX_SWITCH
|
||||
if (IS_VF(edev)) {
|
||||
params.update_tx_switching_flg = 1;
|
||||
params.tx_switching_flg = !flg;
|
||||
DP_INFO(edev, "VF tx-switching is disabled\n");
|
||||
if (!qdev->enable_tx_switching) {
|
||||
if (IS_VF(edev)) {
|
||||
params.update_tx_switching_flg = 1;
|
||||
params.tx_switching_flg = !flg;
|
||||
DP_INFO(edev, "VF tx-switching is disabled\n");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
for_each_hwfn(edev, i) {
|
||||
p_hwfn = &edev->hwfns[i];
|
||||
params.opaque_fid = p_hwfn->hw_info.opaque_fid;
|
||||
@ -1281,6 +1282,68 @@ static void qede_dev_stop(struct rte_eth_dev *eth_dev)
|
||||
DP_INFO(edev, "Device is stopped\n");
|
||||
}
|
||||
|
||||
#define QEDE_TX_SWITCHING "vf_txswitch"
|
||||
|
||||
const char *valid_args[] = {
|
||||
QEDE_TX_SWITCHING,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static int qede_args_check(const char *key, const char *val, void *opaque)
|
||||
{
|
||||
unsigned long tmp;
|
||||
int ret = 0;
|
||||
struct rte_eth_dev *eth_dev = opaque;
|
||||
struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);
|
||||
#ifdef RTE_LIBRTE_QEDE_DEBUG_INFO
|
||||
struct ecore_dev *edev = QEDE_INIT_EDEV(qdev);
|
||||
#endif
|
||||
|
||||
errno = 0;
|
||||
tmp = strtoul(val, NULL, 0);
|
||||
if (errno) {
|
||||
DP_INFO(edev, "%s: \"%s\" is not a valid integer", key, val);
|
||||
return errno;
|
||||
}
|
||||
|
||||
if (strcmp(QEDE_TX_SWITCHING, key) == 0)
|
||||
qdev->enable_tx_switching = !!tmp;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int qede_args(struct rte_eth_dev *eth_dev)
|
||||
{
|
||||
struct rte_pci_device *pci_dev = RTE_DEV_TO_PCI(eth_dev->device);
|
||||
struct rte_kvargs *kvlist;
|
||||
struct rte_devargs *devargs;
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
devargs = pci_dev->device.devargs;
|
||||
if (!devargs)
|
||||
return 0; /* return success */
|
||||
|
||||
kvlist = rte_kvargs_parse(devargs->args, valid_args);
|
||||
if (kvlist == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
/* Process parameters. */
|
||||
for (i = 0; (valid_args[i] != NULL); ++i) {
|
||||
if (rte_kvargs_count(kvlist, valid_args[i])) {
|
||||
ret = rte_kvargs_process(kvlist, valid_args[i],
|
||||
qede_args_check, eth_dev);
|
||||
if (ret != ECORE_SUCCESS) {
|
||||
rte_kvargs_free(kvlist);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
rte_kvargs_free(kvlist);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int qede_dev_configure(struct rte_eth_dev *eth_dev)
|
||||
{
|
||||
struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);
|
||||
@ -1314,6 +1377,13 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Enable Tx switching by default */
|
||||
qdev->enable_tx_switching = 1;
|
||||
|
||||
/* Parse devargs and fix up rxmode */
|
||||
if (qede_args(eth_dev))
|
||||
return -ENOTSUP;
|
||||
|
||||
/* Sanity checks and throw warnings */
|
||||
if (rxmode->enable_scatter)
|
||||
eth_dev->data->scattered_rx = 1;
|
||||
|
@ -188,6 +188,7 @@ struct qede_dev {
|
||||
struct qede_fastpath *fp_array;
|
||||
uint16_t mtu;
|
||||
uint16_t new_mtu;
|
||||
bool enable_tx_switching;
|
||||
bool rss_enable;
|
||||
struct rte_eth_rss_conf rss_conf;
|
||||
uint16_t rss_ind_table[ECORE_RSS_IND_TABLE_SIZE];
|
||||
|
Loading…
Reference in New Issue
Block a user