]> git.sur5r.net Git - u-boot/blob - arch/arm/mach-uniphier/boards.c
ARM: uniphier: add PH1-LD20 SoC support
[u-boot] / arch / arm / mach-uniphier / boards.c
1 /*
2  * Copyright (C) 2015 Masahiro Yamada <yamada.masahiro@socionext.com>
3  *
4  * SPDX-License-Identifier:     GPL-2.0+
5  */
6
7 #include <common.h>
8 #include <libfdt.h>
9 #include <linux/kernel.h>
10
11 #include "init.h"
12
13 DECLARE_GLOBAL_DATA_PTR;
14
15 #if defined(CONFIG_ARCH_UNIPHIER_SLD3)
16 static const struct uniphier_board_data uniphier_sld3_data = {
17         .dram_freq = 1600,
18         .dram_nr_ch = 3,
19         .dram_ch[0] = {
20                 .base = 0x80000000,
21                 .size = 0x20000000,
22                 .width = 32,
23         },
24         .dram_ch[1] = {
25                 .base = 0xc0000000,
26                 .size = 0x20000000,
27                 .width = 16,
28         },
29         .dram_ch[2] = {
30                 .base = 0xc0000000,
31                 .size = 0x10000000,
32                 .width = 16,
33         },
34 };
35 #endif
36
37 #if defined(CONFIG_ARCH_UNIPHIER_LD4)
38 static const struct uniphier_board_data uniphier_ld4_data = {
39         .dram_freq = 1600,
40         .dram_nr_ch = 2,
41         .dram_ddr3plus = true,
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 };
53 #endif
54
55 #if defined(CONFIG_ARCH_UNIPHIER_PRO4)
56 /* 1GB RAM board */
57 static const struct uniphier_board_data uniphier_pro4_data = {
58         .dram_freq = 1600,
59         .dram_nr_ch = 2,
60         .dram_ch[0] = {
61                 .base = 0x80000000,
62                 .size = 0x20000000,
63                 .width = 32,
64         },
65         .dram_ch[1] = {
66                 .base = 0xa0000000,
67                 .size = 0x20000000,
68                 .width = 32,
69         },
70 };
71
72 /* 2GB RAM board */
73 static const struct uniphier_board_data uniphier_pro4_2g_data = {
74         .dram_freq = 1600,
75         .dram_nr_ch = 2,
76         .dram_ch[0] = {
77                 .base = 0x80000000,
78                 .size = 0x40000000,
79                 .width = 32,
80         },
81         .dram_ch[1] = {
82                 .base = 0xc0000000,
83                 .size = 0x40000000,
84                 .width = 32,
85         },
86 };
87 #endif
88
89 #if defined(CONFIG_ARCH_UNIPHIER_SLD8)
90 static const struct uniphier_board_data uniphier_sld8_data = {
91         .dram_freq = 1333,
92         .dram_nr_ch = 2,
93         .dram_ddr3plus = true,
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 };
105 #endif
106
107 #if defined(CONFIG_ARCH_UNIPHIER_PRO5)
108 static const struct uniphier_board_data uniphier_pro5_data = {
109         .dram_freq = 1866,
110         .dram_nr_ch = 2,
111         .dram_ch[0] = {
112                 .base = 0x80000000,
113                 .size = 0x20000000,
114                 .width = 32,
115         },
116         .dram_ch[1] = {
117                 .base = 0xa0000000,
118                 .size = 0x20000000,
119                 .width = 32,
120         },
121 };
122 #endif
123
124 #if defined(CONFIG_ARCH_UNIPHIER_PXS2)
125 static const struct uniphier_board_data uniphier_pxs2_data = {
126         .dram_freq = 2133,
127         .dram_nr_ch = 3,
128         .dram_ch[0] = {
129                 .base = 0x80000000,
130                 .size = 0x40000000,
131                 .width = 32,
132         },
133         .dram_ch[1] = {
134                 .base = 0xc0000000,
135                 .size = 0x20000000,
136                 .width = 32,
137         },
138         .dram_ch[2] = {
139                 .base = 0xe0000000,
140                 .size = 0x20000000,
141                 .width = 16,
142         },
143 };
144 #endif
145
146 #if defined(CONFIG_ARCH_UNIPHIER_LD6B)
147 static const struct uniphier_board_data uniphier_ld6b_data = {
148         .dram_freq = 1866,
149         .dram_nr_ch = 3,
150         .dram_ch[0] = {
151                 .base = 0x80000000,
152                 .size = 0x40000000,
153                 .width = 32,
154         },
155         .dram_ch[1] = {
156                 .base = 0xc0000000,
157                 .size = 0x20000000,
158                 .width = 32,
159         },
160         .dram_ch[2] = {
161                 .base = 0xe0000000,
162                 .size = 0x20000000,
163                 .width = 16,
164         },
165 };
166 #endif
167
168 #if defined(CONFIG_ARCH_UNIPHIER_LD20)
169 static const struct uniphier_board_data uniphier_ld20_data = {
170         .dram_freq = 1866,
171         .dram_nr_ch = 3,
172         .dram_ch[0] = {
173                 .base = 0x80000000,
174                 .size = 0x40000000,
175                 .width = 32,
176         },
177         .dram_ch[1] = {
178                 .base = 0xc0000000,
179                 .size = 0x40000000,
180                 .width = 32,
181         },
182         .dram_ch[2] = {
183                 .base = 0x100000000UL,
184                 .size = 0x40000000,
185                 .width = 32,
186         },
187 };
188 #endif
189
190 struct uniphier_board_id {
191         const char *compatible;
192         const struct uniphier_board_data *param;
193 };
194
195 static const struct uniphier_board_id uniphier_boards[] = {
196 #if defined(CONFIG_ARCH_UNIPHIER_SLD3)
197         { "socionext,ph1-sld3", &uniphier_sld3_data, },
198 #endif
199 #if defined(CONFIG_ARCH_UNIPHIER_LD4)
200         { "socionext,ph1-ld4", &uniphier_ld4_data, },
201 #endif
202 #if defined(CONFIG_ARCH_UNIPHIER_PRO4)
203         { "socionext,ph1-pro4-ace", &uniphier_pro4_2g_data, },
204         { "socionext,ph1-pro4-sanji", &uniphier_pro4_2g_data, },
205         { "socionext,ph1-pro4", &uniphier_pro4_data, },
206 #endif
207 #if defined(CONFIG_ARCH_UNIPHIER_SLD8)
208         { "socionext,ph1-sld8", &uniphier_sld8_data, },
209 #endif
210 #if defined(CONFIG_ARCH_UNIPHIER_PRO5)
211         { "socionext,ph1-pro5", &uniphier_pro5_data, },
212 #endif
213 #if defined(CONFIG_ARCH_UNIPHIER_PXS2)
214         { "socionext,proxstream2", &uniphier_pxs2_data, },
215 #endif
216 #if defined(CONFIG_ARCH_UNIPHIER_LD6B)
217         { "socionext,ph1-ld6b", &uniphier_ld6b_data, },
218 #endif
219 #if defined(CONFIG_ARCH_UNIPHIER_LD20)
220         { "socionext,ph1-ld20", &uniphier_ld20_data, },
221 #endif
222 };
223
224 const struct uniphier_board_data *uniphier_get_board_param(void)
225 {
226         int i;
227
228         for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) {
229                 if (!fdt_node_check_compatible(gd->fdt_blob, 0,
230                                                uniphier_boards[i].compatible))
231                         return uniphier_boards[i].param;
232         }
233
234         return NULL;
235 }