From: Rasesh Mody <rasesh.mody@qlogic.com>
To: <dev@dpdk.org>
Cc: <Dept-EngDPDKDev@qlogic.com>, Harish Patil <harish.patil@qlogic.com>
Subject: [dpdk-dev] [PATCH 7/9] qede: add 100g mode support
Date: Fri, 6 May 2016 21:30:19 -0700 [thread overview]
Message-ID: <1462595421-22505-8-git-send-email-rasesh.mody@qlogic.com> (raw)
In-Reply-To: <1462595421-22505-1-git-send-email-rasesh.mody@qlogic.com>
From: Harish Patil <harish.patil@qlogic.com>
Change details:
- Add device id to the PCI table
- Add polling for the slowpath events for CMT mode device
- Add prerequites to allow 100g mode
o Min number of queues needed is 2
o Only even number of queues are allowed
- Update documentation
Signed-off-by: Harish Patil <harish.patil@qlogic.com>
---
config/common_base | 2 +-
doc/guides/nics/qede.rst | 8 ++---
drivers/net/qede/qede_ethdev.c | 64 ++++++++++++++++++++++++++++++++++++++++
drivers/net/qede/qede_ethdev.h | 4 ++-
4 files changed, 72 insertions(+), 6 deletions(-)
diff --git a/config/common_base b/config/common_base
index a053aa3..8976694 100644
--- a/config/common_base
+++ b/config/common_base
@@ -297,7 +297,7 @@ CONFIG_RTE_LIBRTE_PMD_BOND=y
CONFIG_RTE_LIBRTE_BOND_DEBUG_ALB=n
CONFIG_RTE_LIBRTE_BOND_DEBUG_ALB_L1=n
-# QLogic 25G/40G PMD
+# QLogic 25G/40G/100G PMD
#
CONFIG_RTE_LIBRTE_QEDE_PMD=y
CONFIG_RTE_LIBRTE_QEDE_DEBUG_INIT=n
diff --git a/doc/guides/nics/qede.rst b/doc/guides/nics/qede.rst
index c5fbd83..f7ca8eb 100644
--- a/doc/guides/nics/qede.rst
+++ b/doc/guides/nics/qede.rst
@@ -55,7 +55,7 @@ Supported Features
- TSS
- Multiple MAC address
- Default pause flow control
-- SR-IOV VF
+- SR-IOV VF for 25G/40G modes
Non-supported Features
----------------------
@@ -70,13 +70,13 @@ Non-supported Features
Supported QLogic Adapters
-------------------------
-- QLogic FastLinQ QL4xxxx 25G/40G CNAs
+- QLogic FastLinQ QL4xxxx 25G/40G/100G CNAs.
Prerequisites
-------------
-- Requires firmware version **8.7.x.** and management
- firmware version **8.7.x or higher**. Firmware may be available
+- Requires firmware version **8.7.x.** and management firmware
+ version **8.7.x or higher**. Firmware may be available
inbox in certain newer Linux distros under the standard directory
``E.g. /lib/firmware/qed/qed_init_values_zipped-8.7.7.0.bin``
diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
index 4abe168..bd89e5a 100644
--- a/drivers/net/qede/qede_ethdev.c
+++ b/drivers/net/qede/qede_ethdev.c
@@ -7,10 +7,12 @@
*/
#include "qede_ethdev.h"
+#include <rte_alarm.h>
/* Globals */
static const struct qed_eth_ops *qed_ops;
static const char *drivername = "qede pmd";
+static int64_t timer_period = 1;
static const struct rte_eth_xstats qede_eth_stats[] = {
{"no_buff_discards",
@@ -477,6 +479,21 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
return -EINVAL;
}
+ /* Check requirements for 100G mode */
+ if (edev->num_hwfns > 1) {
+ if (eth_dev->data->nb_rx_queues < 2) {
+ DP_NOTICE(edev, false,
+ "100G mode requires minimum two queues\n");
+ return -EINVAL;
+ }
+
+ if ((eth_dev->data->nb_rx_queues % 2) != 0) {
+ DP_NOTICE(edev, false,
+ "100G mode requires even number of queues\n");
+ return -EINVAL;
+ }
+ }
+
qdev->num_rss = eth_dev->data->nb_rx_queues;
/* Initial state */
@@ -659,6 +676,26 @@ static void qede_promiscuous_disable(struct rte_eth_dev *eth_dev)
qede_rx_mode_setting(eth_dev, QED_FILTER_RX_MODE_TYPE_REGULAR);
}
+static void qede_poll_sp_sb_cb(void *param)
+{
+ struct rte_eth_dev *eth_dev = (struct rte_eth_dev *)param;
+ struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);
+ struct ecore_dev *edev = QEDE_INIT_EDEV(qdev);
+ int rc;
+
+ qede_interrupt_action(ECORE_LEADING_HWFN(edev));
+ qede_interrupt_action(&edev->hwfns[1]);
+
+ rc = rte_eal_alarm_set(timer_period * US_PER_S,
+ qede_poll_sp_sb_cb,
+ (void *)eth_dev);
+ if (rc != 0) {
+ DP_ERR(edev, "Unable to start periodic"
+ " timer rc %d\n", rc);
+ assert(false && "Unable to start periodic timer");
+ }
+}
+
static void qede_dev_close(struct rte_eth_dev *eth_dev)
{
struct qede_dev *qdev = eth_dev->data->dev_private;
@@ -691,6 +728,9 @@ static void qede_dev_close(struct rte_eth_dev *eth_dev)
rte_intr_callback_unregister(ð_dev->pci_dev->intr_handle,
qede_interrupt_handler, (void *)eth_dev);
+ if (edev->num_hwfns > 1)
+ rte_eal_alarm_cancel(qede_poll_sp_sb_cb, (void *)eth_dev);
+
qdev->state = QEDE_CLOSE;
}
@@ -1206,9 +1246,26 @@ static int qede_common_dev_init(struct rte_eth_dev *eth_dev, bool is_vf)
params.drv_eng = QEDE_ENGINEERING_VERSION;
strncpy((char *)params.name, "qede LAN", QED_DRV_VER_STR_SIZE);
+ /* For CMT mode device do periodic polling for slowpath events.
+ * This is required since uio device uses only one MSI-x
+ * interrupt vector but we need one for each engine.
+ */
+ if (edev->num_hwfns > 1) {
+ rc = rte_eal_alarm_set(timer_period * US_PER_S,
+ qede_poll_sp_sb_cb,
+ (void *)eth_dev);
+ if (rc != 0) {
+ DP_ERR(edev, "Unable to start periodic"
+ " timer rc %d\n", rc);
+ return -EINVAL;
+ }
+ }
+
rc = qed_ops->common->slowpath_start(edev, ¶ms);
if (rc) {
DP_ERR(edev, "Cannot start slowpath rc = %d\n", rc);
+ rte_eal_alarm_cancel(qede_poll_sp_sb_cb,
+ (void *)eth_dev);
return -ENODEV;
}
@@ -1217,6 +1274,8 @@ static int qede_common_dev_init(struct rte_eth_dev *eth_dev, bool is_vf)
DP_ERR(edev, "Cannot get device_info rc %d\n", rc);
qed_ops->common->slowpath_stop(edev);
qed_ops->common->remove(edev);
+ rte_eal_alarm_cancel(qede_poll_sp_sb_cb,
+ (void *)eth_dev);
return -ENODEV;
}
@@ -1242,6 +1301,8 @@ static int qede_common_dev_init(struct rte_eth_dev *eth_dev, bool is_vf)
DP_ERR(edev, "Failed to allocate MAC address\n");
qed_ops->common->slowpath_stop(edev);
qed_ops->common->remove(edev);
+ rte_eal_alarm_cancel(qede_poll_sp_sb_cb,
+ (void *)eth_dev);
return -ENOMEM;
}
@@ -1357,6 +1418,9 @@ static struct rte_pci_id pci_id_qede_map[] = {
{
QEDE_RTE_PCI_DEVICE(PCI_DEVICE_ID_57980S_25)
},
+ {
+ QEDE_RTE_PCI_DEVICE(PCI_DEVICE_ID_57980S_100)
+ },
{.vendor_id = 0,}
};
diff --git a/drivers/net/qede/qede_ethdev.h b/drivers/net/qede/qede_ethdev.h
index 64d5f08..b080f5f 100644
--- a/drivers/net/qede/qede_ethdev.h
+++ b/drivers/net/qede/qede_ethdev.h
@@ -81,7 +81,7 @@
struct ecore_dev *edev = &qdev->edev; \
}
-/************* QLogic 25G/40G vendor/devices ids *************/
+/************* QLogic 25G/40G/100G vendor/devices ids *************/
#define PCI_VENDOR_ID_QLOGIC 0x1077
#define CHIP_NUM_57980E 0x1634
@@ -90,6 +90,7 @@
#define CHIP_NUM_57980S_40 0x1634
#define CHIP_NUM_57980S_25 0x1656
#define CHIP_NUM_57980S_IOV 0x1664
+#define CHIP_NUM_57980S_100 0x1644
#define PCI_DEVICE_ID_NX2_57980E CHIP_NUM_57980E
#define PCI_DEVICE_ID_NX2_57980S CHIP_NUM_57980S
@@ -97,6 +98,7 @@
#define PCI_DEVICE_ID_57980S_40 CHIP_NUM_57980S_40
#define PCI_DEVICE_ID_57980S_25 CHIP_NUM_57980S_25
#define PCI_DEVICE_ID_57980S_IOV CHIP_NUM_57980S_IOV
+#define PCI_DEVICE_ID_57980S_100 CHIP_NUM_57980S_100
extern char fw_file[];
--
1.7.10.3
next prev parent reply other threads:[~2016-05-07 4:31 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-07 4:30 [dpdk-dev] [PATCH 0/9] qede: update qede PMD to 1.1.0.1 Rasesh Mody
2016-05-07 4:30 ` [dpdk-dev] [PATCH 1/9] qede: update hash config Rasesh Mody
2016-05-07 4:30 ` [dpdk-dev] [PATCH 2/9] qede: get hash configuration Rasesh Mody
2016-05-07 4:30 ` [dpdk-dev] [PATCH 3/9] qede: rss redirection table update Rasesh Mody
2016-05-07 4:30 ` [dpdk-dev] [PATCH 4/9] qede: rss redirection table query Rasesh Mody
2016-05-07 4:30 ` [dpdk-dev] [PATCH 5/9] qede: set mtu Rasesh Mody
2016-05-07 4:30 ` [dpdk-dev] [PATCH 6/9] qede: add support for xstats Rasesh Mody
2016-05-09 17:56 ` Van Haaren, Harry
2016-05-07 4:30 ` Rasesh Mody [this message]
2016-06-07 11:09 ` [dpdk-dev] [PATCH 7/9] qede: add 100g mode support Bruce Richardson
2016-05-07 4:30 ` [dpdk-dev] [PATCH 8/9] qede: enable vf-vf traffic with unmatched dest addr Rasesh Mody
2016-06-07 12:37 ` Bruce Richardson
2016-05-07 4:30 ` [dpdk-dev] [PATCH 9/9] qede: update version to 8.7.9.0_1.1.0.1 Rasesh Mody
2016-05-23 0:56 ` [dpdk-dev] [PATCH 0/9] qede: update qede PMD to 1.1.0.1 Rasesh Mody
2016-06-07 12:47 ` Bruce Richardson
2016-06-07 18:26 ` Rasesh Mody
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1462595421-22505-8-git-send-email-rasesh.mody@qlogic.com \
--to=rasesh.mody@qlogic.com \
--cc=Dept-EngDPDKDev@qlogic.com \
--cc=dev@dpdk.org \
--cc=harish.patil@qlogic.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).