staging: vchiq: Use the old dma controller for OF config on platform devices
authorDave Stevenson <dave.stevenson@raspberrypi.org>
Tue, 18 Jun 2019 11:15:50 +0000 (12:15 +0100)
committerDom Cobley <popcornmix@gmail.com>
Mon, 21 Mar 2022 16:03:58 +0000 (16:03 +0000)
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@raspberrypi.org>
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c

index 9a167fe..1d73065 100644 (file)
@@ -1773,6 +1773,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));
 
@@ -1788,10 +1789,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;
 }