blob: 5e98c3f33b770926c40766216c87e07629ae0888 [file] [log] [blame]
Masahiro Yamada323d1f92015-09-22 00:27:39 +09001/*
2 * Copyright (C) 2015 Masahiro Yamada <yamada.masahiro@socionext.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0+
5 */
6
Masahiro Yamada6ba60fa2015-12-17 17:47:42 +09007#include <common.h>
Masahiro Yamada323d1f92015-09-22 00:27:39 +09008#include <libfdt.h>
9#include <linux/kernel.h>
Masahiro Yamada107b3fb2016-01-09 01:51:13 +090010
11#include "init.h"
Masahiro Yamada323d1f92015-09-22 00:27:39 +090012
Masahiro Yamada6ba60fa2015-12-17 17:47:42 +090013DECLARE_GLOBAL_DATA_PTR;
14
Masahiro Yamadaea65c982016-03-18 16:41:43 +090015#if defined(CONFIG_ARCH_UNIPHIER_SLD3)
Masahiro Yamada323d1f92015-09-22 00:27:39 +090016static const struct uniphier_board_data ph1_sld3_data = {
Masahiro Yamada46abfcc2016-02-26 14:21:34 +090017 .dram_freq = 1600,
18 .dram_nr_ch = 3,
19 .dram_ch[0] = {
20 .base = 0x80000000,
21 .size = 0x20000000,
22 .width = 32,
23 },
24 .dram_ch[1] = {
25 .base = 0xc0000000,
26 .size = 0x20000000,
27 .width = 16,
28 },
29 .dram_ch[2] = {
30 .base = 0xc0000000,
31 .size = 0x10000000,
32 .width = 16,
33 },
Masahiro Yamada323d1f92015-09-22 00:27:39 +090034};
35#endif
36
Masahiro Yamadaea65c982016-03-18 16:41:43 +090037#if defined(CONFIG_ARCH_UNIPHIER_LD4)
Masahiro Yamada323d1f92015-09-22 00:27:39 +090038static const struct uniphier_board_data ph1_ld4_data = {
Masahiro Yamada46abfcc2016-02-26 14:21:34 +090039 .dram_freq = 1600,
40 .dram_nr_ch = 2,
Masahiro Yamada4021b432016-02-26 14:21:40 +090041 .dram_ddr3plus = true,
Masahiro Yamada46abfcc2016-02-26 14:21:34 +090042 .dram_ch[0] = {
43 .base = 0x80000000,
44 .size = 0x10000000,
45 .width = 16,
46 },
47 .dram_ch[1] = {
48 .base = 0x90000000,
49 .size = 0x10000000,
50 .width = 16,
51 },
Masahiro Yamada323d1f92015-09-22 00:27:39 +090052};
53#endif
54
Masahiro Yamadaea65c982016-03-18 16:41:43 +090055#if defined(CONFIG_ARCH_UNIPHIER_PRO4)
Masahiro Yamada3f231112016-02-12 20:27:02 +090056/* 1GB RAM board */
Masahiro Yamada323d1f92015-09-22 00:27:39 +090057static const struct uniphier_board_data ph1_pro4_data = {
Masahiro Yamada46abfcc2016-02-26 14:21:34 +090058 .dram_freq = 1600,
59 .dram_nr_ch = 2,
60 .dram_ch[0] = {
61 .base = 0x80000000,
62 .size = 0x20000000,
63 .width = 32,
64 },
65 .dram_ch[1] = {
66 .base = 0xa0000000,
67 .size = 0x20000000,
68 .width = 32,
69 },
Masahiro Yamada323d1f92015-09-22 00:27:39 +090070};
Masahiro Yamada3f231112016-02-12 20:27:02 +090071
72/* 2GB RAM board */
73static const struct uniphier_board_data ph1_pro4_2g_data = {
Masahiro Yamada46abfcc2016-02-26 14:21:34 +090074 .dram_freq = 1600,
75 .dram_nr_ch = 2,
76 .dram_ch[0] = {
77 .base = 0x80000000,
78 .size = 0x40000000,
79 .width = 32,
80 },
81 .dram_ch[1] = {
82 .base = 0xc0000000,
83 .size = 0x40000000,
84 .width = 32,
85 },
Masahiro Yamada3f231112016-02-12 20:27:02 +090086};
Masahiro Yamada323d1f92015-09-22 00:27:39 +090087#endif
88
Masahiro Yamadaea65c982016-03-18 16:41:43 +090089#if defined(CONFIG_ARCH_UNIPHIER_SLD8)
Masahiro Yamada323d1f92015-09-22 00:27:39 +090090static const struct uniphier_board_data ph1_sld8_data = {
Masahiro Yamada46abfcc2016-02-26 14:21:34 +090091 .dram_freq = 1333,
92 .dram_nr_ch = 2,
Masahiro Yamada4021b432016-02-26 14:21:40 +090093 .dram_ddr3plus = true,
Masahiro Yamada46abfcc2016-02-26 14:21:34 +090094 .dram_ch[0] = {
95 .base = 0x80000000,
96 .size = 0x10000000,
97 .width = 16,
98 },
99 .dram_ch[1] = {
100 .base = 0x90000000,
101 .size = 0x10000000,
102 .width = 16,
103 },
Masahiro Yamada323d1f92015-09-22 00:27:39 +0900104};
105#endif
106
Masahiro Yamadaea65c982016-03-18 16:41:43 +0900107#if defined(CONFIG_ARCH_UNIPHIER_PRO5)
Masahiro Yamada28f40d42015-09-22 00:27:40 +0900108static const struct uniphier_board_data ph1_pro5_data = {
Masahiro Yamada46abfcc2016-02-26 14:21:34 +0900109 .dram_freq = 1866,
110 .dram_nr_ch = 2,
111 .dram_ch[0] = {
112 .base = 0x80000000,
113 .size = 0x20000000,
114 .width = 32,
115 },
116 .dram_ch[1] = {
117 .base = 0xa0000000,
118 .size = 0x20000000,
119 .width = 32,
120 },
Masahiro Yamada28f40d42015-09-22 00:27:40 +0900121};
122#endif
123
Masahiro Yamadaea65c982016-03-18 16:41:43 +0900124#if defined(CONFIG_ARCH_UNIPHIER_PXS2)
Masahiro Yamada019df872015-09-22 00:27:41 +0900125static const struct uniphier_board_data proxstream2_data = {
Masahiro Yamada46abfcc2016-02-26 14:21:34 +0900126 .dram_freq = 2133,
127 .dram_nr_ch = 3,
128 .dram_ch[0] = {
129 .base = 0x80000000,
130 .size = 0x40000000,
131 .width = 32,
132 },
133 .dram_ch[1] = {
134 .base = 0xc0000000,
135 .size = 0x20000000,
136 .width = 32,
137 },
138 .dram_ch[2] = {
139 .base = 0xe0000000,
140 .size = 0x20000000,
141 .width = 16,
142 },
Masahiro Yamada89c05fa2015-12-17 17:47:43 +0900143};
144#endif
145
Masahiro Yamadaea65c982016-03-18 16:41:43 +0900146#if defined(CONFIG_ARCH_UNIPHIER_LD6B)
Masahiro Yamada89c05fa2015-12-17 17:47:43 +0900147static const struct uniphier_board_data ph1_ld6b_data = {
Masahiro Yamada46abfcc2016-02-26 14:21:34 +0900148 .dram_freq = 1866,
149 .dram_nr_ch = 3,
150 .dram_ch[0] = {
151 .base = 0x80000000,
152 .size = 0x40000000,
153 .width = 32,
154 },
155 .dram_ch[1] = {
156 .base = 0xc0000000,
157 .size = 0x20000000,
158 .width = 32,
159 },
160 .dram_ch[2] = {
161 .base = 0xe0000000,
162 .size = 0x20000000,
163 .width = 16,
164 },
Masahiro Yamada019df872015-09-22 00:27:41 +0900165};
166#endif
167
Masahiro Yamada323d1f92015-09-22 00:27:39 +0900168struct uniphier_board_id {
169 const char *compatible;
170 const struct uniphier_board_data *param;
171};
172
173static const struct uniphier_board_id uniphier_boards[] = {
Masahiro Yamadaea65c982016-03-18 16:41:43 +0900174#if defined(CONFIG_ARCH_UNIPHIER_SLD3)
Masahiro Yamada323d1f92015-09-22 00:27:39 +0900175 { "socionext,ph1-sld3", &ph1_sld3_data, },
176#endif
Masahiro Yamadaea65c982016-03-18 16:41:43 +0900177#if defined(CONFIG_ARCH_UNIPHIER_LD4)
Masahiro Yamada323d1f92015-09-22 00:27:39 +0900178 { "socionext,ph1-ld4", &ph1_ld4_data, },
179#endif
Masahiro Yamadaea65c982016-03-18 16:41:43 +0900180#if defined(CONFIG_ARCH_UNIPHIER_PRO4)
Masahiro Yamada3f231112016-02-12 20:27:02 +0900181 { "socionext,ph1-pro4-ace", &ph1_pro4_2g_data, },
182 { "socionext,ph1-pro4-sanji", &ph1_pro4_2g_data, },
Masahiro Yamada323d1f92015-09-22 00:27:39 +0900183 { "socionext,ph1-pro4", &ph1_pro4_data, },
184#endif
Masahiro Yamadaea65c982016-03-18 16:41:43 +0900185#if defined(CONFIG_ARCH_UNIPHIER_SLD8)
Masahiro Yamada323d1f92015-09-22 00:27:39 +0900186 { "socionext,ph1-sld8", &ph1_sld8_data, },
187#endif
Masahiro Yamadaea65c982016-03-18 16:41:43 +0900188#if defined(CONFIG_ARCH_UNIPHIER_PRO5)
Masahiro Yamada28f40d42015-09-22 00:27:40 +0900189 { "socionext,ph1-pro5", &ph1_pro5_data, },
190#endif
Masahiro Yamadaea65c982016-03-18 16:41:43 +0900191#if defined(CONFIG_ARCH_UNIPHIER_PXS2)
Masahiro Yamada019df872015-09-22 00:27:41 +0900192 { "socionext,proxstream2", &proxstream2_data, },
193#endif
Masahiro Yamadaea65c982016-03-18 16:41:43 +0900194#if defined(CONFIG_ARCH_UNIPHIER_LD6B)
Masahiro Yamada89c05fa2015-12-17 17:47:43 +0900195 { "socionext,ph1-ld6b", &ph1_ld6b_data, },
Masahiro Yamada019df872015-09-22 00:27:41 +0900196#endif
Masahiro Yamada323d1f92015-09-22 00:27:39 +0900197};
198
Masahiro Yamada6ba60fa2015-12-17 17:47:42 +0900199const struct uniphier_board_data *uniphier_get_board_param(void)
Masahiro Yamada323d1f92015-09-22 00:27:39 +0900200{
201 int i;
202
203 for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) {
Masahiro Yamada6ba60fa2015-12-17 17:47:42 +0900204 if (!fdt_node_check_compatible(gd->fdt_blob, 0,
Masahiro Yamada323d1f92015-09-22 00:27:39 +0900205 uniphier_boards[i].compatible))
206 return uniphier_boards[i].param;
207 }
208
209 return NULL;
210}