high_speed_env_spec.c 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. /*
  2. * Copyright (C) Marvell International Ltd. and its affiliates
  3. *
  4. * SPDX-License-Identifier: GPL-2.0
  5. */
  6. #include <common.h>
  7. #include <i2c.h>
  8. #include <spl.h>
  9. #include <asm/io.h>
  10. #include <asm/arch/cpu.h>
  11. #include <asm/arch/soc.h>
  12. #include "high_speed_env_spec.h"
  13. MV_SERDES_CHANGE_M_PHY serdes_change_m_phy[] = {
  14. /* SERDES TYPE, Low REG OFFS, Low REG VALUE, Hi REG OFS, Hi REG VALUE */
  15. {
  16. /* PEX: Change of Slew Rate port0 */
  17. SERDES_UNIT_PEX, 0x0,
  18. (0x0F << 16) | 0x2a21, 0x0, (0x0F << 16) | 0x2a21
  19. }, {
  20. /* PEX: Change PLL BW port0 */
  21. SERDES_UNIT_PEX, 0x0,
  22. (0x4F << 16) | 0x6219, 0x0, (0x4F << 16) | 0x6219
  23. }, {
  24. /* SATA: Slew rate change port 0 */
  25. SERDES_UNIT_SATA, 0x0083C, 0x8a31, 0x0083C, 0x8a31
  26. }, {
  27. /* SATA: Slew rate change port 0 */
  28. SERDES_UNIT_SATA, 0x00834, 0xc928, 0x00834, 0xc928
  29. }, {
  30. /* SATA: Slew rate change port 0 */
  31. SERDES_UNIT_SATA, 0x00838, 0x30f0, 0x00838, 0x30f0
  32. }, {
  33. /* SATA: Slew rate change port 0 */
  34. SERDES_UNIT_SATA, 0x00840, 0x30f5, 0x00840, 0x30f5
  35. }, {
  36. /* SGMII: FFE setting Port0 */
  37. SERDES_UNIT_SGMII0, 0x00E18, 0x989F, 0x00E18, 0x989F
  38. }, {
  39. /* SGMII: SELMUP and SELMUF Port0 */
  40. SERDES_UNIT_SGMII0, 0x00E38, 0x10FA, 0x00E38, 0x10FA
  41. }, {
  42. /* SGMII: Amplitude new setting gen2 Port3 */
  43. SERDES_UNIT_SGMII0, 0x00E34, 0xC968, 0x00E34, 0xC66C
  44. }, {
  45. /* QSGMII: Amplitude and slew rate change */
  46. SERDES_UNIT_QSGMII, 0x72E34, 0xaa58, 0x72E34, 0xaa58
  47. }, {
  48. /* QSGMII: SELMUP and SELMUF */
  49. SERDES_UNIT_QSGMII, 0x72e38, 0x10aF, 0x72e38, 0x10aF
  50. }, {
  51. /* QSGMII: 0x72e18 */
  52. SERDES_UNIT_QSGMII, 0x72e18, 0x98AC, 0x72e18, 0x98AC
  53. }, {
  54. /* Null terminated */
  55. SERDES_UNIT_UNCONNECTED, 0, 0
  56. }
  57. };
  58. MV_BIN_SERDES_CFG db88f78xx0_serdes_cfg[] = {
  59. /* Z1B */
  60. {MV_PEX_ROOT_COMPLEX, 0x32221111, 0x11111111,
  61. {PEX_BUS_MODE_X1, PEX_BUS_DISABLED, PEX_BUS_MODE_X4, PEX_BUS_MODE_X4},
  62. 0x0030, serdes_change_m_phy}, /* Default */
  63. {MV_PEX_ROOT_COMPLEX, 0x31211111, 0x11111111,
  64. {PEX_BUS_MODE_X1, PEX_BUS_MODE_X1, PEX_BUS_MODE_X4, PEX_BUS_MODE_X4},
  65. 0x0030, serdes_change_m_phy}, /* PEX module */
  66. /* Z1A */
  67. {MV_PEX_ROOT_COMPLEX, 0x32220000, 0x00000000,
  68. {PEX_BUS_DISABLED, PEX_BUS_DISABLED, PEX_BUS_DISABLED,
  69. PEX_BUS_DISABLED}, 0x0030, serdes_change_m_phy}, /* Default - Z1A */
  70. {MV_PEX_ROOT_COMPLEX, 0x31210000, 0x00000000,
  71. {PEX_BUS_DISABLED, PEX_BUS_MODE_X1, PEX_BUS_DISABLED, PEX_BUS_DISABLED},
  72. 0x0030, serdes_change_m_phy} /* PEX module - Z1A */
  73. };
  74. MV_BIN_SERDES_CFG db88f78xx0rev2_serdes_cfg[] = {
  75. /* A0 */
  76. {MV_PEX_ROOT_COMPLEX, 0x33221111, 0x11111111,
  77. {PEX_BUS_MODE_X1, PEX_BUS_DISABLED, PEX_BUS_MODE_X4, PEX_BUS_MODE_X4},
  78. 0x0030, serdes_change_m_phy}, /* Default: No Pex module, PEX0 x1, disabled */
  79. {MV_PEX_ROOT_COMPLEX, 0x33211111, 0x11111111,
  80. {PEX_BUS_MODE_X1, PEX_BUS_MODE_X1, PEX_BUS_MODE_X4, PEX_BUS_MODE_X4},
  81. 0x0030, serdes_change_m_phy}, /* Pex module, PEX0 x1, PEX1 x1 */
  82. {MV_PEX_ROOT_COMPLEX, 0x33221111, 0x11111111,
  83. {PEX_BUS_MODE_X4, PEX_BUS_DISABLED, PEX_BUS_MODE_X4, PEX_BUS_MODE_X4},
  84. 0x0030, serdes_change_m_phy}, /* no Pex module, PEX0 x4, PEX1 disabled */
  85. {MV_PEX_ROOT_COMPLEX, 0x33211111, 0x11111111,
  86. {PEX_BUS_MODE_X4, PEX_BUS_MODE_X1, PEX_BUS_MODE_X4, PEX_BUS_MODE_X4},
  87. 0x0030, serdes_change_m_phy}, /* Pex module, PEX0 x4, PEX1 x1 */
  88. {MV_PEX_ROOT_COMPLEX, 0x11111111, 0x11111111,
  89. {PEX_BUS_MODE_X1, PEX_BUS_MODE_X4, PEX_BUS_MODE_X4, PEX_BUS_MODE_X4},
  90. 0x0030, serdes_change_m_phy}, /* Pex module, PEX0 x1, PEX1 x4 */
  91. {MV_PEX_ROOT_COMPLEX, 0x11111111, 0x11111111,
  92. {PEX_BUS_MODE_X4, PEX_BUS_MODE_X4, PEX_BUS_MODE_X4, PEX_BUS_MODE_X4},
  93. 0x0030, serdes_change_m_phy}, /* Pex module, PEX0 x4, PEX1 x4 */
  94. };
  95. MV_BIN_SERDES_CFG rd78460nas_serdes_cfg[] = {
  96. {MV_PEX_ROOT_COMPLEX, 0x00223001, 0x11111111,
  97. {PEX_BUS_MODE_X1, PEX_BUS_DISABLED, PEX_BUS_MODE_X4, PEX_BUS_MODE_X4},
  98. 0x0030, serdes_change_m_phy}, /* Default */
  99. {MV_PEX_ROOT_COMPLEX, 0x33320201, 0x11111111,
  100. {PEX_BUS_MODE_X1, PEX_BUS_DISABLED, PEX_BUS_MODE_X4, PEX_BUS_MODE_X4},
  101. 0x00f4, serdes_change_m_phy}, /* Switch module */
  102. };
  103. MV_BIN_SERDES_CFG rd78460_serdes_cfg[] = {
  104. {MV_PEX_ROOT_COMPLEX, 0x22321111, 0x00000000,
  105. {PEX_BUS_MODE_X4, PEX_BUS_DISABLED, PEX_BUS_DISABLED, PEX_BUS_DISABLED},
  106. 0x0010, serdes_change_m_phy}, /* CPU0 */
  107. {MV_PEX_ROOT_COMPLEX, 0x00321111, 0x00000000,
  108. {PEX_BUS_MODE_X4, PEX_BUS_DISABLED, PEX_BUS_DISABLED, PEX_BUS_DISABLED},
  109. 0x0010, serdes_change_m_phy} /* CPU1-3 */
  110. };
  111. MV_BIN_SERDES_CFG rd78460server_rev2_serdes_cfg[] = {
  112. {MV_PEX_ROOT_COMPLEX, 0x00321111, 0x00000000,
  113. {PEX_BUS_MODE_X4, PEX_BUS_DISABLED, PEX_BUS_DISABLED, PEX_BUS_DISABLED},
  114. 0x0010, serdes_change_m_phy}, /* CPU0 */
  115. {MV_PEX_ROOT_COMPLEX, 0x00321111, 0x00000000,
  116. {PEX_BUS_MODE_X4, PEX_BUS_DISABLED, PEX_BUS_DISABLED, PEX_BUS_DISABLED},
  117. 0x0010, serdes_change_m_phy} /* CPU1-3 */
  118. };
  119. MV_BIN_SERDES_CFG db78X60pcac_serdes_cfg[] = {
  120. {MV_PEX_END_POINT, 0x22321111, 0x00000000,
  121. {PEX_BUS_MODE_X4, PEX_BUS_DISABLED, PEX_BUS_DISABLED, PEX_BUS_DISABLED},
  122. 0x0010, serdes_change_m_phy} /* Default */
  123. };
  124. MV_BIN_SERDES_CFG db78X60pcacrev2_serdes_cfg[] = {
  125. {MV_PEX_END_POINT, 0x23321111, 0x00000000,
  126. {PEX_BUS_MODE_X4, PEX_BUS_DISABLED, PEX_BUS_DISABLED, PEX_BUS_DISABLED},
  127. 0x0010, serdes_change_m_phy} /* Default */
  128. };
  129. MV_BIN_SERDES_CFG fpga88f78xx0_serdes_cfg[] = {
  130. {MV_PEX_ROOT_COMPLEX, 0x00000000, 0x00000000,
  131. {PEX_BUS_DISABLED, PEX_BUS_DISABLED, PEX_BUS_DISABLED, PEX_BUS_DISABLED},
  132. 0x0000, serdes_change_m_phy} /* No PEX in FPGA */
  133. };
  134. MV_BIN_SERDES_CFG db78X60amc_serdes_cfg[] = {
  135. {MV_PEX_ROOT_COMPLEX, 0x33111111, 0x00010001,
  136. {PEX_BUS_MODE_X4, PEX_BUS_MODE_X1, PEX_BUS_MODE_X1, PEX_BUS_MODE_X1},
  137. 0x0030, serdes_change_m_phy} /* Default */
  138. };
  139. /*
  140. * ARMADA-XP CUSTOMER BOARD
  141. */
  142. MV_BIN_SERDES_CFG rd78460customer_serdes_cfg[] = {
  143. {MV_PEX_ROOT_COMPLEX, 0x00223001, 0x11111111,
  144. {PEX_BUS_MODE_X1, PEX_BUS_DISABLED, PEX_BUS_MODE_X4, PEX_BUS_MODE_X4},
  145. 0x00000030, serdes_change_m_phy}, /* Default */
  146. {MV_PEX_ROOT_COMPLEX, 0x33320201, 0x11111111,
  147. {PEX_BUS_MODE_X1, PEX_BUS_DISABLED, PEX_BUS_MODE_X4, PEX_BUS_MODE_X4},
  148. 0x00000030, serdes_change_m_phy}, /* Switch module */
  149. };
  150. MV_BIN_SERDES_CFG rd78460AXP_GP_serdes_cfg[] = {
  151. {MV_PEX_ROOT_COMPLEX, 0x00223001, 0x11111111,
  152. {PEX_BUS_MODE_X1, PEX_BUS_DISABLED, PEX_BUS_MODE_X4, PEX_BUS_MODE_X4},
  153. 0x0030, serdes_change_m_phy} /* Default */
  154. };
  155. MV_BIN_SERDES_CFG *serdes_info_tbl[] = {
  156. db88f78xx0_serdes_cfg,
  157. rd78460_serdes_cfg,
  158. db78X60pcac_serdes_cfg,
  159. fpga88f78xx0_serdes_cfg,
  160. db88f78xx0rev2_serdes_cfg,
  161. rd78460nas_serdes_cfg,
  162. db78X60amc_serdes_cfg,
  163. db78X60pcacrev2_serdes_cfg,
  164. rd78460server_rev2_serdes_cfg,
  165. rd78460AXP_GP_serdes_cfg,
  166. rd78460customer_serdes_cfg
  167. };
  168. u8 rd78460gp_twsi_dev[] = { 0x4C, 0x4D, 0x4E };
  169. u8 db88f78xx0rev2_twsi_dev[] = { 0x4C, 0x4D, 0x4E, 0x4F };