Handle absence of tisci with direct register writes. This will support
platforms that do not have tisci firmware like AM62L.
Remove TI_SCI_INTA_IRQCHIP dependency for TI_K3_RINGACC in Kconfig as
it is required conditionally (only for devices that has TI_SCI).
Signed-off-by: Sai Sree Kartheek Adivi <s-adivi@ti.com>
---
drivers/soc/ti/Kconfig | 1 -
drivers/soc/ti/k3-ringacc.c | 188 ++++++++++++++++++++++++++----
include/linux/soc/ti/k3-ringacc.h | 17 +++
3 files changed, 181 insertions(+), 25 deletions(-)
diff --git a/drivers/soc/ti/Kconfig b/drivers/soc/ti/Kconfig
index 163aadd589d3a..5499c0def527a 100644
--- a/drivers/soc/ti/Kconfig
+++ b/drivers/soc/ti/Kconfig
@@ -53,7 +53,6 @@ config WKUP_M3_IPC
config TI_K3_RINGACC
tristate "K3 Ring accelerator Sub System"
depends on ARCH_K3 || COMPILE_TEST
- depends on TI_SCI_INTA_IRQCHIP
help
Say y here to support the K3 Ring accelerator module.
The Ring Accelerator (RINGACC or RA) provides hardware acceleration
diff --git a/drivers/soc/ti/k3-ringacc.c b/drivers/soc/ti/k3-ringacc.c
index 7602b8a909b05..fd7c960a3fa2a 100644
--- a/drivers/soc/ti/k3-ringacc.c
+++ b/drivers/soc/ti/k3-ringacc.c
@@ -45,6 +45,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
@@ -138,6 +185,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
@@ -157,6 +206,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;
@@ -466,15 +517,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 */
+ wmb();
+ 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)
@@ -500,10 +567,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)
@@ -575,10 +657,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)
@@ -669,15 +766,30 @@ 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];
+
+ 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];
+
+ writel(0xFF, &ring2->intr->status);
+}
+EXPORT_SYMBOL_GPL(k3_ringacc_ring_clear_irq);
+
static int k3_ringacc_ring_cfg_sci(struct k3_ring *ring)
{
struct ti_sci_msg_rm_ring_cfg ring_cfg = { 0 };
struct k3_ringacc *ringacc = ring->parent;
int ret;
- if (!ringacc->tisci)
- return -EINVAL;
-
ring_cfg.nav_id = ringacc->tisci_dev_id;
ring_cfg.index = ring->ring_id;
ring_cfg.valid_params = TI_SCI_MSG_VALUE_RM_ALL_NO_ORDER;
@@ -688,6 +800,24 @@ static int k3_ringacc_ring_cfg_sci(struct k3_ring *ring)
ring_cfg.size = ring->elm_size;
ring_cfg.asel = ring->asel;
+ 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);
+ writel(K3_RINGACC_RT_INT_ENABLE_SET_COMPLETE | K3_RINGACC_RT_INT_ENABLE_SET_TR,
+ &ring->intr->enable_set);
+ return 0;
+ }
+
ret = ringacc->tisci_ring_ops->set_cfg(ringacc->tisci, &ring_cfg);
if (ret)
dev_err(ringacc->dev, "TISCI config ring fail (%d) ring_idx %d\n",
@@ -1346,8 +1476,11 @@ static int k3_ringacc_probe_dt(struct k3_ringacc *ringacc)
return PTR_ERR(ringacc->rm_gp_range);
}
- return ti_sci_inta_msi_domain_alloc_irqs(ringacc->dev,
- ringacc->rm_gp_range);
+ if (IS_ENABLED(CONFIG_TI_K3_UDMA))
+ return ti_sci_inta_msi_domain_alloc_irqs(ringacc->dev,
+ ringacc->rm_gp_range);
+ else
+ return 0;
}
static const struct k3_ringacc_soc_data k3_ringacc_soc_data_sr1 = {
@@ -1480,9 +1613,12 @@ struct k3_ringacc *k3_ringacc_dmarings_init(struct platform_device *pdev,
mutex_init(&ringacc->req_lock);
- base_rt = devm_platform_ioremap_resource_byname(pdev, "ringrt");
- if (IS_ERR(base_rt))
- return ERR_CAST(base_rt);
+ base_rt = data->base_rt;
+ if (!base_rt) {
+ base_rt = devm_platform_ioremap_resource_byname(pdev, "ringrt");
+ if (IS_ERR(base_rt))
+ return ERR_CAST(base_rt);
+ }
ringacc->rings = devm_kzalloc(dev,
sizeof(*ringacc->rings) *
@@ -1498,6 +1634,10 @@ struct k3_ringacc *k3_ringacc_dmarings_init(struct platform_device *pdev,
struct k3_ring *ring = &ringacc->rings[i];
ring->rt = base_rt + K3_DMARING_RT_REGS_STEP * i;
+ ring->cfg = base_rt + K3_RINGACC_RT_CFG_REGS_OFS +
+ K3_DMARING_RT_REGS_STEP * i;
+ ring->intr = base_rt + K3_RINGACC_RT_INT_REGS_OFS +
+ K3_DMARING_RT_REGS_STEP * i;
ring->parent = ringacc;
ring->ring_id = i;
ring->proxy_id = K3_RINGACC_PROXY_NOT_USED;
diff --git a/include/linux/soc/ti/k3-ringacc.h b/include/linux/soc/ti/k3-ringacc.h
index 39b022b925986..9f2d141c988bd 100644
--- a/include/linux/soc/ti/k3-ringacc.h
+++ b/include/linux/soc/ti/k3-ringacc.h
@@ -158,6 +158,22 @@ u32 k3_ringacc_get_ring_id(struct k3_ring *ring);
*/
int k3_ringacc_get_ring_irq_num(struct k3_ring *ring);
+/**
+ * k3_ringacc_ring_get_irq_status - Get the irq status for the ring
+ * @ring: pointer on ring
+ *
+ * Returns the interrupt status
+ */
+u32 k3_ringacc_ring_get_irq_status(struct k3_ring *ring);
+
+/**
+ * k3_ringacc_ring_clear_irq - Clear all interrupts
+ * @ring: pointer on ring
+ *
+ * Clears all the interrupts on the ring
+ */
+void k3_ringacc_ring_clear_irq(struct k3_ring *ring);
+
/**
* k3_ringacc_ring_cfg - ring configure
* @ring: pointer on ring
@@ -262,6 +278,7 @@ struct k3_ringacc_init_data {
const struct ti_sci_handle *tisci;
u32 tisci_dev_id;
u32 num_rings;
+ void __iomem *base_rt;
};
struct k3_ringacc *k3_ringacc_dmarings_init(struct platform_device *pdev,
--
2.34.1
On 30/01/2026 13:01, Sai Sree Kartheek Adivi wrote: > Handle absence of tisci with direct register writes. This will support > platforms that do not have tisci firmware like AM62L. > > Remove TI_SCI_INTA_IRQCHIP dependency for TI_K3_RINGACC in Kconfig as > it is required conditionally (only for devices that has TI_SCI). > > Signed-off-by: Sai Sree Kartheek Adivi <s-adivi@ti.com> > --- > drivers/soc/ti/Kconfig | 1 - > drivers/soc/ti/k3-ringacc.c | 188 ++++++++++++++++++++++++++---- > include/linux/soc/ti/k3-ringacc.h | 17 +++ > 3 files changed, 181 insertions(+), 25 deletions(-) > > diff --git a/drivers/soc/ti/Kconfig b/drivers/soc/ti/Kconfig > index 163aadd589d3a..5499c0def527a 100644 > --- a/drivers/soc/ti/Kconfig > +++ b/drivers/soc/ti/Kconfig > @@ -53,7 +53,6 @@ config WKUP_M3_IPC > config TI_K3_RINGACC > tristate "K3 Ring accelerator Sub System" > depends on ARCH_K3 || COMPILE_TEST > - depends on TI_SCI_INTA_IRQCHIP I guess (based on robot report) that the selects from TI_SCI_INTA_IRQCHIP and TI_SCI_INTA_MSI_DOMAIN are needed to be added here -- Péter
Hi Sai,
kernel test robot noticed the following build errors:
[auto build test ERROR on vkoul-dmaengine/next]
[also build test ERROR on next-20260129]
[cannot apply to linus/master v6.19-rc7]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Sai-Sree-Kartheek-Adivi/dmaengine-ti-k3-udma-move-macros-to-header-file/20260130-191306
base: https://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine.git next
patch link: https://lore.kernel.org/r/20260130110159.359501-12-s-adivi%40ti.com
patch subject: [PATCH v4 11/19] drivers: soc: ti: k3-ringacc: handle absence of tisci
config: nios2-allmodconfig (https://download.01.org/0day-ci/archive/20260131/202601310246.hIZd2WuJ-lkp@intel.com/config)
compiler: nios2-linux-gcc (GCC) 11.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260131/202601310246.hIZd2WuJ-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202601310246.hIZd2WuJ-lkp@intel.com/
All error/warnings (new ones prefixed by >>):
In file included from drivers/soc/ti/k3-ringacc.c:17:
>> include/linux/soc/ti/ti_sci_inta_msi.h:17:43: warning: 'struct msi_domain_info' declared inside parameter list will not be visible outside of this definition or declaration
17 | struct msi_domain_info *info,
| ^~~~~~~~~~~~~~~
drivers/soc/ti/k3-ringacc.c: In function 'k3_ringacc_init':
>> drivers/soc/ti/k3-ringacc.c:1506:17: error: 'struct dev_msi_info' has no member named 'domain'
1506 | dev->msi.domain = of_msi_get_domain(dev, dev->of_node,
| ^
drivers/soc/ti/k3-ringacc.c:1508:22: error: 'struct dev_msi_info' has no member named 'domain'
1508 | if (!dev->msi.domain)
| ^
--
In file included from k3-ringacc.c:17:
>> include/linux/soc/ti/ti_sci_inta_msi.h:17:43: warning: 'struct msi_domain_info' declared inside parameter list will not be visible outside of this definition or declaration
17 | struct msi_domain_info *info,
| ^~~~~~~~~~~~~~~
k3-ringacc.c: In function 'k3_ringacc_init':
k3-ringacc.c:1506:17: error: 'struct dev_msi_info' has no member named 'domain'
1506 | dev->msi.domain = of_msi_get_domain(dev, dev->of_node,
| ^
k3-ringacc.c:1508:22: error: 'struct dev_msi_info' has no member named 'domain'
1508 | if (!dev->msi.domain)
| ^
vim +1506 drivers/soc/ti/k3-ringacc.c
95e7be062aea6d Grygorii Strashko 2020-09-11 1497
40a2a7c395cf5d Grygorii Strashko 2020-07-24 1498 static int k3_ringacc_init(struct platform_device *pdev,
40a2a7c395cf5d Grygorii Strashko 2020-07-24 1499 struct k3_ringacc *ringacc)
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1500 {
95e7be062aea6d Grygorii Strashko 2020-09-11 1501 const struct soc_device_attribute *soc;
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1502 void __iomem *base_fifo, *base_rt;
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1503 struct device *dev = &pdev->dev;
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1504 int ret, i;
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1505
34fff62827b254 Thomas Gleixner 2021-12-10 @1506 dev->msi.domain = of_msi_get_domain(dev, dev->of_node,
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1507 DOMAIN_BUS_TI_SCI_INTA_MSI);
e50a76355c1d85 Jayesh Choudhary 2023-07-28 1508 if (!dev->msi.domain)
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1509 return -EPROBE_DEFER;
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1510
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1511 ret = k3_ringacc_probe_dt(ringacc);
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1512 if (ret)
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1513 return ret;
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1514
95e7be062aea6d Grygorii Strashko 2020-09-11 1515 soc = soc_device_match(k3_ringacc_socinfo);
95e7be062aea6d Grygorii Strashko 2020-09-11 1516 if (soc && soc->data) {
95e7be062aea6d Grygorii Strashko 2020-09-11 1517 const struct k3_ringacc_soc_data *soc_data = soc->data;
95e7be062aea6d Grygorii Strashko 2020-09-11 1518
95e7be062aea6d Grygorii Strashko 2020-09-11 1519 ringacc->dma_ring_reset_quirk = soc_data->dma_ring_reset_quirk;
95e7be062aea6d Grygorii Strashko 2020-09-11 1520 }
95e7be062aea6d Grygorii Strashko 2020-09-11 1521
f9dbb99748bab0 Zhang Zekun 2023-08-09 1522 base_rt = devm_platform_ioremap_resource_byname(pdev, "rt");
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1523 if (IS_ERR(base_rt))
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1524 return PTR_ERR(base_rt);
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1525
f9dbb99748bab0 Zhang Zekun 2023-08-09 1526 base_fifo = devm_platform_ioremap_resource_byname(pdev, "fifos");
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1527 if (IS_ERR(base_fifo))
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1528 return PTR_ERR(base_fifo);
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1529
f9dbb99748bab0 Zhang Zekun 2023-08-09 1530 ringacc->proxy_gcfg = devm_platform_ioremap_resource_byname(pdev, "proxy_gcfg");
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1531 if (IS_ERR(ringacc->proxy_gcfg))
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1532 return PTR_ERR(ringacc->proxy_gcfg);
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1533
f9dbb99748bab0 Zhang Zekun 2023-08-09 1534 ringacc->proxy_target_base = devm_platform_ioremap_resource_byname(pdev,
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1535 "proxy_target");
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1536 if (IS_ERR(ringacc->proxy_target_base))
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1537 return PTR_ERR(ringacc->proxy_target_base);
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1538
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1539 ringacc->num_proxies = readl(&ringacc->proxy_gcfg->config) &
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1540 K3_RINGACC_PROXY_CFG_THREADS_MASK;
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1541
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1542 ringacc->rings = devm_kzalloc(dev,
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1543 sizeof(*ringacc->rings) *
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1544 ringacc->num_rings,
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1545 GFP_KERNEL);
a8eba8dde5fbf0 Christophe JAILLET 2021-12-23 1546 ringacc->rings_inuse = devm_bitmap_zalloc(dev, ringacc->num_rings,
a8eba8dde5fbf0 Christophe JAILLET 2021-12-23 1547 GFP_KERNEL);
a8eba8dde5fbf0 Christophe JAILLET 2021-12-23 1548 ringacc->proxy_inuse = devm_bitmap_zalloc(dev, ringacc->num_proxies,
a8eba8dde5fbf0 Christophe JAILLET 2021-12-23 1549 GFP_KERNEL);
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1550
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1551 if (!ringacc->rings || !ringacc->rings_inuse || !ringacc->proxy_inuse)
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1552 return -ENOMEM;
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1553
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1554 for (i = 0; i < ringacc->num_rings; i++) {
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1555 ringacc->rings[i].rt = base_rt +
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1556 K3_RINGACC_RT_REGS_STEP * i;
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1557 ringacc->rings[i].fifos = base_fifo +
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1558 K3_RINGACC_FIFO_REGS_STEP * i;
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1559 ringacc->rings[i].parent = ringacc;
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1560 ringacc->rings[i].ring_id = i;
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1561 ringacc->rings[i].proxy_id = K3_RINGACC_PROXY_NOT_USED;
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1562 }
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1563
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1564 ringacc->tisci_ring_ops = &ringacc->tisci->ops.rm_ring_ops;
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1565
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1566 dev_info(dev, "Ring Accelerator probed rings:%u, gp-rings[%u,%u] sci-dev-id:%u\n",
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1567 ringacc->num_rings,
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1568 ringacc->rm_gp_range->desc[0].start,
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1569 ringacc->rm_gp_range->desc[0].num,
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1570 ringacc->tisci_dev_id);
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1571 dev_info(dev, "dma-ring-reset-quirk: %s\n",
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1572 ringacc->dma_ring_reset_quirk ? "enabled" : "disabled");
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1573 dev_info(dev, "RA Proxy rev. %08x, num_proxies:%u\n",
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1574 readl(&ringacc->proxy_gcfg->revision), ringacc->num_proxies);
40a2a7c395cf5d Grygorii Strashko 2020-07-24 1575
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1576 return 0;
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1577 }
3277e8aa2504d9 Grygorii Strashko 2020-01-15 1578
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Sai,
kernel test robot noticed the following build errors:
[auto build test ERROR on vkoul-dmaengine/next]
[also build test ERROR on next-20260129]
[cannot apply to linus/master v6.19-rc7]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Sai-Sree-Kartheek-Adivi/dmaengine-ti-k3-udma-move-macros-to-header-file/20260130-191306
base: https://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine.git next
patch link: https://lore.kernel.org/r/20260130110159.359501-12-s-adivi%40ti.com
patch subject: [PATCH v4 11/19] drivers: soc: ti: k3-ringacc: handle absence of tisci
config: arm-randconfig-001-20260131 (https://download.01.org/0day-ci/archive/20260131/202601310206.DLRWFXou-lkp@intel.com/config)
compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project 9b8addffa70cee5b2acc5454712d9cf78ce45710)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260131/202601310206.DLRWFXou-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202601310206.DLRWFXou-lkp@intel.com/
All error/warnings (new ones prefixed by >>):
In file included from drivers/soc/ti/k3-ringacc.c:17:
>> include/linux/soc/ti/ti_sci_inta_msi.h:17:15: warning: declaration of 'struct msi_domain_info' will not be visible outside of this function [-Wvisibility]
17 | struct msi_domain_info *info,
| ^
>> drivers/soc/ti/k3-ringacc.c:1506:11: error: no member named 'domain' in 'struct dev_msi_info'
1506 | dev->msi.domain = of_msi_get_domain(dev, dev->of_node,
| ~~~~~~~~ ^
drivers/soc/ti/k3-ringacc.c:1508:16: error: no member named 'domain' in 'struct dev_msi_info'
1508 | if (!dev->msi.domain)
| ~~~~~~~~ ^
1 warning and 2 errors generated.
Kconfig warnings: (for reference only)
WARNING: unmet direct dependencies detected for CAN_DEV
Depends on [n]: NETDEVICES [=n] && CAN [=m]
Selected by [m]:
- CAN [=m] && NET [=y]
vim +1506 drivers/soc/ti/k3-ringacc.c
95e7be062aea6d2 Grygorii Strashko 2020-09-11 1497
40a2a7c395cf5d9 Grygorii Strashko 2020-07-24 1498 static int k3_ringacc_init(struct platform_device *pdev,
40a2a7c395cf5d9 Grygorii Strashko 2020-07-24 1499 struct k3_ringacc *ringacc)
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1500 {
95e7be062aea6d2 Grygorii Strashko 2020-09-11 1501 const struct soc_device_attribute *soc;
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1502 void __iomem *base_fifo, *base_rt;
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1503 struct device *dev = &pdev->dev;
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1504 int ret, i;
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1505
34fff62827b254f Thomas Gleixner 2021-12-10 @1506 dev->msi.domain = of_msi_get_domain(dev, dev->of_node,
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1507 DOMAIN_BUS_TI_SCI_INTA_MSI);
e50a76355c1d858 Jayesh Choudhary 2023-07-28 1508 if (!dev->msi.domain)
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1509 return -EPROBE_DEFER;
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1510
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1511 ret = k3_ringacc_probe_dt(ringacc);
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1512 if (ret)
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1513 return ret;
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1514
95e7be062aea6d2 Grygorii Strashko 2020-09-11 1515 soc = soc_device_match(k3_ringacc_socinfo);
95e7be062aea6d2 Grygorii Strashko 2020-09-11 1516 if (soc && soc->data) {
95e7be062aea6d2 Grygorii Strashko 2020-09-11 1517 const struct k3_ringacc_soc_data *soc_data = soc->data;
95e7be062aea6d2 Grygorii Strashko 2020-09-11 1518
95e7be062aea6d2 Grygorii Strashko 2020-09-11 1519 ringacc->dma_ring_reset_quirk = soc_data->dma_ring_reset_quirk;
95e7be062aea6d2 Grygorii Strashko 2020-09-11 1520 }
95e7be062aea6d2 Grygorii Strashko 2020-09-11 1521
f9dbb99748bab00 Zhang Zekun 2023-08-09 1522 base_rt = devm_platform_ioremap_resource_byname(pdev, "rt");
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1523 if (IS_ERR(base_rt))
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1524 return PTR_ERR(base_rt);
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1525
f9dbb99748bab00 Zhang Zekun 2023-08-09 1526 base_fifo = devm_platform_ioremap_resource_byname(pdev, "fifos");
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1527 if (IS_ERR(base_fifo))
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1528 return PTR_ERR(base_fifo);
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1529
f9dbb99748bab00 Zhang Zekun 2023-08-09 1530 ringacc->proxy_gcfg = devm_platform_ioremap_resource_byname(pdev, "proxy_gcfg");
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1531 if (IS_ERR(ringacc->proxy_gcfg))
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1532 return PTR_ERR(ringacc->proxy_gcfg);
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1533
f9dbb99748bab00 Zhang Zekun 2023-08-09 1534 ringacc->proxy_target_base = devm_platform_ioremap_resource_byname(pdev,
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1535 "proxy_target");
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1536 if (IS_ERR(ringacc->proxy_target_base))
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1537 return PTR_ERR(ringacc->proxy_target_base);
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1538
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1539 ringacc->num_proxies = readl(&ringacc->proxy_gcfg->config) &
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1540 K3_RINGACC_PROXY_CFG_THREADS_MASK;
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1541
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1542 ringacc->rings = devm_kzalloc(dev,
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1543 sizeof(*ringacc->rings) *
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1544 ringacc->num_rings,
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1545 GFP_KERNEL);
a8eba8dde5fbf0b Christophe JAILLET 2021-12-23 1546 ringacc->rings_inuse = devm_bitmap_zalloc(dev, ringacc->num_rings,
a8eba8dde5fbf0b Christophe JAILLET 2021-12-23 1547 GFP_KERNEL);
a8eba8dde5fbf0b Christophe JAILLET 2021-12-23 1548 ringacc->proxy_inuse = devm_bitmap_zalloc(dev, ringacc->num_proxies,
a8eba8dde5fbf0b Christophe JAILLET 2021-12-23 1549 GFP_KERNEL);
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1550
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1551 if (!ringacc->rings || !ringacc->rings_inuse || !ringacc->proxy_inuse)
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1552 return -ENOMEM;
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1553
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1554 for (i = 0; i < ringacc->num_rings; i++) {
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1555 ringacc->rings[i].rt = base_rt +
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1556 K3_RINGACC_RT_REGS_STEP * i;
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1557 ringacc->rings[i].fifos = base_fifo +
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1558 K3_RINGACC_FIFO_REGS_STEP * i;
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1559 ringacc->rings[i].parent = ringacc;
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1560 ringacc->rings[i].ring_id = i;
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1561 ringacc->rings[i].proxy_id = K3_RINGACC_PROXY_NOT_USED;
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1562 }
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1563
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1564 ringacc->tisci_ring_ops = &ringacc->tisci->ops.rm_ring_ops;
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1565
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1566 dev_info(dev, "Ring Accelerator probed rings:%u, gp-rings[%u,%u] sci-dev-id:%u\n",
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1567 ringacc->num_rings,
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1568 ringacc->rm_gp_range->desc[0].start,
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1569 ringacc->rm_gp_range->desc[0].num,
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1570 ringacc->tisci_dev_id);
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1571 dev_info(dev, "dma-ring-reset-quirk: %s\n",
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1572 ringacc->dma_ring_reset_quirk ? "enabled" : "disabled");
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1573 dev_info(dev, "RA Proxy rev. %08x, num_proxies:%u\n",
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1574 readl(&ringacc->proxy_gcfg->revision), ringacc->num_proxies);
40a2a7c395cf5d9 Grygorii Strashko 2020-07-24 1575
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1576 return 0;
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1577 }
3277e8aa2504d97 Grygorii Strashko 2020-01-15 1578
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
© 2016 - 2026 Red Hat, Inc.