xref: /openbmc/u-boot/arch/arm/mach-uniphier/boards.c (revision ea65c980)
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 
15*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD3)
16323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_sld3_data = {
17323d1f9dSMasahiro Yamada 	.dram_freq = 1600,
1846abfcc9SMasahiro Yamada 	.dram_nr_ch = 3,
1946abfcc9SMasahiro Yamada 	.dram_ch[0] = {
2046abfcc9SMasahiro Yamada 		.base = 0x80000000,
2146abfcc9SMasahiro Yamada 		.size = 0x20000000,
2246abfcc9SMasahiro Yamada 		.width = 32,
2346abfcc9SMasahiro Yamada 	},
2446abfcc9SMasahiro Yamada 	.dram_ch[1] = {
2546abfcc9SMasahiro Yamada 		.base = 0xc0000000,
2646abfcc9SMasahiro Yamada 		.size = 0x20000000,
2746abfcc9SMasahiro Yamada 		.width = 16,
2846abfcc9SMasahiro Yamada 	},
2946abfcc9SMasahiro Yamada 	.dram_ch[2] = {
3046abfcc9SMasahiro Yamada 		.base = 0xc0000000,
3146abfcc9SMasahiro Yamada 		.size = 0x10000000,
3246abfcc9SMasahiro Yamada 		.width = 16,
3346abfcc9SMasahiro Yamada 	},
34323d1f9dSMasahiro Yamada };
35323d1f9dSMasahiro Yamada #endif
36323d1f9dSMasahiro Yamada 
37*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD4)
38323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_ld4_data = {
39323d1f9dSMasahiro Yamada 	.dram_freq = 1600,
4046abfcc9SMasahiro Yamada 	.dram_nr_ch = 2,
414021b438SMasahiro Yamada 	.dram_ddr3plus = true,
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 	},
52323d1f9dSMasahiro Yamada };
53323d1f9dSMasahiro Yamada #endif
54323d1f9dSMasahiro Yamada 
55*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO4)
563f231117SMasahiro Yamada /* 1GB RAM board */
57323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_pro4_data = {
58323d1f9dSMasahiro Yamada 	.dram_freq = 1600,
5946abfcc9SMasahiro Yamada 	.dram_nr_ch = 2,
6046abfcc9SMasahiro Yamada 	.dram_ch[0] = {
6146abfcc9SMasahiro Yamada 		.base = 0x80000000,
6246abfcc9SMasahiro Yamada 		.size = 0x20000000,
6346abfcc9SMasahiro Yamada 		.width = 32,
6446abfcc9SMasahiro Yamada 	},
6546abfcc9SMasahiro Yamada 	.dram_ch[1] = {
6646abfcc9SMasahiro Yamada 		.base = 0xa0000000,
6746abfcc9SMasahiro Yamada 		.size = 0x20000000,
6846abfcc9SMasahiro Yamada 		.width = 32,
6946abfcc9SMasahiro Yamada 	},
70323d1f9dSMasahiro Yamada };
713f231117SMasahiro Yamada 
723f231117SMasahiro Yamada /* 2GB RAM board */
733f231117SMasahiro Yamada static const struct uniphier_board_data ph1_pro4_2g_data = {
743f231117SMasahiro Yamada 	.dram_freq = 1600,
7546abfcc9SMasahiro Yamada 	.dram_nr_ch = 2,
7646abfcc9SMasahiro Yamada 	.dram_ch[0] = {
7746abfcc9SMasahiro Yamada 		.base = 0x80000000,
7846abfcc9SMasahiro Yamada 		.size = 0x40000000,
7946abfcc9SMasahiro Yamada 		.width = 32,
8046abfcc9SMasahiro Yamada 	},
8146abfcc9SMasahiro Yamada 	.dram_ch[1] = {
8246abfcc9SMasahiro Yamada 		.base = 0xc0000000,
8346abfcc9SMasahiro Yamada 		.size = 0x40000000,
8446abfcc9SMasahiro Yamada 		.width = 32,
8546abfcc9SMasahiro Yamada 	},
863f231117SMasahiro Yamada };
87323d1f9dSMasahiro Yamada #endif
88323d1f9dSMasahiro Yamada 
89*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD8)
90323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_sld8_data = {
91323d1f9dSMasahiro Yamada 	.dram_freq = 1333,
9246abfcc9SMasahiro Yamada 	.dram_nr_ch = 2,
934021b438SMasahiro Yamada 	.dram_ddr3plus = true,
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 	},
104323d1f9dSMasahiro Yamada };
105323d1f9dSMasahiro Yamada #endif
106323d1f9dSMasahiro Yamada 
107*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO5)
10828f40d4aSMasahiro Yamada static const struct uniphier_board_data ph1_pro5_data = {
10928f40d4aSMasahiro Yamada 	.dram_freq = 1866,
11046abfcc9SMasahiro Yamada 	.dram_nr_ch = 2,
11146abfcc9SMasahiro Yamada 	.dram_ch[0] = {
11246abfcc9SMasahiro Yamada 		.base = 0x80000000,
11346abfcc9SMasahiro Yamada 		.size = 0x20000000,
11446abfcc9SMasahiro Yamada 		.width = 32,
11546abfcc9SMasahiro Yamada 	},
11646abfcc9SMasahiro Yamada 	.dram_ch[1] = {
11746abfcc9SMasahiro Yamada 		.base = 0xa0000000,
11846abfcc9SMasahiro Yamada 		.size = 0x20000000,
11946abfcc9SMasahiro Yamada 		.width = 32,
12046abfcc9SMasahiro Yamada 	},
12128f40d4aSMasahiro Yamada };
12228f40d4aSMasahiro Yamada #endif
12328f40d4aSMasahiro Yamada 
124*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PXS2)
125019df879SMasahiro Yamada static const struct uniphier_board_data proxstream2_data = {
12689c05fa5SMasahiro Yamada 	.dram_freq = 2133,
12746abfcc9SMasahiro Yamada 	.dram_nr_ch = 3,
12846abfcc9SMasahiro Yamada 	.dram_ch[0] = {
12946abfcc9SMasahiro Yamada 		.base = 0x80000000,
13046abfcc9SMasahiro Yamada 		.size = 0x40000000,
13146abfcc9SMasahiro Yamada 		.width = 32,
13246abfcc9SMasahiro Yamada 	},
13346abfcc9SMasahiro Yamada 	.dram_ch[1] = {
13446abfcc9SMasahiro Yamada 		.base = 0xc0000000,
13546abfcc9SMasahiro Yamada 		.size = 0x20000000,
13646abfcc9SMasahiro Yamada 		.width = 32,
13746abfcc9SMasahiro Yamada 	},
13846abfcc9SMasahiro Yamada 	.dram_ch[2] = {
13946abfcc9SMasahiro Yamada 		.base = 0xe0000000,
14046abfcc9SMasahiro Yamada 		.size = 0x20000000,
14146abfcc9SMasahiro Yamada 		.width = 16,
14246abfcc9SMasahiro Yamada 	},
14389c05fa5SMasahiro Yamada };
14489c05fa5SMasahiro Yamada #endif
14589c05fa5SMasahiro Yamada 
146*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD6B)
14789c05fa5SMasahiro Yamada static const struct uniphier_board_data ph1_ld6b_data = {
148019df879SMasahiro Yamada 	.dram_freq = 1866,
14946abfcc9SMasahiro Yamada 	.dram_nr_ch = 3,
15046abfcc9SMasahiro Yamada 	.dram_ch[0] = {
15146abfcc9SMasahiro Yamada 		.base = 0x80000000,
15246abfcc9SMasahiro Yamada 		.size = 0x40000000,
15346abfcc9SMasahiro Yamada 		.width = 32,
15446abfcc9SMasahiro Yamada 	},
15546abfcc9SMasahiro Yamada 	.dram_ch[1] = {
15646abfcc9SMasahiro Yamada 		.base = 0xc0000000,
15746abfcc9SMasahiro Yamada 		.size = 0x20000000,
15846abfcc9SMasahiro Yamada 		.width = 32,
15946abfcc9SMasahiro Yamada 	},
16046abfcc9SMasahiro Yamada 	.dram_ch[2] = {
16146abfcc9SMasahiro Yamada 		.base = 0xe0000000,
16246abfcc9SMasahiro Yamada 		.size = 0x20000000,
16346abfcc9SMasahiro Yamada 		.width = 16,
16446abfcc9SMasahiro Yamada 	},
165019df879SMasahiro Yamada };
166019df879SMasahiro Yamada #endif
167019df879SMasahiro Yamada 
168323d1f9dSMasahiro Yamada struct uniphier_board_id {
169323d1f9dSMasahiro Yamada 	const char *compatible;
170323d1f9dSMasahiro Yamada 	const struct uniphier_board_data *param;
171323d1f9dSMasahiro Yamada };
172323d1f9dSMasahiro Yamada 
173323d1f9dSMasahiro Yamada static const struct uniphier_board_id uniphier_boards[] = {
174*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD3)
175323d1f9dSMasahiro Yamada 	{ "socionext,ph1-sld3", &ph1_sld3_data, },
176323d1f9dSMasahiro Yamada #endif
177*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD4)
178323d1f9dSMasahiro Yamada 	{ "socionext,ph1-ld4", &ph1_ld4_data, },
179323d1f9dSMasahiro Yamada #endif
180*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO4)
1813f231117SMasahiro Yamada 	{ "socionext,ph1-pro4-ace", &ph1_pro4_2g_data, },
1823f231117SMasahiro Yamada 	{ "socionext,ph1-pro4-sanji", &ph1_pro4_2g_data, },
183323d1f9dSMasahiro Yamada 	{ "socionext,ph1-pro4", &ph1_pro4_data, },
184323d1f9dSMasahiro Yamada #endif
185*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD8)
186323d1f9dSMasahiro Yamada 	{ "socionext,ph1-sld8", &ph1_sld8_data, },
187323d1f9dSMasahiro Yamada #endif
188*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO5)
18928f40d4aSMasahiro Yamada 	{ "socionext,ph1-pro5", &ph1_pro5_data, },
19028f40d4aSMasahiro Yamada #endif
191*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PXS2)
192019df879SMasahiro Yamada 	{ "socionext,proxstream2", &proxstream2_data, },
193019df879SMasahiro Yamada #endif
194*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD6B)
19589c05fa5SMasahiro Yamada 	{ "socionext,ph1-ld6b", &ph1_ld6b_data, },
196019df879SMasahiro Yamada #endif
197323d1f9dSMasahiro Yamada };
198323d1f9dSMasahiro Yamada 
1996ba60fafSMasahiro Yamada const struct uniphier_board_data *uniphier_get_board_param(void)
200323d1f9dSMasahiro Yamada {
201323d1f9dSMasahiro Yamada 	int i;
202323d1f9dSMasahiro Yamada 
203323d1f9dSMasahiro Yamada 	for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) {
2046ba60fafSMasahiro Yamada 		if (!fdt_node_check_compatible(gd->fdt_blob, 0,
205323d1f9dSMasahiro Yamada 					       uniphier_boards[i].compatible))
206323d1f9dSMasahiro Yamada 			return uniphier_boards[i].param;
207323d1f9dSMasahiro Yamada 	}
208323d1f9dSMasahiro Yamada 
209323d1f9dSMasahiro Yamada 	return NULL;
210323d1f9dSMasahiro Yamada }
211