* [dpdk-dev] [PATCH 01/10] net/dpaa2: set the eth driver from dpaa2 driver
2017-06-22 13:57 [dpdk-dev] [PATCH 00/10] NXP DPAA2 PMD changes Hemant Agrawal
@ 2017-06-22 13:57 ` Hemant Agrawal
2017-06-22 13:57 ` [dpdk-dev] [PATCH 02/10] net/dpaa2: set data align option in mc firmware Hemant Agrawal
` (9 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Hemant Agrawal @ 2017-06-22 13:57 UTC (permalink / raw)
To: ferruh.yigit; +Cc: dev, shreyansh.jain
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/net/dpaa2/dpaa2_ethdev.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index da309ac..df11204 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.c
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c
@@ -1533,7 +1533,7 @@ dpaa2_dev_uninit(struct rte_eth_dev *eth_dev)
}
static int
-rte_dpaa2_probe(struct rte_dpaa2_driver *dpaa2_drv __rte_unused,
+rte_dpaa2_probe(struct rte_dpaa2_driver *dpaa2_drv,
struct rte_dpaa2_device *dpaa2_dev)
{
struct rte_eth_dev *eth_dev;
@@ -1560,6 +1560,8 @@ rte_dpaa2_probe(struct rte_dpaa2_driver *dpaa2_drv __rte_unused,
}
}
eth_dev->device = &dpaa2_dev->device;
+ eth_dev->device->driver = &dpaa2_drv->driver;
+
dpaa2_dev->eth_dev = eth_dev;
eth_dev->data->rx_mbuf_alloc_failed = 0;
--
2.7.4
^ permalink raw reply [flat|nested] 13+ messages in thread
* [dpdk-dev] [PATCH 02/10] net/dpaa2: set data align option in mc firmware
2017-06-22 13:57 [dpdk-dev] [PATCH 00/10] NXP DPAA2 PMD changes Hemant Agrawal
2017-06-22 13:57 ` [dpdk-dev] [PATCH 01/10] net/dpaa2: set the eth driver from dpaa2 driver Hemant Agrawal
@ 2017-06-22 13:57 ` Hemant Agrawal
2017-06-22 13:57 ` [dpdk-dev] [PATCH 03/10] net/dpaa2: align the queue numbers with " Hemant Agrawal
` (8 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Hemant Agrawal @ 2017-06-22 13:57 UTC (permalink / raw)
To: ferruh.yigit; +Cc: dev, shreyansh.jain
Configuring the MC FW to configure data alignment by default.
This help in improving performance for some of the platform variants.
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/net/dpaa2/base/dpaa2_hw_dpni.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpni.c b/drivers/net/dpaa2/base/dpaa2_hw_dpni.c
index 547025d..8bf7687 100644
--- a/drivers/net/dpaa2/base/dpaa2_hw_dpni.c
+++ b/drivers/net/dpaa2/base/dpaa2_hw_dpni.c
@@ -313,11 +313,13 @@ dpaa2_attach_bp_list(struct dpaa2_dev_priv *priv,
layout.options = DPNI_BUF_LAYOUT_OPT_DATA_HEAD_ROOM |
DPNI_BUF_LAYOUT_OPT_FRAME_STATUS |
DPNI_BUF_LAYOUT_OPT_PARSER_RESULT |
+ DPNI_BUF_LAYOUT_OPT_DATA_ALIGN |
DPNI_BUF_LAYOUT_OPT_PRIVATE_DATA_SIZE;
layout.pass_frame_status = 1;
layout.private_data_size = DPAA2_FD_PTA_SIZE;
layout.pass_parser_result = 1;
+ layout.data_align = DPAA2_PACKET_LAYOUT_ALIGN;
layout.data_head_room = tot_size - DPAA2_FD_PTA_SIZE -
DPAA2_MBUF_HW_ANNOTATION;
retcode = dpni_set_buffer_layout(dpni, CMD_PRI_LOW, priv->token,
@@ -332,9 +334,8 @@ dpaa2_attach_bp_list(struct dpaa2_dev_priv *priv,
bpool_cfg.num_dpbp = 1;
bpool_cfg.pools[0].dpbp_id = bp_list->buf_pool.dpbp_node->dpbp_id;
bpool_cfg.pools[0].backup_pool = 0;
- bpool_cfg.pools[0].buffer_size =
- RTE_ALIGN_CEIL(bp_list->buf_pool.size,
- 256 /*DPAA2_PACKET_LAYOUT_ALIGN*/);
+ bpool_cfg.pools[0].buffer_size = RTE_ALIGN_CEIL(bp_list->buf_pool.size,
+ DPAA2_PACKET_LAYOUT_ALIGN);
retcode = dpni_set_pools(dpni, CMD_PRI_LOW, priv->token, &bpool_cfg);
if (retcode != 0) {
--
2.7.4
^ permalink raw reply [flat|nested] 13+ messages in thread
* [dpdk-dev] [PATCH 03/10] net/dpaa2: align the queue numbers with mc firmware
2017-06-22 13:57 [dpdk-dev] [PATCH 00/10] NXP DPAA2 PMD changes Hemant Agrawal
2017-06-22 13:57 ` [dpdk-dev] [PATCH 01/10] net/dpaa2: set the eth driver from dpaa2 driver Hemant Agrawal
2017-06-22 13:57 ` [dpdk-dev] [PATCH 02/10] net/dpaa2: set data align option in mc firmware Hemant Agrawal
@ 2017-06-22 13:57 ` Hemant Agrawal
2017-06-22 13:57 ` [dpdk-dev] [PATCH 04/10] net/dpaa2: check soc version for stashing enable Hemant Agrawal
` (7 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Hemant Agrawal @ 2017-06-22 13:57 UTC (permalink / raw)
To: ferruh.yigit; +Cc: dev, shreyansh.jain
Align dpaa2 pmd driver code to the way MC Firmware manages queues.
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/net/dpaa2/dpaa2_ethdev.c | 40 ++++++++++++++++------------------------
drivers/net/dpaa2/dpaa2_ethdev.h | 1 -
2 files changed, 16 insertions(+), 25 deletions(-)
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index df11204..48e0997 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.c
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c
@@ -273,8 +273,7 @@ dpaa2_alloc_rx_tx_queues(struct rte_eth_dev *dev)
}
vq_id = 0;
- for (dist_idx = 0; dist_idx < priv->num_dist_per_tc[DPAA2_DEF_TC];
- dist_idx++) {
+ for (dist_idx = 0; dist_idx < priv->nb_rx_queues; dist_idx++) {
mcq = (struct dpaa2_queue *)priv->rx_vq[vq_id];
mcq->tc_index = DPAA2_DEF_TC;
mcq->flow_id = dist_idx;
@@ -384,8 +383,8 @@ dpaa2_dev_rx_queue_setup(struct rte_eth_dev *dev,
dpaa2_q = (struct dpaa2_queue *)priv->rx_vq[rx_queue_id];
dpaa2_q->mb_pool = mb_pool; /**< mbuf pool to populate RX ring. */
- /*Get the tc id and flow id from given VQ id*/
- flow_id = rx_queue_id % priv->num_dist_per_tc[dpaa2_q->tc_index];
+ /*Get the flow id from given VQ id*/
+ flow_id = rx_queue_id % priv->nb_rx_queues;
memset(&cfg, 0, sizeof(struct dpni_queue));
options = options | DPNI_QUEUE_OPT_USER_CTX;
@@ -458,13 +457,8 @@ dpaa2_dev_tx_queue_setup(struct rte_eth_dev *dev,
memset(&tx_conf_cfg, 0, sizeof(struct dpni_queue));
memset(&tx_flow_cfg, 0, sizeof(struct dpni_queue));
- if (priv->num_tc == 1) {
- tc_id = 0;
- flow_id = tx_queue_id % priv->num_dist_per_tc[tc_id];
- } else {
- tc_id = tx_queue_id;
- flow_id = 0;
- }
+ tc_id = tx_queue_id;
+ flow_id = 0;
ret = dpni_set_queue(dpni, CMD_PRI_LOW, priv->token, DPNI_QUEUE_TX,
tc_id, flow_id, options, &tx_flow_cfg);
@@ -1338,7 +1332,7 @@ dpaa2_dev_init(struct rte_eth_dev *eth_dev)
struct dpni_attr attr;
struct dpaa2_dev_priv *priv = eth_dev->data->dev_private;
struct dpni_buffer_layout layout;
- int i, ret, hw_id;
+ int ret, hw_id;
PMD_INIT_FUNC_TRACE();
@@ -1384,22 +1378,20 @@ dpaa2_dev_init(struct rte_eth_dev *eth_dev)
}
priv->num_tc = attr.num_tcs;
- for (i = 0; i < attr.num_tcs; i++) {
- priv->num_dist_per_tc[i] = attr.num_queues;
- break;
- }
- /* Distribution is per Tc only,
- * so choosing RX queues from default TC only
+ /* Resetting the "num_rx_vqueues" to equal number of queues in first TC
+ * as only one TC is supported on Rx Side. Once Multiple TCs will be
+ * in use for Rx processing then this will be changed or removed.
*/
- priv->nb_rx_queues = priv->num_dist_per_tc[DPAA2_DEF_TC];
+ priv->nb_rx_queues = attr.num_queues;
- if (attr.num_tcs == 1)
- priv->nb_tx_queues = attr.num_queues;
- else
- priv->nb_tx_queues = attr.num_tcs;
+ /* TODO:Using hard coded value for number of TX queues due to dependency
+ * in MC.
+ */
+ priv->nb_tx_queues = 8;
- PMD_INIT_LOG(DEBUG, "num_tc %d", priv->num_tc);
+ PMD_INIT_LOG(DEBUG, "num TC - RX %d", priv->num_tc);
+ PMD_INIT_LOG(DEBUG, "nb_tx_queues %d", priv->nb_tx_queues);
PMD_INIT_LOG(DEBUG, "nb_rx_queues %d", priv->nb_rx_queues);
priv->hw = dpni_dev;
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h
index 6b37c00..a146088 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.h
+++ b/drivers/net/dpaa2/dpaa2_ethdev.h
@@ -84,7 +84,6 @@ struct dpaa2_dev_priv {
struct dpaa2_bp_list *bp_list; /**<Attached buffer pool list */
uint32_t options;
- uint16_t num_dist_per_tc[MAX_TCS];
uint8_t max_mac_filters;
uint8_t max_vlan_filters;
uint8_t num_tc;
--
2.7.4
^ permalink raw reply [flat|nested] 13+ messages in thread
* [dpdk-dev] [PATCH 04/10] net/dpaa2: check soc version for stashing enable
2017-06-22 13:57 [dpdk-dev] [PATCH 00/10] NXP DPAA2 PMD changes Hemant Agrawal
` (2 preceding siblings ...)
2017-06-22 13:57 ` [dpdk-dev] [PATCH 03/10] net/dpaa2: align the queue numbers with " Hemant Agrawal
@ 2017-06-22 13:57 ` Hemant Agrawal
2017-06-22 13:57 ` [dpdk-dev] [PATCH 05/10] net/dpaa2: disable Tx congestion notification Hemant Agrawal
` (6 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Hemant Agrawal @ 2017-06-22 13:57 UTC (permalink / raw)
To: ferruh.yigit; +Cc: dev, shreyansh.jain
Instead of qbman version, check the soc version for stashing
enablement decision
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/net/dpaa2/dpaa2_ethdev.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index 48e0997..767eb9b 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.c
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c
@@ -361,6 +361,7 @@ dpaa2_dev_rx_queue_setup(struct rte_eth_dev *dev,
{
struct dpaa2_dev_priv *priv = dev->data->dev_private;
struct fsl_mc_io *dpni = (struct fsl_mc_io *)priv->hw;
+ struct mc_soc_version mc_plat_info = {0};
struct dpaa2_queue *dpaa2_q;
struct dpni_queue cfg;
uint8_t options = 0;
@@ -391,7 +392,11 @@ dpaa2_dev_rx_queue_setup(struct rte_eth_dev *dev,
cfg.user_context = (uint64_t)(dpaa2_q);
/*if ls2088 or rev2 device, enable the stashing */
- if ((qbman_get_version() & 0xFFFF0000) > QMAN_REV_4000) {
+
+ if (mc_get_soc_version(dpni, CMD_PRI_LOW, &mc_plat_info))
+ PMD_INIT_LOG(ERR, "\tmc_get_soc_version failed\n");
+
+ if ((mc_plat_info.svr & 0xffff0000) != SVR_LS2080A) {
options |= DPNI_QUEUE_OPT_FLC;
cfg.flc.stash_control = true;
cfg.flc.value &= 0xFFFFFFFFFFFFFFC0;
--
2.7.4
^ permalink raw reply [flat|nested] 13+ messages in thread
* [dpdk-dev] [PATCH 05/10] net/dpaa2: disable Tx congestion notification
2017-06-22 13:57 [dpdk-dev] [PATCH 00/10] NXP DPAA2 PMD changes Hemant Agrawal
` (3 preceding siblings ...)
2017-06-22 13:57 ` [dpdk-dev] [PATCH 04/10] net/dpaa2: check soc version for stashing enable Hemant Agrawal
@ 2017-06-22 13:57 ` Hemant Agrawal
2017-06-22 13:57 ` [dpdk-dev] [PATCH 06/10] doc: change the dpaa2 helper repository path Hemant Agrawal
` (5 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Hemant Agrawal @ 2017-06-22 13:57 UTC (permalink / raw)
To: ferruh.yigit; +Cc: dev, shreyansh.jain
Making it off by default.
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/net/dpaa2/dpaa2_ethdev.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index 767eb9b..a1ef1cb 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.c
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c
@@ -1406,9 +1406,6 @@ dpaa2_dev_init(struct rte_eth_dev *eth_dev)
priv->max_vlan_filters = attr.vlan_filter_entries;
priv->flags = 0;
- priv->flags |= DPAA2_TX_CGR_SUPPORT;
- PMD_INIT_LOG(INFO, "Enable the tx congestion control support");
-
/* Allocate memory for hardware structure for queues */
ret = dpaa2_alloc_rx_tx_queues(eth_dev);
if (ret) {
--
2.7.4
^ permalink raw reply [flat|nested] 13+ messages in thread
* [dpdk-dev] [PATCH 06/10] doc: change the dpaa2 helper repository path
2017-06-22 13:57 [dpdk-dev] [PATCH 00/10] NXP DPAA2 PMD changes Hemant Agrawal
` (4 preceding siblings ...)
2017-06-22 13:57 ` [dpdk-dev] [PATCH 05/10] net/dpaa2: disable Tx congestion notification Hemant Agrawal
@ 2017-06-22 13:57 ` Hemant Agrawal
2017-06-26 15:01 ` Mcnamara, John
2017-06-22 13:57 ` [dpdk-dev] [PATCH 07/10] bus/fslmc: fix the failure loop condition Hemant Agrawal
` (4 subsequent siblings)
10 siblings, 1 reply; 13+ messages in thread
From: Hemant Agrawal @ 2017-06-22 13:57 UTC (permalink / raw)
To: ferruh.yigit; +Cc: dev, shreyansh.jain
changing the nxp dpdk helper repository from helper to extras
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
doc/guides/nics/dpaa2.rst | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/doc/guides/nics/dpaa2.rst b/doc/guides/nics/dpaa2.rst
index 1ca27d4..6965121 100644
--- a/doc/guides/nics/dpaa2.rst
+++ b/doc/guides/nics/dpaa2.rst
@@ -473,12 +473,12 @@ separately:
SDK and related information can be obtained from: `NXP QorIQ SDK <http://www.nxp.com/products/software-and-tools/run-time-software/linux-sdk/linux-sdk-for-qoriq-processors:SDKLINUX>`_.
-- **DPDK Helper Scripts**
+- **DPDK Extra Scripts**
DPAA2 based resources can be configured easily with the help of ready scripts
- as provided in the DPDK helper repository.
+ as provided in the DPDK Extra repository.
- `DPDK Helper Scripts <https://github.com/qoriq-open-source/dpdk-helper>`_.
+ `DPDK Extras Scripts <https://github.com/qoriq-open-source/dpdk-extras>`_.
Currently supported by DPDK:
--
2.7.4
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH 06/10] doc: change the dpaa2 helper repository path
2017-06-22 13:57 ` [dpdk-dev] [PATCH 06/10] doc: change the dpaa2 helper repository path Hemant Agrawal
@ 2017-06-26 15:01 ` Mcnamara, John
0 siblings, 0 replies; 13+ messages in thread
From: Mcnamara, John @ 2017-06-26 15:01 UTC (permalink / raw)
To: Hemant Agrawal, Yigit, Ferruh; +Cc: dev, shreyansh.jain
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Hemant Agrawal
> Sent: Thursday, June 22, 2017 2:57 PM
> To: Yigit, Ferruh <ferruh.yigit@intel.com>
> Cc: dev@dpdk.org; shreyansh.jain@nxp.com
> Subject: [dpdk-dev] [PATCH 06/10] doc: change the dpaa2 helper repository
> path
>
> changing the nxp dpdk helper repository from helper to extras
>
> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
^ permalink raw reply [flat|nested] 13+ messages in thread
* [dpdk-dev] [PATCH 07/10] bus/fslmc: fix the failure loop condition
2017-06-22 13:57 [dpdk-dev] [PATCH 00/10] NXP DPAA2 PMD changes Hemant Agrawal
` (5 preceding siblings ...)
2017-06-22 13:57 ` [dpdk-dev] [PATCH 06/10] doc: change the dpaa2 helper repository path Hemant Agrawal
@ 2017-06-22 13:57 ` Hemant Agrawal
2017-06-22 13:57 ` [dpdk-dev] [PATCH 08/10] bus/fslmc: add check for memseg availability Hemant Agrawal
` (3 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Hemant Agrawal @ 2017-06-22 13:57 UTC (permalink / raw)
To: ferruh.yigit; +Cc: dev, shreyansh.jain
correct the while condition for cleanup in case of failure.
Fixes: a0d5c9caf0f1 ("bus/fslmc: add frame queue based dq storage")
Cc: stable@dpdk.org
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/bus/fslmc/portal/dpaa2_hw_dpio.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
index 3213237..4c4e918 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
@@ -437,8 +437,7 @@ dpaa2_alloc_dq_storage(struct queue_storage_info_t *q_storage)
}
return 0;
fail:
- i -= 1;
- while (i >= 0)
+ while (--i >= 0)
rte_free(q_storage->dq_storage[i]);
return -1;
--
2.7.4
^ permalink raw reply [flat|nested] 13+ messages in thread
* [dpdk-dev] [PATCH 08/10] bus/fslmc: add check for memseg availability
2017-06-22 13:57 [dpdk-dev] [PATCH 00/10] NXP DPAA2 PMD changes Hemant Agrawal
` (6 preceding siblings ...)
2017-06-22 13:57 ` [dpdk-dev] [PATCH 07/10] bus/fslmc: fix the failure loop condition Hemant Agrawal
@ 2017-06-22 13:57 ` Hemant Agrawal
2017-06-22 13:57 ` [dpdk-dev] [PATCH 09/10] net/dpaa2: add support for frame based Tx congestion Hemant Agrawal
` (2 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Hemant Agrawal @ 2017-06-22 13:57 UTC (permalink / raw)
To: ferruh.yigit; +Cc: dev, shreyansh.jain
From: Shreyansh Jain <shreyansh.jain@nxp.com>
Cleanup the dma map logic for memsegs. Earlier, in case
DMA mapping reaching end of segment, it reports a suprious error.
Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
---
drivers/bus/fslmc/fslmc_vfio.c | 25 +++++++++++++++++--------
1 file changed, 17 insertions(+), 8 deletions(-)
diff --git a/drivers/bus/fslmc/fslmc_vfio.c b/drivers/bus/fslmc/fslmc_vfio.c
index 8471a9a..49bb670 100644
--- a/drivers/bus/fslmc/fslmc_vfio.c
+++ b/drivers/bus/fslmc/fslmc_vfio.c
@@ -214,17 +214,18 @@ int rte_fslmc_vfio_dmamap(void)
if (is_dma_done)
return 0;
- is_dma_done = 1;
- for (i = 0; i < RTE_MAX_MEMSEG; i++) {
- memseg = rte_eal_get_physmem_layout();
- if (memseg == NULL) {
- FSLMC_VFIO_LOG(ERR, "Cannot get physical layout.");
- return -ENODEV;
- }
+ memseg = rte_eal_get_physmem_layout();
+ if (memseg == NULL) {
+ FSLMC_VFIO_LOG(ERR, "Cannot get physical layout.");
+ return -ENODEV;
+ }
- if (memseg[i].addr == NULL && memseg[i].len == 0)
+ for (i = 0; i < RTE_MAX_MEMSEG; i++) {
+ if (memseg[i].addr == NULL && memseg[i].len == 0) {
+ FSLMC_VFIO_LOG(DEBUG, "Total %d segments found.", i);
break;
+ }
dma_map.size = memseg[i].len;
dma_map.vaddr = memseg[i].addr_64;
@@ -254,12 +255,20 @@ int rte_fslmc_vfio_dmamap(void)
}
}
+ /* Verifying that at least single segment is available */
+ if (i <= 0) {
+ FSLMC_VFIO_LOG(ERR, "No Segments found for VFIO Mapping");
+ return -1;
+ }
+
/* TODO - This is a W.A. as VFIO currently does not add the mapping of
* the interrupt region to SMMU. This should be removed once the
* support is added in the Kernel.
*/
vfio_map_irq_region(group);
+ is_dma_done = 1;
+
return 0;
}
--
2.7.4
^ permalink raw reply [flat|nested] 13+ messages in thread
* [dpdk-dev] [PATCH 09/10] net/dpaa2: add support for frame based Tx congestion
2017-06-22 13:57 [dpdk-dev] [PATCH 00/10] NXP DPAA2 PMD changes Hemant Agrawal
` (7 preceding siblings ...)
2017-06-22 13:57 ` [dpdk-dev] [PATCH 08/10] bus/fslmc: add check for memseg availability Hemant Agrawal
@ 2017-06-22 13:57 ` Hemant Agrawal
2017-06-22 13:57 ` [dpdk-dev] [PATCH 10/10] net/dpaa2: add support for multi seg buffers Hemant Agrawal
2017-06-23 9:59 ` [dpdk-dev] [PATCH 00/10] NXP DPAA2 PMD changes Ferruh Yigit
10 siblings, 0 replies; 13+ messages in thread
From: Hemant Agrawal @ 2017-06-22 13:57 UTC (permalink / raw)
To: ferruh.yigit; +Cc: dev, shreyansh.jain
Change from byte based to frame based.
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/net/dpaa2/dpaa2_ethdev.c | 3 +--
drivers/net/dpaa2/dpaa2_ethdev.h | 9 ++++-----
2 files changed, 5 insertions(+), 7 deletions(-)
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index a1ef1cb..82dd8bb 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.c
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c
@@ -492,8 +492,7 @@ dpaa2_dev_tx_queue_setup(struct rte_eth_dev *dev,
if (priv->flags & DPAA2_TX_CGR_SUPPORT) {
struct dpni_congestion_notification_cfg cong_notif_cfg;
- cong_notif_cfg.units = DPNI_CONGESTION_UNIT_BYTES;
- /* Notify about congestion when the queue size is 32 KB */
+ cong_notif_cfg.units = DPNI_CONGESTION_UNIT_FRAMES;
cong_notif_cfg.threshold_entry = CONG_ENTER_TX_THRESHOLD;
/* Notify that the queue is not congested when the data in
* the queue is below this thershold.
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h
index a146088..ee21cbb 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.h
+++ b/drivers/net/dpaa2/dpaa2_ethdev.h
@@ -47,19 +47,18 @@
/*default tc to be used for ,congestion, distribution etc configuration. */
#define DPAA2_DEF_TC 0
-/* Threshold for a queue to *Enter* Congestion state.
- * It is set to 32KB
+/* Threshold for a Tx queue to *Enter* Congestion state.
*/
-#define CONG_ENTER_TX_THRESHOLD (32 * 1024)
+#define CONG_ENTER_TX_THRESHOLD 512
/* Threshold for a queue to *Exit* Congestion state.
*/
-#define CONG_EXIT_TX_THRESHOLD (24 * 1024)
+#define CONG_EXIT_TX_THRESHOLD 480
/* RX queue tail drop threshold
* currently considering 32 KB packets
*/
-#define CONG_THRESHOLD_RX_Q (32 * 1024)
+#define CONG_THRESHOLD_RX_Q (64 * 1024)
/* Size of the input SMMU mapped memory required by MC */
#define DIST_PARAM_IOVA_SIZE 256
--
2.7.4
^ permalink raw reply [flat|nested] 13+ messages in thread
* [dpdk-dev] [PATCH 10/10] net/dpaa2: add support for multi seg buffers
2017-06-22 13:57 [dpdk-dev] [PATCH 00/10] NXP DPAA2 PMD changes Hemant Agrawal
` (8 preceding siblings ...)
2017-06-22 13:57 ` [dpdk-dev] [PATCH 09/10] net/dpaa2: add support for frame based Tx congestion Hemant Agrawal
@ 2017-06-22 13:57 ` Hemant Agrawal
2017-06-23 9:59 ` [dpdk-dev] [PATCH 00/10] NXP DPAA2 PMD changes Ferruh Yigit
10 siblings, 0 replies; 13+ messages in thread
From: Hemant Agrawal @ 2017-06-22 13:57 UTC (permalink / raw)
To: ferruh.yigit; +Cc: dev, shreyansh.jain
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/bus/fslmc/portal/dpaa2_hw_pvt.h | 27 ++++-
drivers/net/dpaa2/dpaa2_rxtx.c | 189 ++++++++++++++++++++++++++++++--
2 files changed, 206 insertions(+), 10 deletions(-)
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
index 429eaee..f9f4e29 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
@@ -156,6 +156,19 @@ struct qbman_fle {
uint32_t reserved[3]; /* Not used currently */
};
+struct qbman_sge {
+ uint32_t addr_lo;
+ uint32_t addr_hi;
+ uint32_t length;
+ uint32_t fin_bpid_offset;
+};
+
+/* There are three types of frames: Single, Scatter Gather and Frame Lists */
+enum qbman_fd_format {
+ qbman_fd_single = 0,
+ qbman_fd_list,
+ qbman_fd_sg
+};
/*Macros to define operations on FD*/
#define DPAA2_SET_FD_ADDR(fd, addr) do { \
fd->simple.addr_lo = lower_32_bits((uint64_t)(addr)); \
@@ -185,7 +198,7 @@ struct qbman_fle {
#define DPAA2_SET_FLE_OFFSET(fle, offset) \
((fle)->fin_bpid_offset |= (uint32_t)(offset) << 16)
#define DPAA2_SET_FLE_BPID(fle, bpid) ((fle)->fin_bpid_offset |= (uint64_t)bpid)
-#define DPAA2_GET_FLE_BPID(fle, bpid) (fle->fin_bpid_offset & 0x000000ff)
+#define DPAA2_GET_FLE_BPID(fle) ((fle)->fin_bpid_offset & 0x000000ff)
#define DPAA2_SET_FLE_FIN(fle) (fle->fin_bpid_offset |= (uint64_t)1 << 31)
#define DPAA2_SET_FLE_IVP(fle) (((fle)->fin_bpid_offset |= 0x00004000))
#define DPAA2_SET_FD_COMPOUND_FMT(fd) \
@@ -197,6 +210,7 @@ struct qbman_fle {
#define DPAA2_GET_FD_BPID(fd) (((fd)->simple.bpid_offset & 0x00003FFF))
#define DPAA2_GET_FD_IVP(fd) ((fd->simple.bpid_offset & 0x00004000) >> 14)
#define DPAA2_GET_FD_OFFSET(fd) (((fd)->simple.bpid_offset & 0x0FFF0000) >> 16)
+#define DPAA2_GET_FLE_OFFSET(fle) (((fle)->fin_bpid_offset & 0x0FFF0000) >> 16)
#define DPAA2_SET_FLE_SG_EXT(fle) (fle->fin_bpid_offset |= (uint64_t)1 << 29)
#define DPAA2_IS_SET_FLE_SG_EXT(fle) \
((fle->fin_bpid_offset & ((uint64_t)1 << 29)) ? 1 : 0)
@@ -206,6 +220,17 @@ struct qbman_fle {
#define DPAA2_ASAL_VAL (DPAA2_MBUF_HW_ANNOTATION / 64)
+#define DPAA2_FD_SET_FORMAT(fd, format) do { \
+ (fd)->simple.bpid_offset &= 0xCFFFFFFF; \
+ (fd)->simple.bpid_offset |= (uint32_t)format << 28; \
+} while (0)
+#define DPAA2_FD_GET_FORMAT(fd) (((fd)->simple.bpid_offset >> 28) & 0x3)
+
+#define DPAA2_SG_SET_FINAL(sg, fin) do { \
+ (sg)->fin_bpid_offset &= 0x7FFFFFFF; \
+ (sg)->fin_bpid_offset |= (uint32_t)fin << 31; \
+} while (0)
+#define DPAA2_SG_IS_FINAL(sg) (!!((sg)->fin_bpid_offset >> 31))
/* Only Enqueue Error responses will be
* pushed on FQID_ERR of Enqueue FQ
*/
diff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c
index e4bf14a..6572f25 100644
--- a/drivers/net/dpaa2/dpaa2_rxtx.c
+++ b/drivers/net/dpaa2/dpaa2_rxtx.c
@@ -133,6 +133,66 @@ dpaa2_dev_rx_offload(uint64_t hw_annot_addr, struct rte_mbuf *mbuf)
}
static inline struct rte_mbuf *__attribute__((hot))
+eth_sg_fd_to_mbuf(const struct qbman_fd *fd)
+{
+ struct qbman_sge *sgt, *sge;
+ dma_addr_t sg_addr;
+ int i = 0;
+ uint64_t fd_addr;
+ struct rte_mbuf *first_seg, *next_seg, *cur_seg, *temp;
+
+ fd_addr = (uint64_t)DPAA2_IOVA_TO_VADDR(DPAA2_GET_FD_ADDR(fd));
+
+ /* Get Scatter gather table address */
+ sgt = (struct qbman_sge *)(fd_addr + DPAA2_GET_FD_OFFSET(fd));
+
+ sge = &sgt[i++];
+ sg_addr = (uint64_t)DPAA2_IOVA_TO_VADDR(DPAA2_GET_FLE_ADDR(sge));
+
+ /* First Scatter gather entry */
+ first_seg = DPAA2_INLINE_MBUF_FROM_BUF(sg_addr,
+ rte_dpaa2_bpid_info[DPAA2_GET_FD_BPID(fd)].meta_data_size);
+ /* Prepare all the metadata for first segment */
+ first_seg->buf_addr = (uint8_t *)sg_addr;
+ first_seg->ol_flags = 0;
+ first_seg->data_off = DPAA2_GET_FLE_OFFSET(sge);
+ first_seg->data_len = sge->length & 0x1FFFF;
+ first_seg->pkt_len = DPAA2_GET_FD_LEN(fd);
+ first_seg->nb_segs = 1;
+ first_seg->next = NULL;
+
+ first_seg->packet_type = dpaa2_dev_rx_parse(
+ (uint64_t)DPAA2_IOVA_TO_VADDR(DPAA2_GET_FD_ADDR(fd))
+ + DPAA2_FD_PTA_SIZE);
+ dpaa2_dev_rx_offload((uint64_t)DPAA2_IOVA_TO_VADDR(
+ DPAA2_GET_FD_ADDR(fd)) +
+ DPAA2_FD_PTA_SIZE, first_seg);
+ rte_mbuf_refcnt_set(first_seg, 1);
+ cur_seg = first_seg;
+ while (!DPAA2_SG_IS_FINAL(sge)) {
+ sge = &sgt[i++];
+ sg_addr = (uint64_t)DPAA2_IOVA_TO_VADDR(
+ DPAA2_GET_FLE_ADDR(sge));
+ next_seg = DPAA2_INLINE_MBUF_FROM_BUF(sg_addr,
+ rte_dpaa2_bpid_info[DPAA2_GET_FLE_BPID(sge)].meta_data_size);
+ next_seg->buf_addr = (uint8_t *)sg_addr;
+ next_seg->data_off = DPAA2_GET_FLE_OFFSET(sge);
+ next_seg->data_len = sge->length & 0x1FFFF;
+ first_seg->nb_segs += 1;
+ rte_mbuf_refcnt_set(next_seg, 1);
+ cur_seg->next = next_seg;
+ next_seg->next = NULL;
+ cur_seg = next_seg;
+ }
+ temp = DPAA2_INLINE_MBUF_FROM_BUF(fd_addr,
+ rte_dpaa2_bpid_info[DPAA2_GET_FD_BPID(fd)].meta_data_size);
+ rte_mbuf_refcnt_set(temp, 1);
+ rte_pktmbuf_free_seg(temp);
+
+ return (void *)first_seg;
+}
+
+static inline struct rte_mbuf *__attribute__((hot))
eth_fd_to_mbuf(const struct qbman_fd *fd)
{
struct rte_mbuf *mbuf = DPAA2_INLINE_MBUF_FROM_BUF(
@@ -171,7 +231,81 @@ eth_fd_to_mbuf(const struct qbman_fd *fd)
return mbuf;
}
-static void __rte_noinline __attribute__((hot))
+static int __attribute__ ((noinline)) __attribute__((hot))
+eth_mbuf_to_sg_fd(struct rte_mbuf *mbuf,
+ struct qbman_fd *fd, uint16_t bpid)
+{
+ struct rte_mbuf *cur_seg = mbuf, *prev_seg, *mi, *temp;
+ struct qbman_sge *sgt, *sge = NULL;
+ int i;
+
+ /* First Prepare FD to be transmited*/
+ /* Resetting the buffer pool id and offset field*/
+ fd->simple.bpid_offset = 0;
+
+ temp = rte_pktmbuf_alloc(mbuf->pool);
+ if (temp == NULL) {
+ PMD_TX_LOG(ERR, "No memory to allocate S/G table");
+ return -ENOMEM;
+ }
+
+ DPAA2_SET_FD_ADDR(fd, DPAA2_MBUF_VADDR_TO_IOVA(temp));
+ DPAA2_SET_FD_LEN(fd, mbuf->pkt_len);
+ DPAA2_SET_FD_OFFSET(fd, temp->data_off);
+ DPAA2_SET_FD_BPID(fd, bpid);
+ DPAA2_SET_FD_ASAL(fd, DPAA2_ASAL_VAL);
+ DPAA2_FD_SET_FORMAT(fd, qbman_fd_sg);
+ /*Set Scatter gather table and Scatter gather entries*/
+ sgt = (struct qbman_sge *)(
+ (uint64_t)DPAA2_IOVA_TO_VADDR(DPAA2_GET_FD_ADDR(fd))
+ + DPAA2_GET_FD_OFFSET(fd));
+
+ for (i = 0; i < mbuf->nb_segs; i++) {
+ sge = &sgt[i];
+ /*Resetting the buffer pool id and offset field*/
+ sge->fin_bpid_offset = 0;
+ DPAA2_SET_FLE_ADDR(sge, DPAA2_MBUF_VADDR_TO_IOVA(cur_seg));
+ DPAA2_SET_FLE_OFFSET(sge, cur_seg->data_off);
+ sge->length = cur_seg->data_len;
+ if (RTE_MBUF_DIRECT(cur_seg)) {
+ if (rte_mbuf_refcnt_read(cur_seg) > 1) {
+ /* If refcnt > 1, invalid bpid is set to ensure
+ * buffer is not freed by HW
+ */
+ DPAA2_SET_FLE_IVP(sge);
+ rte_mbuf_refcnt_update(cur_seg, -1);
+ } else
+ DPAA2_SET_FLE_BPID(sge,
+ mempool_to_bpid(cur_seg->pool));
+ cur_seg = cur_seg->next;
+ } else {
+ /* Get owner MBUF from indirect buffer */
+ mi = rte_mbuf_from_indirect(cur_seg);
+ if (rte_mbuf_refcnt_read(mi) > 1) {
+ /* If refcnt > 1, invalid bpid is set to ensure
+ * owner buffer is not freed by HW
+ */
+ DPAA2_SET_FLE_IVP(sge);
+ } else {
+ DPAA2_SET_FLE_BPID(sge,
+ mempool_to_bpid(mi->pool));
+ rte_mbuf_refcnt_update(mi, 1);
+ }
+ prev_seg = cur_seg;
+ cur_seg = cur_seg->next;
+ prev_seg->next = NULL;
+ rte_pktmbuf_free(prev_seg);
+ }
+ }
+ DPAA2_SG_SET_FINAL(sge, true);
+ return 0;
+}
+
+static void
+eth_mbuf_to_fd(struct rte_mbuf *mbuf,
+ struct qbman_fd *fd, uint16_t bpid) __attribute__((unused));
+
+static void __attribute__ ((noinline)) __attribute__((hot))
eth_mbuf_to_fd(struct rte_mbuf *mbuf,
struct qbman_fd *fd, uint16_t bpid)
{
@@ -190,8 +324,22 @@ eth_mbuf_to_fd(struct rte_mbuf *mbuf,
DPAA2_GET_FD_OFFSET(fd), DPAA2_GET_FD_ADDR(fd),
rte_dpaa2_bpid_info[DPAA2_GET_FD_BPID(fd)].meta_data_size,
DPAA2_GET_FD_BPID(fd), DPAA2_GET_FD_LEN(fd));
-}
+ if (RTE_MBUF_DIRECT(mbuf)) {
+ if (rte_mbuf_refcnt_read(mbuf) > 1) {
+ DPAA2_SET_FD_IVP(fd);
+ rte_mbuf_refcnt_update(mbuf, -1);
+ }
+ } else {
+ struct rte_mbuf *mi;
+ mi = rte_mbuf_from_indirect(mbuf);
+ if (rte_mbuf_refcnt_read(mi) > 1)
+ DPAA2_SET_FD_IVP(fd);
+ else
+ rte_mbuf_refcnt_update(mi, 1);
+ rte_pktmbuf_free(mbuf);
+ }
+}
static inline int __attribute__((hot))
eth_copy_mbuf_to_fd(struct rte_mbuf *mbuf,
@@ -325,10 +473,11 @@ dpaa2_dev_prefetch_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
rte_prefetch0((void *)((uint64_t)DPAA2_GET_FD_ADDR(fd[num_rx])
+ DPAA2_FD_PTA_SIZE + 16));
- bufs[num_rx] = eth_fd_to_mbuf(fd[num_rx]);
+ if (unlikely(DPAA2_FD_GET_FORMAT(fd[num_rx]) == qbman_fd_sg))
+ bufs[num_rx] = eth_sg_fd_to_mbuf(fd[num_rx]);
+ else
+ bufs[num_rx] = eth_fd_to_mbuf(fd[num_rx]);
bufs[num_rx]->port = dev->data->port_id;
- if (dev->data->dev_conf.rxmode.hw_vlan_strip)
- rte_vlan_strip(bufs[num_rx]);
if (dev->data->dev_conf.rxmode.hw_vlan_strip)
rte_vlan_strip(bufs[num_rx]);
@@ -379,6 +528,7 @@ dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
uint32_t loop;
int32_t ret;
struct qbman_fd fd_arr[MAX_TX_RING_SLOTS];
+ struct rte_mbuf *mi;
uint32_t frames_to_send;
struct rte_mempool *mp;
struct qbman_eq_desc eqdesc;
@@ -419,8 +569,17 @@ dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
fd_arr[loop].simple.frc = 0;
DPAA2_RESET_FD_CTRL((&fd_arr[loop]));
DPAA2_SET_FD_FLC((&fd_arr[loop]), NULL);
- mp = (*bufs)->pool;
+ if (RTE_MBUF_DIRECT(*bufs)) {
+ mp = (*bufs)->pool;
+ } else {
+ mi = rte_mbuf_from_indirect(*bufs);
+ mp = mi->pool;
+ }
/* Not a hw_pkt pool allocated frame */
+ if (!mp) {
+ PMD_TX_LOG(ERR, "err: no bpool attached");
+ goto skip_tx;
+ }
if (mp->ops_index != priv->bp_list->dpaa2_ops_index) {
PMD_TX_LOG(ERR, "non hw offload bufffer ");
/* alloc should be from the default buffer pool
@@ -429,11 +588,16 @@ dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
if (priv->bp_list) {
bpid = priv->bp_list->buf_pool.bpid;
} else {
- PMD_TX_LOG(ERR, "errr: why no bpool"
- " attached");
+ PMD_TX_LOG(ERR,
+ "err: no bpool attached");
num_tx = 0;
goto skip_tx;
}
+ if (unlikely((*bufs)->nb_segs > 1)) {
+ PMD_TX_LOG(ERR, "S/G support not added"
+ " for non hw offload buffer");
+ goto skip_tx;
+ }
if (eth_copy_mbuf_to_fd(*bufs,
&fd_arr[loop], bpid)) {
bufs++;
@@ -441,7 +605,14 @@ dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
}
} else {
bpid = mempool_to_bpid(mp);
- eth_mbuf_to_fd(*bufs, &fd_arr[loop], bpid);
+ if (unlikely((*bufs)->nb_segs > 1)) {
+ if (eth_mbuf_to_sg_fd(*bufs,
+ &fd_arr[loop], bpid))
+ goto skip_tx;
+ } else {
+ eth_mbuf_to_fd(*bufs,
+ &fd_arr[loop], bpid);
+ }
}
bufs++;
}
--
2.7.4
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH 00/10] NXP DPAA2 PMD changes
2017-06-22 13:57 [dpdk-dev] [PATCH 00/10] NXP DPAA2 PMD changes Hemant Agrawal
` (9 preceding siblings ...)
2017-06-22 13:57 ` [dpdk-dev] [PATCH 10/10] net/dpaa2: add support for multi seg buffers Hemant Agrawal
@ 2017-06-23 9:59 ` Ferruh Yigit
10 siblings, 0 replies; 13+ messages in thread
From: Ferruh Yigit @ 2017-06-23 9:59 UTC (permalink / raw)
To: Hemant Agrawal; +Cc: dev, shreyansh.jain
On 6/22/2017 2:57 PM, Hemant Agrawal wrote:
> This patch series address some of the issues identified during testing on latest code.
> Last patch adds the support for multi-segment frames.
>
> Hemant Agrawal (9):
> net/dpaa2: set the eth driver from dpaa2 driver
> net/dpaa2: set data align option in mc firmware
> net/dpaa2: align the queue numbers with mc firmware
> net/dpaa2: check soc version for stashing enable
> net/dpaa2: disable Tx congestion notification
> doc: change the dpaa2 helper repository path
> bus/fslmc: fix the failure loop condition
> net/dpaa2: add support for frame based Tx congestion
> net/dpaa2: add support for multi seg buffers
>
> Shreyansh Jain (1):
> bus/fslmc: add check for memseg availability
Series applied to dpdk-next-net/master, thanks.
^ permalink raw reply [flat|nested] 13+ messages in thread