xref: /openbmc/u-boot/arch/arm/mach-uniphier/boards.c (revision 019df879)
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 
7323d1f9dSMasahiro Yamada #include <libfdt.h>
8323d1f9dSMasahiro Yamada #include <linux/kernel.h>
9323d1f9dSMasahiro Yamada #include <mach/init.h>
10323d1f9dSMasahiro Yamada 
11323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3)
12323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_sld3_data = {
13323d1f9dSMasahiro Yamada 	.dram_ch0_base	= 0x80000000,
14323d1f9dSMasahiro Yamada 	.dram_ch0_size	= 0x20000000,
15323d1f9dSMasahiro Yamada 	.dram_ch0_width	= 32,
16323d1f9dSMasahiro Yamada 	.dram_ch1_base	= 0xc0000000,
17323d1f9dSMasahiro Yamada 	.dram_ch1_size	= 0x20000000,
18323d1f9dSMasahiro Yamada 	.dram_ch1_width	= 16,
19323d1f9dSMasahiro Yamada 	.dram_ch2_base	= 0xc0000000,
20323d1f9dSMasahiro Yamada 	.dram_ch2_size	= 0x10000000,
21323d1f9dSMasahiro Yamada 	.dram_ch2_width	= 16,
22323d1f9dSMasahiro Yamada 	.dram_freq	= 1600,
23323d1f9dSMasahiro Yamada };
24323d1f9dSMasahiro Yamada #endif
25323d1f9dSMasahiro Yamada 
26323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4)
27323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_ld4_data = {
28323d1f9dSMasahiro Yamada 	.dram_ch0_base	= 0x80000000,
29323d1f9dSMasahiro Yamada 	.dram_ch0_size	= 0x10000000,
30323d1f9dSMasahiro Yamada 	.dram_ch0_width	= 16,
31323d1f9dSMasahiro Yamada 	.dram_ch1_base	= 0x90000000,
32323d1f9dSMasahiro Yamada 	.dram_ch1_size	= 0x10000000,
33323d1f9dSMasahiro Yamada 	.dram_ch1_width	= 16,
34323d1f9dSMasahiro Yamada 	.dram_freq	= 1600,
35323d1f9dSMasahiro Yamada };
36323d1f9dSMasahiro Yamada #endif
37323d1f9dSMasahiro Yamada 
38323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4)
39323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_pro4_data = {
40323d1f9dSMasahiro Yamada 	.dram_ch0_base	= 0x80000000,
41323d1f9dSMasahiro Yamada 	.dram_ch0_size	= 0x20000000,
42323d1f9dSMasahiro Yamada 	.dram_ch0_width	= 32,
43323d1f9dSMasahiro Yamada 	.dram_ch1_base	= 0xa0000000,
44323d1f9dSMasahiro Yamada 	.dram_ch1_size	= 0x20000000,
45323d1f9dSMasahiro Yamada 	.dram_ch1_width	= 32,
46323d1f9dSMasahiro Yamada 	.dram_freq	= 1600,
47323d1f9dSMasahiro Yamada };
48323d1f9dSMasahiro Yamada #endif
49323d1f9dSMasahiro Yamada 
50323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8)
51323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_sld8_data = {
52323d1f9dSMasahiro Yamada 	.dram_ch0_base	= 0x80000000,
53323d1f9dSMasahiro Yamada 	.dram_ch0_size	= 0x10000000,
54323d1f9dSMasahiro Yamada 	.dram_ch0_width	= 16,
55323d1f9dSMasahiro Yamada 	.dram_ch1_base	= 0x90000000,
56323d1f9dSMasahiro Yamada 	.dram_ch1_size	= 0x10000000,
57323d1f9dSMasahiro Yamada 	.dram_ch1_width	= 16,
58323d1f9dSMasahiro Yamada 	.dram_freq	= 1333,
59323d1f9dSMasahiro Yamada };
60323d1f9dSMasahiro Yamada #endif
61323d1f9dSMasahiro Yamada 
6228f40d4aSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5)
6328f40d4aSMasahiro Yamada static const struct uniphier_board_data ph1_pro5_data = {
6428f40d4aSMasahiro Yamada 	.dram_ch0_base  = 0x80000000,
6528f40d4aSMasahiro Yamada 	.dram_ch0_size  = 0x20000000,
6628f40d4aSMasahiro Yamada 	.dram_ch0_width = 32,
6728f40d4aSMasahiro Yamada 	.dram_ch1_base  = 0xa0000000,
6828f40d4aSMasahiro Yamada 	.dram_ch1_size  = 0x20000000,
6928f40d4aSMasahiro Yamada 	.dram_ch1_width = 32,
7028f40d4aSMasahiro Yamada 	.dram_freq      = 1866,
7128f40d4aSMasahiro Yamada };
7228f40d4aSMasahiro Yamada #endif
7328f40d4aSMasahiro Yamada 
74*019df879SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) || \
75*019df879SMasahiro Yamada 	defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B)
76*019df879SMasahiro Yamada static const struct uniphier_board_data proxstream2_data = {
77*019df879SMasahiro Yamada 	.dram_ch0_base  = 0x80000000,
78*019df879SMasahiro Yamada 	.dram_ch0_size  = 0x40000000,
79*019df879SMasahiro Yamada 	.dram_ch0_width = 32,
80*019df879SMasahiro Yamada 	.dram_ch1_base  = 0xc0000000,
81*019df879SMasahiro Yamada 	.dram_ch1_size  = 0x20000000,
82*019df879SMasahiro Yamada 	.dram_ch1_width = 32,
83*019df879SMasahiro Yamada 	.dram_ch2_base  = 0xe0000000,
84*019df879SMasahiro Yamada 	.dram_ch2_size  = 0x20000000,
85*019df879SMasahiro Yamada 	.dram_ch2_width = 16,
86*019df879SMasahiro Yamada 	.dram_freq      = 1866,
87*019df879SMasahiro Yamada };
88*019df879SMasahiro Yamada #endif
89*019df879SMasahiro Yamada 
90323d1f9dSMasahiro Yamada struct uniphier_board_id {
91323d1f9dSMasahiro Yamada 	const char *compatible;
92323d1f9dSMasahiro Yamada 	const struct uniphier_board_data *param;
93323d1f9dSMasahiro Yamada };
94323d1f9dSMasahiro Yamada 
95323d1f9dSMasahiro Yamada static const struct uniphier_board_id uniphier_boards[] = {
96323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3)
97323d1f9dSMasahiro Yamada 	{ "socionext,ph1-sld3", &ph1_sld3_data, },
98323d1f9dSMasahiro Yamada #endif
99323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4)
100323d1f9dSMasahiro Yamada 	{ "socionext,ph1-ld4", &ph1_ld4_data, },
101323d1f9dSMasahiro Yamada #endif
102323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4)
103323d1f9dSMasahiro Yamada 	{ "socionext,ph1-pro4", &ph1_pro4_data, },
104323d1f9dSMasahiro Yamada #endif
105323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8)
106323d1f9dSMasahiro Yamada 	{ "socionext,ph1-sld8", &ph1_sld8_data, },
107323d1f9dSMasahiro Yamada #endif
10828f40d4aSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5)
10928f40d4aSMasahiro Yamada 	{ "socionext,ph1-pro5", &ph1_pro5_data, },
11028f40d4aSMasahiro Yamada #endif
111*019df879SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2)
112*019df879SMasahiro Yamada 	{ "socionext,proxstream2", &proxstream2_data, },
113*019df879SMasahiro Yamada #endif
114*019df879SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B)
115*019df879SMasahiro Yamada 	{ "socionext,ph1-ld6b", &proxstream2_data, },
116*019df879SMasahiro Yamada #endif
117323d1f9dSMasahiro Yamada };
118323d1f9dSMasahiro Yamada 
119323d1f9dSMasahiro Yamada const struct uniphier_board_data *uniphier_get_board_param(const void *fdt)
120323d1f9dSMasahiro Yamada {
121323d1f9dSMasahiro Yamada 	int i;
122323d1f9dSMasahiro Yamada 
123323d1f9dSMasahiro Yamada 	for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) {
124323d1f9dSMasahiro Yamada 		if (!fdt_node_check_compatible(fdt, 0,
125323d1f9dSMasahiro Yamada 					       uniphier_boards[i].compatible))
126323d1f9dSMasahiro Yamada 			return uniphier_boards[i].param;
127323d1f9dSMasahiro Yamada 	}
128323d1f9dSMasahiro Yamada 
129323d1f9dSMasahiro Yamada 	return NULL;
130323d1f9dSMasahiro Yamada }
131