aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.4/950-0384-pcie-brcmstb-Eliminate-arch_dma_ops-error-message.patch
blob: ee7cf0e52be16ab2b32fc30828f5b25abd1f43e6 (plain)
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
From 27cf0ad95cdf30f52a5fc6c69014a0d7bf5a1222 Mon Sep 17 00:00:00 2001
From: Phil Elwell <phil@raspberrypi.org>
Date: Wed, 8 Jan 2020 17:21:09 +0000
Subject: [PATCH] pcie-brcmstb: Eliminate arch_dma_ops error message

The driver attempts to set the dma_ops for the root complex, but doing
so causes an error message and only the end points need it. Fix the
error by making the code specific to the end point case.

Also copy some cosmetic tidy-ups from 5.5.y.

Signed-off-by: Phil Elwell <phil@raspberrypi.org>
---
 drivers/pci/controller/pcie-brcmstb.c | 43 ++++++++++++++-------------
 1 file changed, 22 insertions(+), 21 deletions(-)

--- a/drivers/pci/controller/pcie-brcmstb.c
+++ b/drivers/pci/controller/pcie-brcmstb.c
@@ -633,16 +633,17 @@ static int brcmstb_platform_notifier(str
 
 	switch (event) {
 	case BUS_NOTIFY_ADD_DEVICE:
-		if (max_pfn > (bounce_threshold/PAGE_SIZE) &&
-		    strcmp(dev->kobj.name, rc_name)) {
-
-			ret = brcm_pcie_bounce_register_dev(dev);
-			if (ret) {
-				dev_err(dev,
-					"brcm_pcie_bounce_register_dev() failed: %d\n",
-					ret);
-				return ret;
+		if (strcmp(dev->kobj.name, rc_name)) {
+			if (max_pfn > (bounce_threshold/PAGE_SIZE)) {
+				ret = brcm_pcie_bounce_register_dev(dev);
+				if (ret) {
+					dev_err(dev,
+						"brcm_pcie_bounce_register_dev() failed: %d\n",
+						ret);
+					return ret;
+				}
 			}
+			brcm_set_dma_ops(dev);
 		} else if (IS_ENABLED(CONFIG_ARM64)) {
 			ret = of_dma_configure(dev, dev->of_node, true);
 			if (ret) {
@@ -650,7 +651,6 @@ static int brcmstb_platform_notifier(str
 				return ret;
 			}
 		}
-		brcm_set_dma_ops(dev);
 		return NOTIFY_OK;
 
 	case BUS_NOTIFY_DEL_DEVICE:
@@ -1685,7 +1685,8 @@ MODULE_DEVICE_TABLE(of, brcm_pcie_match)
 
 static int brcm_pcie_probe(struct platform_device *pdev)
 {
-	struct device_node *dn = pdev->dev.of_node, *msi_dn;
+	struct device *dev = &pdev->dev;
+	struct device_node *dn = dev->of_node, *msi_dn;
 	const struct of_device_id *of_id;
 	const struct pcie_cfg_data *data;
 	int ret;
@@ -1696,7 +1697,7 @@ static int brcm_pcie_probe(struct platfo
 	struct pci_bus *child;
 	extern unsigned long max_pfn;
 
-	bridge = devm_pci_alloc_host_bridge(&pdev->dev, sizeof(*pcie));
+	bridge = devm_pci_alloc_host_bridge(dev, sizeof(*pcie));
 	if (!bridge)
 		return -ENOMEM;
 
@@ -1705,7 +1706,7 @@ static int brcm_pcie_probe(struct platfo
 
 	of_id = of_match_node(brcm_pcie_match, dn);
 	if (!of_id) {
-		dev_err(&pdev->dev, "failed to look up compatible string\n");
+		dev_err(dev, "failed to look up compatible string\n");
 		return -EINVAL;
 	}
 
@@ -1715,7 +1716,7 @@ static int brcm_pcie_probe(struct platfo
 	pcie->max_burst_size = data->max_burst_size;
 	pcie->type = data->type;
 	pcie->dn = dn;
-	pcie->dev = &pdev->dev;
+	pcie->dev = dev;
 
 	/* We use the domain number as our controller number */
 	pcie->id = of_get_pci_domain_nr(dn);
@@ -1726,18 +1727,18 @@ static int brcm_pcie_probe(struct platfo
 	if (!res)
 		return -EINVAL;
 
-	base = devm_ioremap_resource(&pdev->dev, res);
+	base = devm_ioremap_resource(dev, res);
 	if (IS_ERR(base))
 		return PTR_ERR(base);
 
 	/* To Do: Add hardware check if this ever gets fixed */
 	if (max_pfn > (bounce_threshold/PAGE_SIZE)) {
 		int ret;
-		ret = brcm_pcie_bounce_init(&pdev->dev, bounce_buffer,
+		ret = brcm_pcie_bounce_init(dev, bounce_buffer,
 					    (dma_addr_t)bounce_threshold);
 		if (ret) {
 			if (ret != -EPROBE_DEFER)
-				dev_err(&pdev->dev,
+				dev_err(dev,
 					"could not init bounce buffers: %d\n",
 					ret);
 			return ret;
@@ -1746,7 +1747,7 @@ static int brcm_pcie_probe(struct platfo
 
 	pcie->clk = of_clk_get_by_name(dn, "sw_pcie");
 	if (IS_ERR(pcie->clk)) {
-		dev_warn(&pdev->dev, "could not get clock\n");
+		dev_warn(dev, "could not get clock\n");
 		pcie->clk = NULL;
 	}
 	pcie->base = base;
@@ -1756,7 +1757,7 @@ static int brcm_pcie_probe(struct platfo
 
 	pcie->ssc = of_property_read_bool(dn, "brcm,enable-ssc");
 
-	ret = irq_of_parse_and_map(pdev->dev.of_node, 0);
+	ret = irq_of_parse_and_map(dev->of_node, 0);
 	if (ret == 0)
 		/* keep going, as we don't use this intr yet */
 		dev_warn(pcie->dev, "cannot get PCIe interrupt\n");
@@ -1770,7 +1771,7 @@ static int brcm_pcie_probe(struct platfo
 	ret = clk_prepare_enable(pcie->clk);
 	if (ret) {
 		if (ret != -EPROBE_DEFER)
-			dev_err(&pdev->dev, "could not enable clock\n");
+			dev_err(dev, "could not enable clock\n");
 		return ret;
 	}
 
@@ -1797,7 +1798,7 @@ static int brcm_pcie_probe(struct platfo
 	}
 
 	list_splice_init(&pcie->resources, &bridge->windows);
-	bridge->dev.parent = &pdev->dev;
+	bridge->dev.parent = dev;
 	bridge->busnr = 0;
 	bridge->ops = &brcm_pcie_ops;
 	bridge->sysdata = pcie;