Hi Laurent, Dave, On Mon, 2020-05-04 at 12:26 +0300, Laurent Pinchart wrote: > From: Dave Stevenson > > vchiq on Pi4 is no longer under the soc node, therefore it > doesn't get the dma-ranges for the VPU. This is not true in upstream's device-tree, and AFAIK, from a HW perspective, the VPU interface didn't change interconnects, it's still connected to /soc (highlighted by the fact that it has its DMA limitations). Why did you found the need to move vchiq into /scb downstream? > Switch to using the configuration of the old dma controller as > that will set the dma-ranges correctly. Ultimately, this is no different than copying DMA constraints from, say, the I2C bus controller. The fact that this is a DMA controller has nothing to with VPU's view of the system's memory (which dma-ranges symbolizes). BTW, Laurent, I learned all about DMA trough one of your talks, it really helped to set everything in place at the time :). Regards, Nicolas > Signed-off-by: Dave Stevenson > Signed-off-by: Jacopo Mondi > --- > .../interface/vchiq_arm/vchiq_arm.c | 17 ++++++++++++++--- > 1 file changed, 14 insertions(+), 3 deletions(-) > > diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c > b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c > index 15ccd624aaab..d1a556f16499 100644 > --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c > +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c > @@ -2719,6 +2719,7 @@ vchiq_register_child(struct platform_device *pdev, const > char *name) > { > struct platform_device_info pdevinfo; > struct platform_device *child; > + struct device_node *np; > > memset(&pdevinfo, 0, sizeof(pdevinfo)); > > @@ -2734,10 +2735,20 @@ vchiq_register_child(struct platform_device *pdev, > const char *name) > } > > /* > - * We want the dma-ranges etc to be copied from the parent VCHIQ device > - * to be passed on to the children too. > + * We want the dma-ranges etc to be copied from a device with the > + * correct dma-ranges for the VPU. > + * VCHIQ on Pi4 is now under scb which doesn't get those dma-ranges. > + * Take the "dma" node as going to be suitable as it sees the world > + * through the same eyes as the VPU. > */ > - of_dma_configure(&new_dev->dev, pdev->dev.of_node, true); > + np = of_find_node_by_path("dma"); > + if (!np) > + np = pdev->dev.of_node; > + > + of_dma_configure(&child->dev, np, true); > + > + if (np != pdev->dev.of_node) > + of_node_put(np); > > return child; > }