brcm2708: update to latest patches from RPi foundation
[openwrt/staging/chunkeey.git] / target / linux / brcm2708 / patches-4.19 / 950-0579-staging-vchiq-Use-the-old-dma-controller-for-OF-conf.patch
diff --git a/target/linux/brcm2708/patches-4.19/950-0579-staging-vchiq-Use-the-old-dma-controller-for-OF-conf.patch b/target/linux/brcm2708/patches-4.19/950-0579-staging-vchiq-Use-the-old-dma-controller-for-OF-conf.patch
new file mode 100644 (file)
index 0000000..808fdaf
--- /dev/null
@@ -0,0 +1,51 @@
+From 65a5b304668ed6cb4568ac1a0ffbeabb28208b38 Mon Sep 17 00:00:00 2001
+From: Dave Stevenson <dave.stevenson@raspberrypi.org>
+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 <dave.stevenson@raspberrypi.org>
+---
+ .../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;
+ }