[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