1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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;
}
|