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> 9323d1f9dSMasahiro Yamada #include <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_SLD3) 175b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_sld3_data = { 18323d1f9dSMasahiro Yamada .dram_freq = 1600, 1946abfcc9SMasahiro Yamada .dram_nr_ch = 3, 2046abfcc9SMasahiro Yamada .dram_ch[0] = { 2146abfcc9SMasahiro Yamada .base = 0x80000000, 2246abfcc9SMasahiro Yamada .size = 0x20000000, 2346abfcc9SMasahiro Yamada .width = 32, 2446abfcc9SMasahiro Yamada }, 2546abfcc9SMasahiro Yamada .dram_ch[1] = { 2646abfcc9SMasahiro Yamada .base = 0xc0000000, 2746abfcc9SMasahiro Yamada .size = 0x20000000, 2846abfcc9SMasahiro Yamada .width = 16, 2946abfcc9SMasahiro Yamada }, 3046abfcc9SMasahiro Yamada .dram_ch[2] = { 3146abfcc9SMasahiro Yamada .base = 0xc0000000, 3246abfcc9SMasahiro Yamada .size = 0x10000000, 3346abfcc9SMasahiro Yamada .width = 16, 3446abfcc9SMasahiro Yamada }, 35323d1f9dSMasahiro Yamada }; 36323d1f9dSMasahiro Yamada #endif 37323d1f9dSMasahiro Yamada 38ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD4) 395b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_ld4_data = { 40323d1f9dSMasahiro Yamada .dram_freq = 1600, 4146abfcc9SMasahiro Yamada .dram_nr_ch = 2, 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 }, 52a74c28a0SMasahiro Yamada .flags = UNIPHIER_BD_DDR3PLUS, 53323d1f9dSMasahiro Yamada }; 54323d1f9dSMasahiro Yamada #endif 55323d1f9dSMasahiro Yamada 56ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO4) 573f231117SMasahiro Yamada /* 1GB RAM board */ 585b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_pro4_data = { 59323d1f9dSMasahiro Yamada .dram_freq = 1600, 6046abfcc9SMasahiro Yamada .dram_nr_ch = 2, 6146abfcc9SMasahiro Yamada .dram_ch[0] = { 6246abfcc9SMasahiro Yamada .base = 0x80000000, 6346abfcc9SMasahiro Yamada .size = 0x20000000, 6446abfcc9SMasahiro Yamada .width = 32, 6546abfcc9SMasahiro Yamada }, 6646abfcc9SMasahiro Yamada .dram_ch[1] = { 6746abfcc9SMasahiro Yamada .base = 0xa0000000, 6846abfcc9SMasahiro Yamada .size = 0x20000000, 6946abfcc9SMasahiro Yamada .width = 32, 7046abfcc9SMasahiro Yamada }, 71323d1f9dSMasahiro Yamada }; 723f231117SMasahiro Yamada 733f231117SMasahiro Yamada /* 2GB RAM board */ 745b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_pro4_2g_data = { 753f231117SMasahiro Yamada .dram_freq = 1600, 7646abfcc9SMasahiro Yamada .dram_nr_ch = 2, 7746abfcc9SMasahiro Yamada .dram_ch[0] = { 7846abfcc9SMasahiro Yamada .base = 0x80000000, 7946abfcc9SMasahiro Yamada .size = 0x40000000, 8046abfcc9SMasahiro Yamada .width = 32, 8146abfcc9SMasahiro Yamada }, 8246abfcc9SMasahiro Yamada .dram_ch[1] = { 8346abfcc9SMasahiro Yamada .base = 0xc0000000, 8446abfcc9SMasahiro Yamada .size = 0x40000000, 8546abfcc9SMasahiro Yamada .width = 32, 8646abfcc9SMasahiro Yamada }, 873f231117SMasahiro Yamada }; 88323d1f9dSMasahiro Yamada #endif 89323d1f9dSMasahiro Yamada 90ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD8) 915b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_sld8_data = { 92323d1f9dSMasahiro Yamada .dram_freq = 1333, 9346abfcc9SMasahiro Yamada .dram_nr_ch = 2, 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 }, 104a74c28a0SMasahiro Yamada .flags = UNIPHIER_BD_DDR3PLUS, 105323d1f9dSMasahiro Yamada }; 106323d1f9dSMasahiro Yamada #endif 107323d1f9dSMasahiro Yamada 108ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO5) 1095b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_pro5_data = { 11028f40d4aSMasahiro Yamada .dram_freq = 1866, 11146abfcc9SMasahiro Yamada .dram_nr_ch = 2, 11246abfcc9SMasahiro Yamada .dram_ch[0] = { 11346abfcc9SMasahiro Yamada .base = 0x80000000, 11446abfcc9SMasahiro Yamada .size = 0x20000000, 11546abfcc9SMasahiro Yamada .width = 32, 11646abfcc9SMasahiro Yamada }, 11746abfcc9SMasahiro Yamada .dram_ch[1] = { 11846abfcc9SMasahiro Yamada .base = 0xa0000000, 11946abfcc9SMasahiro Yamada .size = 0x20000000, 12046abfcc9SMasahiro Yamada .width = 32, 12146abfcc9SMasahiro Yamada }, 12228f40d4aSMasahiro Yamada }; 12328f40d4aSMasahiro Yamada #endif 12428f40d4aSMasahiro Yamada 125ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PXS2) 1265b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_pxs2_data = { 12789c05fa5SMasahiro Yamada .dram_freq = 2133, 12846abfcc9SMasahiro Yamada .dram_nr_ch = 3, 12946abfcc9SMasahiro Yamada .dram_ch[0] = { 13046abfcc9SMasahiro Yamada .base = 0x80000000, 13146abfcc9SMasahiro Yamada .size = 0x40000000, 13246abfcc9SMasahiro Yamada .width = 32, 13346abfcc9SMasahiro Yamada }, 13446abfcc9SMasahiro Yamada .dram_ch[1] = { 13546abfcc9SMasahiro Yamada .base = 0xc0000000, 13646abfcc9SMasahiro Yamada .size = 0x20000000, 13746abfcc9SMasahiro Yamada .width = 32, 13846abfcc9SMasahiro Yamada }, 13946abfcc9SMasahiro Yamada .dram_ch[2] = { 14046abfcc9SMasahiro Yamada .base = 0xe0000000, 14146abfcc9SMasahiro Yamada .size = 0x20000000, 14246abfcc9SMasahiro Yamada .width = 16, 14346abfcc9SMasahiro Yamada }, 14489c05fa5SMasahiro Yamada }; 14589c05fa5SMasahiro Yamada #endif 14689c05fa5SMasahiro Yamada 147ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD6B) 1485b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_ld6b_data = { 149019df879SMasahiro Yamada .dram_freq = 1866, 15046abfcc9SMasahiro Yamada .dram_nr_ch = 3, 15146abfcc9SMasahiro Yamada .dram_ch[0] = { 15246abfcc9SMasahiro Yamada .base = 0x80000000, 15346abfcc9SMasahiro Yamada .size = 0x40000000, 15446abfcc9SMasahiro Yamada .width = 32, 15546abfcc9SMasahiro Yamada }, 15646abfcc9SMasahiro Yamada .dram_ch[1] = { 15746abfcc9SMasahiro Yamada .base = 0xc0000000, 15846abfcc9SMasahiro Yamada .size = 0x20000000, 15946abfcc9SMasahiro Yamada .width = 32, 16046abfcc9SMasahiro Yamada }, 16146abfcc9SMasahiro Yamada .dram_ch[2] = { 16246abfcc9SMasahiro Yamada .base = 0xe0000000, 16346abfcc9SMasahiro Yamada .size = 0x20000000, 16446abfcc9SMasahiro Yamada .width = 16, 16546abfcc9SMasahiro Yamada }, 166019df879SMasahiro Yamada }; 167019df879SMasahiro Yamada #endif 168019df879SMasahiro Yamada 169667dbcd0SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD11) 170667dbcd0SMasahiro Yamada static const struct uniphier_board_data uniphier_ld11_data = { 171667dbcd0SMasahiro Yamada .dram_freq = 1600, 172667dbcd0SMasahiro Yamada .dram_nr_ch = 2, 173667dbcd0SMasahiro Yamada .dram_ch[0] = { 174667dbcd0SMasahiro Yamada .base = 0x80000000, 175667dbcd0SMasahiro Yamada .size = 0x20000000, 176667dbcd0SMasahiro Yamada .width = 16, 177667dbcd0SMasahiro Yamada }, 178667dbcd0SMasahiro Yamada .dram_ch[1] = { 179667dbcd0SMasahiro Yamada .base = 0xa0000000, 180667dbcd0SMasahiro Yamada .size = 0x20000000, 181667dbcd0SMasahiro Yamada .width = 16, 182667dbcd0SMasahiro Yamada }, 183667dbcd0SMasahiro Yamada }; 184667dbcd0SMasahiro Yamada #endif 185667dbcd0SMasahiro Yamada 1869d0c2cebSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD20) 187f6bbec3dSMasahiro Yamada static const struct uniphier_board_data uniphier_ld20_ref_data = { 188f6bbec3dSMasahiro Yamada .dram_freq = 1866, 189f6bbec3dSMasahiro Yamada .dram_nr_ch = 3, 190f6bbec3dSMasahiro Yamada .dram_ch[0] = { 191f6bbec3dSMasahiro Yamada .base = 0x80000000, 192f6bbec3dSMasahiro Yamada .size = 0x40000000, 193f6bbec3dSMasahiro Yamada .width = 32, 194f6bbec3dSMasahiro Yamada }, 195f6bbec3dSMasahiro Yamada .dram_ch[1] = { 196f6bbec3dSMasahiro Yamada .base = 0xc0000000, 197f6bbec3dSMasahiro Yamada .size = 0x40000000, 198f6bbec3dSMasahiro Yamada .width = 32, 199f6bbec3dSMasahiro Yamada }, 200f6bbec3dSMasahiro Yamada .dram_ch[2] = { 201f6bbec3dSMasahiro Yamada .base = 0x100000000UL, 202f6bbec3dSMasahiro Yamada .size = 0x40000000, 203f6bbec3dSMasahiro Yamada .width = 32, 204f6bbec3dSMasahiro Yamada }, 205f6bbec3dSMasahiro Yamada .flags = UNIPHIER_BD_BOARD_LD20_REF, 206f6bbec3dSMasahiro Yamada }; 207f6bbec3dSMasahiro Yamada 2089d0c2cebSMasahiro Yamada static const struct uniphier_board_data uniphier_ld20_data = { 2099d0c2cebSMasahiro Yamada .dram_freq = 1866, 2109d0c2cebSMasahiro Yamada .dram_nr_ch = 3, 2119d0c2cebSMasahiro Yamada .dram_ch[0] = { 2129d0c2cebSMasahiro Yamada .base = 0x80000000, 2139d0c2cebSMasahiro Yamada .size = 0x40000000, 2149d0c2cebSMasahiro Yamada .width = 32, 2159d0c2cebSMasahiro Yamada }, 2169d0c2cebSMasahiro Yamada .dram_ch[1] = { 2179d0c2cebSMasahiro Yamada .base = 0xc0000000, 2189d0c2cebSMasahiro Yamada .size = 0x40000000, 2199d0c2cebSMasahiro Yamada .width = 32, 2209d0c2cebSMasahiro Yamada }, 2219d0c2cebSMasahiro Yamada .dram_ch[2] = { 2229d0c2cebSMasahiro Yamada .base = 0x100000000UL, 2239d0c2cebSMasahiro Yamada .size = 0x40000000, 2249d0c2cebSMasahiro Yamada .width = 32, 2259d0c2cebSMasahiro Yamada }, 226f6bbec3dSMasahiro Yamada .flags = UNIPHIER_BD_BOARD_LD20_GLOBAL, 2279d0c2cebSMasahiro Yamada }; 228be44a467SMasahiro Yamada 229be44a467SMasahiro Yamada static const struct uniphier_board_data uniphier_ld21_data = { 230be44a467SMasahiro Yamada .dram_freq = 1866, 231be44a467SMasahiro Yamada .dram_nr_ch = 2, 232be44a467SMasahiro Yamada .dram_ch[0] = { 233be44a467SMasahiro Yamada .base = 0x80000000, 234ef70eb54SMasahiro Yamada .size = 0x20000000, 235be44a467SMasahiro Yamada .width = 32, 236be44a467SMasahiro Yamada }, 237be44a467SMasahiro Yamada .dram_ch[1] = { 238be44a467SMasahiro Yamada .base = 0xc0000000, 239be44a467SMasahiro Yamada .size = 0x40000000, 240be44a467SMasahiro Yamada .width = 32, 241be44a467SMasahiro Yamada }, 242f6bbec3dSMasahiro Yamada .flags = UNIPHIER_BD_BOARD_LD21_GLOBAL, 243be44a467SMasahiro Yamada }; 2449d0c2cebSMasahiro Yamada #endif 2459d0c2cebSMasahiro Yamada 246323d1f9dSMasahiro Yamada struct uniphier_board_id { 247323d1f9dSMasahiro Yamada const char *compatible; 248323d1f9dSMasahiro Yamada const struct uniphier_board_data *param; 249323d1f9dSMasahiro Yamada }; 250323d1f9dSMasahiro Yamada 251323d1f9dSMasahiro Yamada static const struct uniphier_board_id uniphier_boards[] = { 252ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD3) 253*52159d27SMasahiro Yamada { "socionext,uniphier-sld3", &uniphier_sld3_data, }, 254323d1f9dSMasahiro Yamada #endif 255ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD4) 256*52159d27SMasahiro Yamada { "socionext,uniphier-ld4", &uniphier_ld4_data, }, 257323d1f9dSMasahiro Yamada #endif 258ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO4) 259*52159d27SMasahiro Yamada { "socionext,uniphier-pro4-ace", &uniphier_pro4_2g_data, }, 260*52159d27SMasahiro Yamada { "socionext,uniphier-pro4-sanji", &uniphier_pro4_2g_data, }, 261*52159d27SMasahiro Yamada { "socionext,uniphier-pro4", &uniphier_pro4_data, }, 262323d1f9dSMasahiro Yamada #endif 263ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD8) 264*52159d27SMasahiro Yamada { "socionext,uniphier-sld8", &uniphier_sld8_data, }, 265323d1f9dSMasahiro Yamada #endif 266ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO5) 267*52159d27SMasahiro Yamada { "socionext,uniphier-pro5", &uniphier_pro5_data, }, 26828f40d4aSMasahiro Yamada #endif 269ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PXS2) 270*52159d27SMasahiro Yamada { "socionext,uniphier-pxs2", &uniphier_pxs2_data, }, 271019df879SMasahiro Yamada #endif 272ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD6B) 273*52159d27SMasahiro Yamada { "socionext,uniphier-ld6b", &uniphier_ld6b_data, }, 274019df879SMasahiro Yamada #endif 275667dbcd0SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD11) 276*52159d27SMasahiro Yamada { "socionext,uniphier-ld11", &uniphier_ld11_data, }, 277667dbcd0SMasahiro Yamada #endif 2789d0c2cebSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD20) 279*52159d27SMasahiro Yamada { "socionext,uniphier-ld21", &uniphier_ld21_data, }, 280*52159d27SMasahiro Yamada { "socionext,uniphier-ld20-ref", &uniphier_ld20_ref_data, }, 281*52159d27SMasahiro Yamada { "socionext,uniphier-ld20", &uniphier_ld20_data, }, 2829d0c2cebSMasahiro Yamada #endif 283323d1f9dSMasahiro Yamada }; 284323d1f9dSMasahiro Yamada 2856ba60fafSMasahiro Yamada const struct uniphier_board_data *uniphier_get_board_param(void) 286323d1f9dSMasahiro Yamada { 287323d1f9dSMasahiro Yamada int i; 288323d1f9dSMasahiro Yamada 289323d1f9dSMasahiro Yamada for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) { 2906ba60fafSMasahiro Yamada if (!fdt_node_check_compatible(gd->fdt_blob, 0, 291323d1f9dSMasahiro Yamada uniphier_boards[i].compatible)) 292323d1f9dSMasahiro Yamada return uniphier_boards[i].param; 293323d1f9dSMasahiro Yamada } 294323d1f9dSMasahiro Yamada 295323d1f9dSMasahiro Yamada return NULL; 296323d1f9dSMasahiro Yamada } 297