xref: /openbmc/u-boot/arch/arm/mach-uniphier/boards.c (revision b08c8c48)
1323d1f9dSMasahiro Yamada /*
2a74c28a0SMasahiro Yamada  * Copyright (C) 2015-2016 Socionext Inc.
3a74c28a0SMasahiro Yamada  *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
4323d1f9dSMasahiro Yamada  *
5323d1f9dSMasahiro Yamada  * SPDX-License-Identifier:	GPL-2.0+
6323d1f9dSMasahiro Yamada  */
7323d1f9dSMasahiro Yamada 
86ba60fafSMasahiro Yamada #include <common.h>
9*b08c8c48SMasahiro Yamada #include <linux/libfdt.h>
10323d1f9dSMasahiro Yamada #include <linux/kernel.h>
11107b3fb4SMasahiro Yamada 
12107b3fb4SMasahiro Yamada #include "init.h"
13323d1f9dSMasahiro Yamada 
146ba60fafSMasahiro Yamada DECLARE_GLOBAL_DATA_PTR;
156ba60fafSMasahiro Yamada 
16ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD4)
175b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_ld4_data = {
18323d1f9dSMasahiro Yamada 	.dram_freq = 1600,
1946abfcc9SMasahiro Yamada 	.dram_ch[0] = {
2046abfcc9SMasahiro Yamada 		.size = 0x10000000,
2146abfcc9SMasahiro Yamada 		.width = 16,
2246abfcc9SMasahiro Yamada 	},
2346abfcc9SMasahiro Yamada 	.dram_ch[1] = {
2446abfcc9SMasahiro Yamada 		.size = 0x10000000,
2546abfcc9SMasahiro Yamada 		.width = 16,
2646abfcc9SMasahiro Yamada 	},
27a74c28a0SMasahiro Yamada 	.flags = UNIPHIER_BD_DDR3PLUS,
28323d1f9dSMasahiro Yamada };
29323d1f9dSMasahiro Yamada #endif
30323d1f9dSMasahiro Yamada 
31ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO4)
323f231117SMasahiro Yamada /* 1GB RAM board */
335b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_pro4_data = {
34323d1f9dSMasahiro Yamada 	.dram_freq = 1600,
3546abfcc9SMasahiro Yamada 	.dram_ch[0] = {
3646abfcc9SMasahiro Yamada 		.size = 0x20000000,
3746abfcc9SMasahiro Yamada 		.width = 32,
3846abfcc9SMasahiro Yamada 	},
3946abfcc9SMasahiro Yamada 	.dram_ch[1] = {
4046abfcc9SMasahiro Yamada 		.size = 0x20000000,
4146abfcc9SMasahiro Yamada 		.width = 32,
4246abfcc9SMasahiro Yamada 	},
43323d1f9dSMasahiro Yamada };
443f231117SMasahiro Yamada 
453f231117SMasahiro Yamada /* 2GB RAM board */
465b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_pro4_2g_data = {
473f231117SMasahiro Yamada 	.dram_freq = 1600,
4846abfcc9SMasahiro Yamada 	.dram_ch[0] = {
4946abfcc9SMasahiro Yamada 		.size = 0x40000000,
5046abfcc9SMasahiro Yamada 		.width = 32,
5146abfcc9SMasahiro Yamada 	},
5246abfcc9SMasahiro Yamada 	.dram_ch[1] = {
5346abfcc9SMasahiro Yamada 		.size = 0x40000000,
5446abfcc9SMasahiro Yamada 		.width = 32,
5546abfcc9SMasahiro Yamada 	},
563f231117SMasahiro Yamada };
57323d1f9dSMasahiro Yamada #endif
58323d1f9dSMasahiro Yamada 
59ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD8)
605b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_sld8_data = {
61323d1f9dSMasahiro Yamada 	.dram_freq = 1333,
6246abfcc9SMasahiro Yamada 	.dram_ch[0] = {
6346abfcc9SMasahiro Yamada 		.size = 0x10000000,
6446abfcc9SMasahiro Yamada 		.width = 16,
6546abfcc9SMasahiro Yamada 	},
6646abfcc9SMasahiro Yamada 	.dram_ch[1] = {
6746abfcc9SMasahiro Yamada 		.size = 0x10000000,
6846abfcc9SMasahiro Yamada 		.width = 16,
6946abfcc9SMasahiro Yamada 	},
70a74c28a0SMasahiro Yamada 	.flags = UNIPHIER_BD_DDR3PLUS,
71323d1f9dSMasahiro Yamada };
72323d1f9dSMasahiro Yamada #endif
73323d1f9dSMasahiro Yamada 
74ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO5)
755b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_pro5_data = {
7628f40d4aSMasahiro Yamada 	.dram_freq = 1866,
7746abfcc9SMasahiro Yamada 	.dram_ch[0] = {
7846abfcc9SMasahiro Yamada 		.size = 0x20000000,
7946abfcc9SMasahiro Yamada 		.width = 32,
8046abfcc9SMasahiro Yamada 	},
8146abfcc9SMasahiro Yamada 	.dram_ch[1] = {
8246abfcc9SMasahiro Yamada 		.size = 0x20000000,
8346abfcc9SMasahiro Yamada 		.width = 32,
8446abfcc9SMasahiro Yamada 	},
8528f40d4aSMasahiro Yamada };
8628f40d4aSMasahiro Yamada #endif
8728f40d4aSMasahiro Yamada 
88ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PXS2)
895b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_pxs2_data = {
9089c05fa5SMasahiro Yamada 	.dram_freq = 2133,
9146abfcc9SMasahiro Yamada 	.dram_ch[0] = {
9246abfcc9SMasahiro Yamada 		.size = 0x40000000,
9346abfcc9SMasahiro Yamada 		.width = 32,
9446abfcc9SMasahiro Yamada 	},
9546abfcc9SMasahiro Yamada 	.dram_ch[1] = {
9646abfcc9SMasahiro Yamada 		.size = 0x20000000,
9746abfcc9SMasahiro Yamada 		.width = 32,
9846abfcc9SMasahiro Yamada 	},
9946abfcc9SMasahiro Yamada 	.dram_ch[2] = {
10046abfcc9SMasahiro Yamada 		.size = 0x20000000,
10146abfcc9SMasahiro Yamada 		.width = 16,
10246abfcc9SMasahiro Yamada 	},
10389c05fa5SMasahiro Yamada };
10489c05fa5SMasahiro Yamada #endif
10589c05fa5SMasahiro Yamada 
106ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD6B)
1075b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_ld6b_data = {
108019df879SMasahiro Yamada 	.dram_freq = 1866,
10946abfcc9SMasahiro Yamada 	.dram_ch[0] = {
11046abfcc9SMasahiro Yamada 		.size = 0x40000000,
11146abfcc9SMasahiro Yamada 		.width = 32,
11246abfcc9SMasahiro Yamada 	},
11346abfcc9SMasahiro Yamada 	.dram_ch[1] = {
11446abfcc9SMasahiro Yamada 		.size = 0x20000000,
11546abfcc9SMasahiro Yamada 		.width = 32,
11646abfcc9SMasahiro Yamada 	},
11746abfcc9SMasahiro Yamada 	.dram_ch[2] = {
11846abfcc9SMasahiro Yamada 		.size = 0x20000000,
11946abfcc9SMasahiro Yamada 		.width = 16,
12046abfcc9SMasahiro Yamada 	},
121019df879SMasahiro Yamada };
122019df879SMasahiro Yamada #endif
123019df879SMasahiro Yamada 
124323d1f9dSMasahiro Yamada struct uniphier_board_id {
125323d1f9dSMasahiro Yamada 	const char *compatible;
126323d1f9dSMasahiro Yamada 	const struct uniphier_board_data *param;
127323d1f9dSMasahiro Yamada };
128323d1f9dSMasahiro Yamada 
129323d1f9dSMasahiro Yamada static const struct uniphier_board_id uniphier_boards[] = {
130ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD4)
13152159d27SMasahiro Yamada 	{ "socionext,uniphier-ld4", &uniphier_ld4_data, },
132323d1f9dSMasahiro Yamada #endif
133ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO4)
13452159d27SMasahiro Yamada 	{ "socionext,uniphier-pro4-ace", &uniphier_pro4_2g_data, },
13552159d27SMasahiro Yamada 	{ "socionext,uniphier-pro4-sanji", &uniphier_pro4_2g_data, },
13652159d27SMasahiro Yamada 	{ "socionext,uniphier-pro4", &uniphier_pro4_data, },
137323d1f9dSMasahiro Yamada #endif
138ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD8)
13952159d27SMasahiro Yamada 	{ "socionext,uniphier-sld8", &uniphier_sld8_data, },
140323d1f9dSMasahiro Yamada #endif
141ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO5)
14252159d27SMasahiro Yamada 	{ "socionext,uniphier-pro5", &uniphier_pro5_data, },
14328f40d4aSMasahiro Yamada #endif
144ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PXS2)
14552159d27SMasahiro Yamada 	{ "socionext,uniphier-pxs2", &uniphier_pxs2_data, },
146019df879SMasahiro Yamada #endif
147ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD6B)
14852159d27SMasahiro Yamada 	{ "socionext,uniphier-ld6b", &uniphier_ld6b_data, },
149019df879SMasahiro Yamada #endif
150323d1f9dSMasahiro Yamada };
151323d1f9dSMasahiro Yamada 
1526ba60fafSMasahiro Yamada const struct uniphier_board_data *uniphier_get_board_param(void)
153323d1f9dSMasahiro Yamada {
154323d1f9dSMasahiro Yamada 	int i;
155323d1f9dSMasahiro Yamada 
156323d1f9dSMasahiro Yamada 	for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) {
1576ba60fafSMasahiro Yamada 		if (!fdt_node_check_compatible(gd->fdt_blob, 0,
158323d1f9dSMasahiro Yamada 					       uniphier_boards[i].compatible))
159323d1f9dSMasahiro Yamada 			return uniphier_boards[i].param;
160323d1f9dSMasahiro Yamada 	}
161323d1f9dSMasahiro Yamada 
162323d1f9dSMasahiro Yamada 	return NULL;
163323d1f9dSMasahiro Yamada }
164