xref: /rk3399_rockchip-uboot/arch/arm/mach-uniphier/boards.c (revision 52159d27ffe6b2a1a7e874cb2fda5aadbd4f03e5)
1323d1f9dSMasahiro Yamada /*
2a74c28a0SMasahiro Yamada  * Copyright (C) 2015-2016 Socionext Inc.
3a74c28a0SMasahiro Yamada  *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
4323d1f9dSMasahiro Yamada  *
5323d1f9dSMasahiro Yamada  * SPDX-License-Identifier:	GPL-2.0+
6323d1f9dSMasahiro Yamada  */
7323d1f9dSMasahiro Yamada 
86ba60fafSMasahiro Yamada #include <common.h>
9323d1f9dSMasahiro Yamada #include <libfdt.h>
10323d1f9dSMasahiro Yamada #include <linux/kernel.h>
11107b3fb4SMasahiro Yamada 
12107b3fb4SMasahiro Yamada #include "init.h"
13323d1f9dSMasahiro Yamada 
146ba60fafSMasahiro Yamada DECLARE_GLOBAL_DATA_PTR;
156ba60fafSMasahiro Yamada 
16ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD3)
175b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_sld3_data = {
18323d1f9dSMasahiro Yamada 	.dram_freq = 1600,
1946abfcc9SMasahiro Yamada 	.dram_nr_ch = 3,
2046abfcc9SMasahiro Yamada 	.dram_ch[0] = {
2146abfcc9SMasahiro Yamada 		.base = 0x80000000,
2246abfcc9SMasahiro Yamada 		.size = 0x20000000,
2346abfcc9SMasahiro Yamada 		.width = 32,
2446abfcc9SMasahiro Yamada 	},
2546abfcc9SMasahiro Yamada 	.dram_ch[1] = {
2646abfcc9SMasahiro Yamada 		.base = 0xc0000000,
2746abfcc9SMasahiro Yamada 		.size = 0x20000000,
2846abfcc9SMasahiro Yamada 		.width = 16,
2946abfcc9SMasahiro Yamada 	},
3046abfcc9SMasahiro Yamada 	.dram_ch[2] = {
3146abfcc9SMasahiro Yamada 		.base = 0xc0000000,
3246abfcc9SMasahiro Yamada 		.size = 0x10000000,
3346abfcc9SMasahiro Yamada 		.width = 16,
3446abfcc9SMasahiro Yamada 	},
35323d1f9dSMasahiro Yamada };
36323d1f9dSMasahiro Yamada #endif
37323d1f9dSMasahiro Yamada 
38ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD4)
395b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_ld4_data = {
40323d1f9dSMasahiro Yamada 	.dram_freq = 1600,
4146abfcc9SMasahiro Yamada 	.dram_nr_ch = 2,
4246abfcc9SMasahiro Yamada 	.dram_ch[0] = {
4346abfcc9SMasahiro Yamada 		.base = 0x80000000,
4446abfcc9SMasahiro Yamada 		.size = 0x10000000,
4546abfcc9SMasahiro Yamada 		.width = 16,
4646abfcc9SMasahiro Yamada 	},
4746abfcc9SMasahiro Yamada 	.dram_ch[1] = {
4846abfcc9SMasahiro Yamada 		.base = 0x90000000,
4946abfcc9SMasahiro Yamada 		.size = 0x10000000,
5046abfcc9SMasahiro Yamada 		.width = 16,
5146abfcc9SMasahiro Yamada 	},
52a74c28a0SMasahiro Yamada 	.flags = UNIPHIER_BD_DDR3PLUS,
53323d1f9dSMasahiro Yamada };
54323d1f9dSMasahiro Yamada #endif
55323d1f9dSMasahiro Yamada 
56ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO4)
573f231117SMasahiro Yamada /* 1GB RAM board */
585b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_pro4_data = {
59323d1f9dSMasahiro Yamada 	.dram_freq = 1600,
6046abfcc9SMasahiro Yamada 	.dram_nr_ch = 2,
6146abfcc9SMasahiro Yamada 	.dram_ch[0] = {
6246abfcc9SMasahiro Yamada 		.base = 0x80000000,
6346abfcc9SMasahiro Yamada 		.size = 0x20000000,
6446abfcc9SMasahiro Yamada 		.width = 32,
6546abfcc9SMasahiro Yamada 	},
6646abfcc9SMasahiro Yamada 	.dram_ch[1] = {
6746abfcc9SMasahiro Yamada 		.base = 0xa0000000,
6846abfcc9SMasahiro Yamada 		.size = 0x20000000,
6946abfcc9SMasahiro Yamada 		.width = 32,
7046abfcc9SMasahiro Yamada 	},
71323d1f9dSMasahiro Yamada };
723f231117SMasahiro Yamada 
733f231117SMasahiro Yamada /* 2GB RAM board */
745b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_pro4_2g_data = {
753f231117SMasahiro Yamada 	.dram_freq = 1600,
7646abfcc9SMasahiro Yamada 	.dram_nr_ch = 2,
7746abfcc9SMasahiro Yamada 	.dram_ch[0] = {
7846abfcc9SMasahiro Yamada 		.base = 0x80000000,
7946abfcc9SMasahiro Yamada 		.size = 0x40000000,
8046abfcc9SMasahiro Yamada 		.width = 32,
8146abfcc9SMasahiro Yamada 	},
8246abfcc9SMasahiro Yamada 	.dram_ch[1] = {
8346abfcc9SMasahiro Yamada 		.base = 0xc0000000,
8446abfcc9SMasahiro Yamada 		.size = 0x40000000,
8546abfcc9SMasahiro Yamada 		.width = 32,
8646abfcc9SMasahiro Yamada 	},
873f231117SMasahiro Yamada };
88323d1f9dSMasahiro Yamada #endif
89323d1f9dSMasahiro Yamada 
90ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD8)
915b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_sld8_data = {
92323d1f9dSMasahiro Yamada 	.dram_freq = 1333,
9346abfcc9SMasahiro Yamada 	.dram_nr_ch = 2,
9446abfcc9SMasahiro Yamada 	.dram_ch[0] = {
9546abfcc9SMasahiro Yamada 		.base = 0x80000000,
9646abfcc9SMasahiro Yamada 		.size = 0x10000000,
9746abfcc9SMasahiro Yamada 		.width = 16,
9846abfcc9SMasahiro Yamada 	},
9946abfcc9SMasahiro Yamada 	.dram_ch[1] = {
10046abfcc9SMasahiro Yamada 		.base = 0x90000000,
10146abfcc9SMasahiro Yamada 		.size = 0x10000000,
10246abfcc9SMasahiro Yamada 		.width = 16,
10346abfcc9SMasahiro Yamada 	},
104a74c28a0SMasahiro Yamada 	.flags = UNIPHIER_BD_DDR3PLUS,
105323d1f9dSMasahiro Yamada };
106323d1f9dSMasahiro Yamada #endif
107323d1f9dSMasahiro Yamada 
108ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO5)
1095b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_pro5_data = {
11028f40d4aSMasahiro Yamada 	.dram_freq = 1866,
11146abfcc9SMasahiro Yamada 	.dram_nr_ch = 2,
11246abfcc9SMasahiro Yamada 	.dram_ch[0] = {
11346abfcc9SMasahiro Yamada 		.base = 0x80000000,
11446abfcc9SMasahiro Yamada 		.size = 0x20000000,
11546abfcc9SMasahiro Yamada 		.width = 32,
11646abfcc9SMasahiro Yamada 	},
11746abfcc9SMasahiro Yamada 	.dram_ch[1] = {
11846abfcc9SMasahiro Yamada 		.base = 0xa0000000,
11946abfcc9SMasahiro Yamada 		.size = 0x20000000,
12046abfcc9SMasahiro Yamada 		.width = 32,
12146abfcc9SMasahiro Yamada 	},
12228f40d4aSMasahiro Yamada };
12328f40d4aSMasahiro Yamada #endif
12428f40d4aSMasahiro Yamada 
125ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PXS2)
1265b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_pxs2_data = {
12789c05fa5SMasahiro Yamada 	.dram_freq = 2133,
12846abfcc9SMasahiro Yamada 	.dram_nr_ch = 3,
12946abfcc9SMasahiro Yamada 	.dram_ch[0] = {
13046abfcc9SMasahiro Yamada 		.base = 0x80000000,
13146abfcc9SMasahiro Yamada 		.size = 0x40000000,
13246abfcc9SMasahiro Yamada 		.width = 32,
13346abfcc9SMasahiro Yamada 	},
13446abfcc9SMasahiro Yamada 	.dram_ch[1] = {
13546abfcc9SMasahiro Yamada 		.base = 0xc0000000,
13646abfcc9SMasahiro Yamada 		.size = 0x20000000,
13746abfcc9SMasahiro Yamada 		.width = 32,
13846abfcc9SMasahiro Yamada 	},
13946abfcc9SMasahiro Yamada 	.dram_ch[2] = {
14046abfcc9SMasahiro Yamada 		.base = 0xe0000000,
14146abfcc9SMasahiro Yamada 		.size = 0x20000000,
14246abfcc9SMasahiro Yamada 		.width = 16,
14346abfcc9SMasahiro Yamada 	},
14489c05fa5SMasahiro Yamada };
14589c05fa5SMasahiro Yamada #endif
14689c05fa5SMasahiro Yamada 
147ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD6B)
1485b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_ld6b_data = {
149019df879SMasahiro Yamada 	.dram_freq = 1866,
15046abfcc9SMasahiro Yamada 	.dram_nr_ch = 3,
15146abfcc9SMasahiro Yamada 	.dram_ch[0] = {
15246abfcc9SMasahiro Yamada 		.base = 0x80000000,
15346abfcc9SMasahiro Yamada 		.size = 0x40000000,
15446abfcc9SMasahiro Yamada 		.width = 32,
15546abfcc9SMasahiro Yamada 	},
15646abfcc9SMasahiro Yamada 	.dram_ch[1] = {
15746abfcc9SMasahiro Yamada 		.base = 0xc0000000,
15846abfcc9SMasahiro Yamada 		.size = 0x20000000,
15946abfcc9SMasahiro Yamada 		.width = 32,
16046abfcc9SMasahiro Yamada 	},
16146abfcc9SMasahiro Yamada 	.dram_ch[2] = {
16246abfcc9SMasahiro Yamada 		.base = 0xe0000000,
16346abfcc9SMasahiro Yamada 		.size = 0x20000000,
16446abfcc9SMasahiro Yamada 		.width = 16,
16546abfcc9SMasahiro Yamada 	},
166019df879SMasahiro Yamada };
167019df879SMasahiro Yamada #endif
168019df879SMasahiro Yamada 
169667dbcd0SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD11)
170667dbcd0SMasahiro Yamada static const struct uniphier_board_data uniphier_ld11_data = {
171667dbcd0SMasahiro Yamada 	.dram_freq = 1600,
172667dbcd0SMasahiro Yamada 	.dram_nr_ch = 2,
173667dbcd0SMasahiro Yamada 	.dram_ch[0] = {
174667dbcd0SMasahiro Yamada 		.base = 0x80000000,
175667dbcd0SMasahiro Yamada 		.size = 0x20000000,
176667dbcd0SMasahiro Yamada 		.width = 16,
177667dbcd0SMasahiro Yamada 	},
178667dbcd0SMasahiro Yamada 	.dram_ch[1] = {
179667dbcd0SMasahiro Yamada 		.base = 0xa0000000,
180667dbcd0SMasahiro Yamada 		.size = 0x20000000,
181667dbcd0SMasahiro Yamada 		.width = 16,
182667dbcd0SMasahiro Yamada 	},
183667dbcd0SMasahiro Yamada };
184667dbcd0SMasahiro Yamada #endif
185667dbcd0SMasahiro Yamada 
1869d0c2cebSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD20)
187f6bbec3dSMasahiro Yamada static const struct uniphier_board_data uniphier_ld20_ref_data = {
188f6bbec3dSMasahiro Yamada 	.dram_freq = 1866,
189f6bbec3dSMasahiro Yamada 	.dram_nr_ch = 3,
190f6bbec3dSMasahiro Yamada 	.dram_ch[0] = {
191f6bbec3dSMasahiro Yamada 		.base = 0x80000000,
192f6bbec3dSMasahiro Yamada 		.size = 0x40000000,
193f6bbec3dSMasahiro Yamada 		.width = 32,
194f6bbec3dSMasahiro Yamada 	},
195f6bbec3dSMasahiro Yamada 	.dram_ch[1] = {
196f6bbec3dSMasahiro Yamada 		.base = 0xc0000000,
197f6bbec3dSMasahiro Yamada 		.size = 0x40000000,
198f6bbec3dSMasahiro Yamada 		.width = 32,
199f6bbec3dSMasahiro Yamada 	},
200f6bbec3dSMasahiro Yamada 	.dram_ch[2] = {
201f6bbec3dSMasahiro Yamada 		.base = 0x100000000UL,
202f6bbec3dSMasahiro Yamada 		.size = 0x40000000,
203f6bbec3dSMasahiro Yamada 		.width = 32,
204f6bbec3dSMasahiro Yamada 	},
205f6bbec3dSMasahiro Yamada 	.flags = UNIPHIER_BD_BOARD_LD20_REF,
206f6bbec3dSMasahiro Yamada };
207f6bbec3dSMasahiro Yamada 
2089d0c2cebSMasahiro Yamada static const struct uniphier_board_data uniphier_ld20_data = {
2099d0c2cebSMasahiro Yamada 	.dram_freq = 1866,
2109d0c2cebSMasahiro Yamada 	.dram_nr_ch = 3,
2119d0c2cebSMasahiro Yamada 	.dram_ch[0] = {
2129d0c2cebSMasahiro Yamada 		.base = 0x80000000,
2139d0c2cebSMasahiro Yamada 		.size = 0x40000000,
2149d0c2cebSMasahiro Yamada 		.width = 32,
2159d0c2cebSMasahiro Yamada 	},
2169d0c2cebSMasahiro Yamada 	.dram_ch[1] = {
2179d0c2cebSMasahiro Yamada 		.base = 0xc0000000,
2189d0c2cebSMasahiro Yamada 		.size = 0x40000000,
2199d0c2cebSMasahiro Yamada 		.width = 32,
2209d0c2cebSMasahiro Yamada 	},
2219d0c2cebSMasahiro Yamada 	.dram_ch[2] = {
2229d0c2cebSMasahiro Yamada 		.base = 0x100000000UL,
2239d0c2cebSMasahiro Yamada 		.size = 0x40000000,
2249d0c2cebSMasahiro Yamada 		.width = 32,
2259d0c2cebSMasahiro Yamada 	},
226f6bbec3dSMasahiro Yamada 	.flags = UNIPHIER_BD_BOARD_LD20_GLOBAL,
2279d0c2cebSMasahiro Yamada };
228be44a467SMasahiro Yamada 
229be44a467SMasahiro Yamada static const struct uniphier_board_data uniphier_ld21_data = {
230be44a467SMasahiro Yamada 	.dram_freq = 1866,
231be44a467SMasahiro Yamada 	.dram_nr_ch = 2,
232be44a467SMasahiro Yamada 	.dram_ch[0] = {
233be44a467SMasahiro Yamada 		.base = 0x80000000,
234ef70eb54SMasahiro Yamada 		.size = 0x20000000,
235be44a467SMasahiro Yamada 		.width = 32,
236be44a467SMasahiro Yamada 	},
237be44a467SMasahiro Yamada 	.dram_ch[1] = {
238be44a467SMasahiro Yamada 		.base = 0xc0000000,
239be44a467SMasahiro Yamada 		.size = 0x40000000,
240be44a467SMasahiro Yamada 		.width = 32,
241be44a467SMasahiro Yamada 	},
242f6bbec3dSMasahiro Yamada 	.flags = UNIPHIER_BD_BOARD_LD21_GLOBAL,
243be44a467SMasahiro Yamada };
2449d0c2cebSMasahiro Yamada #endif
2459d0c2cebSMasahiro Yamada 
246323d1f9dSMasahiro Yamada struct uniphier_board_id {
247323d1f9dSMasahiro Yamada 	const char *compatible;
248323d1f9dSMasahiro Yamada 	const struct uniphier_board_data *param;
249323d1f9dSMasahiro Yamada };
250323d1f9dSMasahiro Yamada 
251323d1f9dSMasahiro Yamada static const struct uniphier_board_id uniphier_boards[] = {
252ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD3)
253*52159d27SMasahiro Yamada 	{ "socionext,uniphier-sld3", &uniphier_sld3_data, },
254323d1f9dSMasahiro Yamada #endif
255ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD4)
256*52159d27SMasahiro Yamada 	{ "socionext,uniphier-ld4", &uniphier_ld4_data, },
257323d1f9dSMasahiro Yamada #endif
258ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO4)
259*52159d27SMasahiro Yamada 	{ "socionext,uniphier-pro4-ace", &uniphier_pro4_2g_data, },
260*52159d27SMasahiro Yamada 	{ "socionext,uniphier-pro4-sanji", &uniphier_pro4_2g_data, },
261*52159d27SMasahiro Yamada 	{ "socionext,uniphier-pro4", &uniphier_pro4_data, },
262323d1f9dSMasahiro Yamada #endif
263ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD8)
264*52159d27SMasahiro Yamada 	{ "socionext,uniphier-sld8", &uniphier_sld8_data, },
265323d1f9dSMasahiro Yamada #endif
266ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO5)
267*52159d27SMasahiro Yamada 	{ "socionext,uniphier-pro5", &uniphier_pro5_data, },
26828f40d4aSMasahiro Yamada #endif
269ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PXS2)
270*52159d27SMasahiro Yamada 	{ "socionext,uniphier-pxs2", &uniphier_pxs2_data, },
271019df879SMasahiro Yamada #endif
272ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD6B)
273*52159d27SMasahiro Yamada 	{ "socionext,uniphier-ld6b", &uniphier_ld6b_data, },
274019df879SMasahiro Yamada #endif
275667dbcd0SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD11)
276*52159d27SMasahiro Yamada 	{ "socionext,uniphier-ld11", &uniphier_ld11_data, },
277667dbcd0SMasahiro Yamada #endif
2789d0c2cebSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD20)
279*52159d27SMasahiro Yamada 	{ "socionext,uniphier-ld21", &uniphier_ld21_data, },
280*52159d27SMasahiro Yamada 	{ "socionext,uniphier-ld20-ref", &uniphier_ld20_ref_data, },
281*52159d27SMasahiro Yamada 	{ "socionext,uniphier-ld20", &uniphier_ld20_data, },
2829d0c2cebSMasahiro Yamada #endif
283323d1f9dSMasahiro Yamada };
284323d1f9dSMasahiro Yamada 
2856ba60fafSMasahiro Yamada const struct uniphier_board_data *uniphier_get_board_param(void)
286323d1f9dSMasahiro Yamada {
287323d1f9dSMasahiro Yamada 	int i;
288323d1f9dSMasahiro Yamada 
289323d1f9dSMasahiro Yamada 	for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) {
2906ba60fafSMasahiro Yamada 		if (!fdt_node_check_compatible(gd->fdt_blob, 0,
291323d1f9dSMasahiro Yamada 					       uniphier_boards[i].compatible))
292323d1f9dSMasahiro Yamada 			return uniphier_boards[i].param;
293323d1f9dSMasahiro Yamada 	}
294323d1f9dSMasahiro Yamada 
295323d1f9dSMasahiro Yamada 	return NULL;
296323d1f9dSMasahiro Yamada }
297