]> git.ipfire.org Git - people/ms/u-boot.git/blob - arch/arm/mach-uniphier/boards.c
ARM: dts: uniphier: sync DT with latest Linux
[people/ms/u-boot.git] / arch / arm / mach-uniphier / boards.c
1 /*
2 * Copyright (C) 2015-2016 Socionext Inc.
3 * Author: Masahiro Yamada <yamada.masahiro@socionext.com>
4 *
5 * SPDX-License-Identifier: GPL-2.0+
6 */
7
8 #include <common.h>
9 #include <libfdt.h>
10 #include <linux/kernel.h>
11
12 #include "init.h"
13
14 DECLARE_GLOBAL_DATA_PTR;
15
16 #if defined(CONFIG_ARCH_UNIPHIER_SLD3)
17 static const struct uniphier_board_data uniphier_sld3_data = {
18 .dram_freq = 1600,
19 .dram_nr_ch = 3,
20 .dram_ch[0] = {
21 .base = 0x80000000,
22 .size = 0x20000000,
23 .width = 32,
24 },
25 .dram_ch[1] = {
26 .base = 0xc0000000,
27 .size = 0x20000000,
28 .width = 16,
29 },
30 .dram_ch[2] = {
31 .base = 0xc0000000,
32 .size = 0x10000000,
33 .width = 16,
34 },
35 };
36 #endif
37
38 #if defined(CONFIG_ARCH_UNIPHIER_LD4)
39 static const struct uniphier_board_data uniphier_ld4_data = {
40 .dram_freq = 1600,
41 .dram_nr_ch = 2,
42 .dram_ch[0] = {
43 .base = 0x80000000,
44 .size = 0x10000000,
45 .width = 16,
46 },
47 .dram_ch[1] = {
48 .base = 0x90000000,
49 .size = 0x10000000,
50 .width = 16,
51 },
52 .flags = UNIPHIER_BD_DDR3PLUS,
53 };
54 #endif
55
56 #if defined(CONFIG_ARCH_UNIPHIER_PRO4)
57 /* 1GB RAM board */
58 static const struct uniphier_board_data uniphier_pro4_data = {
59 .dram_freq = 1600,
60 .dram_nr_ch = 2,
61 .dram_ch[0] = {
62 .base = 0x80000000,
63 .size = 0x20000000,
64 .width = 32,
65 },
66 .dram_ch[1] = {
67 .base = 0xa0000000,
68 .size = 0x20000000,
69 .width = 32,
70 },
71 };
72
73 /* 2GB RAM board */
74 static const struct uniphier_board_data uniphier_pro4_2g_data = {
75 .dram_freq = 1600,
76 .dram_nr_ch = 2,
77 .dram_ch[0] = {
78 .base = 0x80000000,
79 .size = 0x40000000,
80 .width = 32,
81 },
82 .dram_ch[1] = {
83 .base = 0xc0000000,
84 .size = 0x40000000,
85 .width = 32,
86 },
87 };
88 #endif
89
90 #if defined(CONFIG_ARCH_UNIPHIER_SLD8)
91 static const struct uniphier_board_data uniphier_sld8_data = {
92 .dram_freq = 1333,
93 .dram_nr_ch = 2,
94 .dram_ch[0] = {
95 .base = 0x80000000,
96 .size = 0x10000000,
97 .width = 16,
98 },
99 .dram_ch[1] = {
100 .base = 0x90000000,
101 .size = 0x10000000,
102 .width = 16,
103 },
104 .flags = UNIPHIER_BD_DDR3PLUS,
105 };
106 #endif
107
108 #if defined(CONFIG_ARCH_UNIPHIER_PRO5)
109 static const struct uniphier_board_data uniphier_pro5_data = {
110 .dram_freq = 1866,
111 .dram_nr_ch = 2,
112 .dram_ch[0] = {
113 .base = 0x80000000,
114 .size = 0x20000000,
115 .width = 32,
116 },
117 .dram_ch[1] = {
118 .base = 0xa0000000,
119 .size = 0x20000000,
120 .width = 32,
121 },
122 };
123 #endif
124
125 #if defined(CONFIG_ARCH_UNIPHIER_PXS2)
126 static const struct uniphier_board_data uniphier_pxs2_data = {
127 .dram_freq = 2133,
128 .dram_nr_ch = 3,
129 .dram_ch[0] = {
130 .base = 0x80000000,
131 .size = 0x40000000,
132 .width = 32,
133 },
134 .dram_ch[1] = {
135 .base = 0xc0000000,
136 .size = 0x20000000,
137 .width = 32,
138 },
139 .dram_ch[2] = {
140 .base = 0xe0000000,
141 .size = 0x20000000,
142 .width = 16,
143 },
144 };
145 #endif
146
147 #if defined(CONFIG_ARCH_UNIPHIER_LD6B)
148 static const struct uniphier_board_data uniphier_ld6b_data = {
149 .dram_freq = 1866,
150 .dram_nr_ch = 3,
151 .dram_ch[0] = {
152 .base = 0x80000000,
153 .size = 0x40000000,
154 .width = 32,
155 },
156 .dram_ch[1] = {
157 .base = 0xc0000000,
158 .size = 0x20000000,
159 .width = 32,
160 },
161 .dram_ch[2] = {
162 .base = 0xe0000000,
163 .size = 0x20000000,
164 .width = 16,
165 },
166 };
167 #endif
168
169 #if defined(CONFIG_ARCH_UNIPHIER_LD11)
170 static const struct uniphier_board_data uniphier_ld11_data = {
171 .dram_freq = 1600,
172 .dram_nr_ch = 2,
173 .dram_ch[0] = {
174 .base = 0x80000000,
175 .size = 0x20000000,
176 .width = 16,
177 },
178 .dram_ch[1] = {
179 .base = 0xa0000000,
180 .size = 0x20000000,
181 .width = 16,
182 },
183 };
184 #endif
185
186 #if defined(CONFIG_ARCH_UNIPHIER_LD20)
187 static const struct uniphier_board_data uniphier_ld20_ref_data = {
188 .dram_freq = 1866,
189 .dram_nr_ch = 3,
190 .dram_ch[0] = {
191 .base = 0x80000000,
192 .size = 0x40000000,
193 .width = 32,
194 },
195 .dram_ch[1] = {
196 .base = 0xc0000000,
197 .size = 0x40000000,
198 .width = 32,
199 },
200 .dram_ch[2] = {
201 .base = 0x100000000UL,
202 .size = 0x40000000,
203 .width = 32,
204 },
205 .flags = UNIPHIER_BD_BOARD_LD20_REF,
206 };
207
208 static const struct uniphier_board_data uniphier_ld20_data = {
209 .dram_freq = 1866,
210 .dram_nr_ch = 3,
211 .dram_ch[0] = {
212 .base = 0x80000000,
213 .size = 0x40000000,
214 .width = 32,
215 },
216 .dram_ch[1] = {
217 .base = 0xc0000000,
218 .size = 0x40000000,
219 .width = 32,
220 },
221 .dram_ch[2] = {
222 .base = 0x100000000UL,
223 .size = 0x40000000,
224 .width = 32,
225 },
226 .flags = UNIPHIER_BD_BOARD_LD20_GLOBAL,
227 };
228
229 static const struct uniphier_board_data uniphier_ld21_data = {
230 .dram_freq = 1866,
231 .dram_nr_ch = 2,
232 .dram_ch[0] = {
233 .base = 0x80000000,
234 .size = 0x20000000,
235 .width = 32,
236 },
237 .dram_ch[1] = {
238 .base = 0xc0000000,
239 .size = 0x40000000,
240 .width = 32,
241 },
242 .flags = UNIPHIER_BD_BOARD_LD21_GLOBAL,
243 };
244 #endif
245
246 struct uniphier_board_id {
247 const char *compatible;
248 const struct uniphier_board_data *param;
249 };
250
251 static const struct uniphier_board_id uniphier_boards[] = {
252 #if defined(CONFIG_ARCH_UNIPHIER_SLD3)
253 { "socionext,uniphier-sld3", &uniphier_sld3_data, },
254 #endif
255 #if defined(CONFIG_ARCH_UNIPHIER_LD4)
256 { "socionext,uniphier-ld4", &uniphier_ld4_data, },
257 #endif
258 #if defined(CONFIG_ARCH_UNIPHIER_PRO4)
259 { "socionext,uniphier-pro4-ace", &uniphier_pro4_2g_data, },
260 { "socionext,uniphier-pro4-sanji", &uniphier_pro4_2g_data, },
261 { "socionext,uniphier-pro4", &uniphier_pro4_data, },
262 #endif
263 #if defined(CONFIG_ARCH_UNIPHIER_SLD8)
264 { "socionext,uniphier-sld8", &uniphier_sld8_data, },
265 #endif
266 #if defined(CONFIG_ARCH_UNIPHIER_PRO5)
267 { "socionext,uniphier-pro5", &uniphier_pro5_data, },
268 #endif
269 #if defined(CONFIG_ARCH_UNIPHIER_PXS2)
270 { "socionext,uniphier-pxs2", &uniphier_pxs2_data, },
271 #endif
272 #if defined(CONFIG_ARCH_UNIPHIER_LD6B)
273 { "socionext,uniphier-ld6b", &uniphier_ld6b_data, },
274 #endif
275 #if defined(CONFIG_ARCH_UNIPHIER_LD11)
276 { "socionext,uniphier-ld11", &uniphier_ld11_data, },
277 #endif
278 #if defined(CONFIG_ARCH_UNIPHIER_LD20)
279 { "socionext,uniphier-ld21", &uniphier_ld21_data, },
280 { "socionext,uniphier-ld20-ref", &uniphier_ld20_ref_data, },
281 { "socionext,uniphier-ld20", &uniphier_ld20_data, },
282 #endif
283 };
284
285 const struct uniphier_board_data *uniphier_get_board_param(void)
286 {
287 int i;
288
289 for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) {
290 if (!fdt_node_check_compatible(gd->fdt_blob, 0,
291 uniphier_boards[i].compatible))
292 return uniphier_boards[i].param;
293 }
294
295 return NULL;
296 }