DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH 1/2] net/bnxt: refactor multi queue Rx configuration
@ 2021-04-26  6:07 Somnath Kotur
  2021-04-26  6:07 ` [dpdk-dev] [PATCH 2/2] net/bnxt: fix Rx FIFO pending bit Somnath Kotur
  2021-05-02 22:30 ` [dpdk-dev] [PATCH 1/2] net/bnxt: refactor multi queue Rx configuration Ajit Khaparde
  0 siblings, 2 replies; 4+ messages in thread
From: Somnath Kotur @ 2021-04-26  6:07 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, Somnath Kotur, Ajit Khaparde

Eliminate separate codepath/handling for single queue
as the multiqueue code path takes care of it as well.
The only difference being the end_grp_id being 1
now instead of 0 for single queue, but that does not matter
for single queue and does not alter any functionality.

Fixes: 6133f207970c ("net/bnxt: add Rx queue create/destroy")

Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
---
 drivers/net/bnxt/bnxt_rxq.c | 30 ------------------------------
 1 file changed, 30 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c
index 2b0d3d4ac7..45e0c3d01c 100644
--- a/drivers/net/bnxt/bnxt_rxq.c
+++ b/drivers/net/bnxt/bnxt_rxq.c
@@ -40,35 +40,6 @@ int bnxt_mq_rx_configure(struct bnxt *bp)
 
 	bp->nr_vnics = 0;
 
-	/* Single queue mode */
-	if (bp->rx_cp_nr_rings < 2) {
-		vnic = &bp->vnic_info[0];
-		if (!vnic) {
-			PMD_DRV_LOG(ERR, "VNIC alloc failed\n");
-			rc = -ENOMEM;
-			goto err_out;
-		}
-		vnic->flags |= BNXT_VNIC_INFO_BCAST;
-		bp->nr_vnics++;
-
-		rxq = bp->eth_dev->data->rx_queues[0];
-		rxq->vnic = vnic;
-
-		vnic->func_default = true;
-		vnic->start_grp_id = 0;
-		vnic->end_grp_id = vnic->start_grp_id;
-		filter = bnxt_alloc_filter(bp);
-		if (!filter) {
-			PMD_DRV_LOG(ERR, "L2 filter alloc failed\n");
-			rc = -ENOMEM;
-			goto err_out;
-		}
-		filter->mac_index = 0;
-		filter->flags |= HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_OUTERMOST;
-		STAILQ_INSERT_TAIL(&vnic->filter, filter, next);
-		goto out;
-	}
-
 	/* Multi-queue mode */
 	if (dev_conf->rxmode.mq_mode & ETH_MQ_RX_VMDQ_DCB_RSS) {
 		/* VMDq ONLY, VMDq+RSS, VMDq+DCB, VMDq+DCB+RSS */
@@ -163,7 +134,6 @@ int bnxt_mq_rx_configure(struct bnxt *bp)
 		end_grp_id += nb_q_per_grp;
 	}
 
-out:
 	bp->rx_num_qs_per_vnic = nb_q_per_grp;
 
 	if (dev_conf->rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG) {
-- 
2.28.0.497.g54e85e7


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [dpdk-dev] [PATCH 2/2] net/bnxt: fix Rx FIFO pending bit
  2021-04-26  6:07 [dpdk-dev] [PATCH 1/2] net/bnxt: refactor multi queue Rx configuration Somnath Kotur
@ 2021-04-26  6:07 ` Somnath Kotur
  2021-05-02 22:31   ` Ajit Khaparde
  2021-05-02 22:30 ` [dpdk-dev] [PATCH 1/2] net/bnxt: refactor multi queue Rx configuration Ajit Khaparde
  1 sibling, 1 reply; 4+ messages in thread
From: Somnath Kotur @ 2021-04-26  6:07 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, Somnath Kotur, stable, Ajit Khaparde

Fix to clear the Rx FIFO while reading the timestamp.
If the Rx FIFO has pending bit set, keep reading to clear it
and return the last valid timestamp instead of unconditionally
returning an error.

Fixes: b11cceb83a34 ("net/bnxt: support timesync")
Cc: stable@dpdk.org

Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
---
 drivers/net/bnxt/bnxt.h        |  1 +
 drivers/net/bnxt/bnxt_ethdev.c | 38 ++++++++++++++++++++++++++++++----
 2 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
index dfdfa9f7a0..8f3ae41911 100644
--- a/drivers/net/bnxt/bnxt.h
+++ b/drivers/net/bnxt/bnxt.h
@@ -306,6 +306,7 @@ struct rte_flow {
 	struct bnxt_vnic_info	*vnic;
 };
 
+#define BNXT_PTP_RX_PND_CNT		10
 #define BNXT_PTP_FLAGS_PATH_TX		0x0
 #define BNXT_PTP_FLAGS_PATH_RX		0x1
 #define BNXT_PTP_FLAGS_CURRENT_TIME	0x2
diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index f5d2dc8590..eb81bf3991 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -3388,6 +3388,38 @@ static int bnxt_get_tx_ts(struct bnxt *bp, uint64_t *ts)
 	return 0;
 }
 
+static int bnxt_clr_rx_ts(struct bnxt *bp, uint64_t *last_ts)
+{
+	struct bnxt_ptp_cfg *ptp = bp->ptp_cfg;
+	struct bnxt_pf_info *pf = bp->pf;
+	uint16_t port_id;
+	int i = 0;
+	uint32_t fifo;
+
+	if (!ptp || (bp->flags & BNXT_FLAG_CHIP_P5))
+		return -EINVAL;
+
+	port_id = pf->port_id;
+	fifo = rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
+				ptp->rx_mapped_regs[BNXT_PTP_RX_FIFO]));
+	while ((fifo & BNXT_PTP_RX_FIFO_PENDING) && (i < BNXT_PTP_RX_PND_CNT)) {
+		rte_write32(1 << port_id, (uint8_t *)bp->bar0 +
+			    ptp->rx_mapped_regs[BNXT_PTP_RX_FIFO_ADV]);
+		fifo = rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
+					ptp->rx_mapped_regs[BNXT_PTP_RX_FIFO]));
+		*last_ts = rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
+					ptp->rx_mapped_regs[BNXT_PTP_RX_TS_L]));
+		*last_ts |= (uint64_t)rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
+					ptp->rx_mapped_regs[BNXT_PTP_RX_TS_H])) << 32;
+		i++;
+	}
+
+	if (i >= BNXT_PTP_RX_PND_CNT)
+		return -EBUSY;
+
+	return 0;
+}
+
 static int bnxt_get_rx_ts(struct bnxt *bp, uint64_t *ts)
 {
 	struct bnxt_ptp_cfg *ptp = bp->ptp_cfg;
@@ -3406,10 +3438,8 @@ static int bnxt_get_rx_ts(struct bnxt *bp, uint64_t *ts)
 
 	fifo = rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
 				   ptp->rx_mapped_regs[BNXT_PTP_RX_FIFO]));
-	if (fifo & BNXT_PTP_RX_FIFO_PENDING) {
-/*		bnxt_clr_rx_ts(bp);	  TBD  */
-		return -EBUSY;
-	}
+	if (fifo & BNXT_PTP_RX_FIFO_PENDING)
+		return bnxt_clr_rx_ts(bp, ts);
 
 	*ts = rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
 				ptp->rx_mapped_regs[BNXT_PTP_RX_TS_L]));
-- 
2.28.0.497.g54e85e7


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [dpdk-dev] [PATCH 1/2] net/bnxt: refactor multi queue Rx configuration
  2021-04-26  6:07 [dpdk-dev] [PATCH 1/2] net/bnxt: refactor multi queue Rx configuration Somnath Kotur
  2021-04-26  6:07 ` [dpdk-dev] [PATCH 2/2] net/bnxt: fix Rx FIFO pending bit Somnath Kotur
@ 2021-05-02 22:30 ` Ajit Khaparde
  1 sibling, 0 replies; 4+ messages in thread
From: Ajit Khaparde @ 2021-05-02 22:30 UTC (permalink / raw)
  To: Somnath Kotur; +Cc: dpdk-dev, Ferruh Yigit

[-- Attachment #1: Type: text/plain, Size: 2569 bytes --]

On Sun, Apr 25, 2021 at 11:09 PM Somnath Kotur <somnath.kotur@broadcom.com>
wrote:

> Eliminate separate codepath/handling for single queue
> as the multiqueue code path takes care of it as well.
> The only difference being the end_grp_id being 1
> now instead of 0 for single queue, but that does not matter
> for single queue and does not alter any functionality.
>
> Fixes: 6133f207970c ("net/bnxt: add Rx queue create/destroy")
>
> Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
> Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
>
Patch applied to dpdk-next-net-brcm.



> ---
>  drivers/net/bnxt/bnxt_rxq.c | 30 ------------------------------
>  1 file changed, 30 deletions(-)
>
> diff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c
> index 2b0d3d4ac7..45e0c3d01c 100644
> --- a/drivers/net/bnxt/bnxt_rxq.c
> +++ b/drivers/net/bnxt/bnxt_rxq.c
> @@ -40,35 +40,6 @@ int bnxt_mq_rx_configure(struct bnxt *bp)
>
>         bp->nr_vnics = 0;
>
> -       /* Single queue mode */
> -       if (bp->rx_cp_nr_rings < 2) {
> -               vnic = &bp->vnic_info[0];
> -               if (!vnic) {
> -                       PMD_DRV_LOG(ERR, "VNIC alloc failed\n");
> -                       rc = -ENOMEM;
> -                       goto err_out;
> -               }
> -               vnic->flags |= BNXT_VNIC_INFO_BCAST;
> -               bp->nr_vnics++;
> -
> -               rxq = bp->eth_dev->data->rx_queues[0];
> -               rxq->vnic = vnic;
> -
> -               vnic->func_default = true;
> -               vnic->start_grp_id = 0;
> -               vnic->end_grp_id = vnic->start_grp_id;
> -               filter = bnxt_alloc_filter(bp);
> -               if (!filter) {
> -                       PMD_DRV_LOG(ERR, "L2 filter alloc failed\n");
> -                       rc = -ENOMEM;
> -                       goto err_out;
> -               }
> -               filter->mac_index = 0;
> -               filter->flags |=
> HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_OUTERMOST;
> -               STAILQ_INSERT_TAIL(&vnic->filter, filter, next);
> -               goto out;
> -       }
> -
>         /* Multi-queue mode */
>         if (dev_conf->rxmode.mq_mode & ETH_MQ_RX_VMDQ_DCB_RSS) {
>                 /* VMDq ONLY, VMDq+RSS, VMDq+DCB, VMDq+DCB+RSS */
> @@ -163,7 +134,6 @@ int bnxt_mq_rx_configure(struct bnxt *bp)
>                 end_grp_id += nb_q_per_grp;
>         }
>
> -out:
>         bp->rx_num_qs_per_vnic = nb_q_per_grp;
>
>         if (dev_conf->rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG) {
> --
> 2.28.0.497.g54e85e7
>
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [dpdk-dev] [PATCH 2/2] net/bnxt: fix Rx FIFO pending bit
  2021-04-26  6:07 ` [dpdk-dev] [PATCH 2/2] net/bnxt: fix Rx FIFO pending bit Somnath Kotur
@ 2021-05-02 22:31   ` Ajit Khaparde
  0 siblings, 0 replies; 4+ messages in thread
From: Ajit Khaparde @ 2021-05-02 22:31 UTC (permalink / raw)
  To: Somnath Kotur; +Cc: dpdk-dev, Ferruh Yigit, dpdk stable

[-- Attachment #1: Type: text/plain, Size: 3498 bytes --]

On Sun, Apr 25, 2021 at 11:09 PM Somnath Kotur <somnath.kotur@broadcom.com>
wrote:

> Fix to clear the Rx FIFO while reading the timestamp.
> If the Rx FIFO has pending bit set, keep reading to clear it
> and return the last valid timestamp instead of unconditionally
> returning an error.
>
> Fixes: b11cceb83a34 ("net/bnxt: support timesync")
> Cc: stable@dpdk.org
>
> Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
> Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
>
Patch applied to dpdk-next-net-brcm. Thanks


> ---
>  drivers/net/bnxt/bnxt.h        |  1 +
>  drivers/net/bnxt/bnxt_ethdev.c | 38 ++++++++++++++++++++++++++++++----
>  2 files changed, 35 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
> index dfdfa9f7a0..8f3ae41911 100644
> --- a/drivers/net/bnxt/bnxt.h
> +++ b/drivers/net/bnxt/bnxt.h
> @@ -306,6 +306,7 @@ struct rte_flow {
>         struct bnxt_vnic_info   *vnic;
>  };
>
> +#define BNXT_PTP_RX_PND_CNT            10
>  #define BNXT_PTP_FLAGS_PATH_TX         0x0
>  #define BNXT_PTP_FLAGS_PATH_RX         0x1
>  #define BNXT_PTP_FLAGS_CURRENT_TIME    0x2
> diff --git a/drivers/net/bnxt/bnxt_ethdev.c
> b/drivers/net/bnxt/bnxt_ethdev.c
> index f5d2dc8590..eb81bf3991 100644
> --- a/drivers/net/bnxt/bnxt_ethdev.c
> +++ b/drivers/net/bnxt/bnxt_ethdev.c
> @@ -3388,6 +3388,38 @@ static int bnxt_get_tx_ts(struct bnxt *bp, uint64_t
> *ts)
>         return 0;
>  }
>
> +static int bnxt_clr_rx_ts(struct bnxt *bp, uint64_t *last_ts)
> +{
> +       struct bnxt_ptp_cfg *ptp = bp->ptp_cfg;
> +       struct bnxt_pf_info *pf = bp->pf;
> +       uint16_t port_id;
> +       int i = 0;
> +       uint32_t fifo;
> +
> +       if (!ptp || (bp->flags & BNXT_FLAG_CHIP_P5))
> +               return -EINVAL;
> +
> +       port_id = pf->port_id;
> +       fifo = rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
> +                               ptp->rx_mapped_regs[BNXT_PTP_RX_FIFO]));
> +       while ((fifo & BNXT_PTP_RX_FIFO_PENDING) && (i <
> BNXT_PTP_RX_PND_CNT)) {
> +               rte_write32(1 << port_id, (uint8_t *)bp->bar0 +
> +                           ptp->rx_mapped_regs[BNXT_PTP_RX_FIFO_ADV]);
> +               fifo = rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
> +
>  ptp->rx_mapped_regs[BNXT_PTP_RX_FIFO]));
> +               *last_ts = rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0
> +
> +
>  ptp->rx_mapped_regs[BNXT_PTP_RX_TS_L]));
> +               *last_ts |= (uint64_t)rte_le_to_cpu_32(rte_read32((uint8_t
> *)bp->bar0 +
> +
>  ptp->rx_mapped_regs[BNXT_PTP_RX_TS_H])) << 32;
> +               i++;
> +       }
> +
> +       if (i >= BNXT_PTP_RX_PND_CNT)
> +               return -EBUSY;
> +
> +       return 0;
> +}
> +
>  static int bnxt_get_rx_ts(struct bnxt *bp, uint64_t *ts)
>  {
>         struct bnxt_ptp_cfg *ptp = bp->ptp_cfg;
> @@ -3406,10 +3438,8 @@ static int bnxt_get_rx_ts(struct bnxt *bp, uint64_t
> *ts)
>
>         fifo = rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
>                                    ptp->rx_mapped_regs[BNXT_PTP_RX_FIFO]));
> -       if (fifo & BNXT_PTP_RX_FIFO_PENDING) {
> -/*             bnxt_clr_rx_ts(bp);       TBD  */
> -               return -EBUSY;
> -       }
> +       if (fifo & BNXT_PTP_RX_FIFO_PENDING)
> +               return bnxt_clr_rx_ts(bp, ts);
>
>         *ts = rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
>                                 ptp->rx_mapped_regs[BNXT_PTP_RX_TS_L]));
> --
> 2.28.0.497.g54e85e7
>
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-05-02 22:31 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-26  6:07 [dpdk-dev] [PATCH 1/2] net/bnxt: refactor multi queue Rx configuration Somnath Kotur
2021-04-26  6:07 ` [dpdk-dev] [PATCH 2/2] net/bnxt: fix Rx FIFO pending bit Somnath Kotur
2021-05-02 22:31   ` Ajit Khaparde
2021-05-02 22:30 ` [dpdk-dev] [PATCH 1/2] net/bnxt: refactor multi queue Rx configuration Ajit Khaparde

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).