ddrcReg.h 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872
  1. /*****************************************************************************
  2. * Copyright 2003 - 2008 Broadcom Corporation. All rights reserved.
  3. *
  4. * Unless you and Broadcom execute a separate written software license
  5. * agreement governing use of this software, this software is licensed to you
  6. * under the terms of the GNU General Public License version 2, available at
  7. * http://www.broadcom.com/licenses/GPLv2.php (the "GPL").
  8. *
  9. * Notwithstanding the above, under no circumstances may you combine this
  10. * software in any way with any other Broadcom software provided under a
  11. * license other than the GPL, without Broadcom's express prior written
  12. * consent.
  13. *****************************************************************************/
  14. /****************************************************************************/
  15. /**
  16. * @file ddrcReg.h
  17. *
  18. * @brief Register definitions for BCMRING DDR2 Controller and PHY
  19. *
  20. */
  21. /****************************************************************************/
  22. #ifndef DDRC_REG_H
  23. #define DDRC_REG_H
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif
  27. /* ---- Include Files ---------------------------------------------------- */
  28. #include <csp/reg.h>
  29. #include <csp/stdint.h>
  30. #include <mach/csp/mm_io.h>
  31. /* ---- Public Constants and Types --------------------------------------- */
  32. /*********************************************************************/
  33. /* DDR2 Controller (ARM PL341) register definitions */
  34. /*********************************************************************/
  35. /* -------------------------------------------------------------------- */
  36. /* -------------------------------------------------------------------- */
  37. /* ARM PL341 DDR2 configuration registers, offset 0x000 */
  38. /* -------------------------------------------------------------------- */
  39. /* -------------------------------------------------------------------- */
  40. typedef struct {
  41. uint32_t memcStatus;
  42. uint32_t memcCmd;
  43. uint32_t directCmd;
  44. uint32_t memoryCfg;
  45. uint32_t refreshPrd;
  46. uint32_t casLatency;
  47. uint32_t writeLatency;
  48. uint32_t tMrd;
  49. uint32_t tRas;
  50. uint32_t tRc;
  51. uint32_t tRcd;
  52. uint32_t tRfc;
  53. uint32_t tRp;
  54. uint32_t tRrd;
  55. uint32_t tWr;
  56. uint32_t tWtr;
  57. uint32_t tXp;
  58. uint32_t tXsr;
  59. uint32_t tEsr;
  60. uint32_t memoryCfg2;
  61. uint32_t memoryCfg3;
  62. uint32_t tFaw;
  63. } ddrcReg_CTLR_MEMC_REG_t;
  64. #define ddrcReg_CTLR_MEMC_REG_OFFSET 0x0000
  65. #define ddrcReg_CTLR_MEMC_REGP ((volatile ddrcReg_CTLR_MEMC_REG_t *) (MM_IO_BASE_DDRC + ddrcReg_CTLR_MEMC_REG_OFFSET))
  66. /* ----------------------------------------------------- */
  67. #define ddrcReg_CTLR_MEMC_STATUS_BANKS_MASK (0x3 << 12)
  68. #define ddrcReg_CTLR_MEMC_STATUS_BANKS_4 (0x0 << 12)
  69. #define ddrcReg_CTLR_MEMC_STATUS_BANKS_8 (0x3 << 12)
  70. #define ddrcReg_CTLR_MEMC_STATUS_MONITORS_MASK (0x3 << 10)
  71. #define ddrcReg_CTLR_MEMC_STATUS_MONITORS_0 (0x0 << 10)
  72. #define ddrcReg_CTLR_MEMC_STATUS_MONITORS_1 (0x1 << 10)
  73. #define ddrcReg_CTLR_MEMC_STATUS_MONITORS_2 (0x2 << 10)
  74. #define ddrcReg_CTLR_MEMC_STATUS_MONITORS_4 (0x3 << 10)
  75. #define ddrcReg_CTLR_MEMC_STATUS_CHIPS_MASK (0x3 << 7)
  76. #define ddrcReg_CTLR_MEMC_STATUS_CHIPS_1 (0x0 << 7)
  77. #define ddrcReg_CTLR_MEMC_STATUS_CHIPS_2 (0x1 << 7)
  78. #define ddrcReg_CTLR_MEMC_STATUS_CHIPS_3 (0x2 << 7)
  79. #define ddrcReg_CTLR_MEMC_STATUS_CHIPS_4 (0x3 << 7)
  80. #define ddrcReg_CTLR_MEMC_STATUS_TYPE_MASK (0x7 << 4)
  81. #define ddrcReg_CTLR_MEMC_STATUS_TYPE_DDR2 (0x5 << 4)
  82. #define ddrcReg_CTLR_MEMC_STATUS_WIDTH_MASK (0x3 << 2)
  83. #define ddrcReg_CTLR_MEMC_STATUS_WIDTH_16 (0x0 << 2)
  84. #define ddrcReg_CTLR_MEMC_STATUS_WIDTH_32 (0x1 << 2)
  85. #define ddrcReg_CTLR_MEMC_STATUS_WIDTH_64 (0x2 << 2)
  86. #define ddrcReg_CTLR_MEMC_STATUS_WIDTH_128 (0x3 << 2)
  87. #define ddrcReg_CTLR_MEMC_STATUS_STATE_MASK (0x3 << 0)
  88. #define ddrcReg_CTLR_MEMC_STATUS_STATE_CONFIG (0x0 << 0)
  89. #define ddrcReg_CTLR_MEMC_STATUS_STATE_READY (0x1 << 0)
  90. #define ddrcReg_CTLR_MEMC_STATUS_STATE_PAUSED (0x2 << 0)
  91. #define ddrcReg_CTLR_MEMC_STATUS_STATE_LOWPWR (0x3 << 0)
  92. /* ----------------------------------------------------- */
  93. #define ddrcReg_CTLR_MEMC_CMD_MASK (0x7 << 0)
  94. #define ddrcReg_CTLR_MEMC_CMD_GO (0x0 << 0)
  95. #define ddrcReg_CTLR_MEMC_CMD_SLEEP (0x1 << 0)
  96. #define ddrcReg_CTLR_MEMC_CMD_WAKEUP (0x2 << 0)
  97. #define ddrcReg_CTLR_MEMC_CMD_PAUSE (0x3 << 0)
  98. #define ddrcReg_CTLR_MEMC_CMD_CONFIGURE (0x4 << 0)
  99. #define ddrcReg_CTLR_MEMC_CMD_ACTIVE_PAUSE (0x7 << 0)
  100. /* ----------------------------------------------------- */
  101. #define ddrcReg_CTLR_DIRECT_CMD_CHIP_SHIFT 20
  102. #define ddrcReg_CTLR_DIRECT_CMD_CHIP_MASK (0x3 << ddrcReg_CTLR_DIRECT_CMD_CHIP_SHIFT)
  103. #define ddrcReg_CTLR_DIRECT_CMD_TYPE_PRECHARGEALL (0x0 << 18)
  104. #define ddrcReg_CTLR_DIRECT_CMD_TYPE_AUTOREFRESH (0x1 << 18)
  105. #define ddrcReg_CTLR_DIRECT_CMD_TYPE_MODEREG (0x2 << 18)
  106. #define ddrcReg_CTLR_DIRECT_CMD_TYPE_NOP (0x3 << 18)
  107. #define ddrcReg_CTLR_DIRECT_CMD_BANK_SHIFT 16
  108. #define ddrcReg_CTLR_DIRECT_CMD_BANK_MASK (0x3 << ddrcReg_CTLR_DIRECT_CMD_BANK_SHIFT)
  109. #define ddrcReg_CTLR_DIRECT_CMD_ADDR_SHIFT 0
  110. #define ddrcReg_CTLR_DIRECT_CMD_ADDR_MASK (0x1ffff << ddrcReg_CTLR_DIRECT_CMD_ADDR_SHIFT)
  111. /* ----------------------------------------------------- */
  112. #define ddrcReg_CTLR_MEMORY_CFG_CHIP_CNT_MASK (0x3 << 21)
  113. #define ddrcReg_CTLR_MEMORY_CFG_CHIP_CNT_1 (0x0 << 21)
  114. #define ddrcReg_CTLR_MEMORY_CFG_CHIP_CNT_2 (0x1 << 21)
  115. #define ddrcReg_CTLR_MEMORY_CFG_CHIP_CNT_3 (0x2 << 21)
  116. #define ddrcReg_CTLR_MEMORY_CFG_CHIP_CNT_4 (0x3 << 21)
  117. #define ddrcReg_CTLR_MEMORY_CFG_QOS_ARID_MASK (0x7 << 18)
  118. #define ddrcReg_CTLR_MEMORY_CFG_QOS_ARID_3_0 (0x0 << 18)
  119. #define ddrcReg_CTLR_MEMORY_CFG_QOS_ARID_4_1 (0x1 << 18)
  120. #define ddrcReg_CTLR_MEMORY_CFG_QOS_ARID_5_2 (0x2 << 18)
  121. #define ddrcReg_CTLR_MEMORY_CFG_QOS_ARID_6_3 (0x3 << 18)
  122. #define ddrcReg_CTLR_MEMORY_CFG_QOS_ARID_7_4 (0x4 << 18)
  123. #define ddrcReg_CTLR_MEMORY_CFG_QOS_ARID_8_5 (0x5 << 18)
  124. #define ddrcReg_CTLR_MEMORY_CFG_QOS_ARID_9_6 (0x6 << 18)
  125. #define ddrcReg_CTLR_MEMORY_CFG_QOS_ARID_10_7 (0x7 << 18)
  126. #define ddrcReg_CTLR_MEMORY_CFG_BURST_LEN_MASK (0x7 << 15)
  127. #define ddrcReg_CTLR_MEMORY_CFG_BURST_LEN_4 (0x2 << 15)
  128. #define ddrcReg_CTLR_MEMORY_CFG_BURST_LEN_8 (0x3 << 15) /* @note Not supported in PL341 */
  129. #define ddrcReg_CTLR_MEMORY_CFG_PWRDOWN_ENABLE (0x1 << 13)
  130. #define ddrcReg_CTLR_MEMORY_CFG_PWRDOWN_CYCLES_SHIFT 7
  131. #define ddrcReg_CTLR_MEMORY_CFG_PWRDOWN_CYCLES_MASK (0x3f << ddrcReg_CTLR_MEMORY_CFG_PWRDOWN_CYCLES_SHIFT)
  132. #define ddrcReg_CTLR_MEMORY_CFG_AXI_ROW_BITS_MASK (0x7 << 3)
  133. #define ddrcReg_CTLR_MEMORY_CFG_AXI_ROW_BITS_11 (0x0 << 3)
  134. #define ddrcReg_CTLR_MEMORY_CFG_AXI_ROW_BITS_12 (0x1 << 3)
  135. #define ddrcReg_CTLR_MEMORY_CFG_AXI_ROW_BITS_13 (0x2 << 3)
  136. #define ddrcReg_CTLR_MEMORY_CFG_AXI_ROW_BITS_14 (0x3 << 3)
  137. #define ddrcReg_CTLR_MEMORY_CFG_AXI_ROW_BITS_15 (0x4 << 3)
  138. #define ddrcReg_CTLR_MEMORY_CFG_AXI_ROW_BITS_16 (0x5 << 3)
  139. #define ddrcReg_CTLR_MEMORY_CFG_AXI_COL_BITS_MASK (0x7 << 0)
  140. #define ddrcReg_CTLR_MEMORY_CFG_AXI_COL_BITS_9 (0x1 << 0)
  141. #define ddrcReg_CTLR_MEMORY_CFG_AXI_COL_BITS_10 (0x2 << 0)
  142. #define ddrcReg_CTLR_MEMORY_CFG_AXI_COL_BITS_11 (0x3 << 0)
  143. /* ----------------------------------------------------- */
  144. #define ddrcReg_CTLR_REFRESH_PRD_SHIFT 0
  145. #define ddrcReg_CTLR_REFRESH_PRD_MASK (0x7fff << ddrcReg_CTLR_REFRESH_PRD_SHIFT)
  146. /* ----------------------------------------------------- */
  147. #define ddrcReg_CTLR_CAS_LATENCY_SHIFT 1
  148. #define ddrcReg_CTLR_CAS_LATENCY_MASK (0x7 << ddrcReg_CTLR_CAS_LATENCY_SHIFT)
  149. /* ----------------------------------------------------- */
  150. #define ddrcReg_CTLR_WRITE_LATENCY_SHIFT 0
  151. #define ddrcReg_CTLR_WRITE_LATENCY_MASK (0x7 << ddrcReg_CTLR_WRITE_LATENCY_SHIFT)
  152. /* ----------------------------------------------------- */
  153. #define ddrcReg_CTLR_T_MRD_SHIFT 0
  154. #define ddrcReg_CTLR_T_MRD_MASK (0x7f << ddrcReg_CTLR_T_MRD_SHIFT)
  155. /* ----------------------------------------------------- */
  156. #define ddrcReg_CTLR_T_RAS_SHIFT 0
  157. #define ddrcReg_CTLR_T_RAS_MASK (0x1f << ddrcReg_CTLR_T_RAS_SHIFT)
  158. /* ----------------------------------------------------- */
  159. #define ddrcReg_CTLR_T_RC_SHIFT 0
  160. #define ddrcReg_CTLR_T_RC_MASK (0x1f << ddrcReg_CTLR_T_RC_SHIFT)
  161. /* ----------------------------------------------------- */
  162. #define ddrcReg_CTLR_T_RCD_SCHEDULE_DELAY_SHIFT 8
  163. #define ddrcReg_CTLR_T_RCD_SCHEDULE_DELAY_MASK (0x7 << ddrcReg_CTLR_T_RCD_SCHEDULE_DELAY_SHIFT)
  164. #define ddrcReg_CTLR_T_RCD_SHIFT 0
  165. #define ddrcReg_CTLR_T_RCD_MASK (0x7 << ddrcReg_CTLR_T_RCD_SHIFT)
  166. /* ----------------------------------------------------- */
  167. #define ddrcReg_CTLR_T_RFC_SCHEDULE_DELAY_SHIFT 8
  168. #define ddrcReg_CTLR_T_RFC_SCHEDULE_DELAY_MASK (0x7f << ddrcReg_CTLR_T_RFC_SCHEDULE_DELAY_SHIFT)
  169. #define ddrcReg_CTLR_T_RFC_SHIFT 0
  170. #define ddrcReg_CTLR_T_RFC_MASK (0x7f << ddrcReg_CTLR_T_RFC_SHIFT)
  171. /* ----------------------------------------------------- */
  172. #define ddrcReg_CTLR_T_RP_SCHEDULE_DELAY_SHIFT 8
  173. #define ddrcReg_CTLR_T_RP_SCHEDULE_DELAY_MASK (0x7 << ddrcReg_CTLR_T_RP_SCHEDULE_DELAY_SHIFT)
  174. #define ddrcReg_CTLR_T_RP_SHIFT 0
  175. #define ddrcReg_CTLR_T_RP_MASK (0xf << ddrcReg_CTLR_T_RP_SHIFT)
  176. /* ----------------------------------------------------- */
  177. #define ddrcReg_CTLR_T_RRD_SHIFT 0
  178. #define ddrcReg_CTLR_T_RRD_MASK (0xf << ddrcReg_CTLR_T_RRD_SHIFT)
  179. /* ----------------------------------------------------- */
  180. #define ddrcReg_CTLR_T_WR_SHIFT 0
  181. #define ddrcReg_CTLR_T_WR_MASK (0x7 << ddrcReg_CTLR_T_WR_SHIFT)
  182. /* ----------------------------------------------------- */
  183. #define ddrcReg_CTLR_T_WTR_SHIFT 0
  184. #define ddrcReg_CTLR_T_WTR_MASK (0x7 << ddrcReg_CTLR_T_WTR_SHIFT)
  185. /* ----------------------------------------------------- */
  186. #define ddrcReg_CTLR_T_XP_SHIFT 0
  187. #define ddrcReg_CTLR_T_XP_MASK (0xff << ddrcReg_CTLR_T_XP_SHIFT)
  188. /* ----------------------------------------------------- */
  189. #define ddrcReg_CTLR_T_XSR_SHIFT 0
  190. #define ddrcReg_CTLR_T_XSR_MASK (0xff << ddrcReg_CTLR_T_XSR_SHIFT)
  191. /* ----------------------------------------------------- */
  192. #define ddrcReg_CTLR_T_ESR_SHIFT 0
  193. #define ddrcReg_CTLR_T_ESR_MASK (0xff << ddrcReg_CTLR_T_ESR_SHIFT)
  194. /* ----------------------------------------------------- */
  195. #define ddrcReg_CTLR_MEMORY_CFG2_WIDTH_MASK (0x3 << 6)
  196. #define ddrcReg_CTLR_MEMORY_CFG2_WIDTH_16BITS (0 << 6)
  197. #define ddrcReg_CTLR_MEMORY_CFG2_WIDTH_32BITS (1 << 6)
  198. #define ddrcReg_CTLR_MEMORY_CFG2_WIDTH_64BITS (2 << 6)
  199. #define ddrcReg_CTLR_MEMORY_CFG2_AXI_BANK_BITS_MASK (0x3 << 4)
  200. #define ddrcReg_CTLR_MEMORY_CFG2_AXI_BANK_BITS_2 (0 << 4)
  201. #define ddrcReg_CTLR_MEMORY_CFG2_AXI_BANK_BITS_3 (3 << 4)
  202. #define ddrcReg_CTLR_MEMORY_CFG2_CKE_INIT_STATE_LOW (0 << 3)
  203. #define ddrcReg_CTLR_MEMORY_CFG2_CKE_INIT_STATE_HIGH (1 << 3)
  204. #define ddrcReg_CTLR_MEMORY_CFG2_DQM_INIT_STATE_LOW (0 << 2)
  205. #define ddrcReg_CTLR_MEMORY_CFG2_DQM_INIT_STATE_HIGH (1 << 2)
  206. #define ddrcReg_CTLR_MEMORY_CFG2_CLK_MASK (0x3 << 0)
  207. #define ddrcReg_CTLR_MEMORY_CFG2_CLK_ASYNC (0 << 0)
  208. #define ddrcReg_CTLR_MEMORY_CFG2_CLK_SYNC_A_LE_M (1 << 0)
  209. #define ddrcReg_CTLR_MEMORY_CFG2_CLK_SYNC_A_GT_M (3 << 0)
  210. /* ----------------------------------------------------- */
  211. #define ddrcReg_CTLR_MEMORY_CFG3_REFRESH_TO_SHIFT 0
  212. #define ddrcReg_CTLR_MEMORY_CFG3_REFRESH_TO_MASK (0x7 << ddrcReg_CTLR_MEMORY_CFG3_REFRESH_TO_SHIFT)
  213. /* ----------------------------------------------------- */
  214. #define ddrcReg_CTLR_T_FAW_SCHEDULE_DELAY_SHIFT 8
  215. #define ddrcReg_CTLR_T_FAW_SCHEDULE_DELAY_MASK (0x1f << ddrcReg_CTLR_T_FAW_SCHEDULE_DELAY_SHIFT)
  216. #define ddrcReg_CTLR_T_FAW_PERIOD_SHIFT 0
  217. #define ddrcReg_CTLR_T_FAW_PERIOD_MASK (0x1f << ddrcReg_CTLR_T_FAW_PERIOD_SHIFT)
  218. /* -------------------------------------------------------------------- */
  219. /* -------------------------------------------------------------------- */
  220. /* ARM PL341 AXI ID QOS configuration registers, offset 0x100 */
  221. /* -------------------------------------------------------------------- */
  222. /* -------------------------------------------------------------------- */
  223. #define ddrcReg_CTLR_QOS_CNT 16
  224. #define ddrcReg_CTLR_QOS_MAX (ddrcReg_CTLR_QOS_CNT - 1)
  225. typedef struct {
  226. uint32_t cfg[ddrcReg_CTLR_QOS_CNT];
  227. } ddrcReg_CTLR_QOS_REG_t;
  228. #define ddrcReg_CTLR_QOS_REG_OFFSET 0x100
  229. #define ddrcReg_CTLR_QOS_REGP ((volatile ddrcReg_CTLR_QOS_REG_t *) (MM_IO_BASE_DDRC + ddrcReg_CTLR_QOS_REG_OFFSET))
  230. /* ----------------------------------------------------- */
  231. #define ddrcReg_CTLR_QOS_CFG_MAX_SHIFT 2
  232. #define ddrcReg_CTLR_QOS_CFG_MAX_MASK (0xff << ddrcReg_CTLR_QOS_CFG_MAX_SHIFT)
  233. #define ddrcReg_CTLR_QOS_CFG_MIN_SHIFT 1
  234. #define ddrcReg_CTLR_QOS_CFG_MIN_MASK (1 << ddrcReg_CTLR_QOS_CFG_MIN_SHIFT)
  235. #define ddrcReg_CTLR_QOS_CFG_ENABLE (1 << 0)
  236. /* -------------------------------------------------------------------- */
  237. /* -------------------------------------------------------------------- */
  238. /* ARM PL341 Memory chip configuration registers, offset 0x200 */
  239. /* -------------------------------------------------------------------- */
  240. /* -------------------------------------------------------------------- */
  241. #define ddrcReg_CTLR_CHIP_CNT 4
  242. #define ddrcReg_CTLR_CHIP_MAX (ddrcReg_CTLR_CHIP_CNT - 1)
  243. typedef struct {
  244. uint32_t cfg[ddrcReg_CTLR_CHIP_CNT];
  245. } ddrcReg_CTLR_CHIP_REG_t;
  246. #define ddrcReg_CTLR_CHIP_REG_OFFSET 0x200
  247. #define ddrcReg_CTLR_CHIP_REGP ((volatile ddrcReg_CTLR_CHIP_REG_t *) (MM_IO_BASE_DDRC + ddrcReg_CTLR_CHIP_REG_OFFSET))
  248. /* ----------------------------------------------------- */
  249. #define ddrcReg_CTLR_CHIP_CFG_MEM_ORG_MASK (1 << 16)
  250. #define ddrcReg_CTLR_CHIP_CFG_MEM_ORG_ROW_BANK_COL (0 << 16)
  251. #define ddrcReg_CTLR_CHIP_CFG_MEM_ORG_BANK_ROW_COL (1 << 16)
  252. #define ddrcReg_CTLR_CHIP_CFG_AXI_ADDR_MATCH_SHIFT 8
  253. #define ddrcReg_CTLR_CHIP_CFG_AXI_ADDR_MATCH_MASK (0xff << ddrcReg_CTLR_CHIP_CFG_AXI_ADDR_MATCH_SHIFT)
  254. #define ddrcReg_CTLR_CHIP_CFG_AXI_ADDR_MASK_SHIFT 0
  255. #define ddrcReg_CTLR_CHIP_CFG_AXI_ADDR_MASK_MASK (0xff << ddrcReg_CTLR_CHIP_CFG_AXI_ADDR_MASK_SHIFT)
  256. /* -------------------------------------------------------------------- */
  257. /* -------------------------------------------------------------------- */
  258. /* ARM PL341 User configuration registers, offset 0x300 */
  259. /* -------------------------------------------------------------------- */
  260. /* -------------------------------------------------------------------- */
  261. #define ddrcReg_CTLR_USER_OUTPUT_CNT 2
  262. typedef struct {
  263. uint32_t input;
  264. uint32_t output[ddrcReg_CTLR_USER_OUTPUT_CNT];
  265. uint32_t feature;
  266. } ddrcReg_CTLR_USER_REG_t;
  267. #define ddrcReg_CTLR_USER_REG_OFFSET 0x300
  268. #define ddrcReg_CTLR_USER_REGP ((volatile ddrcReg_CTLR_USER_REG_t *) (MM_IO_BASE_DDRC + ddrcReg_CTLR_USER_REG_OFFSET))
  269. /* ----------------------------------------------------- */
  270. #define ddrcReg_CTLR_USER_INPUT_STATUS_SHIFT 0
  271. #define ddrcReg_CTLR_USER_INPUT_STATUS_MASK (0xff << ddrcReg_CTLR_USER_INPUT_STATUS_SHIFT)
  272. /* ----------------------------------------------------- */
  273. #define ddrcReg_CTLR_USER_OUTPUT_CFG_SHIFT 0
  274. #define ddrcReg_CTLR_USER_OUTPUT_CFG_MASK (0xff << ddrcReg_CTLR_USER_OUTPUT_CFG_SHIFT)
  275. #define ddrcReg_CTLR_USER_OUTPUT_0_CFG_SYNC_BRIDGE_SHIFT 1
  276. #define ddrcReg_CTLR_USER_OUTPUT_0_CFG_SYNC_BRIDGE_MASK (1 << ddrcReg_CTLR_USER_OUTPUT_0_CFG_SYNC_BRIDGE_SHIFT)
  277. #define ddrcReg_CTLR_USER_OUTPUT_0_CFG_SYNC_BRIDGE_BP134 (0 << ddrcReg_CTLR_USER_OUTPUT_0_CFG_SYNC_BRIDGE_SHIFT)
  278. #define ddrcReg_CTLR_USER_OUTPUT_0_CFG_SYNC_BRIDGE_PL301 (1 << ddrcReg_CTLR_USER_OUTPUT_0_CFG_SYNC_BRIDGE_SHIFT)
  279. #define ddrcReg_CTLR_USER_OUTPUT_0_CFG_SYNC_BRIDGE_REGISTERED ddrcReg_CTLR_USER_OUTPUT_0_CFG_SYNC_BRIDGE_PL301
  280. /* ----------------------------------------------------- */
  281. #define ddrcReg_CTLR_FEATURE_WRITE_BLOCK_DISABLE (1 << 2)
  282. #define ddrcReg_CTLR_FEATURE_EARLY_BURST_RSP_DISABLE (1 << 0)
  283. /*********************************************************************/
  284. /* Broadcom DDR23 PHY register definitions */
  285. /*********************************************************************/
  286. /* -------------------------------------------------------------------- */
  287. /* -------------------------------------------------------------------- */
  288. /* Broadcom DDR23 PHY Address and Control register definitions */
  289. /* -------------------------------------------------------------------- */
  290. /* -------------------------------------------------------------------- */
  291. typedef struct {
  292. uint32_t revision;
  293. uint32_t pmCtl;
  294. REG32_RSVD(0x0008, 0x0010);
  295. uint32_t pllStatus;
  296. uint32_t pllCfg;
  297. uint32_t pllPreDiv;
  298. uint32_t pllDiv;
  299. uint32_t pllCtl1;
  300. uint32_t pllCtl2;
  301. uint32_t ssCtl;
  302. uint32_t ssCfg;
  303. uint32_t vdlStatic;
  304. uint32_t vdlDynamic;
  305. uint32_t padIdle;
  306. uint32_t pvtComp;
  307. uint32_t padDrive;
  308. uint32_t clkRgltrCtl;
  309. } ddrcReg_PHY_ADDR_CTL_REG_t;
  310. #define ddrcReg_PHY_ADDR_CTL_REG_OFFSET 0x0400
  311. #define ddrcReg_PHY_ADDR_CTL_REGP ((volatile ddrcReg_PHY_ADDR_CTL_REG_t *) (MM_IO_BASE_DDRC + ddrcReg_PHY_ADDR_CTL_REG_OFFSET))
  312. /* @todo These SS definitions are duplicates of ones below */
  313. #define ddrcReg_PHY_ADDR_SS_CTRL_ENABLE 0x00000001
  314. #define ddrcReg_PHY_ADDR_SS_CFG_CYCLE_PER_TICK_MASK 0xFFFF0000
  315. #define ddrcReg_PHY_ADDR_SS_CFG_CYCLE_PER_TICK_SHIFT 16
  316. #define ddrcReg_PHY_ADDR_SS_CFG_MIN_CYCLE_PER_TICK 10 /* Higher the value, lower the SS modulation frequency */
  317. #define ddrcReg_PHY_ADDR_SS_CFG_NDIV_AMPLITUDE_MASK 0x0000FFFF
  318. #define ddrcReg_PHY_ADDR_SS_CFG_NDIV_AMPLITUDE_SHIFT 0
  319. /* ----------------------------------------------------- */
  320. #define ddrcReg_PHY_ADDR_CTL_REVISION_MAJOR_SHIFT 8
  321. #define ddrcReg_PHY_ADDR_CTL_REVISION_MAJOR_MASK (0xff << ddrcReg_PHY_ADDR_CTL_REVISION_MAJOR_SHIFT)
  322. #define ddrcReg_PHY_ADDR_CTL_REVISION_MINOR_SHIFT 0
  323. #define ddrcReg_PHY_ADDR_CTL_REVISION_MINOR_MASK (0xff << ddrcReg_PHY_ADDR_CTL_REVISION_MINOR_SHIFT)
  324. /* ----------------------------------------------------- */
  325. #define ddrcReg_PHY_ADDR_CTL_CLK_PM_CTL_DDR_CLK_DISABLE (1 << 0)
  326. /* ----------------------------------------------------- */
  327. #define ddrcReg_PHY_ADDR_CTL_PLL_STATUS_LOCKED (1 << 0)
  328. /* ----------------------------------------------------- */
  329. #define ddrcReg_PHY_ADDR_CTL_PLL_CFG_DIV2_CLK_RESET (1 << 31)
  330. #define ddrcReg_PHY_ADDR_CTL_PLL_CFG_TEST_SEL_SHIFT 17
  331. #define ddrcReg_PHY_ADDR_CTL_PLL_CFG_TEST_SEL_MASK (0x1f << ddrcReg_PHY_ADDR_CTL_PLL_CFG_TEST_SEL_SHIFT)
  332. #define ddrcReg_PHY_ADDR_CTL_PLL_CFG_TEST_ENABLE (1 << 16)
  333. #define ddrcReg_PHY_ADDR_CTL_PLL_CFG_BGAP_ADJ_SHIFT 12
  334. #define ddrcReg_PHY_ADDR_CTL_PLL_CFG_BGAP_ADJ_MASK (0xf << ddrcReg_PHY_ADDR_CTL_PLL_CFG_BGAP_ADJ_SHIFT)
  335. #define ddrcReg_PHY_ADDR_CTL_PLL_CFG_VCO_RNG (1 << 7)
  336. #define ddrcReg_PHY_ADDR_CTL_PLL_CFG_CH1_PWRDWN (1 << 6)
  337. #define ddrcReg_PHY_ADDR_CTL_PLL_CFG_BYPASS_ENABLE (1 << 5)
  338. #define ddrcReg_PHY_ADDR_CTL_PLL_CFG_CLKOUT_ENABLE (1 << 4)
  339. #define ddrcReg_PHY_ADDR_CTL_PLL_CFG_D_RESET (1 << 3)
  340. #define ddrcReg_PHY_ADDR_CTL_PLL_CFG_A_RESET (1 << 2)
  341. #define ddrcReg_PHY_ADDR_CTL_PLL_CFG_PWRDWN (1 << 0)
  342. /* ----------------------------------------------------- */
  343. #define ddrcReg_PHY_ADDR_CTL_PLL_PRE_DIV_DITHER_MFB (1 << 26)
  344. #define ddrcReg_PHY_ADDR_CTL_PLL_PRE_DIV_PWRDWN (1 << 25)
  345. #define ddrcReg_PHY_ADDR_CTL_PLL_PRE_DIV_MODE_SHIFT 20
  346. #define ddrcReg_PHY_ADDR_CTL_PLL_PRE_DIV_MODE_MASK (0x7 << ddrcReg_PHY_ADDR_CTL_PLL_PRE_DIV_MODE_SHIFT)
  347. #define ddrcReg_PHY_ADDR_CTL_PLL_PRE_DIV_INT_SHIFT 8
  348. #define ddrcReg_PHY_ADDR_CTL_PLL_PRE_DIV_INT_MASK (0x1ff << ddrcReg_PHY_ADDR_CTL_PLL_PRE_DIV_INT_SHIFT)
  349. #define ddrcReg_PHY_ADDR_CTL_PLL_PRE_DIV_P2_SHIFT 4
  350. #define ddrcReg_PHY_ADDR_CTL_PLL_PRE_DIV_P2_MASK (0xf << ddrcReg_PHY_ADDR_CTL_PLL_PRE_DIV_P2_SHIFT)
  351. #define ddrcReg_PHY_ADDR_CTL_PLL_PRE_DIV_P1_SHIFT 0
  352. #define ddrcReg_PHY_ADDR_CTL_PLL_PRE_DIV_P1_MASK (0xf << ddrcReg_PHY_ADDR_CTL_PLL_PRE_DIV_P1_SHIFT)
  353. /* ----------------------------------------------------- */
  354. #define ddrcReg_PHY_ADDR_CTL_PLL_DIV_M1_SHIFT 24
  355. #define ddrcReg_PHY_ADDR_CTL_PLL_DIV_M1_MASK (0xff << ddrcReg_PHY_ADDR_CTL_PLL_DIV_M1_SHIFT)
  356. #define ddrcReg_PHY_ADDR_CTL_PLL_DIV_FRAC_SHIFT 0
  357. #define ddrcReg_PHY_ADDR_CTL_PLL_DIV_FRAC_MASK (0xffffff << ddrcReg_PHY_ADDR_CTL_PLL_DIV_FRAC_SHIFT)
  358. /* ----------------------------------------------------- */
  359. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_TESTA_SHIFT 30
  360. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_TESTA_MASK (0x3 << ddrcReg_PHY_ADDR_CTL_PLL_CTL1_TESTA_SHIFT)
  361. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_KVCO_XS_SHIFT 27
  362. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_KVCO_XS_MASK (0x7 << ddrcReg_PHY_ADDR_CTL_PLL_CTL1_KVCO_XS_SHIFT)
  363. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_KVCO_XF_SHIFT 24
  364. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_KVCO_XF_MASK (0x7 << ddrcReg_PHY_ADDR_CTL_PLL_CTL1_KVCO_XF_SHIFT)
  365. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_LPF_BW_SHIFT 22
  366. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_LPF_BW_MASK (0x3 << ddrcReg_PHY_ADDR_CTL_PLL_CTL1_LPF_BW_SHIFT)
  367. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_LF_ORDER (0x1 << 21)
  368. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_CN_SHIFT 19
  369. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_CN_MASK (0x3 << ddrcReg_PHY_ADDR_CTL_PLL_CTL1_CN_SHIFT)
  370. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_RN_SHIFT 17
  371. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_RN_MASK (0x3 << ddrcReg_PHY_ADDR_CTL_PLL_CTL1_RN_SHIFT)
  372. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_CP_SHIFT 15
  373. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_CP_MASK (0x3 << ddrcReg_PHY_ADDR_CTL_PLL_CTL1_CP_SHIFT)
  374. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_CZ_SHIFT 13
  375. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_CZ_MASK (0x3 << ddrcReg_PHY_ADDR_CTL_PLL_CTL1_CZ_SHIFT)
  376. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_RZ_SHIFT 10
  377. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_RZ_MASK (0x7 << ddrcReg_PHY_ADDR_CTL_PLL_CTL1_RZ_SHIFT)
  378. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_ICPX_SHIFT 5
  379. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_ICPX_MASK (0x1f << ddrcReg_PHY_ADDR_CTL_PLL_CTL1_ICPX_SHIFT)
  380. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_ICP_OFF_SHIFT 0
  381. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL1_ICP_OFF_MASK (0x1f << ddrcReg_PHY_ADDR_CTL_PLL_CTL1_ICP_OFF_SHIFT)
  382. /* ----------------------------------------------------- */
  383. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL2_PTAP_ADJ_SHIFT 4
  384. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL2_PTAP_ADJ_MASK (0x3 << ddrcReg_PHY_ADDR_CTL_PLL_CTL2_PTAP_ADJ_SHIFT)
  385. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL2_CTAP_ADJ_SHIFT 2
  386. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL2_CTAP_ADJ_MASK (0x3 << ddrcReg_PHY_ADDR_CTL_PLL_CTL2_CTAP_ADJ_SHIFT)
  387. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL2_LOWCUR_ENABLE (0x1 << 1)
  388. #define ddrcReg_PHY_ADDR_CTL_PLL_CTL2_BIASIN_ENABLE (0x1 << 0)
  389. /* ----------------------------------------------------- */
  390. #define ddrcReg_PHY_ADDR_CTL_PLL_SS_EN_ENABLE (0x1 << 0)
  391. /* ----------------------------------------------------- */
  392. #define ddrcReg_PHY_ADDR_CTL_PLL_SS_CFG_CYC_PER_TICK_SHIFT 16
  393. #define ddrcReg_PHY_ADDR_CTL_PLL_SS_CFG_CYC_PER_TICK_MASK (0xffff << ddrcReg_PHY_ADDR_CTL_PLL_SS_CFG_CYC_PER_TICK_SHIFT)
  394. #define ddrcReg_PHY_ADDR_CTL_PLL_SS_CFG_NDIV_AMP_SHIFT 0
  395. #define ddrcReg_PHY_ADDR_CTL_PLL_SS_CFG_NDIV_AMP_MASK (0xffff << ddrcReg_PHY_ADDR_CTL_PLL_SS_CFG_NDIV_AMP_SHIFT)
  396. /* ----------------------------------------------------- */
  397. #define ddrcReg_PHY_ADDR_CTL_VDL_STATIC_OVR_FORCE (1 << 20)
  398. #define ddrcReg_PHY_ADDR_CTL_VDL_STATIC_OVR_ENABLE (1 << 16)
  399. #define ddrcReg_PHY_ADDR_CTL_VDL_STATIC_OVR_FALL_SHIFT 12
  400. #define ddrcReg_PHY_ADDR_CTL_VDL_STATIC_OVR_FALL_MASK (0x3 << ddrcReg_PHY_ADDR_CTL_VDL_STATIC_OVR_FALL_SHIFT)
  401. #define ddrcReg_PHY_ADDR_CTL_VDL_STATIC_OVR_RISE_SHIFT 8
  402. #define ddrcReg_PHY_ADDR_CTL_VDL_STATIC_OVR_RISE_MASK (0x3 << ddrcReg_PHY_ADDR_CTL_VDL_STATIC_OVR_RISE_SHIFT)
  403. #define ddrcReg_PHY_ADDR_CTL_VDL_STATIC_OVR_STEP_SHIFT 0
  404. #define ddrcReg_PHY_ADDR_CTL_VDL_STATIC_OVR_STEP_MASK (0x3f << ddrcReg_PHY_ADDR_CTL_VDL_STATIC_OVR_STEP_SHIFT)
  405. /* ----------------------------------------------------- */
  406. #define ddrcReg_PHY_ADDR_CTL_VDL_DYNAMIC_OVR_ENABLE (1 << 16)
  407. #define ddrcReg_PHY_ADDR_CTL_VDL_DYNAMIC_OVR_FALL_SHIFT 12
  408. #define ddrcReg_PHY_ADDR_CTL_VDL_DYNAMIC_OVR_FALL_MASK (0x3 << ddrcReg_PHY_ADDR_CTL_VDL_DYNAMIC_OVR_FALL_SHIFT)
  409. #define ddrcReg_PHY_ADDR_CTL_VDL_DYNAMIC_OVR_RISE_SHIFT 8
  410. #define ddrcReg_PHY_ADDR_CTL_VDL_DYNAMIC_OVR_RISE_MASK (0x3 << ddrcReg_PHY_ADDR_CTL_VDL_DYNAMIC_OVR_RISE_SHIFT)
  411. #define ddrcReg_PHY_ADDR_CTL_VDL_DYNAMIC_OVR_STEP_SHIFT 0
  412. #define ddrcReg_PHY_ADDR_CTL_VDL_DYNAMIC_OVR_STEP_MASK (0x3f << ddrcReg_PHY_ADDR_CTL_VDL_DYNAMIC_OVR_STEP_SHIFT)
  413. /* ----------------------------------------------------- */
  414. #define ddrcReg_PHY_ADDR_CTL_PAD_IDLE_ENABLE (1u << 31)
  415. #define ddrcReg_PHY_ADDR_CTL_PAD_IDLE_RXENB_DISABLE (1 << 8)
  416. #define ddrcReg_PHY_ADDR_CTL_PAD_IDLE_CTL_IDDQ_DISABLE (1 << 6)
  417. #define ddrcReg_PHY_ADDR_CTL_PAD_IDLE_CTL_REB_DISABLE (1 << 5)
  418. #define ddrcReg_PHY_ADDR_CTL_PAD_IDLE_CTL_OEB_DISABLE (1 << 4)
  419. #define ddrcReg_PHY_ADDR_CTL_PAD_IDLE_CKE_IDDQ_DISABLE (1 << 2)
  420. #define ddrcReg_PHY_ADDR_CTL_PAD_IDLE_CKE_REB_DISABLE (1 << 1)
  421. #define ddrcReg_PHY_ADDR_CTL_PAD_IDLE_CKE_OEB_DISABLE (1 << 0)
  422. /* ----------------------------------------------------- */
  423. #define ddrcReg_PHY_ADDR_CTL_PVT_COMP_PD_DONE (1 << 30)
  424. #define ddrcReg_PHY_ADDR_CTL_PVT_COMP_ND_DONE (1 << 29)
  425. #define ddrcReg_PHY_ADDR_CTL_PVT_COMP_SAMPLE_DONE (1 << 28)
  426. #define ddrcReg_PHY_ADDR_CTL_PVT_COMP_SAMPLE_AUTO_ENABLE (1 << 27)
  427. #define ddrcReg_PHY_ADDR_CTL_PVT_COMP_SAMPLE_ENABLE (1 << 26)
  428. #define ddrcReg_PHY_ADDR_CTL_PVT_COMP_ADDR_OVR_ENABLE (1 << 25)
  429. #define ddrcReg_PHY_ADDR_CTL_PVT_COMP_DQ_OVR_ENABLE (1 << 24)
  430. #define ddrcReg_PHY_ADDR_CTL_PVT_COMP_PD_SHIFT 20
  431. #define ddrcReg_PHY_ADDR_CTL_PVT_COMP_PD_MASK (0xf << ddrcReg_PHY_ADDR_CTL_PVT_COMP_PD_SHIFT)
  432. #define ddrcReg_PHY_ADDR_CTL_PVT_COMP_ND_SHIFT 16
  433. #define ddrcReg_PHY_ADDR_CTL_PVT_COMP_ND_MASK (0xf << ddrcReg_PHY_ADDR_CTL_PVT_COMP_ND_SHIFT)
  434. #define ddrcReg_PHY_ADDR_CTL_PVT_COMP_ADDR_PD_SHIFT 12
  435. #define ddrcReg_PHY_ADDR_CTL_PVT_COMP_ADDR_PD_MASK (0xf << ddrcReg_PHY_ADDR_CTL_PVT_COMP_ADDR_PD_SHIFT)
  436. #define ddrcReg_PHY_ADDR_CTL_PVT_COMP_ADDR_ND_SHIFT 8
  437. #define ddrcReg_PHY_ADDR_CTL_PVT_COMP_ADDR_ND_MASK (0xf << ddrcReg_PHY_ADDR_CTL_PVT_COMP_ADDR_ND_SHIFT)
  438. #define ddrcReg_PHY_ADDR_CTL_PVT_COMP_DQ_PD_SHIFT 4
  439. #define ddrcReg_PHY_ADDR_CTL_PVT_COMP_DQ_PD_MASK (0xf << ddrcReg_PHY_ADDR_CTL_PVT_COMP_DQ_PD_SHIFT)
  440. #define ddrcReg_PHY_ADDR_CTL_PVT_COMP_DQ_ND_SHIFT 0
  441. #define ddrcReg_PHY_ADDR_CTL_PVT_COMP_DQ_ND_MASK (0xf << ddrcReg_PHY_ADDR_CTL_PVT_COMP_DQ_ND_SHIFT)
  442. /* ----------------------------------------------------- */
  443. #define ddrcReg_PHY_ADDR_CTL_PAD_DRIVE_RT60B (1 << 4)
  444. #define ddrcReg_PHY_ADDR_CTL_PAD_DRIVE_SEL_SSTL18 (1 << 3)
  445. #define ddrcReg_PHY_ADDR_CTL_PAD_DRIVE_SELTXDRV_CI (1 << 2)
  446. #define ddrcReg_PHY_ADDR_CTL_PAD_DRIVE_SELRXDRV (1 << 1)
  447. #define ddrcReg_PHY_ADDR_CTL_PAD_DRIVE_SLEW (1 << 0)
  448. /* ----------------------------------------------------- */
  449. #define ddrcReg_PHY_ADDR_CTL_CLK_RGLTR_CTL_PWR_HALF (1 << 1)
  450. #define ddrcReg_PHY_ADDR_CTL_CLK_RGLTR_CTL_PWR_OFF (1 << 0)
  451. /* -------------------------------------------------------------------- */
  452. /* -------------------------------------------------------------------- */
  453. /* Broadcom DDR23 PHY Byte Lane register definitions */
  454. /* -------------------------------------------------------------------- */
  455. /* -------------------------------------------------------------------- */
  456. #define ddrcReg_PHY_BYTE_LANE_CNT 2
  457. #define ddrcReg_PHY_BYTE_LANE_MAX (ddrcReg_CTLR_BYTE_LANE_CNT - 1)
  458. #define ddrcReg_PHY_BYTE_LANE_VDL_OVR_CNT 8
  459. typedef struct {
  460. uint32_t revision;
  461. uint32_t vdlCalibrate;
  462. uint32_t vdlStatus;
  463. REG32_RSVD(0x000c, 0x0010);
  464. uint32_t vdlOverride[ddrcReg_PHY_BYTE_LANE_VDL_OVR_CNT];
  465. uint32_t readCtl;
  466. uint32_t readStatus;
  467. uint32_t readClear;
  468. uint32_t padIdleCtl;
  469. uint32_t padDriveCtl;
  470. uint32_t padClkCtl;
  471. uint32_t writeCtl;
  472. uint32_t clkRegCtl;
  473. } ddrcReg_PHY_BYTE_LANE_REG_t;
  474. /* There are 2 instances of the byte Lane registers, one for each byte lane. */
  475. #define ddrcReg_PHY_BYTE_LANE_1_REG_OFFSET 0x0500
  476. #define ddrcReg_PHY_BYTE_LANE_2_REG_OFFSET 0x0600
  477. #define ddrcReg_PHY_BYTE_LANE_1_REGP ((volatile ddrcReg_PHY_BYTE_LANE_REG_t *) (MM_IO_BASE_DDRC + ddrcReg_PHY_BYTE_LANE_1_REG_OFFSET))
  478. #define ddrcReg_PHY_BYTE_LANE_2_REGP ((volatile ddrcReg_PHY_BYTE_LANE_REG_t *) (MM_IO_BASE_DDRC + ddrcReg_PHY_BYTE_LANE_2_REG_OFFSET))
  479. /* ----------------------------------------------------- */
  480. #define ddrcReg_PHY_BYTE_LANE_REVISION_MAJOR_SHIFT 8
  481. #define ddrcReg_PHY_BYTE_LANE_REVISION_MAJOR_MASK (0xff << ddrcReg_PHY_BYTE_LANE_REVISION_MAJOR_SHIFT)
  482. #define ddrcReg_PHY_BYTE_LANE_REVISION_MINOR_SHIFT 0
  483. #define ddrcReg_PHY_BYTE_LANE_REVISION_MINOR_MASK (0xff << ddrcReg_PHY_BYTE_LANE_REVISION_MINOR_SHIFT)
  484. /* ----------------------------------------------------- */
  485. #define ddrcReg_PHY_BYTE_LANE_VDL_CALIB_CLK_2CYCLE (1 << 4)
  486. #define ddrcReg_PHY_BYTE_LANE_VDL_CALIB_CLK_1CYCLE (0 << 4)
  487. #define ddrcReg_PHY_BYTE_LANE_VDL_CALIB_TEST (1 << 3)
  488. #define ddrcReg_PHY_BYTE_LANE_VDL_CALIB_ALWAYS (1 << 2)
  489. #define ddrcReg_PHY_BYTE_LANE_VDL_CALIB_ONCE (1 << 1)
  490. #define ddrcReg_PHY_BYTE_LANE_VDL_CALIB_FAST (1 << 0)
  491. /* ----------------------------------------------------- */
  492. /* The byte lane VDL status calibTotal[9:0] is comprised of [9:4] step value, [3:2] fine fall */
  493. /* and [1:0] fine rise. Note that calibTotal[9:0] is located at bit 4 in the VDL status */
  494. /* register. The fine rise and fall are no longer used, so add some definitions for just */
  495. /* the step setting to simplify things. */
  496. #define ddrcReg_PHY_BYTE_LANE_VDL_STATUS_STEP_SHIFT 8
  497. #define ddrcReg_PHY_BYTE_LANE_VDL_STATUS_STEP_MASK (0x3f << ddrcReg_PHY_BYTE_LANE_VDL_STATUS_STEP_SHIFT)
  498. #define ddrcReg_PHY_BYTE_LANE_VDL_STATUS_TOTAL_SHIFT 4
  499. #define ddrcReg_PHY_BYTE_LANE_VDL_STATUS_TOTAL_MASK (0x3ff << ddrcReg_PHY_BYTE_LANE_VDL_STATUS_TOTAL_SHIFT)
  500. #define ddrcReg_PHY_BYTE_LANE_VDL_STATUS_LOCK (1 << 1)
  501. #define ddrcReg_PHY_BYTE_LANE_VDL_STATUS_IDLE (1 << 0)
  502. /* ----------------------------------------------------- */
  503. #define ddrcReg_PHY_BYTE_LANE_VDL_OVR_ENABLE (1 << 16)
  504. #define ddrcReg_PHY_BYTE_LANE_VDL_OVR_FALL_SHIFT 12
  505. #define ddrcReg_PHY_BYTE_LANE_VDL_OVR_FALL_MASK (0x3 << ddrcReg_PHY_BYTE_LANE_VDL_OVR_FALL_SHIFT)
  506. #define ddrcReg_PHY_BYTE_LANE_VDL_OVR_RISE_SHIFT 8
  507. #define ddrcReg_PHY_BYTE_LANE_VDL_OVR_RISE_MASK (0x3 << ddrcReg_PHY_BYTE_LANE_VDL_OVR_RISE_SHIFT)
  508. #define ddrcReg_PHY_BYTE_LANE_VDL_OVR_STEP_SHIFT 0
  509. #define ddrcReg_PHY_BYTE_LANE_VDL_OVR_STEP_MASK (0x3f << ddrcReg_PHY_BYTE_LANE_VDL_OVR_STEP_SHIFT)
  510. #define ddrcReg_PHY_BYTE_LANE_VDL_OVR_IDX_STATIC_READ_DQS_P 0
  511. #define ddrcReg_PHY_BYTE_LANE_VDL_OVR_IDX_STATIC_READ_DQS_N 1
  512. #define ddrcReg_PHY_BYTE_LANE_VDL_OVR_IDX_STATIC_READ_EN 2
  513. #define ddrcReg_PHY_BYTE_LANE_VDL_OVR_IDX_STATIC_WRITE_DQ_DQM 3
  514. #define ddrcReg_PHY_BYTE_LANE_VDL_OVR_IDX_DYNAMIC_READ_DQS_P 4
  515. #define ddrcReg_PHY_BYTE_LANE_VDL_OVR_IDX_DYNAMIC_READ_DQS_N 5
  516. #define ddrcReg_PHY_BYTE_LANE_VDL_OVR_IDX_DYNAMIC_READ_EN 6
  517. #define ddrcReg_PHY_BYTE_LANE_VDL_OVR_IDX_DYNAMIC_WRITE_DQ_DQM 7
  518. /* ----------------------------------------------------- */
  519. #define ddrcReg_PHY_BYTE_LANE_READ_CTL_DELAY_SHIFT 8
  520. #define ddrcReg_PHY_BYTE_LANE_READ_CTL_DELAY_MASK (0x3 << ddrcReg_PHY_BYTE_LANE_READ_CTL_DELAY_SHIFT)
  521. #define ddrcReg_PHY_BYTE_LANE_READ_CTL_DQ_ODT_ENABLE (1 << 3)
  522. #define ddrcReg_PHY_BYTE_LANE_READ_CTL_DQ_ODT_ADJUST (1 << 2)
  523. #define ddrcReg_PHY_BYTE_LANE_READ_CTL_RD_ODT_ENABLE (1 << 1)
  524. #define ddrcReg_PHY_BYTE_LANE_READ_CTL_RD_ODT_ADJUST (1 << 0)
  525. /* ----------------------------------------------------- */
  526. #define ddrcReg_PHY_BYTE_LANE_READ_STATUS_ERROR_SHIFT 0
  527. #define ddrcReg_PHY_BYTE_LANE_READ_STATUS_ERROR_MASK (0xf << ddrcReg_PHY_BYTE_LANE_READ_STATUS_ERROR_SHIFT)
  528. /* ----------------------------------------------------- */
  529. #define ddrcReg_PHY_BYTE_LANE_READ_CLEAR_STATUS (1 << 0)
  530. /* ----------------------------------------------------- */
  531. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_ENABLE (1u << 31)
  532. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_DM_RXENB_DISABLE (1 << 19)
  533. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_DM_IDDQ_DISABLE (1 << 18)
  534. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_DM_REB_DISABLE (1 << 17)
  535. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_DM_OEB_DISABLE (1 << 16)
  536. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_DQ_RXENB_DISABLE (1 << 15)
  537. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_DQ_IDDQ_DISABLE (1 << 14)
  538. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_DQ_REB_DISABLE (1 << 13)
  539. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_DQ_OEB_DISABLE (1 << 12)
  540. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_READ_ENB_RXENB_DISABLE (1 << 11)
  541. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_READ_ENB_IDDQ_DISABLE (1 << 10)
  542. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_READ_ENB_REB_DISABLE (1 << 9)
  543. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_READ_ENB_OEB_DISABLE (1 << 8)
  544. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_DQS_RXENB_DISABLE (1 << 7)
  545. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_DQS_IDDQ_DISABLE (1 << 6)
  546. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_DQS_REB_DISABLE (1 << 5)
  547. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_DQS_OEB_DISABLE (1 << 4)
  548. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_CLK_RXENB_DISABLE (1 << 3)
  549. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_CLK_IDDQ_DISABLE (1 << 2)
  550. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_CLK_REB_DISABLE (1 << 1)
  551. #define ddrcReg_PHY_BYTE_LANE_PAD_IDLE_CTL_CLK_OEB_DISABLE (1 << 0)
  552. /* ----------------------------------------------------- */
  553. #define ddrcReg_PHY_BYTE_LANE_PAD_DRIVE_CTL_RT60B_DDR_READ_ENB (1 << 5)
  554. #define ddrcReg_PHY_BYTE_LANE_PAD_DRIVE_CTL_RT60B (1 << 4)
  555. #define ddrcReg_PHY_BYTE_LANE_PAD_DRIVE_CTL_SEL_SSTL18 (1 << 3)
  556. #define ddrcReg_PHY_BYTE_LANE_PAD_DRIVE_CTL_SELTXDRV_CI (1 << 2)
  557. #define ddrcReg_PHY_BYTE_LANE_PAD_DRIVE_CTL_SELRXDRV (1 << 1)
  558. #define ddrcReg_PHY_BYTE_LANE_PAD_DRIVE_CTL_SLEW (1 << 0)
  559. /* ----------------------------------------------------- */
  560. #define ddrcReg_PHY_BYTE_LANE_PAD_CLK_CTL_DISABLE (1 << 0)
  561. /* ----------------------------------------------------- */
  562. #define ddrcReg_PHY_BYTE_LANE_WRITE_CTL_PREAMBLE_DDR3 (1 << 0)
  563. /* ----------------------------------------------------- */
  564. #define ddrcReg_PHY_BYTE_LANE_CLK_REG_CTL_PWR_HALF (1 << 1)
  565. #define ddrcReg_PHY_BYTE_LANE_CLK_REG_CTL_PWR_OFF (1 << 0)
  566. /*********************************************************************/
  567. /* ARM PL341 DDRC to Broadcom DDR23 PHY glue register definitions */
  568. /*********************************************************************/
  569. typedef struct {
  570. uint32_t cfg;
  571. uint32_t actMonCnt;
  572. uint32_t ctl;
  573. uint32_t lbistCtl;
  574. uint32_t lbistSeed;
  575. uint32_t lbistStatus;
  576. uint32_t tieOff;
  577. uint32_t actMonClear;
  578. uint32_t status;
  579. uint32_t user;
  580. } ddrcReg_CTLR_PHY_GLUE_REG_t;
  581. #define ddrcReg_CTLR_PHY_GLUE_OFFSET 0x0700
  582. #define ddrcReg_CTLR_PHY_GLUE_REGP ((volatile ddrcReg_CTLR_PHY_GLUE_REG_t *) (MM_IO_BASE_DDRC + ddrcReg_CTLR_PHY_GLUE_OFFSET))
  583. /* ----------------------------------------------------- */
  584. /* DDR2 / AXI block phase alignment interrupt control */
  585. #define ddrcReg_CTLR_PHY_GLUE_CFG_INT_SHIFT 18
  586. #define ddrcReg_CTLR_PHY_GLUE_CFG_INT_MASK (0x3 << ddrcReg_CTLR_PHY_GLUE_CFG_INT_SHIFT)
  587. #define ddrcReg_CTLR_PHY_GLUE_CFG_INT_OFF (0 << ddrcReg_CTLR_PHY_GLUE_CFG_INT_SHIFT)
  588. #define ddrcReg_CTLR_PHY_GLUE_CFG_INT_ON_TIGHT (1 << ddrcReg_CTLR_PHY_GLUE_CFG_INT_SHIFT)
  589. #define ddrcReg_CTLR_PHY_GLUE_CFG_INT_ON_MEDIUM (2 << ddrcReg_CTLR_PHY_GLUE_CFG_INT_SHIFT)
  590. #define ddrcReg_CTLR_PHY_GLUE_CFG_INT_ON_LOOSE (3 << ddrcReg_CTLR_PHY_GLUE_CFG_INT_SHIFT)
  591. #define ddrcReg_CTLR_PHY_GLUE_CFG_PLL_REFCLK_SHIFT 17
  592. #define ddrcReg_CTLR_PHY_GLUE_CFG_PLL_REFCLK_MASK (1 << ddrcReg_CTLR_PHY_GLUE_CFG_PLL_REFCLK_SHIFT)
  593. #define ddrcReg_CTLR_PHY_GLUE_CFG_PLL_REFCLK_DIFFERENTIAL (0 << ddrcReg_CTLR_PHY_GLUE_CFG_PLL_REFCLK_SHIFT)
  594. #define ddrcReg_CTLR_PHY_GLUE_CFG_PLL_REFCLK_CMOS (1 << ddrcReg_CTLR_PHY_GLUE_CFG_PLL_REFCLK_SHIFT)
  595. #define ddrcReg_CTLR_PHY_GLUE_CFG_DIV2CLK_TREE_SHIFT 16
  596. #define ddrcReg_CTLR_PHY_GLUE_CFG_DIV2CLK_TREE_MASK (1 << ddrcReg_CTLR_PHY_GLUE_CFG_DIV2CLK_TREE_SHIFT)
  597. #define ddrcReg_CTLR_PHY_GLUE_CFG_DIV2CLK_TREE_DEEP (0 << ddrcReg_CTLR_PHY_GLUE_CFG_DIV2CLK_TREE_SHIFT)
  598. #define ddrcReg_CTLR_PHY_GLUE_CFG_DIV2CLK_TREE_SHALLOW (1 << ddrcReg_CTLR_PHY_GLUE_CFG_DIV2CLK_TREE_SHIFT)
  599. #define ddrcReg_CTLR_PHY_GLUE_CFG_HW_FIXED_ALIGNMENT_DISABLED ddrcReg_CTLR_PHY_GLUE_CFG_DIV2CLK_TREE_SHALLOW
  600. #define ddrcReg_CTLR_PHY_GLUE_CFG_SYNC_BRIDGE_SHIFT 15
  601. #define ddrcReg_CTLR_PHY_GLUE_CFG_SYNC_BRIDGE_MASK (1 << ddrcReg_CTLR_PHY_GLUE_CFG_SYNC_BRIDGE_SHIFT)
  602. #define ddrcReg_CTLR_PHY_GLUE_CFG_SYNC_BRIDGE_BP134 (0 << ddrcReg_CTLR_PHY_GLUE_CFG_SYNC_BRIDGE_SHIFT)
  603. #define ddrcReg_CTLR_PHY_GLUE_CFG_SYNC_BRIDGE_PL301 (1 << ddrcReg_CTLR_PHY_GLUE_CFG_SYNC_BRIDGE_SHIFT)
  604. #define ddrcReg_CTLR_PHY_GLUE_CFG_SYNC_BRIDGE_REGISTERED ddrcReg_CTLR_PHY_GLUE_CFG_SYNC_BRIDGE_PL301
  605. /* Software control of PHY VDL updates from control register settings. Bit 13 enables the use of Bit 14. */
  606. /* If software control is not enabled, then updates occur when a refresh command is issued by the hardware */
  607. /* controller. If 2 chips selects are being used, then software control must be enabled. */
  608. #define ddrcReg_CTLR_PHY_GLUE_CFG_PHY_VDL_UPDATE_SW_CTL_LOAD (1 << 14)
  609. #define ddrcReg_CTLR_PHY_GLUE_CFG_PHY_VDL_UPDATE_SW_CTL_ENABLE (1 << 13)
  610. /* Use these to bypass a pipeline stage. By default the ADDR is off but the BYTE LANE in / out are on. */
  611. #define ddrcReg_CTLR_PHY_GLUE_CFG_PHY_ADDR_CTL_IN_BYPASS_PIPELINE_STAGE (1 << 12)
  612. #define ddrcReg_CTLR_PHY_GLUE_CFG_PHY_BYTE_LANE_IN_BYPASS_PIPELINE_STAGE (1 << 11)
  613. #define ddrcReg_CTLR_PHY_GLUE_CFG_PHY_BYTE_LANE_OUT_BYPASS_PIPELINE_STAGE (1 << 10)
  614. /* Chip select count */
  615. #define ddrcReg_CTLR_PHY_GLUE_CFG_CS_CNT_SHIFT 9
  616. #define ddrcReg_CTLR_PHY_GLUE_CFG_CS_CNT_MASK (1 << ddrcReg_CTLR_PHY_GLUE_CFG_CS_CNT_SHIFT)
  617. #define ddrcReg_CTLR_PHY_GLUE_CFG_CS_CNT_1 (0 << ddrcReg_CTLR_PHY_GLUE_CFG_CS_CNT_SHIFT)
  618. #define ddrcReg_CTLR_PHY_GLUE_CFG_CS_CNT_2 (1 << ddrcReg_CTLR_PHY_GLUE_CFG_CS_CNT_SHIFT)
  619. #define ddrcReg_CTLR_PHY_GLUE_CFG_CLK_SHIFT 8
  620. #define ddrcReg_CTLR_PHY_GLUE_CFG_CLK_ASYNC (0 << ddrcReg_CTLR_PHY_GLUE_CFG_CLK_SHIFT)
  621. #define ddrcReg_CTLR_PHY_GLUE_CFG_CLK_SYNC (1 << ddrcReg_CTLR_PHY_GLUE_CFG_CLK_SHIFT)
  622. #define ddrcReg_CTLR_PHY_GLUE_CFG_CKE_INIT_SHIFT 7
  623. #define ddrcReg_CTLR_PHY_GLUE_CFG_CKE_INIT_LOW (0 << ddrcReg_CTLR_PHY_GLUE_CFG_CKE_INIT_SHIFT)
  624. #define ddrcReg_CTLR_PHY_GLUE_CFG_CKE_INIT_HIGH (1 << ddrcReg_CTLR_PHY_GLUE_CFG_CKE_INIT_SHIFT)
  625. #define ddrcReg_CTLR_PHY_GLUE_CFG_DQM_INIT_SHIFT 6
  626. #define ddrcReg_CTLR_PHY_GLUE_CFG_DQM_INIT_LOW (0 << ddrcReg_CTLR_PHY_GLUE_CFG_DQM_INIT_SHIFT)
  627. #define ddrcReg_CTLR_PHY_GLUE_CFG_DQM_INIT_HIGH (1 << ddrcReg_CTLR_PHY_GLUE_CFG_DQM_INIT_SHIFT)
  628. #define ddrcReg_CTLR_PHY_GLUE_CFG_CAS_LATENCY_SHIFT 0
  629. #define ddrcReg_CTLR_PHY_GLUE_CFG_CAS_LATENCY_MASK (0x7 << ddrcReg_CTLR_PHY_GLUE_CFG_CAS_LATENCY_SHIFT)
  630. /* ----------------------------------------------------- */
  631. #define ddrcReg_CTLR_PHY_GLUE_STATUS_PHASE_SHIFT 0
  632. #define ddrcReg_CTLR_PHY_GLUE_STATUS_PHASE_MASK (0x7f << ddrcReg_CTLR_PHY_GLUE_STATUS_PHASE_SHIFT)
  633. /* ---- Public Function Prototypes --------------------------------------- */
  634. #ifdef __cplusplus
  635. } /* end extern "C" */
  636. #endif
  637. #endif /* DDRC_REG_H */