board_k2e.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * K2E EVM : Board initialization
  4. *
  5. * (C) Copyright 2014
  6. * Texas Instruments Incorporated, <www.ti.com>
  7. */
  8. #include <common.h>
  9. #include <asm/arch/ddr3.h>
  10. #include <asm/arch/hardware.h>
  11. #include <asm/ti-common/keystone_net.h>
  12. unsigned int get_external_clk(u32 clk)
  13. {
  14. unsigned int clk_freq;
  15. switch (clk) {
  16. case sys_clk:
  17. clk_freq = 100000000;
  18. break;
  19. case alt_core_clk:
  20. clk_freq = 100000000;
  21. break;
  22. case pa_clk:
  23. clk_freq = 100000000;
  24. break;
  25. case ddr3a_clk:
  26. clk_freq = 100000000;
  27. break;
  28. default:
  29. clk_freq = 0;
  30. break;
  31. }
  32. return clk_freq;
  33. }
  34. static struct pll_init_data core_pll_config[NUM_SPDS] = {
  35. [SPD800] = CORE_PLL_800,
  36. [SPD850] = CORE_PLL_850,
  37. [SPD1000] = CORE_PLL_1000,
  38. [SPD1250] = CORE_PLL_1250,
  39. [SPD1350] = CORE_PLL_1350,
  40. [SPD1400] = CORE_PLL_1400,
  41. [SPD1500] = CORE_PLL_1500,
  42. };
  43. /* DEV and ARM speed definitions as specified in DEVSPEED register */
  44. int speeds[DEVSPEED_NUMSPDS] = {
  45. SPD850,
  46. SPD1000,
  47. SPD1250,
  48. SPD1350,
  49. SPD1400,
  50. SPD1500,
  51. SPD1400,
  52. SPD1350,
  53. SPD1250,
  54. SPD1000,
  55. SPD850,
  56. SPD800,
  57. };
  58. s16 divn_val[16] = {
  59. 0, 0, 1, 4, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
  60. };
  61. static struct pll_init_data pa_pll_config =
  62. PASS_PLL_1000;
  63. struct pll_init_data *get_pll_init_data(int pll)
  64. {
  65. int speed;
  66. struct pll_init_data *data;
  67. switch (pll) {
  68. case MAIN_PLL:
  69. speed = get_max_dev_speed(speeds);
  70. data = &core_pll_config[speed];
  71. break;
  72. case PASS_PLL:
  73. data = &pa_pll_config;
  74. break;
  75. default:
  76. data = NULL;
  77. }
  78. return data;
  79. }
  80. #ifdef CONFIG_DRIVER_TI_KEYSTONE_NET
  81. struct eth_priv_t eth_priv_cfg[] = {
  82. {
  83. .int_name = "K2E_EMAC0",
  84. .rx_flow = 0,
  85. .phy_addr = 0,
  86. .slave_port = 1,
  87. .sgmii_link_type = SGMII_LINK_MAC_PHY,
  88. .phy_if = PHY_INTERFACE_MODE_SGMII,
  89. },
  90. {
  91. .int_name = "K2E_EMAC1",
  92. .rx_flow = 8,
  93. .phy_addr = 1,
  94. .slave_port = 2,
  95. .sgmii_link_type = SGMII_LINK_MAC_PHY,
  96. .phy_if = PHY_INTERFACE_MODE_SGMII,
  97. },
  98. {
  99. .int_name = "K2E_EMAC2",
  100. .rx_flow = 16,
  101. .phy_addr = 2,
  102. .slave_port = 3,
  103. .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
  104. .phy_if = PHY_INTERFACE_MODE_SGMII,
  105. },
  106. {
  107. .int_name = "K2E_EMAC3",
  108. .rx_flow = 24,
  109. .phy_addr = 3,
  110. .slave_port = 4,
  111. .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
  112. .phy_if = PHY_INTERFACE_MODE_SGMII,
  113. },
  114. {
  115. .int_name = "K2E_EMAC4",
  116. .rx_flow = 32,
  117. .phy_addr = 4,
  118. .slave_port = 5,
  119. .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
  120. .phy_if = PHY_INTERFACE_MODE_SGMII,
  121. },
  122. {
  123. .int_name = "K2E_EMAC5",
  124. .rx_flow = 40,
  125. .phy_addr = 5,
  126. .slave_port = 6,
  127. .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
  128. .phy_if = PHY_INTERFACE_MODE_SGMII,
  129. },
  130. {
  131. .int_name = "K2E_EMAC6",
  132. .rx_flow = 48,
  133. .phy_addr = 6,
  134. .slave_port = 7,
  135. .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
  136. .phy_if = PHY_INTERFACE_MODE_SGMII,
  137. },
  138. {
  139. .int_name = "K2E_EMAC7",
  140. .rx_flow = 56,
  141. .phy_addr = 7,
  142. .slave_port = 8,
  143. .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
  144. .phy_if = PHY_INTERFACE_MODE_SGMII,
  145. },
  146. };
  147. int get_num_eth_ports(void)
  148. {
  149. return sizeof(eth_priv_cfg) / sizeof(struct eth_priv_t);
  150. }
  151. #endif
  152. #if defined(CONFIG_MULTI_DTB_FIT)
  153. int board_fit_config_name_match(const char *name)
  154. {
  155. if (!strcmp(name, "keystone-k2e-evm"))
  156. return 0;
  157. return -1;
  158. }
  159. #endif
  160. #if defined(CONFIG_BOARD_EARLY_INIT_F)
  161. int board_early_init_f(void)
  162. {
  163. init_plls();
  164. return 0;
  165. }
  166. #endif
  167. #ifdef CONFIG_SPL_BUILD
  168. void spl_init_keystone_plls(void)
  169. {
  170. init_plls();
  171. }
  172. #endif