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 15323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3) 16323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_sld3_data = { 17323d1f9dSMasahiro Yamada .dram_freq = 1600, 18*46abfcc9SMasahiro Yamada .dram_nr_ch = 3, 19*46abfcc9SMasahiro Yamada .dram_ch[0] = { 20*46abfcc9SMasahiro Yamada .base = 0x80000000, 21*46abfcc9SMasahiro Yamada .size = 0x20000000, 22*46abfcc9SMasahiro Yamada .width = 32, 23*46abfcc9SMasahiro Yamada }, 24*46abfcc9SMasahiro Yamada .dram_ch[1] = { 25*46abfcc9SMasahiro Yamada .base = 0xc0000000, 26*46abfcc9SMasahiro Yamada .size = 0x20000000, 27*46abfcc9SMasahiro Yamada .width = 16, 28*46abfcc9SMasahiro Yamada }, 29*46abfcc9SMasahiro Yamada .dram_ch[2] = { 30*46abfcc9SMasahiro Yamada .base = 0xc0000000, 31*46abfcc9SMasahiro Yamada .size = 0x10000000, 32*46abfcc9SMasahiro Yamada .width = 16, 33*46abfcc9SMasahiro Yamada }, 34323d1f9dSMasahiro Yamada }; 35323d1f9dSMasahiro Yamada #endif 36323d1f9dSMasahiro Yamada 37323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4) 38323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_ld4_data = { 39323d1f9dSMasahiro Yamada .dram_freq = 1600, 40*46abfcc9SMasahiro Yamada .dram_nr_ch = 2, 41*46abfcc9SMasahiro Yamada .dram_ch[0] = { 42*46abfcc9SMasahiro Yamada .base = 0x80000000, 43*46abfcc9SMasahiro Yamada .size = 0x10000000, 44*46abfcc9SMasahiro Yamada .width = 16, 45*46abfcc9SMasahiro Yamada }, 46*46abfcc9SMasahiro Yamada .dram_ch[1] = { 47*46abfcc9SMasahiro Yamada .base = 0x90000000, 48*46abfcc9SMasahiro Yamada .size = 0x10000000, 49*46abfcc9SMasahiro Yamada .width = 16, 50*46abfcc9SMasahiro Yamada }, 51323d1f9dSMasahiro Yamada }; 52323d1f9dSMasahiro Yamada #endif 53323d1f9dSMasahiro Yamada 54323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4) 553f231117SMasahiro Yamada /* 1GB RAM board */ 56323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_pro4_data = { 57323d1f9dSMasahiro Yamada .dram_freq = 1600, 58*46abfcc9SMasahiro Yamada .dram_nr_ch = 2, 59*46abfcc9SMasahiro Yamada .dram_ch[0] = { 60*46abfcc9SMasahiro Yamada .base = 0x80000000, 61*46abfcc9SMasahiro Yamada .size = 0x20000000, 62*46abfcc9SMasahiro Yamada .width = 32, 63*46abfcc9SMasahiro Yamada }, 64*46abfcc9SMasahiro Yamada .dram_ch[1] = { 65*46abfcc9SMasahiro Yamada .base = 0xa0000000, 66*46abfcc9SMasahiro Yamada .size = 0x20000000, 67*46abfcc9SMasahiro Yamada .width = 32, 68*46abfcc9SMasahiro Yamada }, 69323d1f9dSMasahiro Yamada }; 703f231117SMasahiro Yamada 713f231117SMasahiro Yamada /* 2GB RAM board */ 723f231117SMasahiro Yamada static const struct uniphier_board_data ph1_pro4_2g_data = { 733f231117SMasahiro Yamada .dram_freq = 1600, 74*46abfcc9SMasahiro Yamada .dram_nr_ch = 2, 75*46abfcc9SMasahiro Yamada .dram_ch[0] = { 76*46abfcc9SMasahiro Yamada .base = 0x80000000, 77*46abfcc9SMasahiro Yamada .size = 0x40000000, 78*46abfcc9SMasahiro Yamada .width = 32, 79*46abfcc9SMasahiro Yamada }, 80*46abfcc9SMasahiro Yamada .dram_ch[1] = { 81*46abfcc9SMasahiro Yamada .base = 0xc0000000, 82*46abfcc9SMasahiro Yamada .size = 0x40000000, 83*46abfcc9SMasahiro Yamada .width = 32, 84*46abfcc9SMasahiro Yamada }, 853f231117SMasahiro Yamada }; 86323d1f9dSMasahiro Yamada #endif 87323d1f9dSMasahiro Yamada 88323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8) 89323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_sld8_data = { 90323d1f9dSMasahiro Yamada .dram_freq = 1333, 91*46abfcc9SMasahiro Yamada .dram_nr_ch = 2, 92*46abfcc9SMasahiro Yamada .dram_ch[0] = { 93*46abfcc9SMasahiro Yamada .base = 0x80000000, 94*46abfcc9SMasahiro Yamada .size = 0x10000000, 95*46abfcc9SMasahiro Yamada .width = 16, 96*46abfcc9SMasahiro Yamada }, 97*46abfcc9SMasahiro Yamada .dram_ch[1] = { 98*46abfcc9SMasahiro Yamada .base = 0x90000000, 99*46abfcc9SMasahiro Yamada .size = 0x10000000, 100*46abfcc9SMasahiro Yamada .width = 16, 101*46abfcc9SMasahiro Yamada }, 102323d1f9dSMasahiro Yamada }; 103323d1f9dSMasahiro Yamada #endif 104323d1f9dSMasahiro Yamada 10528f40d4aSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5) 10628f40d4aSMasahiro Yamada static const struct uniphier_board_data ph1_pro5_data = { 10728f40d4aSMasahiro Yamada .dram_freq = 1866, 108*46abfcc9SMasahiro Yamada .dram_nr_ch = 2, 109*46abfcc9SMasahiro Yamada .dram_ch[0] = { 110*46abfcc9SMasahiro Yamada .base = 0x80000000, 111*46abfcc9SMasahiro Yamada .size = 0x20000000, 112*46abfcc9SMasahiro Yamada .width = 32, 113*46abfcc9SMasahiro Yamada }, 114*46abfcc9SMasahiro Yamada .dram_ch[1] = { 115*46abfcc9SMasahiro Yamada .base = 0xa0000000, 116*46abfcc9SMasahiro Yamada .size = 0x20000000, 117*46abfcc9SMasahiro Yamada .width = 32, 118*46abfcc9SMasahiro Yamada }, 11928f40d4aSMasahiro Yamada }; 12028f40d4aSMasahiro Yamada #endif 12128f40d4aSMasahiro Yamada 12289c05fa5SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) 123019df879SMasahiro Yamada static const struct uniphier_board_data proxstream2_data = { 12489c05fa5SMasahiro Yamada .dram_freq = 2133, 125*46abfcc9SMasahiro Yamada .dram_nr_ch = 3, 126*46abfcc9SMasahiro Yamada .dram_ch[0] = { 127*46abfcc9SMasahiro Yamada .base = 0x80000000, 128*46abfcc9SMasahiro Yamada .size = 0x40000000, 129*46abfcc9SMasahiro Yamada .width = 32, 130*46abfcc9SMasahiro Yamada }, 131*46abfcc9SMasahiro Yamada .dram_ch[1] = { 132*46abfcc9SMasahiro Yamada .base = 0xc0000000, 133*46abfcc9SMasahiro Yamada .size = 0x20000000, 134*46abfcc9SMasahiro Yamada .width = 32, 135*46abfcc9SMasahiro Yamada }, 136*46abfcc9SMasahiro Yamada .dram_ch[2] = { 137*46abfcc9SMasahiro Yamada .base = 0xe0000000, 138*46abfcc9SMasahiro Yamada .size = 0x20000000, 139*46abfcc9SMasahiro Yamada .width = 16, 140*46abfcc9SMasahiro Yamada }, 14189c05fa5SMasahiro Yamada }; 14289c05fa5SMasahiro Yamada #endif 14389c05fa5SMasahiro Yamada 14489c05fa5SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B) 14589c05fa5SMasahiro Yamada static const struct uniphier_board_data ph1_ld6b_data = { 146019df879SMasahiro Yamada .dram_freq = 1866, 147*46abfcc9SMasahiro Yamada .dram_nr_ch = 3, 148*46abfcc9SMasahiro Yamada .dram_ch[0] = { 149*46abfcc9SMasahiro Yamada .base = 0x80000000, 150*46abfcc9SMasahiro Yamada .size = 0x40000000, 151*46abfcc9SMasahiro Yamada .width = 32, 152*46abfcc9SMasahiro Yamada }, 153*46abfcc9SMasahiro Yamada .dram_ch[1] = { 154*46abfcc9SMasahiro Yamada .base = 0xc0000000, 155*46abfcc9SMasahiro Yamada .size = 0x20000000, 156*46abfcc9SMasahiro Yamada .width = 32, 157*46abfcc9SMasahiro Yamada }, 158*46abfcc9SMasahiro Yamada .dram_ch[2] = { 159*46abfcc9SMasahiro Yamada .base = 0xe0000000, 160*46abfcc9SMasahiro Yamada .size = 0x20000000, 161*46abfcc9SMasahiro Yamada .width = 16, 162*46abfcc9SMasahiro Yamada }, 163019df879SMasahiro Yamada }; 164019df879SMasahiro Yamada #endif 165019df879SMasahiro Yamada 166323d1f9dSMasahiro Yamada struct uniphier_board_id { 167323d1f9dSMasahiro Yamada const char *compatible; 168323d1f9dSMasahiro Yamada const struct uniphier_board_data *param; 169323d1f9dSMasahiro Yamada }; 170323d1f9dSMasahiro Yamada 171323d1f9dSMasahiro Yamada static const struct uniphier_board_id uniphier_boards[] = { 172323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3) 173323d1f9dSMasahiro Yamada { "socionext,ph1-sld3", &ph1_sld3_data, }, 174323d1f9dSMasahiro Yamada #endif 175323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4) 176323d1f9dSMasahiro Yamada { "socionext,ph1-ld4", &ph1_ld4_data, }, 177323d1f9dSMasahiro Yamada #endif 178323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4) 1793f231117SMasahiro Yamada { "socionext,ph1-pro4-ace", &ph1_pro4_2g_data, }, 1803f231117SMasahiro Yamada { "socionext,ph1-pro4-sanji", &ph1_pro4_2g_data, }, 181323d1f9dSMasahiro Yamada { "socionext,ph1-pro4", &ph1_pro4_data, }, 182323d1f9dSMasahiro Yamada #endif 183323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8) 184323d1f9dSMasahiro Yamada { "socionext,ph1-sld8", &ph1_sld8_data, }, 185323d1f9dSMasahiro Yamada #endif 18628f40d4aSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5) 18728f40d4aSMasahiro Yamada { "socionext,ph1-pro5", &ph1_pro5_data, }, 18828f40d4aSMasahiro Yamada #endif 189019df879SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) 190019df879SMasahiro Yamada { "socionext,proxstream2", &proxstream2_data, }, 191019df879SMasahiro Yamada #endif 192019df879SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B) 19389c05fa5SMasahiro Yamada { "socionext,ph1-ld6b", &ph1_ld6b_data, }, 194019df879SMasahiro Yamada #endif 195323d1f9dSMasahiro Yamada }; 196323d1f9dSMasahiro Yamada 1976ba60fafSMasahiro Yamada const struct uniphier_board_data *uniphier_get_board_param(void) 198323d1f9dSMasahiro Yamada { 199323d1f9dSMasahiro Yamada int i; 200323d1f9dSMasahiro Yamada 201323d1f9dSMasahiro Yamada for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) { 2026ba60fafSMasahiro Yamada if (!fdt_node_check_compatible(gd->fdt_blob, 0, 203323d1f9dSMasahiro Yamada uniphier_boards[i].compatible)) 204323d1f9dSMasahiro Yamada return uniphier_boards[i].param; 205323d1f9dSMasahiro Yamada } 206323d1f9dSMasahiro Yamada 207323d1f9dSMasahiro Yamada return NULL; 208323d1f9dSMasahiro Yamada } 209