From: Sai Sree Kartheek Adivi <s-adivi@ti.com>
To: Vignesh Raghavendra <vigneshr@ti.com>
Cc: <peter.ujfalusi@gmail.com>, <vkoul@kernel.org>,
<Frank.Li@kernel.org>, <robh@kernel.org>, <krzk+dt@kernel.org>,
<conor+dt@kernel.org>, <nm@ti.com>, <ssantosh@kernel.org>,
<dmaengine@vger.kernel.org>, <devicetree@vger.kernel.org>,
<linux-kernel@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>, <r-sharma3@ti.com>,
<gehariprasath@ti.com>
Subject: Re: [PATCH v8 12/19] drivers: soc: ti: k3-ringacc: handle absence of tisci
Date: Tue, 22 Sep 2026 12:33:54 +0530 [thread overview]
Message-ID: <1af7e4b6-88b4-401e-b0de-26d93bb73c10@ti.com> (raw)
In-Reply-To: <178945512023.2241705.15093389710825277255.b4-review@b4>
On 15/09/26 12:22, Vignesh Raghavendra wrote:
>> Handle absence of tisci with direct register writes. This will support
>> platforms that do not have tisci firmware like AM62L.
>>
>> Signed-off-by: Sai Sree Kartheek Adivi <s-adivi@ti.com>
>>
>> diff --git a/drivers/soc/ti/k3-ringacc.c b/drivers/soc/ti/k3-ringacc.c
>> index 5966db4327b1..2a93e389fb8e 100644
>> --- a/drivers/soc/ti/k3-ringacc.c
>> +++ b/drivers/soc/ti/k3-ringacc.c
>> @@ -46,6 +46,53 @@ struct k3_ring_rt_regs {
>> u32 hwindx;
>> };
>>
>> +#define K3_RINGACC_RT_CFG_REGS_OFS 0x40
>> +#define K3_DMARING_CFG_ADDR_HI_MASK GENMASK(3, 0)
>> +#define K3_DMARING_CFG_ASEL_SHIFT 16
>> +#define K3_DMARING_CFG_SIZE_MASK GENMASK(15, 0)
>> +
>> +/**
>> + * struct k3_ring_cfg_regs - The RA Configuration Registers region
>> + *
>> + * @ba_lo: Ring Base Address Low Register
>> + * @ba_hi: Ring Base Address High Register
>> + * @size: Ring Size Register
>> + */
>> +struct k3_ring_cfg_regs {
>> + u32 ba_lo;
>> + u32 ba_hi;
>> + u32 size;
>> +};
>> +
>> +#define K3_RINGACC_RT_INT_REGS_OFS 0x140
>> +#define K3_RINGACC_RT_INT_ENABLE_SET_COMPLETE BIT(0)
>> +#define K3_RINGACC_RT_INT_ENABLE_SET_TR BIT(2)
>> +
>> +/**
>> + * struct k3_ring_intr_regs {
>> + *
>> + * @enable_set: Ring Interrupt Enable Register
>> + * @resv_1: Reserved
>> + * @clr: Ring Interrupt Clear Register
>> + * @resv_2: Reserved
>> + * @status_set: Ring Interrupt Status Set Register
>> + * @resv_3: Reserved
>> + * @status: Ring Interrupt Status Register
>> + * @resv_4: Reserved
>> + * @status_masked: Ring Interrupt Status Masked Register
>> + */
>> +struct k3_ring_intr_regs {
>> + u32 enable_set;
>> + u32 resv_1;
>> + u32 clr;
>> + u32 resv_2;
>> + u32 status_set;
>> + u32 resv_3;
>> + u32 status;
>> + u32 resv_4;
>> + u32 status_masked;
>> +};
>> +
>> #define K3_RINGACC_RT_REGS_STEP 0x1000
>> #define K3_DMARING_RT_REGS_STEP 0x2000
>> #define K3_DMARING_RT_REGS_REVERSE_OFS 0x1000
>> @@ -139,6 +186,8 @@ struct k3_ring_state {
>> * struct k3_ring - RA Ring descriptor
>> *
>> * @rt: Ring control/status registers
>> + * @cfg: Ring config registers
>> + * @intr: Ring interrupt registers
>> * @fifos: Ring queues registers
>> * @proxy: Ring Proxy Datapath registers
>> * @ring_mem_dma: Ring buffer dma address
>> @@ -158,6 +207,8 @@ struct k3_ring_state {
>> */
>> struct k3_ring {
>> struct k3_ring_rt_regs __iomem *rt;
>> + struct k3_ring_cfg_regs __iomem *cfg;
>> + struct k3_ring_intr_regs __iomem *intr;
>> struct k3_ring_fifo_regs __iomem *fifos;
>> struct k3_ringacc_proxy_target_regs __iomem *proxy;
>> dma_addr_t ring_mem_dma;
>> @@ -467,15 +518,31 @@ static void k3_ringacc_ring_reset_sci(struct k3_ring *ring)
>> struct k3_ringacc *ringacc = ring->parent;
>> int ret;
>>
>> - 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;
>> + if (!ringacc->tisci) {
>> + u32 reg;
>>
>> - 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);
>> + if (!ring->cfg)
>> + return;
>> +
>> + reg = readl(&ring->cfg->size);
>> + reg &= ~K3_DMARING_CFG_SIZE_MASK;
>> + writel(reg, &ring->cfg->size);
>> +
>> + /* Ensure the register clear operation completes before writing new value */
> how is this ensured? Should there be a check to read the reg until
> readback of K3_DMARING_CFG_SIZE_MASK field reads 0?
>
>> + reg = readl(&ring->cfg->size);
>> + reg |= ring->size;
>> + 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)
>> @@ -501,10 +568,25 @@ static void k3_ringacc_ring_reconfig_qmode_sci(struct k3_ring *ring,
>> ring_cfg.valid_params = TI_SCI_MSG_VALUE_RM_RING_MODE_VALID;
>> ring_cfg.mode = mode;
>>
>> - ret = ringacc->tisci_ring_ops->set_cfg(ringacc->tisci, &ring_cfg);
>> - if (ret)
>> - dev_err(ringacc->dev, "TISCI reconf qmode fail (%d) ring_idx %d\n",
>> - ret, ring->ring_id);
>> + if (!ringacc->tisci) {
>> + u32 reg;
>> +
>> + writel(ring_cfg.addr_lo, &ring->cfg->ba_lo);
>> + writel((ring_cfg.addr_hi & K3_DMARING_CFG_ADDR_HI_MASK) +
>> + (ring_cfg.asel << K3_DMARING_CFG_ASEL_SHIFT),
>> + &ring->cfg->ba_hi);
>> +
>> + reg = readl(&ring->cfg->size);
>> + reg &= ~K3_DMARING_CFG_SIZE_MASK;
>> + reg |= ring_cfg.count & K3_DMARING_CFG_SIZE_MASK;
>> +
>> + writel(reg, &ring->cfg->size);
>> + } else {
>> + ret = ringacc->tisci_ring_ops->set_cfg(ringacc->tisci, &ring_cfg);
>> + if (ret)
>> + dev_err(ringacc->dev, "TISCI reconf qmode fail (%d) ring_idx %d\n",
>> + ret, ring->ring_id);
>> + }
>> }
>>
>> void k3_ringacc_ring_reset_dma(struct k3_ring *ring, u32 occ)
>> @@ -576,10 +658,25 @@ static void k3_ringacc_ring_free_sci(struct k3_ring *ring)
>> ring_cfg.index = ring->ring_id;
>> ring_cfg.valid_params = TI_SCI_MSG_VALUE_RM_ALL_NO_ORDER;
>>
>> - ret = ringacc->tisci_ring_ops->set_cfg(ringacc->tisci, &ring_cfg);
>> - if (ret)
>> - dev_err(ringacc->dev, "TISCI ring free fail (%d) ring_idx %d\n",
>> - ret, ring->ring_id);
>> + if (!ringacc->tisci) {
>> + u32 reg;
>> +
>> + writel(ring_cfg.addr_lo, &ring->cfg->ba_lo);
>> + writel((ring_cfg.addr_hi & K3_DMARING_CFG_ADDR_HI_MASK) +
>> + (ring_cfg.asel << K3_DMARING_CFG_ASEL_SHIFT),
>> + &ring->cfg->ba_hi);
>> +
>> + reg = readl(&ring->cfg->size);
>> + reg &= ~K3_DMARING_CFG_SIZE_MASK;
>> + reg |= ring_cfg.count & K3_DMARING_CFG_SIZE_MASK;
>> +
>> + writel(reg, &ring->cfg->size);
>> + } else {
>> + ret = ringacc->tisci_ring_ops->set_cfg(ringacc->tisci, &ring_cfg);
>> + if (ret)
>> + dev_err(ringacc->dev, "TISCI ring free fail (%d) ring_idx %d\n",
>> + ret, ring->ring_id);
>> + }
>> }
>>
>> int k3_ringacc_ring_free(struct k3_ring *ring)
>> @@ -670,15 +767,37 @@ int k3_ringacc_get_ring_irq_num(struct k3_ring *ring)
>> }
>> EXPORT_SYMBOL_GPL(k3_ringacc_get_ring_irq_num);
>>
>> +u32 k3_ringacc_ring_get_irq_status(struct k3_ring *ring)
>> +{
>> + struct k3_ringacc *ringacc = ring->parent;
>> + struct k3_ring *ring2 = &ringacc->rings[ring->ring_id];
> How is ring2 different than ring? Maybe need better name for ring2 here?
addressed this and your other comments in v9.
https://lore.kernel.org/dmaengine/20260922064902.2719979-1-s-adivi@ti.com/
>
>> +
>> + if (!ring2->intr)
>> + return 0;
>> +
>> + return readl(&ring2->intr->status);
>> +}
>> +EXPORT_SYMBOL_GPL(k3_ringacc_ring_get_irq_status);
>> +
>> +void k3_ringacc_ring_clear_irq(struct k3_ring *ring)
>> +{
>> + struct k3_ringacc *ringacc = ring->parent;
>> + struct k3_ring *ring2 = &ringacc->rings[ring->ring_id];
>> +
> Same here
>
>> + if (!ring2->intr)
>> + return;
>> +
>> + u32 status = readl(&ring2->intr->status);
> Not a good idea to clear all the IRQs unconditionally, this function
> should ideally take a param of status to be cleared.
>
next prev parent reply other threads:[~2026-09-22 7:04 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-10 15:13 [PATCH v8 00/19] dmaengine: ti: Add support for BCDMA v2 and PKTDMA v2 Sai Sree Kartheek Adivi
2026-08-10 15:13 ` [PATCH v8 01/19] dmaengine: ti: k3-udma: Fix sporadic crash on AM62x Sai Sree Kartheek Adivi
2026-08-14 21:33 ` Frank Li
2026-08-10 15:13 ` [PATCH v8 02/19] dmaengine: ti: k3-udma: move macros to header file Sai Sree Kartheek Adivi
2026-08-10 15:13 ` [PATCH v8 03/19] dmaengine: ti: k3-udma: move structs and enums " Sai Sree Kartheek Adivi
2026-08-14 21:35 ` Frank Li
2026-08-10 15:13 ` [PATCH v8 04/19] dmaengine: ti: k3-udma: move static inline helper functions " Sai Sree Kartheek Adivi
2026-08-10 15:13 ` [PATCH v8 05/19] dmaengine: ti: k3-udma: move descriptor management to k3-udma-common.c Sai Sree Kartheek Adivi
2026-09-15 6:52 ` Vignesh Raghavendra
2026-08-10 15:14 ` [PATCH v8 06/19] dmaengine: ti: k3-udma: move ring management functions " Sai Sree Kartheek Adivi
2026-08-10 15:14 ` [PATCH v8 07/19] dmaengine: ti: k3-udma: Add variant-specific function pointers to udma_dev Sai Sree Kartheek Adivi
2026-08-10 15:14 ` [PATCH v8 08/19] dmaengine: ti: k3-udma: move udma utility functions to k3-udma-common.c Sai Sree Kartheek Adivi
2026-08-10 15:14 ` [PATCH v8 09/19] dmaengine: ti: k3-udma: move resource management " Sai Sree Kartheek Adivi
2026-08-10 15:14 ` [PATCH v8 10/19] dmaengine: ti: k3-udma: refactor resource setup functions Sai Sree Kartheek Adivi
2026-08-10 15:14 ` [PATCH v8 11/19] dmaengine: ti: k3-udma: move inclusion of k3-udma-private.c to k3-udma-common.c Sai Sree Kartheek Adivi
2026-08-10 15:14 ` [PATCH v8 12/19] drivers: soc: ti: k3-ringacc: handle absence of tisci Sai Sree Kartheek Adivi
2026-09-15 6:52 ` Vignesh Raghavendra
2026-09-22 7:03 ` Sai Sree Kartheek Adivi [this message]
2026-08-10 15:14 ` [PATCH v8 13/19] dt-bindings: dma: ti: Add K3 BCDMA V2 Sai Sree Kartheek Adivi
2026-08-11 6:32 ` Krzysztof Kozlowski
2026-08-12 12:00 ` Sai Sree Kartheek Adivi
2026-08-13 6:40 ` Krzysztof Kozlowski
2026-08-13 6:41 ` Krzysztof Kozlowski
2026-08-10 15:14 ` [PATCH v8 14/19] dt-bindings: dma: ti: Add K3 PKTDMA V2 Sai Sree Kartheek Adivi
2026-08-10 15:14 ` [PATCH v8 15/19] dmaengine: ti: k3-psil-am62l: Add AM62Lx PSIL and PDMA data Sai Sree Kartheek Adivi
2026-08-10 15:14 ` [PATCH v8 16/19] dmaengine: ti: k3-udma-v2: New driver for K3 BCDMA_V2 Sai Sree Kartheek Adivi
2026-09-15 6:52 ` Vignesh Raghavendra
2026-08-10 15:14 ` [PATCH v8 17/19] dmaengine: ti: k3-udma-v2: Add support for PKTDMA V2 Sai Sree Kartheek Adivi
2026-09-15 6:52 ` Vignesh Raghavendra
2026-08-10 15:14 ` [PATCH v8 18/19] dmaengine: ti: k3-udma-v2: Update glue layer to support " Sai Sree Kartheek Adivi
2026-08-10 15:14 ` [PATCH v8 19/19] dmaengine: ti: k3-udma: Validate resource ID and fix logging in reservation Sai Sree Kartheek Adivi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1af7e4b6-88b4-401e-b0de-26d93bb73c10@ti.com \
--to=s-adivi@ti.com \
--cc=Frank.Li@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dmaengine@vger.kernel.org \
--cc=gehariprasath@ti.com \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nm@ti.com \
--cc=peter.ujfalusi@gmail.com \
--cc=r-sharma3@ti.com \
--cc=robh@kernel.org \
--cc=ssantosh@kernel.org \
--cc=vigneshr@ti.com \
--cc=vkoul@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®