[PATCH 13/31] drivers: soc: ti: k3-ringacc: fix k3_ringacc_ring_reset_sci
Sascha Hauer
s.hauer at pengutronix.de
Wed May 28 04:45:25 PDT 2025
Based on Linux downstream commit:
| commit 5591c7f9a0fedc8dde70e6f2143165e296084249
| Author: Sai Sree Kartheek Adivi <s-adivi at ti.com>
| Date: Fri Mar 7 03:26:59 2025 +0530
|
| PENDING: drivers: soc: ti: k3-ringacc: fix k3_ringacc_ring_reset_sci
|
| Add non-tisci implementation for k3_ringacc_ring_reset_sci using direct
| register writes.
|
| Fixes: a621a1075550f ("PENDING: drivers: soc: ti: k3-ringacc: handle absence of tisci")
| Signed-off-by: Sai Sree Kartheek Adivi <s-adivi at ti.com>
Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
drivers/soc/ti/k3-navss-ringacc.c | 31 ++++++++++++++++++++-----------
1 file changed, 20 insertions(+), 11 deletions(-)
diff --git a/drivers/soc/ti/k3-navss-ringacc.c b/drivers/soc/ti/k3-navss-ringacc.c
index dfc397a1f5aca08a90ed773540bdeae9f50b8173..18fb9153caa467b3159e035448e16da65563b36e 100644
--- a/drivers/soc/ti/k3-navss-ringacc.c
+++ b/drivers/soc/ti/k3-navss-ringacc.c
@@ -472,20 +472,29 @@ static void k3_ringacc_ring_reset_sci(struct k3_ring *ring)
struct ti_sci_msg_rm_ring_cfg ring_cfg = { 0 };
struct k3_ringacc *ringacc = ring->parent;
int ret;
+ u32 reg;
- /* TODO: Implement ring reset without tisci */
- if (!ringacc->tisci)
- return;
+ if (!ringacc->tisci) {
+ if (ring->cfg == NULL)
+ return;
+ reg = readl(&ring->cfg->size);
+ reg &= ~K3_DMARING_CFG_SIZE_MASK;
- ring_cfg.nav_id = ringacc->tisci_dev_id;
- ring_cfg.index = ring->ring_id;
- ring_cfg.valid_params = TI_SCI_MSG_VALUE_RM_RING_COUNT_VALID;
- ring_cfg.count = ring->size;
+ writel(reg, &ring->cfg->size);
+ reg |= ring->size;
- ret = ringacc->tisci_ring_ops->set_cfg(ringacc->tisci, &ring_cfg);
- if (ret)
- dev_err(ringacc->dev, "TISCI reset ring fail (%d) ring_idx %d\n",
- ret, ring->ring_id);
+ writel(reg, &ring->cfg->size);
+ } else {
+ ring_cfg.nav_id = ringacc->tisci_dev_id;
+ ring_cfg.index = ring->ring_id;
+ ring_cfg.valid_params = TI_SCI_MSG_VALUE_RM_RING_COUNT_VALID;
+ ring_cfg.count = ring->size;
+
+ ret = ringacc->tisci_ring_ops->set_cfg(ringacc->tisci, &ring_cfg);
+ if (ret)
+ dev_err(ringacc->dev, "TISCI reset ring fail (%d) ring_idx %d\n",
+ ret, ring->ring_id);
+ }
}
void k3_ringacc_ring_reset(struct k3_ring *ring)
--
2.39.5
More information about the barebox
mailing list