[PATCH net v3] net: airoha: Add retry mechanism to airoha_qdma_set_trtcm_param()

Leto Liu (刘涛) Leto.Liu at airoha.com
Thu Aug 13 22:52:59 PDT 2026


Hi Lorenzo,

Update the patch v3:


diff --git a/a/drivers/net/ethernet/airoha/airoha_eth.c b/b/drivers/net/ethernet/airoha/airoha_eth.c
index 79418e6..9fa1543 100755
--- a/a/drivers/net/ethernet/airoha/airoha_eth.c
+++ b/b/drivers/net/ethernet/airoha/airoha_eth.c
@@ -2713,13 +2713,31 @@ static int airoha_qdma_set_trtcm_param(struct airoha_qdma *qdma, int channel,
 		     FIELD_PREP(TRTCM_PARAM_INDEX_MASK, idx) |
 		     FIELD_PREP(TRTCM_PARAM_RATE_TYPE_MASK, mode);
 
-	airoha_qdma_wr(qdma, REG_TRTCM_DATA_LOW(addr), val);
-	airoha_qdma_wr(qdma, REG_TRTCM_CFG_PARAM(addr), config);
+	int i;
 
-	return read_poll_timeout(airoha_qdma_rr, val,
-				 val & TRTCM_PARAM_RW_DONE_MASK,
-				 USEC_PER_MSEC, 10 * USEC_PER_MSEC, true,
-				 qdma, REG_TRTCM_CFG_PARAM(addr));
+	for (i = 0; i < 100; i++) {
+		u32 data = 0;
+
+		airoha_qdma_wr(qdma, REG_TRTCM_DATA_LOW(addr), val);
+		wmb();
+		airoha_qdma_wr(qdma, REG_TRTCM_CFG_PARAM(addr), config);
+		wmb();
+
+		if (read_poll_timeout(airoha_qdma_rr, data,
+				      data & TRTCM_PARAM_RW_DONE_MASK,
+				      USEC_PER_MSEC, 10 * USEC_PER_MSEC,
+				      true, qdma, REG_TRTCM_CFG_PARAM(addr)))
+			continue;
+
+		if (airoha_qdma_get_trtcm_param(qdma, channel, addr, param,
+						mode, &data, NULL))
+			continue;
+
+		if (data == val)
+			return 0;
+	}
+
+	return -EBUSY;
 }
 
 static int airoha_qdma_set_trtcm_config(struct airoha_qdma *qdma, int channel,

Best Regards, Leto


More information about the Linux-mediatek mailing list