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