boards.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Copyright (C) 2015-2016 Socionext Inc.
  4. * Author: Masahiro Yamada <yamada.masahiro@socionext.com>
  5. */
  6. #include <common.h>
  7. #include <linux/libfdt.h>
  8. #include <linux/kernel.h>
  9. #include "init.h"
  10. DECLARE_GLOBAL_DATA_PTR;
  11. #if defined(CONFIG_ARCH_UNIPHIER_LD4)
  12. static const struct uniphier_board_data uniphier_ld4_data = {
  13. .dram_freq = 1600,
  14. .dram_ch[0] = {
  15. .size = 0x10000000,
  16. .width = 16,
  17. },
  18. .dram_ch[1] = {
  19. .size = 0x10000000,
  20. .width = 16,
  21. },
  22. .flags = UNIPHIER_BD_DDR3PLUS,
  23. };
  24. #endif
  25. #if defined(CONFIG_ARCH_UNIPHIER_PRO4)
  26. /* 1GB RAM board */
  27. static const struct uniphier_board_data uniphier_pro4_data = {
  28. .dram_freq = 1600,
  29. .dram_ch[0] = {
  30. .size = 0x20000000,
  31. .width = 32,
  32. },
  33. .dram_ch[1] = {
  34. .size = 0x20000000,
  35. .width = 32,
  36. },
  37. };
  38. /* 2GB RAM board */
  39. static const struct uniphier_board_data uniphier_pro4_2g_data = {
  40. .dram_freq = 1600,
  41. .dram_ch[0] = {
  42. .size = 0x40000000,
  43. .width = 32,
  44. },
  45. .dram_ch[1] = {
  46. .size = 0x40000000,
  47. .width = 32,
  48. },
  49. };
  50. #endif
  51. #if defined(CONFIG_ARCH_UNIPHIER_SLD8)
  52. static const struct uniphier_board_data uniphier_sld8_data = {
  53. .dram_freq = 1333,
  54. .dram_ch[0] = {
  55. .size = 0x10000000,
  56. .width = 16,
  57. },
  58. .dram_ch[1] = {
  59. .size = 0x10000000,
  60. .width = 16,
  61. },
  62. .flags = UNIPHIER_BD_DDR3PLUS,
  63. };
  64. #endif
  65. #if defined(CONFIG_ARCH_UNIPHIER_PRO5)
  66. static const struct uniphier_board_data uniphier_pro5_data = {
  67. .dram_freq = 1866,
  68. .dram_ch[0] = {
  69. .size = 0x20000000,
  70. .width = 32,
  71. },
  72. .dram_ch[1] = {
  73. .size = 0x20000000,
  74. .width = 32,
  75. },
  76. };
  77. #endif
  78. #if defined(CONFIG_ARCH_UNIPHIER_PXS2)
  79. static const struct uniphier_board_data uniphier_pxs2_data = {
  80. .dram_freq = 2133,
  81. .dram_ch[0] = {
  82. .size = 0x40000000,
  83. .width = 32,
  84. },
  85. .dram_ch[1] = {
  86. .size = 0x20000000,
  87. .width = 32,
  88. },
  89. .dram_ch[2] = {
  90. .size = 0x20000000,
  91. .width = 16,
  92. },
  93. };
  94. #endif
  95. #if defined(CONFIG_ARCH_UNIPHIER_LD6B)
  96. static const struct uniphier_board_data uniphier_ld6b_data = {
  97. .dram_freq = 1866,
  98. .dram_ch[0] = {
  99. .size = 0x40000000,
  100. .width = 32,
  101. },
  102. .dram_ch[1] = {
  103. .size = 0x20000000,
  104. .width = 32,
  105. },
  106. .dram_ch[2] = {
  107. .size = 0x20000000,
  108. .width = 16,
  109. },
  110. };
  111. #endif
  112. struct uniphier_board_id {
  113. const char *compatible;
  114. const struct uniphier_board_data *param;
  115. };
  116. static const struct uniphier_board_id uniphier_boards[] = {
  117. #if defined(CONFIG_ARCH_UNIPHIER_LD4)
  118. { "socionext,uniphier-ld4", &uniphier_ld4_data, },
  119. #endif
  120. #if defined(CONFIG_ARCH_UNIPHIER_PRO4)
  121. { "socionext,uniphier-pro4-ace", &uniphier_pro4_2g_data, },
  122. { "socionext,uniphier-pro4-sanji", &uniphier_pro4_2g_data, },
  123. { "socionext,uniphier-pro4", &uniphier_pro4_data, },
  124. #endif
  125. #if defined(CONFIG_ARCH_UNIPHIER_SLD8)
  126. { "socionext,uniphier-sld8", &uniphier_sld8_data, },
  127. #endif
  128. #if defined(CONFIG_ARCH_UNIPHIER_PRO5)
  129. { "socionext,uniphier-pro5", &uniphier_pro5_data, },
  130. #endif
  131. #if defined(CONFIG_ARCH_UNIPHIER_PXS2)
  132. { "socionext,uniphier-pxs2", &uniphier_pxs2_data, },
  133. #endif
  134. #if defined(CONFIG_ARCH_UNIPHIER_LD6B)
  135. { "socionext,uniphier-ld6b", &uniphier_ld6b_data, },
  136. #endif
  137. };
  138. const struct uniphier_board_data *uniphier_get_board_param(void)
  139. {
  140. int i;
  141. for (i = 0; i < ARRAY_SIZE(uniphier_boards); i++) {
  142. if (!fdt_node_check_compatible(gd->fdt_blob, 0,
  143. uniphier_boards[i].compatible))
  144. return uniphier_boards[i].param;
  145. }
  146. return NULL;
  147. }