dwcddr21mctl.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. /*
  2. * (C) Copyright 2011 Andes Technology Corp
  3. * Macpaul Lin <macpaul@andestech.com>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 2 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program; if not, write to the Free Software
  17. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. */
  19. /*
  20. * DWCDDR21MCTL - Synopsys DWC DDR2/DDR1 Memory Controller
  21. */
  22. #ifndef __DWCDDR21MCTL_H
  23. #define __DWCDDR21MCTL_H
  24. #ifndef __ASSEMBLY__
  25. struct dwcddr21mctl {
  26. unsigned int ccr; /* Controller Configuration */
  27. unsigned int dcr; /* DRAM Configuration */
  28. unsigned int iocr; /* I/O Configuration */
  29. unsigned int csr; /* Controller Status */
  30. unsigned int drr; /* DRAM refresh */
  31. unsigned int tpr0; /* SDRAM Timing Parameters 0 */
  32. unsigned int tpr1; /* SDRAM Timing Parameters 1 */
  33. unsigned int tpr2; /* SDRAM Timing Parameters 2 */
  34. unsigned int gdllcr; /* Global DLL Control */
  35. unsigned int dllcr[10]; /* DLL Control */
  36. unsigned int rslr[4]; /* Rank System Lantency */
  37. unsigned int rdgr[4]; /* Rank DQS Gating */
  38. unsigned int dqtr[9]; /* DQ Timing */
  39. unsigned int dqstr; /* DQS Timing */
  40. unsigned int dqsbtr; /* DQS_b Timing */
  41. unsigned int odtcr; /* ODT Configuration */
  42. unsigned int dtr[2]; /* Data Training */
  43. unsigned int dtar; /* Data Training Address */
  44. unsigned int rsved[82]; /* Reserved */
  45. unsigned int mr; /* Mode Register */
  46. unsigned int emr; /* Extended Mode Register */
  47. unsigned int emr2; /* Extended Mode Register 2 */
  48. unsigned int emr3; /* Extended Mode Register 3 */
  49. unsigned int hpcr[32]; /* Host Port Configurarion */
  50. unsigned int pqcr[8]; /* Priority Queue Configuration */
  51. unsigned int mmgcr; /* Memory Manager General Config */
  52. };
  53. #endif /* __ASSEMBLY__ */
  54. /*
  55. * Control Configuration Register
  56. */
  57. #define DWCDDR21MCTL_CCR_ECCEN(x) ((x) << 0)
  58. #define DWCDDR21MCTL_CCR_NOMRWR(x) ((x) << 1)
  59. #define DWCDDR21MCTL_CCR_HOSTEN(x) ((x) << 2)
  60. #define DWCDDR21MCTL_CCR_XBISC(x) ((x) << 3)
  61. #define DWCDDR21MCTL_CCR_NOAPD(x) ((x) << 4)
  62. #define DWCDDR21MCTL_CCR_RRB(x) ((x) << 13)
  63. #define DWCDDR21MCTL_CCR_DQSCFG(x) ((x) << 14)
  64. #define DWCDDR21MCTL_CCR_DFTLM(x) (((x) & 0x3) << 15)
  65. #define DWCDDR21MCTL_CCR_DFTCMP(x) ((x) << 17)
  66. #define DWCDDR21MCTL_CCR_FLUSH(x) ((x) << 27)
  67. #define DWCDDR21MCTL_CCR_ITMRST(x) ((x) << 28)
  68. #define DWCDDR21MCTL_CCR_IB(x) ((x) << 29)
  69. #define DWCDDR21MCTL_CCR_DTT(x) ((x) << 30)
  70. #define DWCDDR21MCTL_CCR_IT(x) ((x) << 31)
  71. /*
  72. * DRAM Configuration Register
  73. */
  74. #define DWCDDR21MCTL_DCR_DDRMD(x) ((x) << 0)
  75. #define DWCDDR21MCTL_DCR_DIO(x) (((x) & 0x3) << 1)
  76. #define DWCDDR21MCTL_DCR_DSIZE(x) (((x) & 0x7) << 3)
  77. #define DWCDDR21MCTL_DCR_SIO(x) (((x) & 0x7) << 6)
  78. #define DWCDDR21MCTL_DCR_PIO(x) ((x) << 9)
  79. #define DWCDDR21MCTL_DCR_RANKS(x) (((x) & 0x3) << 10)
  80. #define DWCDDR21MCTL_DCR_RNKALL(x) ((x) << 12)
  81. #define DWCDDR21MCTL_DCR_AMAP(x) (((x) & 0x3) << 13)
  82. #define DWCDDR21MCTL_DCR_RANK(x) (((x) & 0x3) << 25)
  83. #define DWCDDR21MCTL_DCR_CMD(x) (((x) & 0xf) << 27)
  84. #define DWCDDR21MCTL_DCR_EXE(x) ((x) << 31)
  85. /*
  86. * I/O Configuration Register
  87. */
  88. #define DWCDDR21MCTL_IOCR_RTT(x) (((x) & 0xf) << 0)
  89. #define DWCDDR21MCTL_IOCR_DS(x) (((x) & 0xf) << 4)
  90. #define DWCDDR21MCTL_IOCR_TESTEN(x) ((x) << 0x8)
  91. #define DWCDDR21MCTL_IOCR_RTTOH(x) (((x) & 0x7) << 26)
  92. #define DWCDDR21MCTL_IOCR_RTTOE(x) ((x) << 29)
  93. #define DWCDDR21MCTL_IOCR_DQRTT(x) ((x) << 30)
  94. #define DWCDDR21MCTL_IOCR_DQSRTT(x) ((x) << 31)
  95. /*
  96. * Controller Status Register
  97. */
  98. #define DWCDDR21MCTL_CSR_DRIFT(x) (((x) & 0x3ff) << 0)
  99. #define DWCDDR21MCTL_CSR_DFTERR(x) ((x) << 18)
  100. #define DWCDDR21MCTL_CSR_ECCERR(x) ((x) << 19)
  101. #define DWCDDR21MCTL_CSR_DTERR(x) ((x) << 20)
  102. #define DWCDDR21MCTL_CSR_DTIERR(x) ((x) << 21)
  103. #define DWCDDR21MCTL_CSR_ECCSEC(x) ((x) << 22)
  104. /*
  105. * DRAM Refresh Register
  106. */
  107. #define DWCDDR21MCTL_DRR_TRFC(x) (((x) & 0xff) << 0)
  108. #define DWCDDR21MCTL_DRR_TRFPRD(x) (((x) & 0xffff) << 8)
  109. #define DWCDDR21MCTL_DRR_RFBURST(x) (((x) & 0xf) << 24)
  110. #define DWCDDR21MCTL_DRR_RD(x) ((x) << 31)
  111. /*
  112. * SDRAM Timing Parameters Register 0
  113. */
  114. #define DWCDDR21MCTL_TPR0_TMRD(x) (((x) & 0x3) << 0)
  115. #define DWCDDR21MCTL_TPR0_TRTP(x) (((x) & 0x7) << 2)
  116. #define DWCDDR21MCTL_TPR0_TWTR(x) (((x) & 0x7) << 5)
  117. #define DWCDDR21MCTL_TPR0_TRP(x) (((x) & 0xf) << 8)
  118. #define DWCDDR21MCTL_TPR0_TRCD(x) (((x) & 0xf) << 12)
  119. #define DWCDDR21MCTL_TPR0_TRAS(x) (((x) & 0x1f) << 16)
  120. #define DWCDDR21MCTL_TPR0_TRRD(x) (((x) & 0xf) << 21)
  121. #define DWCDDR21MCTL_TPR0_TRC(x) (((x) & 0x3f) << 25)
  122. #define DWCDDR21MCTL_TPR0_TCCD(x) ((x) << 31)
  123. /*
  124. * SDRAM Timing Parameters Register 1
  125. */
  126. #define DWCDDR21MCTL_TPR1_TAOND(x) (((x) & 0x3) << 0)
  127. #define DWCDDR21MCTL_TPR1_TRTW(x) ((x) << 2)
  128. #define DWCDDR21MCTL_TPR1_TFAW(x) (((x) & 0x3f) << 3)
  129. #define DWCDDR21MCTL_TPR1_TRNKRTR(x) (((x) & 0x3) << 12)
  130. #define DWCDDR21MCTL_TPR1_TRNKWTW(x) (((x) & 0x3) << 14)
  131. #define DWCDDR21MCTL_TPR1_XCL(x) (((x) & 0xf) << 23)
  132. #define DWCDDR21MCTL_TPR1_XWR(x) (((x) & 0xf) << 27)
  133. #define DWCDDR21MCTL_TPR1_XTP(x) ((x) << 31)
  134. /*
  135. * SDRAM Timing Parameters Register 2
  136. */
  137. #define DWCDDR21MCTL_TPR2_TXS(x) (((x) & 0x3ff) << 0)
  138. #define DWCDDR21MCTL_TPR2_TXP(x) (((x) & 0x1f) << 10)
  139. #define DWCDDR21MCTL_TPR2_TCKE(x) (((x) & 0xf) << 15)
  140. /*
  141. * Global DLL Control Register
  142. */
  143. #define DWCDDR21MCTL_GDLLCR_DRES(x) (((x) & 0x3) << 0)
  144. #define DWCDDR21MCTL_GDLLCR_IPUMP(x) (((x) & 0x7) << 2)
  145. #define DWCDDR21MCTL_GDLLCR_TESTEN(x) ((x) << 5)
  146. #define DWCDDR21MCTL_GDLLCR_DTC(x) (((x) & 0x7) << 6)
  147. #define DWCDDR21MCTL_GDLLCR_ATC(x) (((x) & 0x3) << 9)
  148. #define DWCDDR21MCTL_GDLLCR_TESTSW(x) ((x) << 11)
  149. #define DWCDDR21MCTL_GDLLCR_MBIAS(x) (((x) & 0xff) << 12)
  150. #define DWCDDR21MCTL_GDLLCR_SBIAS(x) (((x) & 0xff) << 20)
  151. #define DWCDDR21MCTL_GDLLCR_LOCKDET(x) ((x) << 29)
  152. /*
  153. * DLL Control Register 0-9
  154. */
  155. #define DWCDDR21MCTL_DLLCR_SFBDLY(x) (((x) & 0x7) << 0)
  156. #define DWCDDR21MCTL_DLLCR_SFWDLY(x) (((x) & 0x7) << 3)
  157. #define DWCDDR21MCTL_DLLCR_MFBDLY(x) (((x) & 0x7) << 6)
  158. #define DWCDDR21MCTL_DLLCR_MFWDLY(x) (((x) & 0x7) << 9)
  159. #define DWCDDR21MCTL_DLLCR_SSTART(x) (((x) & 0x3) << 12)
  160. #define DWCDDR21MCTL_DLLCR_PHASE(x) (((x) & 0xf) << 14)
  161. #define DWCDDR21MCTL_DLLCR_ATESTEN(x) ((x) << 18)
  162. #define DWCDDR21MCTL_DLLCR_DRSVD(x) ((x) << 19)
  163. #define DWCDDR21MCTL_DLLCR_DD(x) ((x) << 31)
  164. /*
  165. * Rank System Lantency Register
  166. */
  167. #define DWCDDR21MCTL_RSLR_SL0(x) (((x) & 0x7) << 0)
  168. #define DWCDDR21MCTL_RSLR_SL1(x) (((x) & 0x7) << 3)
  169. #define DWCDDR21MCTL_RSLR_SL2(x) (((x) & 0x7) << 6)
  170. #define DWCDDR21MCTL_RSLR_SL3(x) (((x) & 0x7) << 9)
  171. #define DWCDDR21MCTL_RSLR_SL4(x) (((x) & 0x7) << 12)
  172. #define DWCDDR21MCTL_RSLR_SL5(x) (((x) & 0x7) << 15)
  173. #define DWCDDR21MCTL_RSLR_SL6(x) (((x) & 0x7) << 18)
  174. #define DWCDDR21MCTL_RSLR_SL7(x) (((x) & 0x7) << 21)
  175. #define DWCDDR21MCTL_RSLR_SL8(x) (((x) & 0x7) << 24)
  176. /*
  177. * Rank DQS Gating Register
  178. */
  179. #define DWCDDR21MCTL_RDGR_DQSSEL0(x) (((x) & 0x3) << 0)
  180. #define DWCDDR21MCTL_RDGR_DQSSEL1(x) (((x) & 0x3) << 2)
  181. #define DWCDDR21MCTL_RDGR_DQSSEL2(x) (((x) & 0x3) << 4)
  182. #define DWCDDR21MCTL_RDGR_DQSSEL3(x) (((x) & 0x3) << 6)
  183. #define DWCDDR21MCTL_RDGR_DQSSEL4(x) (((x) & 0x3) << 8)
  184. #define DWCDDR21MCTL_RDGR_DQSSEL5(x) (((x) & 0x3) << 10)
  185. #define DWCDDR21MCTL_RDGR_DQSSEL6(x) (((x) & 0x3) << 12)
  186. #define DWCDDR21MCTL_RDGR_DQSSEL7(x) (((x) & 0x3) << 14)
  187. #define DWCDDR21MCTL_RDGR_DQSSEL8(x) (((x) & 0x3) << 16)
  188. /*
  189. * DQ Timing Register
  190. */
  191. #define DWCDDR21MCTL_DQTR_DQDLY0(x) (((x) & 0xf) << 0)
  192. #define DWCDDR21MCTL_DQTR_DQDLY1(x) (((x) & 0xf) << 4)
  193. #define DWCDDR21MCTL_DQTR_DQDLY2(x) (((x) & 0xf) << 8)
  194. #define DWCDDR21MCTL_DQTR_DQDLY3(x) (((x) & 0xf) << 12)
  195. #define DWCDDR21MCTL_DQTR_DQDLY4(x) (((x) & 0xf) << 16)
  196. #define DWCDDR21MCTL_DQTR_DQDLY5(x) (((x) & 0xf) << 20)
  197. #define DWCDDR21MCTL_DQTR_DQDLY6(x) (((x) & 0xf) << 24)
  198. #define DWCDDR21MCTL_DQTR_DQDLY7(x) (((x) & 0xf) << 28)
  199. /*
  200. * DQS Timing Register
  201. */
  202. #define DWCDDR21MCTL_DQSTR_DQSDLY0(x) (((x) & 0x7) << 0)
  203. #define DWCDDR21MCTL_DQSTR_DQSDLY1(x) (((x) & 0x7) << 3)
  204. #define DWCDDR21MCTL_DQSTR_DQSDLY2(x) (((x) & 0x7) << 6)
  205. #define DWCDDR21MCTL_DQSTR_DQSDLY3(x) (((x) & 0x7) << 9)
  206. #define DWCDDR21MCTL_DQSTR_DQSDLY4(x) (((x) & 0x7) << 12)
  207. #define DWCDDR21MCTL_DQSTR_DQSDLY5(x) (((x) & 0x7) << 15)
  208. #define DWCDDR21MCTL_DQSTR_DQSDLY6(x) (((x) & 0x7) << 18)
  209. #define DWCDDR21MCTL_DQSTR_DQSDLY7(x) (((x) & 0x7) << 21)
  210. #define DWCDDR21MCTL_DQSTR_DQSDLY8(x) (((x) & 0x7) << 24)
  211. /*
  212. * DQS_b (DQSBTR) Timing Register
  213. */
  214. #define DWCDDR21MCTL_DQSBTR_DQSDLY0(x) (((x) & 0x7) << 0)
  215. #define DWCDDR21MCTL_DQSBTR_DQSDLY1(x) (((x) & 0x7) << 3)
  216. #define DWCDDR21MCTL_DQSBTR_DQSDLY2(x) (((x) & 0x7) << 6)
  217. #define DWCDDR21MCTL_DQSBTR_DQSDLY3(x) (((x) & 0x7) << 9)
  218. #define DWCDDR21MCTL_DQSBTR_DQSDLY4(x) (((x) & 0x7) << 12)
  219. #define DWCDDR21MCTL_DQSBTR_DQSDLY5(x) (((x) & 0x7) << 15)
  220. #define DWCDDR21MCTL_DQSBTR_DQSDLY6(x) (((x) & 0x7) << 18)
  221. #define DWCDDR21MCTL_DQSBTR_DQSDLY7(x) (((x) & 0x7) << 21)
  222. #define DWCDDR21MCTL_DQSBTR_DQSDLY8(x) (((x) & 0x7) << 24)
  223. /*
  224. * ODT Configuration Register
  225. */
  226. #define DWCDDR21MCTL_ODTCR_RDODT0(x) (((x) & 0xf) << 0)
  227. #define DWCDDR21MCTL_ODTCR_RDODT1(x) (((x) & 0xf) << 4)
  228. #define DWCDDR21MCTL_ODTCR_RDODT2(x) (((x) & 0xf) << 8)
  229. #define DWCDDR21MCTL_ODTCR_RDODT3(x) (((x) & 0xf) << 12)
  230. #define DWCDDR21MCTL_ODTCR_WDODT0(x) (((x) & 0xf) << 16)
  231. #define DWCDDR21MCTL_ODTCR_WDODT1(x) (((x) & 0xf) << 20)
  232. #define DWCDDR21MCTL_ODTCR_WDODT2(x) (((x) & 0xf) << 24)
  233. #define DWCDDR21MCTL_ODTCR_WDODT3(x) (((x) & 0xf) << 28)
  234. /*
  235. * Data Training Register
  236. */
  237. #define DWCDDR21MCTL_DTR0_DTBYTE0(x) (((x) & 0xff) << 0) /* def: 0x11 */
  238. #define DWCDDR21MCTL_DTR0_DTBYTE1(x) (((x) & 0xff) << 8) /* def: 0xee */
  239. #define DWCDDR21MCTL_DTR0_DTBYTE2(x) (((x) & 0xff) << 16) /* def: 0x22 */
  240. #define DWCDDR21MCTL_DTR0_DTBYTE3(x) (((x) & 0xff) << 24) /* def: 0xdd */
  241. #define DWCDDR21MCTL_DTR1_DTBYTE4(x) (((x) & 0xff) << 0) /* def: 0x44 */
  242. #define DWCDDR21MCTL_DTR1_DTBYTE5(x) (((x) & 0xff) << 8) /* def: 0xbb */
  243. #define DWCDDR21MCTL_DTR1_DTBYTE6(x) (((x) & 0xff) << 16) /* def: 0x88 */
  244. #define DWCDDR21MCTL_DTR1_DTBYTE7(x) (((x) & 0xff) << 24) /* def: 0x77 */
  245. /*
  246. * Data Training Address Register
  247. */
  248. #define DWCDDR21MCTL_DTAR_DTCOL(x) (((x) & 0xfff) << 0)
  249. #define DWCDDR21MCTL_DTAR_DTROW(x) (((x) & 0xffff) << 12)
  250. #define DWCDDR21MCTL_DTAR_DTBANK(x) (((x) & 0x7) << 28)
  251. /*
  252. * Mode Register
  253. */
  254. #define DWCDDR21MCTL_MR_BL(x) (((x) & 0x7) << 0)
  255. #define DWCDDR21MCTL_MR_BT(x) ((x) << 3)
  256. #define DWCDDR21MCTL_MR_CL(x) (((x) & 0x7) << 4)
  257. #define DWCDDR21MCTL_MR_TM(x) ((x) << 7)
  258. #define DWCDDR21MCTL_MR_DR(x) ((x) << 8)
  259. #define DWCDDR21MCTL_MR_WR(x) (((x) & 0x7) << 9)
  260. #define DWCDDR21MCTL_MR_PD(x) ((x) << 12)
  261. /*
  262. * Extended Mode register
  263. */
  264. #define DWCDDR21MCTL_EMR_DE(x) ((x) << 0)
  265. #define DWCDDR21MCTL_EMR_ODS(x) ((x) << 1)
  266. #define DWCDDR21MCTL_EMR_RTT2(x) ((x) << 2)
  267. #define DWCDDR21MCTL_EMR_AL(x) (((x) & 0x7) << 3)
  268. #define DWCDDR21MCTL_EMR_RTT6(x) ((x) << 6)
  269. #define DWCDDR21MCTL_EMR_OCD(x) (((x) & 0x7) << 7)
  270. #define DWCDDR21MCTL_EMR_DQS(x) ((x) << 10)
  271. #define DWCDDR21MCTL_EMR_RDQS(x) ((x) << 11)
  272. #define DWCDDR21MCTL_EMR_OE(x) ((x) << 12)
  273. #define EMR_RTT2(x) DWCDDR21MCTL_EMR_RTT2(x)
  274. #define EMR_RTT6(x) DWCDDR21MCTL_EMR_RTT6(x)
  275. #define DWCDDR21MCTL_EMR_RTT_DISABLED (EMR_RTT6(0) | EMR_RTT2(0))
  276. #define DWCDDR21MCTL_EMR_RTT_75 (EMR_RTT6(0) | EMR_RTT2(1))
  277. #define DWCDDR21MCTL_EMR_RTT_150 (EMR_RTT6(1) | EMR_RTT2(0))
  278. #define DWCDDR21MCTL_EMR_RTT_50 (EMR_RTT6(1) | EMR_RTT2(1))
  279. /*
  280. * Extended Mode register 2
  281. */
  282. #define DWCDDR21MCTL_EMR2_PASR(x) (((x) & 0x7) << 0)
  283. #define DWCDDR21MCTL_EMR2_DCC(x) ((x) << 3)
  284. #define DWCDDR21MCTL_EMR2_SRF(x) ((x) << 7)
  285. /*
  286. * Extended Mode register 3: [15:0] reserved for JEDEC.
  287. */
  288. /*
  289. * Host port Configuration register 0-31
  290. */
  291. #define DWCDDR21MCTL_HPCR_HPBL(x) (((x) & 0xf) << 0)
  292. /*
  293. * Priority Queue Configuration register 0-7
  294. */
  295. #define DWCDDR21MCTL_HPCR_TOUT(x) (((x) & 0xf) << 0)
  296. #define DWCDDR21MCTL_HPCR_TOUTX(x) (((x) & 0x3) << 8)
  297. #define DWCDDR21MCTL_HPCR_LPQS(x) (((x) & 0x3) << 10)
  298. #define DWCDDR21MCTL_HPCR_PQBL(x) (((x) & 0xff) << 12)
  299. #define DWCDDR21MCTL_HPCR_SWAIT(x) (((x) & 0x1f) << 20)
  300. #define DWCDDR21MCTL_HPCR_INTRPT(x) (((x) & 0x7) << 25)
  301. #define DWCDDR21MCTL_HPCR_APQS(x) ((x) << 28)
  302. /*
  303. * Memory Manager General Configuration register
  304. */
  305. #define DWCDDR21MCTL_MMGCR_UHPP(x) (((x) & 0x3) << 0)
  306. #endif /* __DWCDDR21MCTL_H */