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> 10323d1f9dSMasahiro Yamada #include <mach/init.h> 11323d1f9dSMasahiro Yamada 126ba60fafSMasahiro Yamada DECLARE_GLOBAL_DATA_PTR; 136ba60fafSMasahiro Yamada 14323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3) 15323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_sld3_data = { 16323d1f9dSMasahiro Yamada .dram_ch0_base = 0x80000000, 17323d1f9dSMasahiro Yamada .dram_ch0_size = 0x20000000, 18323d1f9dSMasahiro Yamada .dram_ch0_width = 32, 19323d1f9dSMasahiro Yamada .dram_ch1_base = 0xc0000000, 20323d1f9dSMasahiro Yamada .dram_ch1_size = 0x20000000, 21323d1f9dSMasahiro Yamada .dram_ch1_width = 16, 22323d1f9dSMasahiro Yamada .dram_ch2_base = 0xc0000000, 23323d1f9dSMasahiro Yamada .dram_ch2_size = 0x10000000, 24323d1f9dSMasahiro Yamada .dram_ch2_width = 16, 25323d1f9dSMasahiro Yamada .dram_freq = 1600, 26323d1f9dSMasahiro Yamada }; 27323d1f9dSMasahiro Yamada #endif 28323d1f9dSMasahiro Yamada 29323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4) 30323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_ld4_data = { 31323d1f9dSMasahiro Yamada .dram_ch0_base = 0x80000000, 32323d1f9dSMasahiro Yamada .dram_ch0_size = 0x10000000, 33323d1f9dSMasahiro Yamada .dram_ch0_width = 16, 34323d1f9dSMasahiro Yamada .dram_ch1_base = 0x90000000, 35323d1f9dSMasahiro Yamada .dram_ch1_size = 0x10000000, 36323d1f9dSMasahiro Yamada .dram_ch1_width = 16, 37323d1f9dSMasahiro Yamada .dram_freq = 1600, 38323d1f9dSMasahiro Yamada }; 39323d1f9dSMasahiro Yamada #endif 40323d1f9dSMasahiro Yamada 41323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4) 42323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_pro4_data = { 43323d1f9dSMasahiro Yamada .dram_ch0_base = 0x80000000, 44323d1f9dSMasahiro Yamada .dram_ch0_size = 0x20000000, 45323d1f9dSMasahiro Yamada .dram_ch0_width = 32, 46323d1f9dSMasahiro Yamada .dram_ch1_base = 0xa0000000, 47323d1f9dSMasahiro Yamada .dram_ch1_size = 0x20000000, 48323d1f9dSMasahiro Yamada .dram_ch1_width = 32, 49323d1f9dSMasahiro Yamada .dram_freq = 1600, 50323d1f9dSMasahiro Yamada }; 51323d1f9dSMasahiro Yamada #endif 52323d1f9dSMasahiro Yamada 53323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8) 54323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_sld8_data = { 55323d1f9dSMasahiro Yamada .dram_ch0_base = 0x80000000, 56323d1f9dSMasahiro Yamada .dram_ch0_size = 0x10000000, 57323d1f9dSMasahiro Yamada .dram_ch0_width = 16, 58323d1f9dSMasahiro Yamada .dram_ch1_base = 0x90000000, 59323d1f9dSMasahiro Yamada .dram_ch1_size = 0x10000000, 60323d1f9dSMasahiro Yamada .dram_ch1_width = 16, 61323d1f9dSMasahiro Yamada .dram_freq = 1333, 62323d1f9dSMasahiro Yamada }; 63323d1f9dSMasahiro Yamada #endif 64323d1f9dSMasahiro Yamada 6528f40d4aSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5) 6628f40d4aSMasahiro Yamada static const struct uniphier_board_data ph1_pro5_data = { 6728f40d4aSMasahiro Yamada .dram_ch0_base = 0x80000000, 6828f40d4aSMasahiro Yamada .dram_ch0_size = 0x20000000, 6928f40d4aSMasahiro Yamada .dram_ch0_width = 32, 7028f40d4aSMasahiro Yamada .dram_ch1_base = 0xa0000000, 7128f40d4aSMasahiro Yamada .dram_ch1_size = 0x20000000, 7228f40d4aSMasahiro Yamada .dram_ch1_width = 32, 7328f40d4aSMasahiro Yamada .dram_freq = 1866, 7428f40d4aSMasahiro Yamada }; 7528f40d4aSMasahiro Yamada #endif 7628f40d4aSMasahiro Yamada 77*89c05fa5SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) 78019df879SMasahiro Yamada static const struct uniphier_board_data proxstream2_data = { 79019df879SMasahiro Yamada .dram_ch0_base = 0x80000000, 80019df879SMasahiro Yamada .dram_ch0_size = 0x40000000, 81019df879SMasahiro Yamada .dram_ch0_width = 32, 82019df879SMasahiro Yamada .dram_ch1_base = 0xc0000000, 83019df879SMasahiro Yamada .dram_ch1_size = 0x20000000, 84019df879SMasahiro Yamada .dram_ch1_width = 32, 85019df879SMasahiro Yamada .dram_ch2_base = 0xe0000000, 86019df879SMasahiro Yamada .dram_ch2_size = 0x20000000, 87019df879SMasahiro Yamada .dram_ch2_width = 16, 88*89c05fa5SMasahiro Yamada .dram_freq = 2133, 89*89c05fa5SMasahiro Yamada }; 90*89c05fa5SMasahiro Yamada #endif 91*89c05fa5SMasahiro Yamada 92*89c05fa5SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B) 93*89c05fa5SMasahiro Yamada static const struct uniphier_board_data ph1_ld6b_data = { 94*89c05fa5SMasahiro Yamada .dram_ch0_base = 0x80000000, 95*89c05fa5SMasahiro Yamada .dram_ch0_size = 0x40000000, 96*89c05fa5SMasahiro Yamada .dram_ch0_width = 32, 97*89c05fa5SMasahiro Yamada .dram_ch1_base = 0xc0000000, 98*89c05fa5SMasahiro Yamada .dram_ch1_size = 0x20000000, 99*89c05fa5SMasahiro Yamada .dram_ch1_width = 32, 100*89c05fa5SMasahiro Yamada .dram_ch2_base = 0xe0000000, 101*89c05fa5SMasahiro Yamada .dram_ch2_size = 0x20000000, 102*89c05fa5SMasahiro Yamada .dram_ch2_width = 16, 103019df879SMasahiro Yamada .dram_freq = 1866, 104019df879SMasahiro Yamada }; 105019df879SMasahiro Yamada #endif 106019df879SMasahiro Yamada 107323d1f9dSMasahiro Yamada struct uniphier_board_id { 108323d1f9dSMasahiro Yamada const char *compatible; 109323d1f9dSMasahiro Yamada const struct uniphier_board_data *param; 110323d1f9dSMasahiro Yamada }; 111323d1f9dSMasahiro Yamada 112323d1f9dSMasahiro Yamada static const struct uniphier_board_id uniphier_boards[] = { 113323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3) 114323d1f9dSMasahiro Yamada { "socionext,ph1-sld3", &ph1_sld3_data, }, 115323d1f9dSMasahiro Yamada #endif 116323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4) 117323d1f9dSMasahiro Yamada { "socionext,ph1-ld4", &ph1_ld4_data, }, 118323d1f9dSMasahiro Yamada #endif 119323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4) 120323d1f9dSMasahiro Yamada { "socionext,ph1-pro4", &ph1_pro4_data, }, 121323d1f9dSMasahiro Yamada #endif 122323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8) 123323d1f9dSMasahiro Yamada { "socionext,ph1-sld8", &ph1_sld8_data, }, 124323d1f9dSMasahiro Yamada #endif 12528f40d4aSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5) 12628f40d4aSMasahiro Yamada { "socionext,ph1-pro5", &ph1_pro5_data, }, 12728f40d4aSMasahiro Yamada #endif 128019df879SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) 129019df879SMasahiro Yamada { "socionext,proxstream2", &proxstream2_data, }, 130019df879SMasahiro Yamada #endif 131019df879SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B) 132*89c05fa5SMasahiro Yamada { "socionext,ph1-ld6b", &ph1_ld6b_data, }, 133019df879SMasahiro Yamada #endif 134323d1f9dSMasahiro Yamada }; 135323d1f9dSMasahiro Yamada 1366ba60fafSMasahiro Yamada const struct uniphier_board_data *uniphier_get_board_param(void) 137323d1f9dSMasahiro Yamada { 138323d1f9dSMasahiro Yamada int i; 139323d1f9dSMasahiro Yamada 140323d1f9dSMasahiro Yamada for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) { 1416ba60fafSMasahiro Yamada if (!fdt_node_check_compatible(gd->fdt_blob, 0, 142323d1f9dSMasahiro Yamada uniphier_boards[i].compatible)) 143323d1f9dSMasahiro Yamada return uniphier_boards[i].param; 144323d1f9dSMasahiro Yamada } 145323d1f9dSMasahiro Yamada 146323d1f9dSMasahiro Yamada return NULL; 147323d1f9dSMasahiro Yamada } 148