From: Dave Stevenson <dave.stevenson@xxxxxxxxxxxxxxx> vchiq on Pi4 is no longer under the soc node, therefore it doesn't get the dma-ranges for the VPU. Switch to using the configuration of the old dma controller as that will set the dma-ranges correctly. Signed-off-by: Dave Stevenson <dave.stevenson@xxxxxxxxxxxxxxx> Signed-off-by: Jacopo Mondi <jacopo@xxxxxxxxxx> --- .../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; } -- Regards, Laurent Pinchart