xref: /openbmc/u-boot/arch/arm/mach-uniphier/boards.c (revision 46abfcc9)
1323d1f9dSMasahiro Yamada /*
2323d1f9dSMasahiro Yamada  * Copyright (C) 2015 Masahiro Yamada <yamada.masahiro@socionext.com>
3323d1f9dSMasahiro Yamada  *
4323d1f9dSMasahiro Yamada  * SPDX-License-Identifier:	GPL-2.0+
5323d1f9dSMasahiro Yamada  */
6323d1f9dSMasahiro Yamada 
76ba60fafSMasahiro Yamada #include <common.h>
8323d1f9dSMasahiro Yamada #include <libfdt.h>
9323d1f9dSMasahiro Yamada #include <linux/kernel.h>
10107b3fb4SMasahiro Yamada 
11107b3fb4SMasahiro Yamada #include "init.h"
12323d1f9dSMasahiro Yamada 
136ba60fafSMasahiro Yamada DECLARE_GLOBAL_DATA_PTR;
146ba60fafSMasahiro Yamada 
15323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3)
16323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_sld3_data = {
17323d1f9dSMasahiro Yamada 	.dram_freq = 1600,
18*46abfcc9SMasahiro Yamada 	.dram_nr_ch = 3,
19*46abfcc9SMasahiro Yamada 	.dram_ch[0] = {
20*46abfcc9SMasahiro Yamada 		.base = 0x80000000,
21*46abfcc9SMasahiro Yamada 		.size = 0x20000000,
22*46abfcc9SMasahiro Yamada 		.width = 32,
23*46abfcc9SMasahiro Yamada 	},
24*46abfcc9SMasahiro Yamada 	.dram_ch[1] = {
25*46abfcc9SMasahiro Yamada 		.base = 0xc0000000,
26*46abfcc9SMasahiro Yamada 		.size = 0x20000000,
27*46abfcc9SMasahiro Yamada 		.width = 16,
28*46abfcc9SMasahiro Yamada 	},
29*46abfcc9SMasahiro Yamada 	.dram_ch[2] = {
30*46abfcc9SMasahiro Yamada 		.base = 0xc0000000,
31*46abfcc9SMasahiro Yamada 		.size = 0x10000000,
32*46abfcc9SMasahiro Yamada 		.width = 16,
33*46abfcc9SMasahiro Yamada 	},
34323d1f9dSMasahiro Yamada };
35323d1f9dSMasahiro Yamada #endif
36323d1f9dSMasahiro Yamada 
37323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4)
38323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_ld4_data = {
39323d1f9dSMasahiro Yamada 	.dram_freq = 1600,
40*46abfcc9SMasahiro Yamada 	.dram_nr_ch = 2,
41*46abfcc9SMasahiro Yamada 	.dram_ch[0] = {
42*46abfcc9SMasahiro Yamada 		.base = 0x80000000,
43*46abfcc9SMasahiro Yamada 		.size = 0x10000000,
44*46abfcc9SMasahiro Yamada 		.width = 16,
45*46abfcc9SMasahiro Yamada 	},
46*46abfcc9SMasahiro Yamada 	.dram_ch[1] = {
47*46abfcc9SMasahiro Yamada 		.base = 0x90000000,
48*46abfcc9SMasahiro Yamada 		.size = 0x10000000,
49*46abfcc9SMasahiro Yamada 		.width = 16,
50*46abfcc9SMasahiro Yamada 	},
51323d1f9dSMasahiro Yamada };
52323d1f9dSMasahiro Yamada #endif
53323d1f9dSMasahiro Yamada 
54323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4)
553f231117SMasahiro Yamada /* 1GB RAM board */
56323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_pro4_data = {
57323d1f9dSMasahiro Yamada 	.dram_freq = 1600,
58*46abfcc9SMasahiro Yamada 	.dram_nr_ch = 2,
59*46abfcc9SMasahiro Yamada 	.dram_ch[0] = {
60*46abfcc9SMasahiro Yamada 		.base = 0x80000000,
61*46abfcc9SMasahiro Yamada 		.size = 0x20000000,
62*46abfcc9SMasahiro Yamada 		.width = 32,
63*46abfcc9SMasahiro Yamada 	},
64*46abfcc9SMasahiro Yamada 	.dram_ch[1] = {
65*46abfcc9SMasahiro Yamada 		.base = 0xa0000000,
66*46abfcc9SMasahiro Yamada 		.size = 0x20000000,
67*46abfcc9SMasahiro Yamada 		.width = 32,
68*46abfcc9SMasahiro Yamada 	},
69323d1f9dSMasahiro Yamada };
703f231117SMasahiro Yamada 
713f231117SMasahiro Yamada /* 2GB RAM board */
723f231117SMasahiro Yamada static const struct uniphier_board_data ph1_pro4_2g_data = {
733f231117SMasahiro Yamada 	.dram_freq = 1600,
74*46abfcc9SMasahiro Yamada 	.dram_nr_ch = 2,
75*46abfcc9SMasahiro Yamada 	.dram_ch[0] = {
76*46abfcc9SMasahiro Yamada 		.base = 0x80000000,
77*46abfcc9SMasahiro Yamada 		.size = 0x40000000,
78*46abfcc9SMasahiro Yamada 		.width = 32,
79*46abfcc9SMasahiro Yamada 	},
80*46abfcc9SMasahiro Yamada 	.dram_ch[1] = {
81*46abfcc9SMasahiro Yamada 		.base = 0xc0000000,
82*46abfcc9SMasahiro Yamada 		.size = 0x40000000,
83*46abfcc9SMasahiro Yamada 		.width = 32,
84*46abfcc9SMasahiro Yamada 	},
853f231117SMasahiro Yamada };
86323d1f9dSMasahiro Yamada #endif
87323d1f9dSMasahiro Yamada 
88323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8)
89323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_sld8_data = {
90323d1f9dSMasahiro Yamada 	.dram_freq = 1333,
91*46abfcc9SMasahiro Yamada 	.dram_nr_ch = 2,
92*46abfcc9SMasahiro Yamada 	.dram_ch[0] = {
93*46abfcc9SMasahiro Yamada 		.base = 0x80000000,
94*46abfcc9SMasahiro Yamada 		.size = 0x10000000,
95*46abfcc9SMasahiro Yamada 		.width = 16,
96*46abfcc9SMasahiro Yamada 	},
97*46abfcc9SMasahiro Yamada 	.dram_ch[1] = {
98*46abfcc9SMasahiro Yamada 		.base = 0x90000000,
99*46abfcc9SMasahiro Yamada 		.size = 0x10000000,
100*46abfcc9SMasahiro Yamada 		.width = 16,
101*46abfcc9SMasahiro Yamada 	},
102323d1f9dSMasahiro Yamada };
103323d1f9dSMasahiro Yamada #endif
104323d1f9dSMasahiro Yamada 
10528f40d4aSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5)
10628f40d4aSMasahiro Yamada static const struct uniphier_board_data ph1_pro5_data = {
10728f40d4aSMasahiro Yamada 	.dram_freq = 1866,
108*46abfcc9SMasahiro Yamada 	.dram_nr_ch = 2,
109*46abfcc9SMasahiro Yamada 	.dram_ch[0] = {
110*46abfcc9SMasahiro Yamada 		.base = 0x80000000,
111*46abfcc9SMasahiro Yamada 		.size = 0x20000000,
112*46abfcc9SMasahiro Yamada 		.width = 32,
113*46abfcc9SMasahiro Yamada 	},
114*46abfcc9SMasahiro Yamada 	.dram_ch[1] = {
115*46abfcc9SMasahiro Yamada 		.base = 0xa0000000,
116*46abfcc9SMasahiro Yamada 		.size = 0x20000000,
117*46abfcc9SMasahiro Yamada 		.width = 32,
118*46abfcc9SMasahiro Yamada 	},
11928f40d4aSMasahiro Yamada };
12028f40d4aSMasahiro Yamada #endif
12128f40d4aSMasahiro Yamada 
12289c05fa5SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2)
123019df879SMasahiro Yamada static const struct uniphier_board_data proxstream2_data = {
12489c05fa5SMasahiro Yamada 	.dram_freq = 2133,
125*46abfcc9SMasahiro Yamada 	.dram_nr_ch = 3,
126*46abfcc9SMasahiro Yamada 	.dram_ch[0] = {
127*46abfcc9SMasahiro Yamada 		.base = 0x80000000,
128*46abfcc9SMasahiro Yamada 		.size = 0x40000000,
129*46abfcc9SMasahiro Yamada 		.width = 32,
130*46abfcc9SMasahiro Yamada 	},
131*46abfcc9SMasahiro Yamada 	.dram_ch[1] = {
132*46abfcc9SMasahiro Yamada 		.base = 0xc0000000,
133*46abfcc9SMasahiro Yamada 		.size = 0x20000000,
134*46abfcc9SMasahiro Yamada 		.width = 32,
135*46abfcc9SMasahiro Yamada 	},
136*46abfcc9SMasahiro Yamada 	.dram_ch[2] = {
137*46abfcc9SMasahiro Yamada 		.base = 0xe0000000,
138*46abfcc9SMasahiro Yamada 		.size = 0x20000000,
139*46abfcc9SMasahiro Yamada 		.width = 16,
140*46abfcc9SMasahiro Yamada 	},
14189c05fa5SMasahiro Yamada };
14289c05fa5SMasahiro Yamada #endif
14389c05fa5SMasahiro Yamada 
14489c05fa5SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B)
14589c05fa5SMasahiro Yamada static const struct uniphier_board_data ph1_ld6b_data = {
146019df879SMasahiro Yamada 	.dram_freq = 1866,
147*46abfcc9SMasahiro Yamada 	.dram_nr_ch = 3,
148*46abfcc9SMasahiro Yamada 	.dram_ch[0] = {
149*46abfcc9SMasahiro Yamada 		.base = 0x80000000,
150*46abfcc9SMasahiro Yamada 		.size = 0x40000000,
151*46abfcc9SMasahiro Yamada 		.width = 32,
152*46abfcc9SMasahiro Yamada 	},
153*46abfcc9SMasahiro Yamada 	.dram_ch[1] = {
154*46abfcc9SMasahiro Yamada 		.base = 0xc0000000,
155*46abfcc9SMasahiro Yamada 		.size = 0x20000000,
156*46abfcc9SMasahiro Yamada 		.width = 32,
157*46abfcc9SMasahiro Yamada 	},
158*46abfcc9SMasahiro Yamada 	.dram_ch[2] = {
159*46abfcc9SMasahiro Yamada 		.base = 0xe0000000,
160*46abfcc9SMasahiro Yamada 		.size = 0x20000000,
161*46abfcc9SMasahiro Yamada 		.width = 16,
162*46abfcc9SMasahiro Yamada 	},
163019df879SMasahiro Yamada };
164019df879SMasahiro Yamada #endif
165019df879SMasahiro Yamada 
166323d1f9dSMasahiro Yamada struct uniphier_board_id {
167323d1f9dSMasahiro Yamada 	const char *compatible;
168323d1f9dSMasahiro Yamada 	const struct uniphier_board_data *param;
169323d1f9dSMasahiro Yamada };
170323d1f9dSMasahiro Yamada 
171323d1f9dSMasahiro Yamada static const struct uniphier_board_id uniphier_boards[] = {
172323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3)
173323d1f9dSMasahiro Yamada 	{ "socionext,ph1-sld3", &ph1_sld3_data, },
174323d1f9dSMasahiro Yamada #endif
175323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4)
176323d1f9dSMasahiro Yamada 	{ "socionext,ph1-ld4", &ph1_ld4_data, },
177323d1f9dSMasahiro Yamada #endif
178323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4)
1793f231117SMasahiro Yamada 	{ "socionext,ph1-pro4-ace", &ph1_pro4_2g_data, },
1803f231117SMasahiro Yamada 	{ "socionext,ph1-pro4-sanji", &ph1_pro4_2g_data, },
181323d1f9dSMasahiro Yamada 	{ "socionext,ph1-pro4", &ph1_pro4_data, },
182323d1f9dSMasahiro Yamada #endif
183323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8)
184323d1f9dSMasahiro Yamada 	{ "socionext,ph1-sld8", &ph1_sld8_data, },
185323d1f9dSMasahiro Yamada #endif
18628f40d4aSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5)
18728f40d4aSMasahiro Yamada 	{ "socionext,ph1-pro5", &ph1_pro5_data, },
18828f40d4aSMasahiro Yamada #endif
189019df879SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2)
190019df879SMasahiro Yamada 	{ "socionext,proxstream2", &proxstream2_data, },
191019df879SMasahiro Yamada #endif
192019df879SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B)
19389c05fa5SMasahiro Yamada 	{ "socionext,ph1-ld6b", &ph1_ld6b_data, },
194019df879SMasahiro Yamada #endif
195323d1f9dSMasahiro Yamada };
196323d1f9dSMasahiro Yamada 
1976ba60fafSMasahiro Yamada const struct uniphier_board_data *uniphier_get_board_param(void)
198323d1f9dSMasahiro Yamada {
199323d1f9dSMasahiro Yamada 	int i;
200323d1f9dSMasahiro Yamada 
201323d1f9dSMasahiro Yamada 	for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) {
2026ba60fafSMasahiro Yamada 		if (!fdt_node_check_compatible(gd->fdt_blob, 0,
203323d1f9dSMasahiro Yamada 					       uniphier_boards[i].compatible))
204323d1f9dSMasahiro Yamada 			return uniphier_boards[i].param;
205323d1f9dSMasahiro Yamada 	}
206323d1f9dSMasahiro Yamada 
207323d1f9dSMasahiro Yamada 	return NULL;
208323d1f9dSMasahiro Yamada }
209