xref: /openbmc/u-boot/arch/arm/mach-uniphier/boards.c (revision e8f80a5a)
1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
2323d1f9dSMasahiro Yamada /*
3a74c28a0SMasahiro Yamada  * Copyright (C) 2015-2016 Socionext Inc.
4a74c28a0SMasahiro Yamada  *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
5323d1f9dSMasahiro Yamada  */
6323d1f9dSMasahiro Yamada 
76ba60fafSMasahiro Yamada #include <common.h>
8b08c8c48SMasahiro Yamada #include <linux/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 
15ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD4)
165b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_ld4_data = {
17323d1f9dSMasahiro Yamada 	.dram_freq = 1600,
1846abfcc9SMasahiro Yamada 	.dram_ch[0] = {
1946abfcc9SMasahiro Yamada 		.size = 0x10000000,
2046abfcc9SMasahiro Yamada 		.width = 16,
2146abfcc9SMasahiro Yamada 	},
2246abfcc9SMasahiro Yamada 	.dram_ch[1] = {
2346abfcc9SMasahiro Yamada 		.size = 0x10000000,
2446abfcc9SMasahiro Yamada 		.width = 16,
2546abfcc9SMasahiro Yamada 	},
26a74c28a0SMasahiro Yamada 	.flags = UNIPHIER_BD_DDR3PLUS,
27323d1f9dSMasahiro Yamada };
28323d1f9dSMasahiro Yamada #endif
29323d1f9dSMasahiro Yamada 
30ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO4)
313f231117SMasahiro Yamada /* 1GB RAM board */
325b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_pro4_data = {
33323d1f9dSMasahiro Yamada 	.dram_freq = 1600,
3446abfcc9SMasahiro Yamada 	.dram_ch[0] = {
3546abfcc9SMasahiro Yamada 		.size = 0x20000000,
3646abfcc9SMasahiro Yamada 		.width = 32,
3746abfcc9SMasahiro Yamada 	},
3846abfcc9SMasahiro Yamada 	.dram_ch[1] = {
3946abfcc9SMasahiro Yamada 		.size = 0x20000000,
4046abfcc9SMasahiro Yamada 		.width = 32,
4146abfcc9SMasahiro Yamada 	},
42323d1f9dSMasahiro Yamada };
433f231117SMasahiro Yamada 
443f231117SMasahiro Yamada /* 2GB RAM board */
455b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_pro4_2g_data = {
463f231117SMasahiro Yamada 	.dram_freq = 1600,
4746abfcc9SMasahiro Yamada 	.dram_ch[0] = {
4846abfcc9SMasahiro Yamada 		.size = 0x40000000,
4946abfcc9SMasahiro Yamada 		.width = 32,
5046abfcc9SMasahiro Yamada 	},
5146abfcc9SMasahiro Yamada 	.dram_ch[1] = {
5246abfcc9SMasahiro Yamada 		.size = 0x40000000,
5346abfcc9SMasahiro Yamada 		.width = 32,
5446abfcc9SMasahiro Yamada 	},
553f231117SMasahiro Yamada };
56323d1f9dSMasahiro Yamada #endif
57323d1f9dSMasahiro Yamada 
58ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD8)
595b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_sld8_data = {
60323d1f9dSMasahiro Yamada 	.dram_freq = 1333,
6146abfcc9SMasahiro Yamada 	.dram_ch[0] = {
6246abfcc9SMasahiro Yamada 		.size = 0x10000000,
6346abfcc9SMasahiro Yamada 		.width = 16,
6446abfcc9SMasahiro Yamada 	},
6546abfcc9SMasahiro Yamada 	.dram_ch[1] = {
6646abfcc9SMasahiro Yamada 		.size = 0x10000000,
6746abfcc9SMasahiro Yamada 		.width = 16,
6846abfcc9SMasahiro Yamada 	},
69a74c28a0SMasahiro Yamada 	.flags = UNIPHIER_BD_DDR3PLUS,
70323d1f9dSMasahiro Yamada };
71323d1f9dSMasahiro Yamada #endif
72323d1f9dSMasahiro Yamada 
73ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO5)
745b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_pro5_data = {
7528f40d4aSMasahiro Yamada 	.dram_freq = 1866,
7646abfcc9SMasahiro Yamada 	.dram_ch[0] = {
7746abfcc9SMasahiro Yamada 		.size = 0x20000000,
7846abfcc9SMasahiro Yamada 		.width = 32,
7946abfcc9SMasahiro Yamada 	},
8046abfcc9SMasahiro Yamada 	.dram_ch[1] = {
8146abfcc9SMasahiro Yamada 		.size = 0x20000000,
8246abfcc9SMasahiro Yamada 		.width = 32,
8346abfcc9SMasahiro Yamada 	},
8428f40d4aSMasahiro Yamada };
8528f40d4aSMasahiro Yamada #endif
8628f40d4aSMasahiro Yamada 
87ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PXS2)
885b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_pxs2_data = {
8989c05fa5SMasahiro Yamada 	.dram_freq = 2133,
9046abfcc9SMasahiro Yamada 	.dram_ch[0] = {
9146abfcc9SMasahiro Yamada 		.size = 0x40000000,
9246abfcc9SMasahiro Yamada 		.width = 32,
9346abfcc9SMasahiro Yamada 	},
9446abfcc9SMasahiro Yamada 	.dram_ch[1] = {
9546abfcc9SMasahiro Yamada 		.size = 0x20000000,
9646abfcc9SMasahiro Yamada 		.width = 32,
9746abfcc9SMasahiro Yamada 	},
9846abfcc9SMasahiro Yamada 	.dram_ch[2] = {
9946abfcc9SMasahiro Yamada 		.size = 0x20000000,
10046abfcc9SMasahiro Yamada 		.width = 16,
10146abfcc9SMasahiro Yamada 	},
10289c05fa5SMasahiro Yamada };
10389c05fa5SMasahiro Yamada #endif
10489c05fa5SMasahiro Yamada 
105ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD6B)
1065b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_ld6b_data = {
107019df879SMasahiro Yamada 	.dram_freq = 1866,
10846abfcc9SMasahiro Yamada 	.dram_ch[0] = {
10946abfcc9SMasahiro Yamada 		.size = 0x40000000,
11046abfcc9SMasahiro Yamada 		.width = 32,
11146abfcc9SMasahiro Yamada 	},
11246abfcc9SMasahiro Yamada 	.dram_ch[1] = {
11346abfcc9SMasahiro Yamada 		.size = 0x20000000,
11446abfcc9SMasahiro Yamada 		.width = 32,
11546abfcc9SMasahiro Yamada 	},
11646abfcc9SMasahiro Yamada 	.dram_ch[2] = {
11746abfcc9SMasahiro Yamada 		.size = 0x20000000,
11846abfcc9SMasahiro Yamada 		.width = 16,
11946abfcc9SMasahiro Yamada 	},
120019df879SMasahiro Yamada };
121019df879SMasahiro Yamada #endif
122019df879SMasahiro Yamada 
123323d1f9dSMasahiro Yamada struct uniphier_board_id {
124323d1f9dSMasahiro Yamada 	const char *compatible;
125323d1f9dSMasahiro Yamada 	const struct uniphier_board_data *param;
126323d1f9dSMasahiro Yamada };
127323d1f9dSMasahiro Yamada 
128323d1f9dSMasahiro Yamada static const struct uniphier_board_id uniphier_boards[] = {
129ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD4)
13052159d27SMasahiro Yamada 	{ "socionext,uniphier-ld4", &uniphier_ld4_data, },
131323d1f9dSMasahiro Yamada #endif
132ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO4)
13352159d27SMasahiro Yamada 	{ "socionext,uniphier-pro4-ace", &uniphier_pro4_2g_data, },
13452159d27SMasahiro Yamada 	{ "socionext,uniphier-pro4-sanji", &uniphier_pro4_2g_data, },
13552159d27SMasahiro Yamada 	{ "socionext,uniphier-pro4", &uniphier_pro4_data, },
136323d1f9dSMasahiro Yamada #endif
137ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD8)
13852159d27SMasahiro Yamada 	{ "socionext,uniphier-sld8", &uniphier_sld8_data, },
139323d1f9dSMasahiro Yamada #endif
140ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO5)
14152159d27SMasahiro Yamada 	{ "socionext,uniphier-pro5", &uniphier_pro5_data, },
14228f40d4aSMasahiro Yamada #endif
143ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PXS2)
14452159d27SMasahiro Yamada 	{ "socionext,uniphier-pxs2", &uniphier_pxs2_data, },
145019df879SMasahiro Yamada #endif
146ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD6B)
14752159d27SMasahiro Yamada 	{ "socionext,uniphier-ld6b", &uniphier_ld6b_data, },
148019df879SMasahiro Yamada #endif
149323d1f9dSMasahiro Yamada };
150323d1f9dSMasahiro Yamada 
uniphier_get_board_param(void)1516ba60fafSMasahiro Yamada const struct uniphier_board_data *uniphier_get_board_param(void)
152323d1f9dSMasahiro Yamada {
153323d1f9dSMasahiro Yamada 	int i;
154323d1f9dSMasahiro Yamada 
155323d1f9dSMasahiro Yamada 	for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) {
1566ba60fafSMasahiro Yamada 		if (!fdt_node_check_compatible(gd->fdt_blob, 0,
157323d1f9dSMasahiro Yamada 					       uniphier_boards[i].compatible))
158323d1f9dSMasahiro Yamada 			return uniphier_boards[i].param;
159323d1f9dSMasahiro Yamada 	}
160323d1f9dSMasahiro Yamada 
161323d1f9dSMasahiro Yamada 	return NULL;
162323d1f9dSMasahiro Yamada }
163