DPDK patches and discussions
 help / color / mirror / Atom feed
* [PATCH] common/cnxk: fix async event handling
@ 2025-07-30  2:51 Tomasz Duszynski
  2025-09-22  6:25 ` Jerin Jacob
  0 siblings, 1 reply; 2+ messages in thread
From: Tomasz Duszynski @ 2025-07-30  2:51 UTC (permalink / raw)
  To: dev, Nithin Dabilpuram, Kiran Kumar K, Sunil Kumar Kori,
	Satha Rao, Harman Kalra, Jerin Jacob, Tomasz Duszynski,
	Jakub Palider

If async event shows up unexpectedly ack it and continue
until expected event is received.

Fixes: 857721d62d42 ("common/cnxk: add BPHY communication with atf")

Signed-off-by: Tomasz Duszynski <tduszynski@marvell.com>
---
 drivers/common/cnxk/roc_bphy_cgx.c | 52 +++++++++++-------------------
 1 file changed, 19 insertions(+), 33 deletions(-)

diff --git a/drivers/common/cnxk/roc_bphy_cgx.c b/drivers/common/cnxk/roc_bphy_cgx.c
index db70bafd9b..1de5195657 100644
--- a/drivers/common/cnxk/roc_bphy_cgx.c
+++ b/drivers/common/cnxk/roc_bphy_cgx.c
@@ -65,8 +65,7 @@ roc_bphy_cgx_ack(struct roc_bphy_cgx *roc_cgx, unsigned int lmac,
 }
 
 static int
-roc_bphy_cgx_wait_for_ownership(struct roc_bphy_cgx *roc_cgx, unsigned int lmac,
-				uint64_t *scr0)
+roc_bphy_cgx_wait_ack(struct roc_bphy_cgx *roc_cgx, unsigned int lmac, uint64_t *scr0, bool ack)
 {
 	int tries = 5000;
 	uint64_t scr1;
@@ -75,16 +74,18 @@ roc_bphy_cgx_wait_for_ownership(struct roc_bphy_cgx *roc_cgx, unsigned int lmac,
 		*scr0 = roc_bphy_cgx_read(roc_cgx, lmac, CGX_CMRX_SCRATCH0);
 		scr1 = roc_bphy_cgx_read(roc_cgx, lmac, CGX_CMRX_SCRATCH1);
 
-		if (FIELD_GET(SCR1_OWN_STATUS, scr1) == ETH_OWN_NON_SECURE_SW &&
-		    FIELD_GET(SCR0_ETH_EVT_STS_S_ACK, *scr0) == 0)
-			break;
-
 		/* clear async events if any */
-		if (FIELD_GET(SCR0_ETH_EVT_STS_S_EVT_TYPE, *scr0) ==
-		    ETH_EVT_ASYNC &&
-		    FIELD_GET(SCR0_ETH_EVT_STS_S_ACK, *scr0))
+		if (FIELD_GET(SCR0_ETH_EVT_STS_S_EVT_TYPE, *scr0) == ETH_EVT_ASYNC &&
+		    FIELD_GET(SCR0_ETH_EVT_STS_S_ACK, *scr0)) {
 			roc_bphy_cgx_ack(roc_cgx, lmac, scr0);
+			goto skip;
+		}
 
+		if (FIELD_GET(SCR1_OWN_STATUS, scr1) == ETH_OWN_NON_SECURE_SW &&
+		    FIELD_GET(SCR0_ETH_EVT_STS_S_ACK, *scr0) == ack)
+			break;
+
+skip:
 		plt_delay_ms(1);
 	} while (--tries);
 
@@ -92,29 +93,20 @@ roc_bphy_cgx_wait_for_ownership(struct roc_bphy_cgx *roc_cgx, unsigned int lmac,
 }
 
 static int
-roc_bphy_cgx_wait_for_ack(struct roc_bphy_cgx *roc_cgx, unsigned int lmac,
-			  uint64_t *scr0)
+roc_bphy_cgx_wait_for_ownership(struct roc_bphy_cgx *roc_cgx, unsigned int lmac, uint64_t *scr0)
 {
-	int tries = 5000;
-	uint64_t scr1;
-
-	do {
-		*scr0 = roc_bphy_cgx_read(roc_cgx, lmac, CGX_CMRX_SCRATCH0);
-		scr1 = roc_bphy_cgx_read(roc_cgx, lmac, CGX_CMRX_SCRATCH1);
-
-		if (FIELD_GET(SCR1_OWN_STATUS, scr1) == ETH_OWN_NON_SECURE_SW &&
-		    FIELD_GET(SCR0_ETH_EVT_STS_S_ACK, *scr0))
-			break;
-
-		plt_delay_ms(1);
-	} while (--tries);
+	return roc_bphy_cgx_wait_ack(roc_cgx, lmac, scr0, false);
+}
 
-	return tries ? 0 : -ETIMEDOUT;
+static int
+roc_bphy_cgx_wait_for_ack(struct roc_bphy_cgx *roc_cgx, unsigned int lmac, uint64_t *scr0)
+{
+	return roc_bphy_cgx_wait_ack(roc_cgx, lmac, scr0, true);
 }
 
 static int
-roc_bphy_cgx_intf_req(struct roc_bphy_cgx *roc_cgx, unsigned int lmac,
-		      uint64_t scr1, uint64_t *scr0)
+roc_bphy_cgx_intf_req(struct roc_bphy_cgx *roc_cgx, unsigned int lmac, uint64_t scr1,
+		      uint64_t *scr0)
 {
 	uint8_t cmd_id = FIELD_GET(SCR1_ETH_CMD_ID, scr1);
 	int ret;
@@ -142,12 +134,6 @@ roc_bphy_cgx_intf_req(struct roc_bphy_cgx *roc_cgx, unsigned int lmac,
 	if (cmd_id == ETH_CMD_INTF_SHUTDOWN)
 		goto out;
 
-	if (FIELD_GET(SCR0_ETH_EVT_STS_S_EVT_TYPE, *scr0) != ETH_EVT_CMD_RESP) {
-		plt_err("received async event instead of cmd resp event");
-		ret = -EIO;
-		goto out;
-	}
-
 	if (FIELD_GET(SCR0_ETH_EVT_STS_S_ID, *scr0) != cmd_id) {
 		plt_err("received resp for cmd %d expected for cmd %d",
 			(int)FIELD_GET(SCR0_ETH_EVT_STS_S_ID, *scr0), cmd_id);
-- 
2.34.1


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

* Re: [PATCH] common/cnxk: fix async event handling
  2025-07-30  2:51 [PATCH] common/cnxk: fix async event handling Tomasz Duszynski
@ 2025-09-22  6:25 ` Jerin Jacob
  0 siblings, 0 replies; 2+ messages in thread
From: Jerin Jacob @ 2025-09-22  6:25 UTC (permalink / raw)
  To: Tomasz Duszynski
  Cc: dev, Nithin Dabilpuram, Kiran Kumar K, Sunil Kumar Kori,
	Satha Rao, Harman Kalra, Jerin Jacob, Jakub Palider

On Wed, Jul 30, 2025 at 8:21 AM Tomasz Duszynski <tduszynski@marvell.com> wrote:
>
> If async event shows up unexpectedly ack it and continue
> until expected event is received.
>
> Fixes: 857721d62d42 ("common/cnxk: add BPHY communication with atf")
>
> Signed-off-by: Tomasz Duszynski <tduszynski@marvell.com>


Applied to dpdk-next-net-mrvl/for-main. Thanks

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

end of thread, other threads:[~2025-09-22  6:25 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-07-30  2:51 [PATCH] common/cnxk: fix async event handling Tomasz Duszynski
2025-09-22  6:25 ` Jerin Jacob

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