aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeert Uytterhoeven <geert+renesas@glider.be>2014-06-12 04:42:22 -0400
committerSimon Horman <horms+renesas@verge.net.au>2014-06-17 06:33:22 -0400
commit83850b04ae7744f51681533fb7afb645e66ce8fe (patch)
tree1ca098f65b0c502eab5e71beed8b13a52d1b57b2
parentf8e819352d12f1b7d109d846e9bf1c07e006469a (diff)
ARM: shmobile: rcar-gen2: Update for of_get_flat_dt_prop() update
Commit 9d0c4dfedd96ee54fc075b16d02f82499c8cc3a6 ("of/fdt: update of_get_flat_dt_prop in prep for libfdt") changed the function prototypes of of_get_flat_dt_prop(): - The return type was made const, - The last parameter was changed from "unsigned long *" to "int *". and dt_mem_next_cell(): - The second parameter was made const. This causes the following compiler warnings: arch/arm/mach-shmobile/setup-rcar-gen2.c: In function 'rcar_gen2_scan_mem': arch/arm/mach-shmobile/setup-rcar-gen2.c:125:15: warning: initialization discards 'const' qualifier from pointer target type [enabled by default] arch/arm/mach-shmobile/setup-rcar-gen2.c:142:2: warning: passing argument 3 of 'of_get_flat_dt_prop' from incompatible pointer type [enabled by default] include/linux/of_fdt.h:53:20: note: expected 'int *' but argument is of type 'long unsigned int *' arch/arm/mach-shmobile/setup-rcar-gen2.c:142:6: warning: assignment discards 'const' qualifier from pointer target type [enabled by default] arch/arm/mach-shmobile/setup-rcar-gen2.c:144:3: warning: passing argument 3 of 'of_get_flat_dt_prop' from incompatible pointer type [enabled by default] include/linux/of_fdt.h:53:20: note: expected 'int *' but argument is of type 'long unsigned int *' arch/arm/mach-shmobile/setup-rcar-gen2.c:144:7: warning: assignment discards 'const' qualifier from pointer target type [enabled by default] arch/arm/mach-shmobile/setup-rcar-gen2.c:152:3: warning: passing argument 2 of 'dt_mem_next_cell' from incompatible pointer type [enabled by default] include/linux/of_fdt.h:69:12: note: expected 'const __be32 **' but argument is of type '__be32 **' arch/arm/mach-shmobile/setup-rcar-gen2.c:153:3: warning: passing argument 2 of 'dt_mem_next_cell' from incompatible pointer type [enabled by default] include/linux/of_fdt.h:69:12: note: expected 'const __be32 **' but argument is of type '__be32 **' Update the variable types in rcar_gen2_scan_mem() to fix this. Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> Acked-by: Magnus Damm <damm+renesas@opensource.se> [horms+renesas@verge.net.au: rebased] Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
-rw-r--r--arch/arm/mach-shmobile/setup-rcar-gen2.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/arch/arm/mach-shmobile/setup-rcar-gen2.c b/arch/arm/mach-shmobile/setup-rcar-gen2.c
index 544b9bf28840..b0626f89d7a6 100644
--- a/arch/arm/mach-shmobile/setup-rcar-gen2.c
+++ b/arch/arm/mach-shmobile/setup-rcar-gen2.c
@@ -113,3 +113,79 @@ void __init rcar_gen2_timer_init(void)
113#endif 113#endif
114 clocksource_of_init(); 114 clocksource_of_init();
115} 115}
116
117struct memory_reserve_config {
118 u64 reserved;
119 u64 base, size;
120};
121
122static int __init rcar_gen2_scan_mem(unsigned long node, const char *uname,
123 int depth, void *data)
124{
125 const char *type = of_get_flat_dt_prop(node, "device_type", NULL);
126 const __be32 *reg, *endp;
127 int l;
128 struct memory_reserve_config *mrc = data;
129 u64 lpae_start = (u64)1 << 32;
130
131 /* We are scanning "memory" nodes only */
132 if (type == NULL) {
133 /*
134 * The longtrail doesn't have a device_type on the
135 * /memory node, so look for the node called /memory@0.
136 */
137 if (depth != 1 || strcmp(uname, "memory@0") != 0)
138 return 0;
139 } else if (strcmp(type, "memory") != 0)
140 return 0;
141
142 reg = of_get_flat_dt_prop(node, "linux,usable-memory", &l);
143 if (reg == NULL)
144 reg = of_get_flat_dt_prop(node, "reg", &l);
145 if (reg == NULL)
146 return 0;
147
148 endp = reg + (l / sizeof(__be32));
149 while ((endp - reg) >= (dt_root_addr_cells + dt_root_size_cells)) {
150 u64 base, size;
151
152 base = dt_mem_next_cell(dt_root_addr_cells, &reg);
153 size = dt_mem_next_cell(dt_root_size_cells, &reg);
154
155 if (base >= lpae_start)
156 continue;
157
158 if ((base + size) >= lpae_start)
159 size = lpae_start - base;
160
161 if (size < mrc->reserved)
162 continue;
163
164 if (base < mrc->base)
165 continue;
166
167 /* keep the area at top near the 32-bit legacy limit */
168 mrc->base = base + size - mrc->reserved;
169 mrc->size = mrc->reserved;
170 }
171
172 return 0;
173}
174
175struct cma *rcar_gen2_dma_contiguous;
176
177void __init rcar_gen2_reserve(void)
178{
179 struct memory_reserve_config mrc;
180
181 /* reserve 256 MiB at the top of the physical legacy 32-bit space */
182 memset(&mrc, 0, sizeof(mrc));
183 mrc.reserved = SZ_256M;
184
185 of_scan_flat_dt(rcar_gen2_scan_mem, &mrc);
186#ifdef CONFIG_DMA_CMA
187 if (mrc.size)
188 dma_contiguous_reserve_area(mrc.size, mrc.base, 0,
189 &rcar_gen2_dma_contiguous);
190#endif
191}