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> 9*b08c8c48SMasahiro Yamada #include <linux/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_LD4) 175b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_ld4_data = { 18323d1f9dSMasahiro Yamada .dram_freq = 1600, 1946abfcc9SMasahiro Yamada .dram_ch[0] = { 2046abfcc9SMasahiro Yamada .size = 0x10000000, 2146abfcc9SMasahiro Yamada .width = 16, 2246abfcc9SMasahiro Yamada }, 2346abfcc9SMasahiro Yamada .dram_ch[1] = { 2446abfcc9SMasahiro Yamada .size = 0x10000000, 2546abfcc9SMasahiro Yamada .width = 16, 2646abfcc9SMasahiro Yamada }, 27a74c28a0SMasahiro Yamada .flags = UNIPHIER_BD_DDR3PLUS, 28323d1f9dSMasahiro Yamada }; 29323d1f9dSMasahiro Yamada #endif 30323d1f9dSMasahiro Yamada 31ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO4) 323f231117SMasahiro Yamada /* 1GB RAM board */ 335b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_pro4_data = { 34323d1f9dSMasahiro Yamada .dram_freq = 1600, 3546abfcc9SMasahiro Yamada .dram_ch[0] = { 3646abfcc9SMasahiro Yamada .size = 0x20000000, 3746abfcc9SMasahiro Yamada .width = 32, 3846abfcc9SMasahiro Yamada }, 3946abfcc9SMasahiro Yamada .dram_ch[1] = { 4046abfcc9SMasahiro Yamada .size = 0x20000000, 4146abfcc9SMasahiro Yamada .width = 32, 4246abfcc9SMasahiro Yamada }, 43323d1f9dSMasahiro Yamada }; 443f231117SMasahiro Yamada 453f231117SMasahiro Yamada /* 2GB RAM board */ 465b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_pro4_2g_data = { 473f231117SMasahiro Yamada .dram_freq = 1600, 4846abfcc9SMasahiro Yamada .dram_ch[0] = { 4946abfcc9SMasahiro Yamada .size = 0x40000000, 5046abfcc9SMasahiro Yamada .width = 32, 5146abfcc9SMasahiro Yamada }, 5246abfcc9SMasahiro Yamada .dram_ch[1] = { 5346abfcc9SMasahiro Yamada .size = 0x40000000, 5446abfcc9SMasahiro Yamada .width = 32, 5546abfcc9SMasahiro Yamada }, 563f231117SMasahiro Yamada }; 57323d1f9dSMasahiro Yamada #endif 58323d1f9dSMasahiro Yamada 59ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD8) 605b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_sld8_data = { 61323d1f9dSMasahiro Yamada .dram_freq = 1333, 6246abfcc9SMasahiro Yamada .dram_ch[0] = { 6346abfcc9SMasahiro Yamada .size = 0x10000000, 6446abfcc9SMasahiro Yamada .width = 16, 6546abfcc9SMasahiro Yamada }, 6646abfcc9SMasahiro Yamada .dram_ch[1] = { 6746abfcc9SMasahiro Yamada .size = 0x10000000, 6846abfcc9SMasahiro Yamada .width = 16, 6946abfcc9SMasahiro Yamada }, 70a74c28a0SMasahiro Yamada .flags = UNIPHIER_BD_DDR3PLUS, 71323d1f9dSMasahiro Yamada }; 72323d1f9dSMasahiro Yamada #endif 73323d1f9dSMasahiro Yamada 74ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO5) 755b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_pro5_data = { 7628f40d4aSMasahiro Yamada .dram_freq = 1866, 7746abfcc9SMasahiro Yamada .dram_ch[0] = { 7846abfcc9SMasahiro Yamada .size = 0x20000000, 7946abfcc9SMasahiro Yamada .width = 32, 8046abfcc9SMasahiro Yamada }, 8146abfcc9SMasahiro Yamada .dram_ch[1] = { 8246abfcc9SMasahiro Yamada .size = 0x20000000, 8346abfcc9SMasahiro Yamada .width = 32, 8446abfcc9SMasahiro Yamada }, 8528f40d4aSMasahiro Yamada }; 8628f40d4aSMasahiro Yamada #endif 8728f40d4aSMasahiro Yamada 88ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PXS2) 895b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_pxs2_data = { 9089c05fa5SMasahiro Yamada .dram_freq = 2133, 9146abfcc9SMasahiro Yamada .dram_ch[0] = { 9246abfcc9SMasahiro Yamada .size = 0x40000000, 9346abfcc9SMasahiro Yamada .width = 32, 9446abfcc9SMasahiro Yamada }, 9546abfcc9SMasahiro Yamada .dram_ch[1] = { 9646abfcc9SMasahiro Yamada .size = 0x20000000, 9746abfcc9SMasahiro Yamada .width = 32, 9846abfcc9SMasahiro Yamada }, 9946abfcc9SMasahiro Yamada .dram_ch[2] = { 10046abfcc9SMasahiro Yamada .size = 0x20000000, 10146abfcc9SMasahiro Yamada .width = 16, 10246abfcc9SMasahiro Yamada }, 10389c05fa5SMasahiro Yamada }; 10489c05fa5SMasahiro Yamada #endif 10589c05fa5SMasahiro Yamada 106ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD6B) 1075b660066SMasahiro Yamada static const struct uniphier_board_data uniphier_ld6b_data = { 108019df879SMasahiro Yamada .dram_freq = 1866, 10946abfcc9SMasahiro Yamada .dram_ch[0] = { 11046abfcc9SMasahiro Yamada .size = 0x40000000, 11146abfcc9SMasahiro Yamada .width = 32, 11246abfcc9SMasahiro Yamada }, 11346abfcc9SMasahiro Yamada .dram_ch[1] = { 11446abfcc9SMasahiro Yamada .size = 0x20000000, 11546abfcc9SMasahiro Yamada .width = 32, 11646abfcc9SMasahiro Yamada }, 11746abfcc9SMasahiro Yamada .dram_ch[2] = { 11846abfcc9SMasahiro Yamada .size = 0x20000000, 11946abfcc9SMasahiro Yamada .width = 16, 12046abfcc9SMasahiro Yamada }, 121019df879SMasahiro Yamada }; 122019df879SMasahiro Yamada #endif 123019df879SMasahiro Yamada 124323d1f9dSMasahiro Yamada struct uniphier_board_id { 125323d1f9dSMasahiro Yamada const char *compatible; 126323d1f9dSMasahiro Yamada const struct uniphier_board_data *param; 127323d1f9dSMasahiro Yamada }; 128323d1f9dSMasahiro Yamada 129323d1f9dSMasahiro Yamada static const struct uniphier_board_id uniphier_boards[] = { 130ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD4) 13152159d27SMasahiro Yamada { "socionext,uniphier-ld4", &uniphier_ld4_data, }, 132323d1f9dSMasahiro Yamada #endif 133ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO4) 13452159d27SMasahiro Yamada { "socionext,uniphier-pro4-ace", &uniphier_pro4_2g_data, }, 13552159d27SMasahiro Yamada { "socionext,uniphier-pro4-sanji", &uniphier_pro4_2g_data, }, 13652159d27SMasahiro Yamada { "socionext,uniphier-pro4", &uniphier_pro4_data, }, 137323d1f9dSMasahiro Yamada #endif 138ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_SLD8) 13952159d27SMasahiro Yamada { "socionext,uniphier-sld8", &uniphier_sld8_data, }, 140323d1f9dSMasahiro Yamada #endif 141ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PRO5) 14252159d27SMasahiro Yamada { "socionext,uniphier-pro5", &uniphier_pro5_data, }, 14328f40d4aSMasahiro Yamada #endif 144ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_PXS2) 14552159d27SMasahiro Yamada { "socionext,uniphier-pxs2", &uniphier_pxs2_data, }, 146019df879SMasahiro Yamada #endif 147ea65c980SMasahiro Yamada #if defined(CONFIG_ARCH_UNIPHIER_LD6B) 14852159d27SMasahiro Yamada { "socionext,uniphier-ld6b", &uniphier_ld6b_data, }, 149019df879SMasahiro Yamada #endif 150323d1f9dSMasahiro Yamada }; 151323d1f9dSMasahiro Yamada 1526ba60fafSMasahiro Yamada const struct uniphier_board_data *uniphier_get_board_param(void) 153323d1f9dSMasahiro Yamada { 154323d1f9dSMasahiro Yamada int i; 155323d1f9dSMasahiro Yamada 156323d1f9dSMasahiro Yamada for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) { 1576ba60fafSMasahiro Yamada if (!fdt_node_check_compatible(gd->fdt_blob, 0, 158323d1f9dSMasahiro Yamada uniphier_boards[i].compatible)) 159323d1f9dSMasahiro Yamada return uniphier_boards[i].param; 160323d1f9dSMasahiro Yamada } 161323d1f9dSMasahiro Yamada 162323d1f9dSMasahiro Yamada return NULL; 163323d1f9dSMasahiro Yamada } 164