mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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.
>

  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®