brcm2708: update to latest patches from RPi foundation
[openwrt/openwrt.git] / target / linux / brcm2708 / patches-4.19 / 950-0296-staging-vchiq_arm-Set-up-dma-ranges-on-child-devices.patch
diff --git a/target/linux/brcm2708/patches-4.19/950-0296-staging-vchiq_arm-Set-up-dma-ranges-on-child-devices.patch b/target/linux/brcm2708/patches-4.19/950-0296-staging-vchiq_arm-Set-up-dma-ranges-on-child-devices.patch
new file mode 100644 (file)
index 0000000..31e050a
--- /dev/null
@@ -0,0 +1,47 @@
+From f03f60a51efdf7fbc1f7d2c5b120a7de93ea6d9e Mon Sep 17 00:00:00 2001
+From: Dave Stevenson <dave.stevenson@raspberrypi.org>
+Date: Tue, 29 Jan 2019 16:13:25 +0000
+Subject: [PATCH] staging: vchiq_arm: Set up dma ranges on child
+ devices
+
+The VCHIQ driver now loads the audio, camera, codec, and vc-sm
+drivers as platform drivers. However they were not being given
+the correct DMA configuration.
+
+Call of_dma_configure with the parent (VCHIQ) parameters to be
+inherited by the child.
+
+Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
+---
+ .../vc04_services/interface/vchiq_arm/vchiq_arm.c   | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
++++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
+@@ -3585,6 +3585,7 @@ static struct platform_device *
+ vchiq_register_child(struct platform_device *pdev, const char *name)
+ {
+       struct platform_device_info pdevinfo;
++      struct platform_device *new_dev;
+       memset(&pdevinfo, 0, sizeof(pdevinfo));
+@@ -3593,7 +3594,17 @@ vchiq_register_child(struct platform_dev
+       pdevinfo.id = PLATFORM_DEVID_NONE;
+       pdevinfo.dma_mask = DMA_BIT_MASK(32);
+-      return platform_device_register_full(&pdevinfo);
++      new_dev = platform_device_register_full(&pdevinfo);
++      if (!new_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.
++       */
++      of_dma_configure(&new_dev->dev, pdev->dev.of_node, true);
++
++      return new_dev;
+ }
+ static int vchiq_probe(struct platform_device *pdev)