Message ID | 20240705045030.1141934-4-c-vankar@ti.com |
---|---|
State | Changes Requested |
Delegated to: | Tom Rini |
Headers | show |
Series | Add support for Ethernet Boot on SK-AM62 | expand |
On Fri, 2024-07-05 at 10:20 +0530, Chintan Vankar wrote: > From: Kishon Vijay Abraham I <kishon@ti.com> > > 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. > > 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> Reviewed-by: Alexander Sverdlin <alexander.sverdlin@siemens.com> > --- > > Link to v2: > https://lore.kernel.org/r/20240425120822.2048012-4-c-vankar@ti.com/ > > Changes from v2 to v3: > - Since register property is defined as "ring" for PKTDMA and "cfg" > for UDMA, change conditon to configure the base address of ring > configuration register accordingly. > > drivers/soc/ti/k3-navss-ringacc.c | 17 ++++++++++++++++- > 1 file changed, 16 insertions(+), 1 deletion(-) > > diff --git a/drivers/soc/ti/k3-navss-ringacc.c b/drivers/soc/ti/k3-navss-ringacc.c > index d3f3d4761c..8ffb6137df 100644 > --- a/drivers/soc/ti/k3-navss-ringacc.c > +++ b/drivers/soc/ti/k3-navss-ringacc.c > @@ -1029,8 +1029,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); > @@ -1048,6 +1048,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, > @@ -1062,6 +1076,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;
diff --git a/drivers/soc/ti/k3-navss-ringacc.c b/drivers/soc/ti/k3-navss-ringacc.c index d3f3d4761c..8ffb6137df 100644 --- a/drivers/soc/ti/k3-navss-ringacc.c +++ b/drivers/soc/ti/k3-navss-ringacc.c @@ -1029,8 +1029,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); @@ -1048,6 +1048,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, @@ -1062,6 +1076,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;