1323d1f9dSMasahiro Yamada /* 2323d1f9dSMasahiro Yamada * Copyright (C) 2015 Masahiro Yamada <yamada.masahiro@socionext.com> 3323d1f9dSMasahiro Yamada * 4323d1f9dSMasahiro Yamada * SPDX-License-Identifier: GPL-2.0+ 5323d1f9dSMasahiro Yamada */ 6323d1f9dSMasahiro Yamada 76ba60fafSMasahiro Yamada #include <common.h> 8323d1f9dSMasahiro Yamada #include <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 15*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD3) 16323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_sld3_data = { 17323d1f9dSMasahiro Yamada .dram_freq = 1600, 1846abfcc9SMasahiro Yamada .dram_nr_ch = 3, 1946abfcc9SMasahiro Yamada .dram_ch[0] = { 2046abfcc9SMasahiro Yamada .base = 0x80000000, 2146abfcc9SMasahiro Yamada .size = 0x20000000, 2246abfcc9SMasahiro Yamada .width = 32, 2346abfcc9SMasahiro Yamada }, 2446abfcc9SMasahiro Yamada .dram_ch[1] = { 2546abfcc9SMasahiro Yamada .base = 0xc0000000, 2646abfcc9SMasahiro Yamada .size = 0x20000000, 2746abfcc9SMasahiro Yamada .width = 16, 2846abfcc9SMasahiro Yamada }, 2946abfcc9SMasahiro Yamada .dram_ch[2] = { 3046abfcc9SMasahiro Yamada .base = 0xc0000000, 3146abfcc9SMasahiro Yamada .size = 0x10000000, 3246abfcc9SMasahiro Yamada .width = 16, 3346abfcc9SMasahiro Yamada }, 34323d1f9dSMasahiro Yamada }; 35323d1f9dSMasahiro Yamada #endif 36323d1f9dSMasahiro Yamada 37*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD4) 38323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_ld4_data = { 39323d1f9dSMasahiro Yamada .dram_freq = 1600, 4046abfcc9SMasahiro Yamada .dram_nr_ch = 2, 414021b438SMasahiro Yamada .dram_ddr3plus = true, 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 }, 52323d1f9dSMasahiro Yamada }; 53323d1f9dSMasahiro Yamada #endif 54323d1f9dSMasahiro Yamada 55*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO4) 563f231117SMasahiro Yamada /* 1GB RAM board */ 57323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_pro4_data = { 58323d1f9dSMasahiro Yamada .dram_freq = 1600, 5946abfcc9SMasahiro Yamada .dram_nr_ch = 2, 6046abfcc9SMasahiro Yamada .dram_ch[0] = { 6146abfcc9SMasahiro Yamada .base = 0x80000000, 6246abfcc9SMasahiro Yamada .size = 0x20000000, 6346abfcc9SMasahiro Yamada .width = 32, 6446abfcc9SMasahiro Yamada }, 6546abfcc9SMasahiro Yamada .dram_ch[1] = { 6646abfcc9SMasahiro Yamada .base = 0xa0000000, 6746abfcc9SMasahiro Yamada .size = 0x20000000, 6846abfcc9SMasahiro Yamada .width = 32, 6946abfcc9SMasahiro Yamada }, 70323d1f9dSMasahiro Yamada }; 713f231117SMasahiro Yamada 723f231117SMasahiro Yamada /* 2GB RAM board */ 733f231117SMasahiro Yamada static const struct uniphier_board_data ph1_pro4_2g_data = { 743f231117SMasahiro Yamada .dram_freq = 1600, 7546abfcc9SMasahiro Yamada .dram_nr_ch = 2, 7646abfcc9SMasahiro Yamada .dram_ch[0] = { 7746abfcc9SMasahiro Yamada .base = 0x80000000, 7846abfcc9SMasahiro Yamada .size = 0x40000000, 7946abfcc9SMasahiro Yamada .width = 32, 8046abfcc9SMasahiro Yamada }, 8146abfcc9SMasahiro Yamada .dram_ch[1] = { 8246abfcc9SMasahiro Yamada .base = 0xc0000000, 8346abfcc9SMasahiro Yamada .size = 0x40000000, 8446abfcc9SMasahiro Yamada .width = 32, 8546abfcc9SMasahiro Yamada }, 863f231117SMasahiro Yamada }; 87323d1f9dSMasahiro Yamada #endif 88323d1f9dSMasahiro Yamada 89*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD8) 90323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_sld8_data = { 91323d1f9dSMasahiro Yamada .dram_freq = 1333, 9246abfcc9SMasahiro Yamada .dram_nr_ch = 2, 934021b438SMasahiro Yamada .dram_ddr3plus = true, 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 }, 104323d1f9dSMasahiro Yamada }; 105323d1f9dSMasahiro Yamada #endif 106323d1f9dSMasahiro Yamada 107*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO5) 10828f40d4aSMasahiro Yamada static const struct uniphier_board_data ph1_pro5_data = { 10928f40d4aSMasahiro Yamada .dram_freq = 1866, 11046abfcc9SMasahiro Yamada .dram_nr_ch = 2, 11146abfcc9SMasahiro Yamada .dram_ch[0] = { 11246abfcc9SMasahiro Yamada .base = 0x80000000, 11346abfcc9SMasahiro Yamada .size = 0x20000000, 11446abfcc9SMasahiro Yamada .width = 32, 11546abfcc9SMasahiro Yamada }, 11646abfcc9SMasahiro Yamada .dram_ch[1] = { 11746abfcc9SMasahiro Yamada .base = 0xa0000000, 11846abfcc9SMasahiro Yamada .size = 0x20000000, 11946abfcc9SMasahiro Yamada .width = 32, 12046abfcc9SMasahiro Yamada }, 12128f40d4aSMasahiro Yamada }; 12228f40d4aSMasahiro Yamada #endif 12328f40d4aSMasahiro Yamada 124*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PXS2) 125019df879SMasahiro Yamada static const struct uniphier_board_data proxstream2_data = { 12689c05fa5SMasahiro Yamada .dram_freq = 2133, 12746abfcc9SMasahiro Yamada .dram_nr_ch = 3, 12846abfcc9SMasahiro Yamada .dram_ch[0] = { 12946abfcc9SMasahiro Yamada .base = 0x80000000, 13046abfcc9SMasahiro Yamada .size = 0x40000000, 13146abfcc9SMasahiro Yamada .width = 32, 13246abfcc9SMasahiro Yamada }, 13346abfcc9SMasahiro Yamada .dram_ch[1] = { 13446abfcc9SMasahiro Yamada .base = 0xc0000000, 13546abfcc9SMasahiro Yamada .size = 0x20000000, 13646abfcc9SMasahiro Yamada .width = 32, 13746abfcc9SMasahiro Yamada }, 13846abfcc9SMasahiro Yamada .dram_ch[2] = { 13946abfcc9SMasahiro Yamada .base = 0xe0000000, 14046abfcc9SMasahiro Yamada .size = 0x20000000, 14146abfcc9SMasahiro Yamada .width = 16, 14246abfcc9SMasahiro Yamada }, 14389c05fa5SMasahiro Yamada }; 14489c05fa5SMasahiro Yamada #endif 14589c05fa5SMasahiro Yamada 146*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD6B) 14789c05fa5SMasahiro Yamada static const struct uniphier_board_data ph1_ld6b_data = { 148019df879SMasahiro Yamada .dram_freq = 1866, 14946abfcc9SMasahiro Yamada .dram_nr_ch = 3, 15046abfcc9SMasahiro Yamada .dram_ch[0] = { 15146abfcc9SMasahiro Yamada .base = 0x80000000, 15246abfcc9SMasahiro Yamada .size = 0x40000000, 15346abfcc9SMasahiro Yamada .width = 32, 15446abfcc9SMasahiro Yamada }, 15546abfcc9SMasahiro Yamada .dram_ch[1] = { 15646abfcc9SMasahiro Yamada .base = 0xc0000000, 15746abfcc9SMasahiro Yamada .size = 0x20000000, 15846abfcc9SMasahiro Yamada .width = 32, 15946abfcc9SMasahiro Yamada }, 16046abfcc9SMasahiro Yamada .dram_ch[2] = { 16146abfcc9SMasahiro Yamada .base = 0xe0000000, 16246abfcc9SMasahiro Yamada .size = 0x20000000, 16346abfcc9SMasahiro Yamada .width = 16, 16446abfcc9SMasahiro Yamada }, 165019df879SMasahiro Yamada }; 166019df879SMasahiro Yamada #endif 167019df879SMasahiro Yamada 168323d1f9dSMasahiro Yamada struct uniphier_board_id { 169323d1f9dSMasahiro Yamada const char *compatible; 170323d1f9dSMasahiro Yamada const struct uniphier_board_data *param; 171323d1f9dSMasahiro Yamada }; 172323d1f9dSMasahiro Yamada 173323d1f9dSMasahiro Yamada static const struct uniphier_board_id uniphier_boards[] = { 174*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD3) 175323d1f9dSMasahiro Yamada { "socionext,ph1-sld3", &ph1_sld3_data, }, 176323d1f9dSMasahiro Yamada #endif 177*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD4) 178323d1f9dSMasahiro Yamada { "socionext,ph1-ld4", &ph1_ld4_data, }, 179323d1f9dSMasahiro Yamada #endif 180*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO4) 1813f231117SMasahiro Yamada { "socionext,ph1-pro4-ace", &ph1_pro4_2g_data, }, 1823f231117SMasahiro Yamada { "socionext,ph1-pro4-sanji", &ph1_pro4_2g_data, }, 183323d1f9dSMasahiro Yamada { "socionext,ph1-pro4", &ph1_pro4_data, }, 184323d1f9dSMasahiro Yamada #endif 185*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD8) 186323d1f9dSMasahiro Yamada { "socionext,ph1-sld8", &ph1_sld8_data, }, 187323d1f9dSMasahiro Yamada #endif 188*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO5) 18928f40d4aSMasahiro Yamada { "socionext,ph1-pro5", &ph1_pro5_data, }, 19028f40d4aSMasahiro Yamada #endif 191*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PXS2) 192019df879SMasahiro Yamada { "socionext,proxstream2", &proxstream2_data, }, 193019df879SMasahiro Yamada #endif 194*ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD6B) 19589c05fa5SMasahiro Yamada { "socionext,ph1-ld6b", &ph1_ld6b_data, }, 196019df879SMasahiro Yamada #endif 197323d1f9dSMasahiro Yamada }; 198323d1f9dSMasahiro Yamada 1996ba60fafSMasahiro Yamada const struct uniphier_board_data *uniphier_get_board_param(void) 200323d1f9dSMasahiro Yamada { 201323d1f9dSMasahiro Yamada int i; 202323d1f9dSMasahiro Yamada 203323d1f9dSMasahiro Yamada for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) { 2046ba60fafSMasahiro Yamada if (!fdt_node_check_compatible(gd->fdt_blob, 0, 205323d1f9dSMasahiro Yamada uniphier_boards[i].compatible)) 206323d1f9dSMasahiro Yamada return uniphier_boards[i].param; 207323d1f9dSMasahiro Yamada } 208323d1f9dSMasahiro Yamada 209323d1f9dSMasahiro Yamada return NULL; 210323d1f9dSMasahiro Yamada } 211