]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
soc: ti: k3-navss-ringacc: Initialize base address of ring cfg registers
authorKishon Vijay Abraham I <kishon@ti.com>
Mon, 26 Aug 2024 10:25:07 +0000 (15:55 +0530)
committerTom Rini <trini@konsulko.com>
Fri, 30 Aug 2024 19:57:39 +0000 (13:57 -0600)
Initialize base address of ring config registers required to natively
setup ring cfg registers in the absence of Device Manager (DM) services
at R5 SPL stage. Since register property is defined as "ring" for PKTDMA
and "cfg" for UDMA, configure base address of ring configuration register
accordingly.

Reviewed-by: Alexander Sverdlin <alexander.sverdlin@siemens.com>
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Siddharth Vadapalli <s-vadapalli@ti.com>
Signed-off-by: Chintan Vankar <c-vankar@ti.com>
drivers/soc/ti/k3-navss-ringacc.c

index b2643a30d3d5afdddfda8cff40f80515004ba5f6..14114a65830f6af5fc2abdb891b084d1e04d79d2 100644 (file)
@@ -1028,8 +1028,8 @@ static int k3_nav_ringacc_init(struct udevice *dev, struct k3_nav_ringacc *ringa
 struct k3_nav_ringacc *k3_ringacc_dmarings_init(struct udevice *dev,
                                                struct k3_ringacc_init_data *data)
 {
+       void __iomem *base_rt, *base_cfg;
        struct k3_nav_ringacc *ringacc;
-       void __iomem *base_rt;
        int i;
 
        ringacc = devm_kzalloc(dev, sizeof(*ringacc), GFP_KERNEL);
@@ -1047,6 +1047,20 @@ struct k3_nav_ringacc *k3_ringacc_dmarings_init(struct udevice *dev,
        if (!base_rt)
                return ERR_PTR(-EINVAL);
 
+       /*
+        * Since register property is defined as "ring" for PKTDMA and
+        * "cfg" for UDMA, configure base address of ring configuration
+        * register accordingly.
+        */
+       base_cfg = dev_remap_addr_name(dev, "ring");
+       pr_debug("ring %p\n", base_cfg);
+       if (!base_cfg) {
+               base_cfg = dev_remap_addr_name(dev, "cfg");
+               pr_debug("cfg %p\n", base_cfg);
+               if (!base_cfg)
+                       return ERR_PTR(-EINVAL);
+       }
+
        ringacc->rings = devm_kzalloc(dev,
                                      sizeof(*ringacc->rings) *
                                      ringacc->num_rings * 2,
@@ -1061,6 +1075,7 @@ struct k3_nav_ringacc *k3_ringacc_dmarings_init(struct udevice *dev,
        for (i = 0; i < ringacc->num_rings; i++) {
                struct k3_nav_ring *ring = &ringacc->rings[i];
 
+               ring->cfg = base_cfg + KNAV_RINGACC_CFG_REGS_STEP * i;
                ring->rt = base_rt + K3_DMARING_RING_RT_REGS_STEP * i;
                ring->parent = ringacc;
                ring->ring_id = i;