xref: /rk3399_rockchip-uboot/arch/arm/mach-uniphier/boards.c (revision 6a6b9d5dfdd1c1332697980bc17e8d3f1b77e75d)
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 		.size = 0x20000000,
22 		.width = 32,
23 	},
24 	.dram_ch[1] = {
25 		.size = 0x20000000,
26 		.width = 16,
27 	},
28 	.dram_ch[2] = {
29 		.size = 0x10000000,
30 		.width = 16,
31 	},
32 	.flags = UNIPHIER_BD_DRAM_SPARSE,
33 };
34 #endif
35 
36 #if defined(CONFIG_ARCH_UNIPHIER_LD4)
37 static const struct uniphier_board_data uniphier_ld4_data = {
38 	.dram_freq = 1600,
39 	.dram_nr_ch = 2,
40 	.dram_ch[0] = {
41 		.size = 0x10000000,
42 		.width = 16,
43 	},
44 	.dram_ch[1] = {
45 		.size = 0x10000000,
46 		.width = 16,
47 	},
48 	.flags = UNIPHIER_BD_DDR3PLUS,
49 };
50 #endif
51 
52 #if defined(CONFIG_ARCH_UNIPHIER_PRO4)
53 /* 1GB RAM board */
54 static const struct uniphier_board_data uniphier_pro4_data = {
55 	.dram_freq = 1600,
56 	.dram_nr_ch = 2,
57 	.dram_ch[0] = {
58 		.size = 0x20000000,
59 		.width = 32,
60 	},
61 	.dram_ch[1] = {
62 		.size = 0x20000000,
63 		.width = 32,
64 	},
65 };
66 
67 /* 2GB RAM board */
68 static const struct uniphier_board_data uniphier_pro4_2g_data = {
69 	.dram_freq = 1600,
70 	.dram_nr_ch = 2,
71 	.dram_ch[0] = {
72 		.size = 0x40000000,
73 		.width = 32,
74 	},
75 	.dram_ch[1] = {
76 		.size = 0x40000000,
77 		.width = 32,
78 	},
79 };
80 #endif
81 
82 #if defined(CONFIG_ARCH_UNIPHIER_SLD8)
83 static const struct uniphier_board_data uniphier_sld8_data = {
84 	.dram_freq = 1333,
85 	.dram_nr_ch = 2,
86 	.dram_ch[0] = {
87 		.size = 0x10000000,
88 		.width = 16,
89 	},
90 	.dram_ch[1] = {
91 		.size = 0x10000000,
92 		.width = 16,
93 	},
94 	.flags = UNIPHIER_BD_DDR3PLUS,
95 };
96 #endif
97 
98 #if defined(CONFIG_ARCH_UNIPHIER_PRO5)
99 static const struct uniphier_board_data uniphier_pro5_data = {
100 	.dram_freq = 1866,
101 	.dram_nr_ch = 2,
102 	.dram_ch[0] = {
103 		.size = 0x20000000,
104 		.width = 32,
105 	},
106 	.dram_ch[1] = {
107 		.size = 0x20000000,
108 		.width = 32,
109 	},
110 };
111 #endif
112 
113 #if defined(CONFIG_ARCH_UNIPHIER_PXS2)
114 static const struct uniphier_board_data uniphier_pxs2_data = {
115 	.dram_freq = 2133,
116 	.dram_nr_ch = 3,
117 	.dram_ch[0] = {
118 		.size = 0x40000000,
119 		.width = 32,
120 	},
121 	.dram_ch[1] = {
122 		.size = 0x20000000,
123 		.width = 32,
124 	},
125 	.dram_ch[2] = {
126 		.size = 0x20000000,
127 		.width = 16,
128 	},
129 };
130 #endif
131 
132 #if defined(CONFIG_ARCH_UNIPHIER_LD6B)
133 static const struct uniphier_board_data uniphier_ld6b_data = {
134 	.dram_freq = 1866,
135 	.dram_nr_ch = 3,
136 	.dram_ch[0] = {
137 		.size = 0x40000000,
138 		.width = 32,
139 	},
140 	.dram_ch[1] = {
141 		.size = 0x20000000,
142 		.width = 32,
143 	},
144 	.dram_ch[2] = {
145 		.size = 0x20000000,
146 		.width = 16,
147 	},
148 };
149 #endif
150 
151 #if defined(CONFIG_ARCH_UNIPHIER_LD11)
152 static const struct uniphier_board_data uniphier_ld11_data = {
153 	.dram_freq = 1600,
154 	.dram_nr_ch = 2,
155 	.dram_ch[0] = {
156 		.size = 0x20000000,
157 		.width = 16,
158 	},
159 	.dram_ch[1] = {
160 		.size = 0x20000000,
161 		.width = 16,
162 	},
163 };
164 #endif
165 
166 #if defined(CONFIG_ARCH_UNIPHIER_LD20)
167 static const struct uniphier_board_data uniphier_ld20_ref_data = {
168 	.dram_freq = 1866,
169 	.dram_nr_ch = 3,
170 	.dram_ch[0] = {
171 		.size = 0x40000000,
172 		.width = 32,
173 	},
174 	.dram_ch[1] = {
175 		.size = 0x40000000,
176 		.width = 32,
177 	},
178 	.dram_ch[2] = {
179 		.size = 0x40000000,
180 		.width = 32,
181 	},
182 	.flags = UNIPHIER_BD_BOARD_LD20_REF,
183 };
184 
185 static const struct uniphier_board_data uniphier_ld20_data = {
186 	.dram_freq = 1866,
187 	.dram_nr_ch = 3,
188 	.dram_ch[0] = {
189 		.size = 0x40000000,
190 		.width = 32,
191 	},
192 	.dram_ch[1] = {
193 		.size = 0x40000000,
194 		.width = 32,
195 	},
196 	.dram_ch[2] = {
197 		.size = 0x40000000,
198 		.width = 32,
199 	},
200 	.flags = UNIPHIER_BD_BOARD_LD20_GLOBAL,
201 };
202 
203 static const struct uniphier_board_data uniphier_ld21_data = {
204 	.dram_freq = 1866,
205 	.dram_nr_ch = 2,
206 	.dram_ch[0] = {
207 		.size = 0x20000000,
208 		.width = 32,
209 	},
210 	.dram_ch[1] = {
211 		.size = 0x40000000,
212 		.width = 32,
213 	},
214 	.flags = UNIPHIER_BD_BOARD_LD21_GLOBAL,
215 };
216 #endif
217 
218 struct uniphier_board_id {
219 	const char *compatible;
220 	const struct uniphier_board_data *param;
221 };
222 
223 static const struct uniphier_board_id uniphier_boards[] = {
224 #if defined(CONFIG_ARCH_UNIPHIER_SLD3)
225 	{ "socionext,uniphier-sld3", &uniphier_sld3_data, },
226 #endif
227 #if defined(CONFIG_ARCH_UNIPHIER_LD4)
228 	{ "socionext,uniphier-ld4", &uniphier_ld4_data, },
229 #endif
230 #if defined(CONFIG_ARCH_UNIPHIER_PRO4)
231 	{ "socionext,uniphier-pro4-ace", &uniphier_pro4_2g_data, },
232 	{ "socionext,uniphier-pro4-sanji", &uniphier_pro4_2g_data, },
233 	{ "socionext,uniphier-pro4", &uniphier_pro4_data, },
234 #endif
235 #if defined(CONFIG_ARCH_UNIPHIER_SLD8)
236 	{ "socionext,uniphier-sld8", &uniphier_sld8_data, },
237 #endif
238 #if defined(CONFIG_ARCH_UNIPHIER_PRO5)
239 	{ "socionext,uniphier-pro5", &uniphier_pro5_data, },
240 #endif
241 #if defined(CONFIG_ARCH_UNIPHIER_PXS2)
242 	{ "socionext,uniphier-pxs2", &uniphier_pxs2_data, },
243 #endif
244 #if defined(CONFIG_ARCH_UNIPHIER_LD6B)
245 	{ "socionext,uniphier-ld6b", &uniphier_ld6b_data, },
246 #endif
247 #if defined(CONFIG_ARCH_UNIPHIER_LD11)
248 	{ "socionext,uniphier-ld11", &uniphier_ld11_data, },
249 #endif
250 #if defined(CONFIG_ARCH_UNIPHIER_LD20)
251 	{ "socionext,uniphier-ld21", &uniphier_ld21_data, },
252 	{ "socionext,uniphier-ld20-ref", &uniphier_ld20_ref_data, },
253 	{ "socionext,uniphier-ld20", &uniphier_ld20_data, },
254 #endif
255 };
256 
257 const struct uniphier_board_data *uniphier_get_board_param(void)
258 {
259 	int i;
260 
261 	for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) {
262 		if (!fdt_node_check_compatible(gd->fdt_blob, 0,
263 					       uniphier_boards[i].compatible))
264 			return uniphier_boards[i].param;
265 	}
266 
267 	return NULL;
268 }
269