xref: /openbmc/u-boot/arch/arm/mach-uniphier/boards.c (revision 89c05fa5)
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>
10323d1f9dSMasahiro Yamada #include <mach/init.h>
11323d1f9dSMasahiro Yamada 
126ba60fafSMasahiro Yamada DECLARE_GLOBAL_DATA_PTR;
136ba60fafSMasahiro Yamada 
14323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3)
15323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_sld3_data = {
16323d1f9dSMasahiro Yamada 	.dram_ch0_base	= 0x80000000,
17323d1f9dSMasahiro Yamada 	.dram_ch0_size	= 0x20000000,
18323d1f9dSMasahiro Yamada 	.dram_ch0_width	= 32,
19323d1f9dSMasahiro Yamada 	.dram_ch1_base	= 0xc0000000,
20323d1f9dSMasahiro Yamada 	.dram_ch1_size	= 0x20000000,
21323d1f9dSMasahiro Yamada 	.dram_ch1_width	= 16,
22323d1f9dSMasahiro Yamada 	.dram_ch2_base	= 0xc0000000,
23323d1f9dSMasahiro Yamada 	.dram_ch2_size	= 0x10000000,
24323d1f9dSMasahiro Yamada 	.dram_ch2_width	= 16,
25323d1f9dSMasahiro Yamada 	.dram_freq	= 1600,
26323d1f9dSMasahiro Yamada };
27323d1f9dSMasahiro Yamada #endif
28323d1f9dSMasahiro Yamada 
29323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4)
30323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_ld4_data = {
31323d1f9dSMasahiro Yamada 	.dram_ch0_base	= 0x80000000,
32323d1f9dSMasahiro Yamada 	.dram_ch0_size	= 0x10000000,
33323d1f9dSMasahiro Yamada 	.dram_ch0_width	= 16,
34323d1f9dSMasahiro Yamada 	.dram_ch1_base	= 0x90000000,
35323d1f9dSMasahiro Yamada 	.dram_ch1_size	= 0x10000000,
36323d1f9dSMasahiro Yamada 	.dram_ch1_width	= 16,
37323d1f9dSMasahiro Yamada 	.dram_freq	= 1600,
38323d1f9dSMasahiro Yamada };
39323d1f9dSMasahiro Yamada #endif
40323d1f9dSMasahiro Yamada 
41323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4)
42323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_pro4_data = {
43323d1f9dSMasahiro Yamada 	.dram_ch0_base	= 0x80000000,
44323d1f9dSMasahiro Yamada 	.dram_ch0_size	= 0x20000000,
45323d1f9dSMasahiro Yamada 	.dram_ch0_width	= 32,
46323d1f9dSMasahiro Yamada 	.dram_ch1_base	= 0xa0000000,
47323d1f9dSMasahiro Yamada 	.dram_ch1_size	= 0x20000000,
48323d1f9dSMasahiro Yamada 	.dram_ch1_width	= 32,
49323d1f9dSMasahiro Yamada 	.dram_freq	= 1600,
50323d1f9dSMasahiro Yamada };
51323d1f9dSMasahiro Yamada #endif
52323d1f9dSMasahiro Yamada 
53323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8)
54323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_sld8_data = {
55323d1f9dSMasahiro Yamada 	.dram_ch0_base	= 0x80000000,
56323d1f9dSMasahiro Yamada 	.dram_ch0_size	= 0x10000000,
57323d1f9dSMasahiro Yamada 	.dram_ch0_width	= 16,
58323d1f9dSMasahiro Yamada 	.dram_ch1_base	= 0x90000000,
59323d1f9dSMasahiro Yamada 	.dram_ch1_size	= 0x10000000,
60323d1f9dSMasahiro Yamada 	.dram_ch1_width	= 16,
61323d1f9dSMasahiro Yamada 	.dram_freq	= 1333,
62323d1f9dSMasahiro Yamada };
63323d1f9dSMasahiro Yamada #endif
64323d1f9dSMasahiro Yamada 
6528f40d4aSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5)
6628f40d4aSMasahiro Yamada static const struct uniphier_board_data ph1_pro5_data = {
6728f40d4aSMasahiro Yamada 	.dram_ch0_base  = 0x80000000,
6828f40d4aSMasahiro Yamada 	.dram_ch0_size  = 0x20000000,
6928f40d4aSMasahiro Yamada 	.dram_ch0_width = 32,
7028f40d4aSMasahiro Yamada 	.dram_ch1_base  = 0xa0000000,
7128f40d4aSMasahiro Yamada 	.dram_ch1_size  = 0x20000000,
7228f40d4aSMasahiro Yamada 	.dram_ch1_width = 32,
7328f40d4aSMasahiro Yamada 	.dram_freq      = 1866,
7428f40d4aSMasahiro Yamada };
7528f40d4aSMasahiro Yamada #endif
7628f40d4aSMasahiro Yamada 
77*89c05fa5SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2)
78019df879SMasahiro Yamada static const struct uniphier_board_data proxstream2_data = {
79019df879SMasahiro Yamada 	.dram_ch0_base  = 0x80000000,
80019df879SMasahiro Yamada 	.dram_ch0_size  = 0x40000000,
81019df879SMasahiro Yamada 	.dram_ch0_width = 32,
82019df879SMasahiro Yamada 	.dram_ch1_base  = 0xc0000000,
83019df879SMasahiro Yamada 	.dram_ch1_size  = 0x20000000,
84019df879SMasahiro Yamada 	.dram_ch1_width = 32,
85019df879SMasahiro Yamada 	.dram_ch2_base  = 0xe0000000,
86019df879SMasahiro Yamada 	.dram_ch2_size  = 0x20000000,
87019df879SMasahiro Yamada 	.dram_ch2_width = 16,
88*89c05fa5SMasahiro Yamada 	.dram_freq      = 2133,
89*89c05fa5SMasahiro Yamada };
90*89c05fa5SMasahiro Yamada #endif
91*89c05fa5SMasahiro Yamada 
92*89c05fa5SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B)
93*89c05fa5SMasahiro Yamada static const struct uniphier_board_data ph1_ld6b_data = {
94*89c05fa5SMasahiro Yamada 	.dram_ch0_base  = 0x80000000,
95*89c05fa5SMasahiro Yamada 	.dram_ch0_size  = 0x40000000,
96*89c05fa5SMasahiro Yamada 	.dram_ch0_width = 32,
97*89c05fa5SMasahiro Yamada 	.dram_ch1_base  = 0xc0000000,
98*89c05fa5SMasahiro Yamada 	.dram_ch1_size  = 0x20000000,
99*89c05fa5SMasahiro Yamada 	.dram_ch1_width = 32,
100*89c05fa5SMasahiro Yamada 	.dram_ch2_base  = 0xe0000000,
101*89c05fa5SMasahiro Yamada 	.dram_ch2_size  = 0x20000000,
102*89c05fa5SMasahiro Yamada 	.dram_ch2_width = 16,
103019df879SMasahiro Yamada 	.dram_freq      = 1866,
104019df879SMasahiro Yamada };
105019df879SMasahiro Yamada #endif
106019df879SMasahiro Yamada 
107323d1f9dSMasahiro Yamada struct uniphier_board_id {
108323d1f9dSMasahiro Yamada 	const char *compatible;
109323d1f9dSMasahiro Yamada 	const struct uniphier_board_data *param;
110323d1f9dSMasahiro Yamada };
111323d1f9dSMasahiro Yamada 
112323d1f9dSMasahiro Yamada static const struct uniphier_board_id uniphier_boards[] = {
113323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3)
114323d1f9dSMasahiro Yamada 	{ "socionext,ph1-sld3", &ph1_sld3_data, },
115323d1f9dSMasahiro Yamada #endif
116323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4)
117323d1f9dSMasahiro Yamada 	{ "socionext,ph1-ld4", &ph1_ld4_data, },
118323d1f9dSMasahiro Yamada #endif
119323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4)
120323d1f9dSMasahiro Yamada 	{ "socionext,ph1-pro4", &ph1_pro4_data, },
121323d1f9dSMasahiro Yamada #endif
122323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8)
123323d1f9dSMasahiro Yamada 	{ "socionext,ph1-sld8", &ph1_sld8_data, },
124323d1f9dSMasahiro Yamada #endif
12528f40d4aSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5)
12628f40d4aSMasahiro Yamada 	{ "socionext,ph1-pro5", &ph1_pro5_data, },
12728f40d4aSMasahiro Yamada #endif
128019df879SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2)
129019df879SMasahiro Yamada 	{ "socionext,proxstream2", &proxstream2_data, },
130019df879SMasahiro Yamada #endif
131019df879SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B)
132*89c05fa5SMasahiro Yamada 	{ "socionext,ph1-ld6b", &ph1_ld6b_data, },
133019df879SMasahiro Yamada #endif
134323d1f9dSMasahiro Yamada };
135323d1f9dSMasahiro Yamada 
1366ba60fafSMasahiro Yamada const struct uniphier_board_data *uniphier_get_board_param(void)
137323d1f9dSMasahiro Yamada {
138323d1f9dSMasahiro Yamada 	int i;
139323d1f9dSMasahiro Yamada 
140323d1f9dSMasahiro Yamada 	for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) {
1416ba60fafSMasahiro Yamada 		if (!fdt_node_check_compatible(gd->fdt_blob, 0,
142323d1f9dSMasahiro Yamada 					       uniphier_boards[i].compatible))
143323d1f9dSMasahiro Yamada 			return uniphier_boards[i].param;
144323d1f9dSMasahiro Yamada 	}
145323d1f9dSMasahiro Yamada 
146323d1f9dSMasahiro Yamada 	return NULL;
147323d1f9dSMasahiro Yamada }
148