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