[PATCH v2] dmaengine: imx-sdma: Refine spba bus searching in probe

Shengjiu Wang shengjiu.wang at gmail.com
Tue Apr 7 01:59:46 PDT 2026


On Tue, Apr 7, 2026 at 4:31 PM Marco Felsch <m.felsch at pengutronix.de> wrote:
>
> On 26-04-07, Shengjiu Wang wrote:
> > There are multi spba-busses for i.MX8M* platforms, if only search for
> > the first spba-bus in DT, the found spba-bus may not the real bus of
> > audio devices, which cause issue for sdma p2p case, as the sdma p2p
> > script presently does not deal with the transactions involving two devices
> > connected to the AIPS bus.
> >
> > Search the SDMA parent node first, which should be the AIPS bus, then
> > search the child node whose compatible string is spba-bus under that AIPS
> > bus for the above multi spba-busses case.
>
> Sorry but I've to NACK this, I already fixed it in a more robust way by
> checking the consumer sdma node.
>

I think you refer to this one:
https://lists.infradead.org/pipermail/linux-arm-kernel/2025-September/1061824.html

I tested it,  but there is an issue. I replied to that thread, not
sure you received my message.

> +static int sdma_config_spba_slave(struct dma_chan *chan)
> +{
> +       struct sdma_channel *sdmac = to_sdma_chan(chan);
> +       struct device_node *spba_bus;
> +       struct resource spba_res;
> +       int ret;
> +
> +       spba_bus = of_get_parent(chan->slave->of_node);
With asrc p2p case, the chan is requested by __dma_request_channel(),
that the chan->slave = NULL, Then there will be a kernel dump here.

That's the reason I sent this fix.  But if you can fix the above
issue, I am ok to drop
my fix.  or could you review my fix?, which is simpler.

Best regards
Shengjiu Wang

> Regards,
>   Marco
>
>
> > Fixes: 8391ecf465ec ("dmaengine: imx-sdma: Add device to device support")
> > Signed-off-by: Shengjiu Wang <shengjiu.wang at nxp.com>
> > ---
> > changes in v2:
> > - add fixes tag
> > - use __free(device_node) for auto release.
> >
> >  drivers/dma/imx-sdma.c | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
> > index 3d527883776b..36368835a845 100644
> > --- a/drivers/dma/imx-sdma.c
> > +++ b/drivers/dma/imx-sdma.c
> > @@ -2364,7 +2364,9 @@ static int sdma_probe(struct platform_device *pdev)
> >                       return dev_err_probe(&pdev->dev, ret,
> >                                            "failed to register controller\n");
> >
> > -             spba_bus = of_find_compatible_node(NULL, NULL, "fsl,spba-bus");
> > +             struct device_node *sdma_parent_np __free(device_node) = of_get_parent(np);
> > +
> > +             spba_bus = of_get_compatible_child(sdma_parent_np, "fsl,spba-bus");
> >               ret = of_address_to_resource(spba_bus, 0, &spba_res);
> >               if (!ret) {
> >                       sdma->spba_start_addr = spba_res.start;
> > --
> > 2.34.1
> >
> >
> >
>
> --
> #gernperDu
> #CallMeByMyFirstName
>
> Pengutronix e.K.                           |                             |
> Steuerwalder Str. 21                       | https://www.pengutronix.de/ |
> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-9    |
>



More information about the linux-arm-kernel mailing list