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 7323d1f9dSMasahiro Yamada #include <libfdt.h> 8323d1f9dSMasahiro Yamada #include <linux/kernel.h> 9323d1f9dSMasahiro Yamada #include <mach/init.h> 10323d1f9dSMasahiro Yamada 11323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3) 12323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_sld3_data = { 13323d1f9dSMasahiro Yamada .dram_ch0_base = 0x80000000, 14323d1f9dSMasahiro Yamada .dram_ch0_size = 0x20000000, 15323d1f9dSMasahiro Yamada .dram_ch0_width = 32, 16323d1f9dSMasahiro Yamada .dram_ch1_base = 0xc0000000, 17323d1f9dSMasahiro Yamada .dram_ch1_size = 0x20000000, 18323d1f9dSMasahiro Yamada .dram_ch1_width = 16, 19323d1f9dSMasahiro Yamada .dram_ch2_base = 0xc0000000, 20323d1f9dSMasahiro Yamada .dram_ch2_size = 0x10000000, 21323d1f9dSMasahiro Yamada .dram_ch2_width = 16, 22323d1f9dSMasahiro Yamada .dram_freq = 1600, 23323d1f9dSMasahiro Yamada }; 24323d1f9dSMasahiro Yamada #endif 25323d1f9dSMasahiro Yamada 26323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4) 27323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_ld4_data = { 28323d1f9dSMasahiro Yamada .dram_ch0_base = 0x80000000, 29323d1f9dSMasahiro Yamada .dram_ch0_size = 0x10000000, 30323d1f9dSMasahiro Yamada .dram_ch0_width = 16, 31323d1f9dSMasahiro Yamada .dram_ch1_base = 0x90000000, 32323d1f9dSMasahiro Yamada .dram_ch1_size = 0x10000000, 33323d1f9dSMasahiro Yamada .dram_ch1_width = 16, 34323d1f9dSMasahiro Yamada .dram_freq = 1600, 35323d1f9dSMasahiro Yamada }; 36323d1f9dSMasahiro Yamada #endif 37323d1f9dSMasahiro Yamada 38323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4) 39323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_pro4_data = { 40323d1f9dSMasahiro Yamada .dram_ch0_base = 0x80000000, 41323d1f9dSMasahiro Yamada .dram_ch0_size = 0x20000000, 42323d1f9dSMasahiro Yamada .dram_ch0_width = 32, 43323d1f9dSMasahiro Yamada .dram_ch1_base = 0xa0000000, 44323d1f9dSMasahiro Yamada .dram_ch1_size = 0x20000000, 45323d1f9dSMasahiro Yamada .dram_ch1_width = 32, 46323d1f9dSMasahiro Yamada .dram_freq = 1600, 47323d1f9dSMasahiro Yamada }; 48323d1f9dSMasahiro Yamada #endif 49323d1f9dSMasahiro Yamada 50323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8) 51323d1f9dSMasahiro Yamada static const struct uniphier_board_data ph1_sld8_data = { 52323d1f9dSMasahiro Yamada .dram_ch0_base = 0x80000000, 53323d1f9dSMasahiro Yamada .dram_ch0_size = 0x10000000, 54323d1f9dSMasahiro Yamada .dram_ch0_width = 16, 55323d1f9dSMasahiro Yamada .dram_ch1_base = 0x90000000, 56323d1f9dSMasahiro Yamada .dram_ch1_size = 0x10000000, 57323d1f9dSMasahiro Yamada .dram_ch1_width = 16, 58323d1f9dSMasahiro Yamada .dram_freq = 1333, 59323d1f9dSMasahiro Yamada }; 60323d1f9dSMasahiro Yamada #endif 61323d1f9dSMasahiro Yamada 6228f40d4aSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5) 6328f40d4aSMasahiro Yamada static const struct uniphier_board_data ph1_pro5_data = { 6428f40d4aSMasahiro Yamada .dram_ch0_base = 0x80000000, 6528f40d4aSMasahiro Yamada .dram_ch0_size = 0x20000000, 6628f40d4aSMasahiro Yamada .dram_ch0_width = 32, 6728f40d4aSMasahiro Yamada .dram_ch1_base = 0xa0000000, 6828f40d4aSMasahiro Yamada .dram_ch1_size = 0x20000000, 6928f40d4aSMasahiro Yamada .dram_ch1_width = 32, 7028f40d4aSMasahiro Yamada .dram_freq = 1866, 7128f40d4aSMasahiro Yamada }; 7228f40d4aSMasahiro Yamada #endif 7328f40d4aSMasahiro Yamada 74*019df879SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) || \ 75*019df879SMasahiro Yamada defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B) 76*019df879SMasahiro Yamada static const struct uniphier_board_data proxstream2_data = { 77*019df879SMasahiro Yamada .dram_ch0_base = 0x80000000, 78*019df879SMasahiro Yamada .dram_ch0_size = 0x40000000, 79*019df879SMasahiro Yamada .dram_ch0_width = 32, 80*019df879SMasahiro Yamada .dram_ch1_base = 0xc0000000, 81*019df879SMasahiro Yamada .dram_ch1_size = 0x20000000, 82*019df879SMasahiro Yamada .dram_ch1_width = 32, 83*019df879SMasahiro Yamada .dram_ch2_base = 0xe0000000, 84*019df879SMasahiro Yamada .dram_ch2_size = 0x20000000, 85*019df879SMasahiro Yamada .dram_ch2_width = 16, 86*019df879SMasahiro Yamada .dram_freq = 1866, 87*019df879SMasahiro Yamada }; 88*019df879SMasahiro Yamada #endif 89*019df879SMasahiro Yamada 90323d1f9dSMasahiro Yamada struct uniphier_board_id { 91323d1f9dSMasahiro Yamada const char *compatible; 92323d1f9dSMasahiro Yamada const struct uniphier_board_data *param; 93323d1f9dSMasahiro Yamada }; 94323d1f9dSMasahiro Yamada 95323d1f9dSMasahiro Yamada static const struct uniphier_board_id uniphier_boards[] = { 96323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD3) 97323d1f9dSMasahiro Yamada { "socionext,ph1-sld3", &ph1_sld3_data, }, 98323d1f9dSMasahiro Yamada #endif 99323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD4) 100323d1f9dSMasahiro Yamada { "socionext,ph1-ld4", &ph1_ld4_data, }, 101323d1f9dSMasahiro Yamada #endif 102323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO4) 103323d1f9dSMasahiro Yamada { "socionext,ph1-pro4", &ph1_pro4_data, }, 104323d1f9dSMasahiro Yamada #endif 105323d1f9dSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_SLD8) 106323d1f9dSMasahiro Yamada { "socionext,ph1-sld8", &ph1_sld8_data, }, 107323d1f9dSMasahiro Yamada #endif 10828f40d4aSMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_PRO5) 10928f40d4aSMasahiro Yamada { "socionext,ph1-pro5", &ph1_pro5_data, }, 11028f40d4aSMasahiro Yamada #endif 111*019df879SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PROXSTREAM2) 112*019df879SMasahiro Yamada { "socionext,proxstream2", &proxstream2_data, }, 113*019df879SMasahiro Yamada #endif 114*019df879SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PH1_LD6B) 115*019df879SMasahiro Yamada { "socionext,ph1-ld6b", &proxstream2_data, }, 116*019df879SMasahiro Yamada #endif 117323d1f9dSMasahiro Yamada }; 118323d1f9dSMasahiro Yamada 119323d1f9dSMasahiro Yamada const struct uniphier_board_data *uniphier_get_board_param(const void *fdt) 120323d1f9dSMasahiro Yamada { 121323d1f9dSMasahiro Yamada int i; 122323d1f9dSMasahiro Yamada 123323d1f9dSMasahiro Yamada for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) { 124323d1f9dSMasahiro Yamada if (!fdt_node_check_compatible(fdt, 0, 125323d1f9dSMasahiro Yamada uniphier_boards[i].compatible)) 126323d1f9dSMasahiro Yamada return uniphier_boards[i].param; 127323d1f9dSMasahiro Yamada } 128323d1f9dSMasahiro Yamada 129323d1f9dSMasahiro Yamada return NULL; 130323d1f9dSMasahiro Yamada } 131