]> git.sur5r.net Git - u-boot/blob - arch/arm/mach-uniphier/boards.c
ARM: uniphier: move spl_boot_mode() to a separate file
[u-boot] / 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                 .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 }