From 65a5b304668ed6cb4568ac1a0ffbeabb28208b38 Mon Sep 17 00:00:00 2001 From: Dave Stevenson Date: Tue, 18 Jun 2019 12:15:50 +0100 Subject: [PATCH] staging: vchiq: Use the old dma controller for OF config on platform devices 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 --- .../interface/vchiq_arm/vchiq_arm.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c @@ -3599,6 +3599,7 @@ vchiq_register_child(struct platform_dev { struct platform_device_info pdevinfo; struct platform_device *new_dev; + struct device_node *np; memset(&pdevinfo, 0, sizeof(pdevinfo)); @@ -3612,10 +3613,20 @@ vchiq_register_child(struct platform_dev return NULL; /* - * 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(&new_dev->dev, np, true); + + if (np != pdev->dev.of_node) + of_node_put(np); return new_dev; }