diff options
author | Geert Uytterhoeven <geert+renesas@glider.be> | 2014-06-12 04:42:22 -0400 |
---|---|---|
committer | Simon Horman <horms+renesas@verge.net.au> | 2014-06-17 06:33:22 -0400 |
commit | 83850b04ae7744f51681533fb7afb645e66ce8fe (patch) | |
tree | 1ca098f65b0c502eab5e71beed8b13a52d1b57b2 | |
parent | f8e819352d12f1b7d109d846e9bf1c07e006469a (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.c | 76 |
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 | |||
117 | struct memory_reserve_config { | ||
118 | u64 reserved; | ||
119 | u64 base, size; | ||
120 | }; | ||
121 | |||
122 | static 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, ®); | ||
153 | size = dt_mem_next_cell(dt_root_size_cells, ®); | ||
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 | |||
175 | struct cma *rcar_gen2_dma_contiguous; | ||
176 | |||
177 | void __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 | } | ||