xref: /openbmc/u-boot/arch/arm/mach-uniphier/boards.c (revision 28f40d4a)
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 
62*28f40d4aSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5)
63*28f40d4aSMasahiro Yamada static const struct uniphier_board_data ph1_pro5_data = {
64*28f40d4aSMasahiro Yamada 	.dram_ch0_base  = 0x80000000,
65*28f40d4aSMasahiro Yamada 	.dram_ch0_size  = 0x20000000,
66*28f40d4aSMasahiro Yamada 	.dram_ch0_width = 32,
67*28f40d4aSMasahiro Yamada 	.dram_ch1_base  = 0xa0000000,
68*28f40d4aSMasahiro Yamada 	.dram_ch1_size  = 0x20000000,
69*28f40d4aSMasahiro Yamada 	.dram_ch1_width = 32,
70*28f40d4aSMasahiro Yamada 	.dram_freq      = 1866,
71*28f40d4aSMasahiro Yamada };
72*28f40d4aSMasahiro Yamada #endif
73*28f40d4aSMasahiro Yamada 
74323d1f9dSMasahiro Yamada struct uniphier_board_id {
75323d1f9dSMasahiro Yamada 	const char *compatible;
76323d1f9dSMasahiro Yamada 	const struct uniphier_board_data *param;
77323d1f9dSMasahiro Yamada };
78323d1f9dSMasahiro Yamada 
79323d1f9dSMasahiro Yamada static const struct uniphier_board_id uniphier_boards[] = {
80323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3)
81323d1f9dSMasahiro Yamada 	{ "socionext,ph1-sld3", &ph1_sld3_data, },
82323d1f9dSMasahiro Yamada #endif
83323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4)
84323d1f9dSMasahiro Yamada 	{ "socionext,ph1-ld4", &ph1_ld4_data, },
85323d1f9dSMasahiro Yamada #endif
86323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4)
87323d1f9dSMasahiro Yamada 	{ "socionext,ph1-pro4", &ph1_pro4_data, },
88323d1f9dSMasahiro Yamada #endif
89323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8)
90323d1f9dSMasahiro Yamada 	{ "socionext,ph1-sld8", &ph1_sld8_data, },
91323d1f9dSMasahiro Yamada #endif
92*28f40d4aSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5)
93*28f40d4aSMasahiro Yamada 	{ "socionext,ph1-pro5", &ph1_pro5_data, },
94*28f40d4aSMasahiro Yamada #endif
95323d1f9dSMasahiro Yamada };
96323d1f9dSMasahiro Yamada 
97323d1f9dSMasahiro Yamada const struct uniphier_board_data *uniphier_get_board_param(const void *fdt)
98323d1f9dSMasahiro Yamada {
99323d1f9dSMasahiro Yamada 	int i;
100323d1f9dSMasahiro Yamada 
101323d1f9dSMasahiro Yamada 	for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) {
102323d1f9dSMasahiro Yamada 		if (!fdt_node_check_compatible(fdt, 0,
103323d1f9dSMasahiro Yamada 					       uniphier_boards[i].compatible))
104323d1f9dSMasahiro Yamada 			return uniphier_boards[i].param;
105323d1f9dSMasahiro Yamada 	}
106323d1f9dSMasahiro Yamada 
107323d1f9dSMasahiro Yamada 	return NULL;
108323d1f9dSMasahiro Yamada }
109