tegra210-emc.h 39 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (c) 2015-2020, NVIDIA CORPORATION. All rights reserved.
  4. */
  5. #ifndef TEGRA210_EMC_H
  6. #define TEGRA210_EMC_H
  7. #include <linux/clk.h>
  8. #include <linux/clk/tegra.h>
  9. #include <linux/io.h>
  10. #include <linux/platform_device.h>
  11. #define DVFS_FGCG_HIGH_SPEED_THRESHOLD 1000
  12. #define IOBRICK_DCC_THRESHOLD 2400
  13. #define DVFS_FGCG_MID_SPEED_THRESHOLD 600
  14. #define EMC_STATUS_UPDATE_TIMEOUT 1000
  15. /* register definitions */
  16. #define EMC_INTSTATUS 0x0
  17. #define EMC_INTSTATUS_CLKCHANGE_COMPLETE BIT(4)
  18. #define EMC_DBG 0x8
  19. #define EMC_DBG_WRITE_MUX_ACTIVE BIT(1)
  20. #define EMC_DBG_WRITE_ACTIVE_ONLY BIT(30)
  21. #define EMC_CFG 0xc
  22. #define EMC_CFG_DRAM_CLKSTOP_PD BIT(31)
  23. #define EMC_CFG_DRAM_CLKSTOP_SR BIT(30)
  24. #define EMC_CFG_DRAM_ACPD BIT(29)
  25. #define EMC_CFG_DYN_SELF_REF BIT(28)
  26. #define EMC_PIN 0x24
  27. #define EMC_PIN_PIN_CKE BIT(0)
  28. #define EMC_PIN_PIN_CKEB BIT(1)
  29. #define EMC_PIN_PIN_CKE_PER_DEV BIT(2)
  30. #define EMC_TIMING_CONTROL 0x28
  31. #define EMC_RC 0x2c
  32. #define EMC_RFC 0x30
  33. #define EMC_RAS 0x34
  34. #define EMC_RP 0x38
  35. #define EMC_R2W 0x3c
  36. #define EMC_W2R 0x40
  37. #define EMC_R2P 0x44
  38. #define EMC_W2P 0x48
  39. #define EMC_RD_RCD 0x4c
  40. #define EMC_WR_RCD 0x50
  41. #define EMC_RRD 0x54
  42. #define EMC_REXT 0x58
  43. #define EMC_WDV 0x5c
  44. #define EMC_QUSE 0x60
  45. #define EMC_QRST 0x64
  46. #define EMC_QSAFE 0x68
  47. #define EMC_RDV 0x6c
  48. #define EMC_REFRESH 0x70
  49. #define EMC_BURST_REFRESH_NUM 0x74
  50. #define EMC_PDEX2WR 0x78
  51. #define EMC_PDEX2RD 0x7c
  52. #define EMC_PCHG2PDEN 0x80
  53. #define EMC_ACT2PDEN 0x84
  54. #define EMC_AR2PDEN 0x88
  55. #define EMC_RW2PDEN 0x8c
  56. #define EMC_TXSR 0x90
  57. #define EMC_TCKE 0x94
  58. #define EMC_TFAW 0x98
  59. #define EMC_TRPAB 0x9c
  60. #define EMC_TCLKSTABLE 0xa0
  61. #define EMC_TCLKSTOP 0xa4
  62. #define EMC_TREFBW 0xa8
  63. #define EMC_TPPD 0xac
  64. #define EMC_ODT_WRITE 0xb0
  65. #define EMC_PDEX2MRR 0xb4
  66. #define EMC_WEXT 0xb8
  67. #define EMC_RFC_SLR 0xc0
  68. #define EMC_MRS_WAIT_CNT2 0xc4
  69. #define EMC_MRS_WAIT_CNT2_MRS_EXT2_WAIT_CNT_SHIFT 16
  70. #define EMC_MRS_WAIT_CNT2_MRS_EXT1_WAIT_CNT_SHIFT 0
  71. #define EMC_MRS_WAIT_CNT 0xc8
  72. #define EMC_MRS_WAIT_CNT_SHORT_WAIT_SHIFT 0
  73. #define EMC_MRS_WAIT_CNT_SHORT_WAIT_MASK \
  74. (0x3FF << EMC_MRS_WAIT_CNT_SHORT_WAIT_SHIFT)
  75. #define EMC_MRS 0xcc
  76. #define EMC_EMRS 0xd0
  77. #define EMC_EMRS_USE_EMRS_LONG_CNT BIT(26)
  78. #define EMC_REF 0xd4
  79. #define EMC_REF_REF_CMD BIT(0)
  80. #define EMC_SELF_REF 0xe0
  81. #define EMC_MRW 0xe8
  82. #define EMC_MRW_MRW_OP_SHIFT 0
  83. #define EMC_MRW_MRW_OP_MASK \
  84. (0xff << EMC_MRW_MRW_OP_SHIFT)
  85. #define EMC_MRW_MRW_MA_SHIFT 16
  86. #define EMC_MRW_USE_MRW_EXT_CNT 27
  87. #define EMC_MRW_MRW_DEV_SELECTN_SHIFT 30
  88. #define EMC_MRR 0xec
  89. #define EMC_MRR_DEV_SEL_SHIFT 30
  90. #define EMC_MRR_DEV_SEL_MASK 0x3
  91. #define EMC_MRR_MA_SHIFT 16
  92. #define EMC_MRR_MA_MASK 0xff
  93. #define EMC_MRR_DATA_SHIFT 0
  94. #define EMC_MRR_DATA_MASK 0xffff
  95. #define EMC_FBIO_SPARE 0x100
  96. #define EMC_FBIO_CFG5 0x104
  97. #define EMC_FBIO_CFG5_DRAM_TYPE_SHIFT 0
  98. #define EMC_FBIO_CFG5_DRAM_TYPE_MASK \
  99. (0x3 << EMC_FBIO_CFG5_DRAM_TYPE_SHIFT)
  100. #define EMC_FBIO_CFG5_CMD_TX_DIS BIT(8)
  101. #define EMC_PDEX2CKE 0x118
  102. #define EMC_CKE2PDEN 0x11c
  103. #define EMC_MPC 0x128
  104. #define EMC_EMRS2 0x12c
  105. #define EMC_EMRS2_USE_EMRS2_LONG_CNT BIT(26)
  106. #define EMC_MRW2 0x134
  107. #define EMC_MRW3 0x138
  108. #define EMC_MRW4 0x13c
  109. #define EMC_R2R 0x144
  110. #define EMC_EINPUT 0x14c
  111. #define EMC_EINPUT_DURATION 0x150
  112. #define EMC_PUTERM_EXTRA 0x154
  113. #define EMC_TCKESR 0x158
  114. #define EMC_TPD 0x15c
  115. #define EMC_AUTO_CAL_CONFIG 0x2a4
  116. #define EMC_AUTO_CAL_CONFIG_AUTO_CAL_COMPUTE_START BIT(0)
  117. #define EMC_AUTO_CAL_CONFIG_AUTO_CAL_MEASURE_STALL BIT(9)
  118. #define EMC_AUTO_CAL_CONFIG_AUTO_CAL_UPDATE_STALL BIT(10)
  119. #define EMC_AUTO_CAL_CONFIG_AUTO_CAL_ENABLE BIT(29)
  120. #define EMC_AUTO_CAL_CONFIG_AUTO_CAL_START BIT(31)
  121. #define EMC_EMC_STATUS 0x2b4
  122. #define EMC_EMC_STATUS_MRR_DIVLD BIT(20)
  123. #define EMC_EMC_STATUS_TIMING_UPDATE_STALLED BIT(23)
  124. #define EMC_EMC_STATUS_DRAM_IN_POWERDOWN_SHIFT 4
  125. #define EMC_EMC_STATUS_DRAM_IN_POWERDOWN_MASK \
  126. (0x3 << EMC_EMC_STATUS_DRAM_IN_POWERDOWN_SHIFT)
  127. #define EMC_EMC_STATUS_DRAM_IN_SELF_REFRESH_SHIFT 8
  128. #define EMC_EMC_STATUS_DRAM_IN_SELF_REFRESH_MASK \
  129. (0x3 << EMC_EMC_STATUS_DRAM_IN_SELF_REFRESH_SHIFT)
  130. #define EMC_CFG_2 0x2b8
  131. #define EMC_CFG_DIG_DLL 0x2bc
  132. #define EMC_CFG_DIG_DLL_CFG_DLL_EN BIT(0)
  133. #define EMC_CFG_DIG_DLL_CFG_DLL_STALL_ALL_UNTIL_LOCK BIT(1)
  134. #define EMC_CFG_DIG_DLL_CFG_DLL_STALL_ALL_TRAFFIC BIT(3)
  135. #define EMC_CFG_DIG_DLL_CFG_DLL_STALL_RW_UNTIL_LOCK BIT(4)
  136. #define EMC_CFG_DIG_DLL_CFG_DLL_MODE_SHIFT 6
  137. #define EMC_CFG_DIG_DLL_CFG_DLL_MODE_MASK \
  138. (0x3 << EMC_CFG_DIG_DLL_CFG_DLL_MODE_SHIFT)
  139. #define EMC_CFG_DIG_DLL_CFG_DLL_LOCK_LIMIT_SHIFT 8
  140. #define EMC_CFG_DIG_DLL_CFG_DLL_LOCK_LIMIT_MASK \
  141. (0x7 << EMC_CFG_DIG_DLL_CFG_DLL_LOCK_LIMIT_SHIFT)
  142. #define EMC_CFG_DIG_DLL_PERIOD 0x2c0
  143. #define EMC_DIG_DLL_STATUS 0x2c4
  144. #define EMC_DIG_DLL_STATUS_DLL_LOCK BIT(15)
  145. #define EMC_DIG_DLL_STATUS_DLL_PRIV_UPDATED BIT(17)
  146. #define EMC_DIG_DLL_STATUS_DLL_OUT_SHIFT 0
  147. #define EMC_DIG_DLL_STATUS_DLL_OUT_MASK \
  148. (0x7ff << EMC_DIG_DLL_STATUS_DLL_OUT_SHIFT)
  149. #define EMC_CFG_DIG_DLL_1 0x2c8
  150. #define EMC_RDV_MASK 0x2cc
  151. #define EMC_WDV_MASK 0x2d0
  152. #define EMC_RDV_EARLY_MASK 0x2d4
  153. #define EMC_RDV_EARLY 0x2d8
  154. #define EMC_AUTO_CAL_CONFIG8 0x2dc
  155. #define EMC_ZCAL_INTERVAL 0x2e0
  156. #define EMC_ZCAL_WAIT_CNT 0x2e4
  157. #define EMC_ZCAL_WAIT_CNT_ZCAL_WAIT_CNT_MASK 0x7ff
  158. #define EMC_ZCAL_WAIT_CNT_ZCAL_WAIT_CNT_SHIFT 0
  159. #define EMC_ZQ_CAL 0x2ec
  160. #define EMC_ZQ_CAL_DEV_SEL_SHIFT 30
  161. #define EMC_ZQ_CAL_LONG BIT(4)
  162. #define EMC_ZQ_CAL_ZQ_LATCH_CMD BIT(1)
  163. #define EMC_ZQ_CAL_ZQ_CAL_CMD BIT(0)
  164. #define EMC_FDPD_CTRL_DQ 0x310
  165. #define EMC_FDPD_CTRL_CMD 0x314
  166. #define EMC_PMACRO_CMD_BRICK_CTRL_FDPD 0x318
  167. #define EMC_PMACRO_DATA_BRICK_CTRL_FDPD 0x31c
  168. #define EMC_PMACRO_BRICK_CTRL_RFU1 0x330
  169. #define EMC_PMACRO_BRICK_CTRL_RFU2 0x334
  170. #define EMC_TR_TIMING_0 0x3b4
  171. #define EMC_TR_CTRL_1 0x3bc
  172. #define EMC_TR_RDV 0x3c4
  173. #define EMC_STALL_THEN_EXE_AFTER_CLKCHANGE 0x3cc
  174. #define EMC_SEL_DPD_CTRL 0x3d8
  175. #define EMC_SEL_DPD_CTRL_DATA_SEL_DPD_EN BIT(8)
  176. #define EMC_SEL_DPD_CTRL_ODT_SEL_DPD_EN BIT(5)
  177. #define EMC_SEL_DPD_CTRL_RESET_SEL_DPD_EN BIT(4)
  178. #define EMC_SEL_DPD_CTRL_CA_SEL_DPD_EN BIT(3)
  179. #define EMC_SEL_DPD_CTRL_CLK_SEL_DPD_EN BIT(2)
  180. #define EMC_PRE_REFRESH_REQ_CNT 0x3dc
  181. #define EMC_DYN_SELF_REF_CONTROL 0x3e0
  182. #define EMC_TXSRDLL 0x3e4
  183. #define EMC_CCFIFO_ADDR 0x3e8
  184. #define EMC_CCFIFO_ADDR_STALL_BY_1 (1 << 31)
  185. #define EMC_CCFIFO_ADDR_STALL(x) (((x) & 0x7fff) << 16)
  186. #define EMC_CCFIFO_ADDR_OFFSET(x) ((x) & 0xffff)
  187. #define EMC_CCFIFO_DATA 0x3ec
  188. #define EMC_TR_QPOP 0x3f4
  189. #define EMC_TR_RDV_MASK 0x3f8
  190. #define EMC_TR_QSAFE 0x3fc
  191. #define EMC_TR_QRST 0x400
  192. #define EMC_ISSUE_QRST 0x428
  193. #define EMC_AUTO_CAL_CONFIG2 0x458
  194. #define EMC_AUTO_CAL_CONFIG3 0x45c
  195. #define EMC_TR_DVFS 0x460
  196. #define EMC_AUTO_CAL_CHANNEL 0x464
  197. #define EMC_IBDLY 0x468
  198. #define EMC_OBDLY 0x46c
  199. #define EMC_TXDSRVTTGEN 0x480
  200. #define EMC_WE_DURATION 0x48c
  201. #define EMC_WS_DURATION 0x490
  202. #define EMC_WEV 0x494
  203. #define EMC_WSV 0x498
  204. #define EMC_CFG_3 0x49c
  205. #define EMC_MRW6 0x4a4
  206. #define EMC_MRW7 0x4a8
  207. #define EMC_MRW8 0x4ac
  208. #define EMC_MRW9 0x4b0
  209. #define EMC_MRW10 0x4b4
  210. #define EMC_MRW11 0x4b8
  211. #define EMC_MRW12 0x4bc
  212. #define EMC_MRW13 0x4c0
  213. #define EMC_MRW14 0x4c4
  214. #define EMC_MRW15 0x4d0
  215. #define EMC_CFG_SYNC 0x4d4
  216. #define EMC_FDPD_CTRL_CMD_NO_RAMP 0x4d8
  217. #define EMC_FDPD_CTRL_CMD_NO_RAMP_CMD_DPD_NO_RAMP_ENABLE BIT(0)
  218. #define EMC_WDV_CHK 0x4e0
  219. #define EMC_CFG_PIPE_2 0x554
  220. #define EMC_CFG_PIPE_CLK 0x558
  221. #define EMC_CFG_PIPE_CLK_CLK_ALWAYS_ON BIT(0)
  222. #define EMC_CFG_PIPE_1 0x55c
  223. #define EMC_CFG_PIPE 0x560
  224. #define EMC_QPOP 0x564
  225. #define EMC_QUSE_WIDTH 0x568
  226. #define EMC_PUTERM_WIDTH 0x56c
  227. #define EMC_AUTO_CAL_CONFIG7 0x574
  228. #define EMC_REFCTRL2 0x580
  229. #define EMC_FBIO_CFG7 0x584
  230. #define EMC_FBIO_CFG7_CH0_ENABLE BIT(1)
  231. #define EMC_FBIO_CFG7_CH1_ENABLE BIT(2)
  232. #define EMC_DATA_BRLSHFT_0 0x588
  233. #define EMC_DATA_BRLSHFT_0_RANK0_BYTE7_DATA_BRLSHFT_SHIFT 21
  234. #define EMC_DATA_BRLSHFT_0_RANK0_BYTE7_DATA_BRLSHFT_MASK \
  235. (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE7_DATA_BRLSHFT_SHIFT)
  236. #define EMC_DATA_BRLSHFT_0_RANK0_BYTE6_DATA_BRLSHFT_SHIFT 18
  237. #define EMC_DATA_BRLSHFT_0_RANK0_BYTE6_DATA_BRLSHFT_MASK \
  238. (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE6_DATA_BRLSHFT_SHIFT)
  239. #define EMC_DATA_BRLSHFT_0_RANK0_BYTE5_DATA_BRLSHFT_SHIFT 15
  240. #define EMC_DATA_BRLSHFT_0_RANK0_BYTE5_DATA_BRLSHFT_MASK \
  241. (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE5_DATA_BRLSHFT_SHIFT)
  242. #define EMC_DATA_BRLSHFT_0_RANK0_BYTE4_DATA_BRLSHFT_SHIFT 12
  243. #define EMC_DATA_BRLSHFT_0_RANK0_BYTE4_DATA_BRLSHFT_MASK \
  244. (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE4_DATA_BRLSHFT_SHIFT)
  245. #define EMC_DATA_BRLSHFT_0_RANK0_BYTE3_DATA_BRLSHFT_SHIFT 9
  246. #define EMC_DATA_BRLSHFT_0_RANK0_BYTE3_DATA_BRLSHFT_MASK \
  247. (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE3_DATA_BRLSHFT_SHIFT)
  248. #define EMC_DATA_BRLSHFT_0_RANK0_BYTE2_DATA_BRLSHFT_SHIFT 6
  249. #define EMC_DATA_BRLSHFT_0_RANK0_BYTE2_DATA_BRLSHFT_MASK \
  250. (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE2_DATA_BRLSHFT_SHIFT)
  251. #define EMC_DATA_BRLSHFT_0_RANK0_BYTE1_DATA_BRLSHFT_SHIFT 3
  252. #define EMC_DATA_BRLSHFT_0_RANK0_BYTE1_DATA_BRLSHFT_MASK \
  253. (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE1_DATA_BRLSHFT_SHIFT)
  254. #define EMC_DATA_BRLSHFT_0_RANK0_BYTE0_DATA_BRLSHFT_SHIFT 0
  255. #define EMC_DATA_BRLSHFT_0_RANK0_BYTE0_DATA_BRLSHFT_MASK \
  256. (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE0_DATA_BRLSHFT_SHIFT)
  257. #define EMC_DATA_BRLSHFT_1 0x58c
  258. #define EMC_DATA_BRLSHFT_1_RANK1_BYTE7_DATA_BRLSHFT_SHIFT 21
  259. #define EMC_DATA_BRLSHFT_1_RANK1_BYTE7_DATA_BRLSHFT_MASK \
  260. (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE7_DATA_BRLSHFT_SHIFT)
  261. #define EMC_DATA_BRLSHFT_1_RANK1_BYTE6_DATA_BRLSHFT_SHIFT 18
  262. #define EMC_DATA_BRLSHFT_1_RANK1_BYTE6_DATA_BRLSHFT_MASK \
  263. (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE6_DATA_BRLSHFT_SHIFT)
  264. #define EMC_DATA_BRLSHFT_1_RANK1_BYTE5_DATA_BRLSHFT_SHIFT 15
  265. #define EMC_DATA_BRLSHFT_1_RANK1_BYTE5_DATA_BRLSHFT_MASK \
  266. (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE5_DATA_BRLSHFT_SHIFT)
  267. #define EMC_DATA_BRLSHFT_1_RANK1_BYTE4_DATA_BRLSHFT_SHIFT 12
  268. #define EMC_DATA_BRLSHFT_1_RANK1_BYTE4_DATA_BRLSHFT_MASK \
  269. (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE4_DATA_BRLSHFT_SHIFT)
  270. #define EMC_DATA_BRLSHFT_1_RANK1_BYTE3_DATA_BRLSHFT_SHIFT 9
  271. #define EMC_DATA_BRLSHFT_1_RANK1_BYTE3_DATA_BRLSHFT_MASK \
  272. (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE3_DATA_BRLSHFT_SHIFT)
  273. #define EMC_DATA_BRLSHFT_1_RANK1_BYTE2_DATA_BRLSHFT_SHIFT 6
  274. #define EMC_DATA_BRLSHFT_1_RANK1_BYTE2_DATA_BRLSHFT_MASK \
  275. (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE2_DATA_BRLSHFT_SHIFT)
  276. #define EMC_DATA_BRLSHFT_1_RANK1_BYTE1_DATA_BRLSHFT_SHIFT 3
  277. #define EMC_DATA_BRLSHFT_1_RANK1_BYTE1_DATA_BRLSHFT_MASK \
  278. (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE1_DATA_BRLSHFT_SHIFT)
  279. #define EMC_DATA_BRLSHFT_1_RANK1_BYTE0_DATA_BRLSHFT_SHIFT 0
  280. #define EMC_DATA_BRLSHFT_1_RANK1_BYTE0_DATA_BRLSHFT_MASK \
  281. (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE0_DATA_BRLSHFT_SHIFT)
  282. #define EMC_RFCPB 0x590
  283. #define EMC_DQS_BRLSHFT_0 0x594
  284. #define EMC_DQS_BRLSHFT_1 0x598
  285. #define EMC_CMD_BRLSHFT_0 0x59c
  286. #define EMC_CMD_BRLSHFT_1 0x5a0
  287. #define EMC_CMD_BRLSHFT_2 0x5a4
  288. #define EMC_CMD_BRLSHFT_3 0x5a8
  289. #define EMC_QUSE_BRLSHFT_0 0x5ac
  290. #define EMC_AUTO_CAL_CONFIG4 0x5b0
  291. #define EMC_AUTO_CAL_CONFIG5 0x5b4
  292. #define EMC_QUSE_BRLSHFT_1 0x5b8
  293. #define EMC_QUSE_BRLSHFT_2 0x5bc
  294. #define EMC_CCDMW 0x5c0
  295. #define EMC_QUSE_BRLSHFT_3 0x5c4
  296. #define EMC_AUTO_CAL_CONFIG6 0x5cc
  297. #define EMC_DLL_CFG_0 0x5e4
  298. #define EMC_DLL_CFG_1 0x5e8
  299. #define EMC_DLL_CFG_1_DDLLCAL_CTRL_START_TRIM_SHIFT 10
  300. #define EMC_DLL_CFG_1_DDLLCAL_CTRL_START_TRIM_MASK \
  301. (0x7ff << EMC_DLL_CFG_1_DDLLCAL_CTRL_START_TRIM_SHIFT)
  302. #define EMC_CONFIG_SAMPLE_DELAY 0x5f0
  303. #define EMC_CFG_UPDATE 0x5f4
  304. #define EMC_CFG_UPDATE_UPDATE_DLL_IN_UPDATE_SHIFT 9
  305. #define EMC_CFG_UPDATE_UPDATE_DLL_IN_UPDATE_MASK \
  306. (0x3 << EMC_CFG_UPDATE_UPDATE_DLL_IN_UPDATE_SHIFT)
  307. #define EMC_PMACRO_QUSE_DDLL_RANK0_0 0x600
  308. #define EMC_PMACRO_QUSE_DDLL_RANK0_1 0x604
  309. #define EMC_PMACRO_QUSE_DDLL_RANK0_2 0x608
  310. #define EMC_PMACRO_QUSE_DDLL_RANK0_3 0x60c
  311. #define EMC_PMACRO_QUSE_DDLL_RANK0_4 0x610
  312. #define EMC_PMACRO_QUSE_DDLL_RANK0_5 0x614
  313. #define EMC_PMACRO_QUSE_DDLL_RANK1_0 0x620
  314. #define EMC_PMACRO_QUSE_DDLL_RANK1_1 0x624
  315. #define EMC_PMACRO_QUSE_DDLL_RANK1_2 0x628
  316. #define EMC_PMACRO_QUSE_DDLL_RANK1_3 0x62c
  317. #define EMC_PMACRO_QUSE_DDLL_RANK1_4 0x630
  318. #define EMC_PMACRO_QUSE_DDLL_RANK1_5 0x634
  319. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0 0x640
  320. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE1_SHIFT \
  321. 16
  322. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE1_MASK \
  323. (0x3ff << \
  324. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE1_SHIFT)
  325. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE0_SHIFT \
  326. 0
  327. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE0_MASK \
  328. (0x3ff << \
  329. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE0_SHIFT)
  330. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1 0x644
  331. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE3_SHIFT \
  332. 16
  333. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE3_MASK \
  334. (0x3ff << \
  335. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE3_SHIFT)
  336. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE2_SHIFT \
  337. 0
  338. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE2_MASK \
  339. (0x3ff << \
  340. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE2_SHIFT)
  341. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2 0x648
  342. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE5_SHIFT \
  343. 16
  344. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE5_MASK \
  345. (0x3ff << \
  346. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE5_SHIFT)
  347. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE4_SHIFT \
  348. 0
  349. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE4_MASK \
  350. (0x3ff << \
  351. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE4_SHIFT)
  352. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3 0x64c
  353. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE7_SHIFT \
  354. 16
  355. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE7_MASK \
  356. (0x3ff << \
  357. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE7_SHIFT)
  358. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE6_SHIFT \
  359. 0
  360. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE6_MASK \
  361. (0x3ff << \
  362. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE6_SHIFT)
  363. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_4 0x650
  364. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_5 0x654
  365. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0 0x660
  366. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE1_SHIFT \
  367. 16
  368. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE1_MASK \
  369. (0x3ff << \
  370. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE1_SHIFT)
  371. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE0_SHIFT \
  372. 0
  373. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE0_MASK \
  374. (0x3ff << \
  375. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE0_SHIFT)
  376. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1 0x664
  377. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE3_SHIFT \
  378. 16
  379. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE3_MASK \
  380. (0x3ff << \
  381. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE3_SHIFT)
  382. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE2_SHIFT \
  383. 0
  384. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE2_MASK \
  385. (0x3ff << \
  386. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE2_SHIFT)
  387. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2 0x668
  388. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE5_SHIFT \
  389. 16
  390. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE5_MASK \
  391. (0x3ff << \
  392. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE5_SHIFT)
  393. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE4_SHIFT \
  394. 0
  395. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE4_MASK \
  396. (0x3ff << \
  397. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE4_SHIFT)
  398. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3 0x66c
  399. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE7_SHIFT \
  400. 16
  401. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE7_MASK \
  402. (0x3ff << \
  403. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE7_SHIFT)
  404. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE6_SHIFT \
  405. 0
  406. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE6_MASK \
  407. (0x3ff << \
  408. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE6_SHIFT)
  409. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_4 0x670
  410. #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_5 0x674
  411. #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_0 0x680
  412. #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_1 0x684
  413. #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_2 0x688
  414. #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_3 0x68c
  415. #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_4 0x690
  416. #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_5 0x694
  417. #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_0 0x6a0
  418. #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_1 0x6a4
  419. #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_2 0x6a8
  420. #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_3 0x6ac
  421. #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_4 0x6b0
  422. #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_5 0x6b4
  423. #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_0 0x6c0
  424. #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_1 0x6c4
  425. #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_2 0x6c8
  426. #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_3 0x6cc
  427. #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_0 0x6e0
  428. #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_1 0x6e4
  429. #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_2 0x6e8
  430. #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_3 0x6ec
  431. #define EMC_PMACRO_TX_PWRD_0 0x720
  432. #define EMC_PMACRO_TX_PWRD_1 0x724
  433. #define EMC_PMACRO_TX_PWRD_2 0x728
  434. #define EMC_PMACRO_TX_PWRD_3 0x72c
  435. #define EMC_PMACRO_TX_PWRD_4 0x730
  436. #define EMC_PMACRO_TX_PWRD_5 0x734
  437. #define EMC_PMACRO_TX_SEL_CLK_SRC_0 0x740
  438. #define EMC_PMACRO_TX_SEL_CLK_SRC_1 0x744
  439. #define EMC_PMACRO_TX_SEL_CLK_SRC_3 0x74c
  440. #define EMC_PMACRO_TX_SEL_CLK_SRC_2 0x748
  441. #define EMC_PMACRO_TX_SEL_CLK_SRC_4 0x750
  442. #define EMC_PMACRO_TX_SEL_CLK_SRC_5 0x754
  443. #define EMC_PMACRO_DDLL_BYPASS 0x760
  444. #define EMC_PMACRO_DDLL_PWRD_0 0x770
  445. #define EMC_PMACRO_DDLL_PWRD_1 0x774
  446. #define EMC_PMACRO_DDLL_PWRD_2 0x778
  447. #define EMC_PMACRO_CMD_CTRL_0 0x780
  448. #define EMC_PMACRO_CMD_CTRL_1 0x784
  449. #define EMC_PMACRO_CMD_CTRL_2 0x788
  450. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_0 0x800
  451. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_1 0x804
  452. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_2 0x808
  453. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_3 0x80c
  454. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_0 0x810
  455. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_1 0x814
  456. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_2 0x818
  457. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_3 0x81c
  458. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_0 0x820
  459. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_1 0x824
  460. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_2 0x828
  461. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_3 0x82c
  462. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_0 0x830
  463. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_1 0x834
  464. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_2 0x838
  465. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_3 0x83c
  466. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_0 0x840
  467. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_1 0x844
  468. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_2 0x848
  469. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_3 0x84c
  470. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_0 0x850
  471. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_1 0x854
  472. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_2 0x858
  473. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_3 0x85c
  474. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_0 0x860
  475. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_1 0x864
  476. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_2 0x868
  477. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_3 0x86c
  478. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_0 0x870
  479. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_1 0x874
  480. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_2 0x878
  481. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_3 0x87c
  482. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_0 0x880
  483. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_1 0x884
  484. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_2 0x888
  485. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_3 0x88c
  486. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_0 0x890
  487. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_1 0x894
  488. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_2 0x898
  489. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_3 0x89c
  490. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_0 0x8a0
  491. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_1 0x8a4
  492. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_2 0x8a8
  493. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_3 0x8ac
  494. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_0 0x8b0
  495. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_1 0x8b4
  496. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_2 0x8b8
  497. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_3 0x8bc
  498. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_0 0x900
  499. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_1 0x904
  500. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_2 0x908
  501. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_3 0x90c
  502. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_0 0x910
  503. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_1 0x914
  504. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_2 0x918
  505. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_3 0x91c
  506. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_0 0x920
  507. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_1 0x924
  508. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_2 0x928
  509. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_3 0x92c
  510. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_0 0x930
  511. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_1 0x934
  512. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_2 0x938
  513. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_3 0x93c
  514. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_0 0x940
  515. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_1 0x944
  516. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_2 0x948
  517. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_3 0x94c
  518. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_0 0x950
  519. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_1 0x954
  520. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_2 0x958
  521. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_3 0x95c
  522. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_0 0x960
  523. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_1 0x964
  524. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_2 0x968
  525. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_3 0x96c
  526. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_0 0x970
  527. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_1 0x974
  528. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_2 0x978
  529. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_3 0x97c
  530. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_0 0x980
  531. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_1 0x984
  532. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_2 0x988
  533. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_3 0x98c
  534. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_0 0x990
  535. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_1 0x994
  536. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_2 0x998
  537. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_3 0x99c
  538. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_0 0x9a0
  539. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_1 0x9a4
  540. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_2 0x9a8
  541. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_3 0x9ac
  542. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_0 0x9b0
  543. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_1 0x9b4
  544. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_2 0x9b8
  545. #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_3 0x9bc
  546. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_0 0xa00
  547. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_1 0xa04
  548. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_2 0xa08
  549. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_0 0xa10
  550. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_1 0xa14
  551. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_2 0xa18
  552. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_0 0xa20
  553. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_1 0xa24
  554. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_2 0xa28
  555. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_0 0xa30
  556. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_1 0xa34
  557. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_2 0xa38
  558. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_0 0xa40
  559. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_1 0xa44
  560. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_2 0xa48
  561. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_0 0xa50
  562. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_1 0xa54
  563. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_2 0xa58
  564. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_0 0xa60
  565. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_1 0xa64
  566. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_2 0xa68
  567. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_0 0xa70
  568. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_1 0xa74
  569. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_2 0xa78
  570. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_0 0xb00
  571. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_1 0xb04
  572. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_2 0xb08
  573. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_0 0xb10
  574. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_1 0xb14
  575. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_2 0xb18
  576. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_0 0xb20
  577. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_1 0xb24
  578. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_2 0xb28
  579. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_0 0xb30
  580. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_1 0xb34
  581. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_2 0xb38
  582. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_0 0xb40
  583. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_1 0xb44
  584. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_2 0xb48
  585. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_0 0xb50
  586. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_1 0xb54
  587. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_2 0xb58
  588. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_0 0xb60
  589. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_1 0xb64
  590. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_2 0xb68
  591. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_0 0xb70
  592. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_1 0xb74
  593. #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_2 0xb78
  594. #define EMC_PMACRO_IB_VREF_DQ_0 0xbe0
  595. #define EMC_PMACRO_IB_VREF_DQ_1 0xbe4
  596. #define EMC_PMACRO_IB_VREF_DQS_0 0xbf0
  597. #define EMC_PMACRO_IB_VREF_DQS_1 0xbf4
  598. #define EMC_PMACRO_DDLL_LONG_CMD_0 0xc00
  599. #define EMC_PMACRO_DDLL_LONG_CMD_1 0xc04
  600. #define EMC_PMACRO_DDLL_LONG_CMD_2 0xc08
  601. #define EMC_PMACRO_DDLL_LONG_CMD_3 0xc0c
  602. #define EMC_PMACRO_DDLL_LONG_CMD_4 0xc10
  603. #define EMC_PMACRO_DDLL_LONG_CMD_5 0xc14
  604. #define EMC_PMACRO_DDLL_SHORT_CMD_0 0xc20
  605. #define EMC_PMACRO_DDLL_SHORT_CMD_1 0xc24
  606. #define EMC_PMACRO_DDLL_SHORT_CMD_2 0xc28
  607. #define EMC_PMACRO_CFG_PM_GLOBAL_0 0xc30
  608. #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE0 BIT(16)
  609. #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE1 BIT(17)
  610. #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE2 BIT(18)
  611. #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE3 BIT(19)
  612. #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE4 BIT(20)
  613. #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE5 BIT(21)
  614. #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE6 BIT(22)
  615. #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE7 BIT(23)
  616. #define EMC_PMACRO_VTTGEN_CTRL_0 0xc34
  617. #define EMC_PMACRO_VTTGEN_CTRL_1 0xc38
  618. #define EMC_PMACRO_BG_BIAS_CTRL_0 0xc3c
  619. #define EMC_PMACRO_BG_BIAS_CTRL_0_BG_E_PWRD BIT(0)
  620. #define EMC_PMACRO_BG_BIAS_CTRL_0_BGLP_E_PWRD BIT(2)
  621. #define EMC_PMACRO_PAD_CFG_CTRL 0xc40
  622. #define EMC_PMACRO_ZCTRL 0xc44
  623. #define EMC_PMACRO_CMD_PAD_RX_CTRL 0xc50
  624. #define EMC_PMACRO_DATA_PAD_RX_CTRL 0xc54
  625. #define EMC_PMACRO_CMD_RX_TERM_MODE 0xc58
  626. #define EMC_PMACRO_DATA_RX_TERM_MODE 0xc5c
  627. #define EMC_PMACRO_CMD_PAD_TX_CTRL 0xc60
  628. #define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_DQ_TX_E_DCC BIT(1)
  629. #define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_DQSP_TX_E_DCC BIT(9)
  630. #define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_DQSN_TX_E_DCC BIT(16)
  631. #define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_CMD_TX_E_DCC BIT(24)
  632. #define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_DQ_TX_DRVFORCEON BIT(26)
  633. #define EMC_PMACRO_DATA_PAD_TX_CTRL 0xc64
  634. #define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQ_E_IVREF BIT(0)
  635. #define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQ_TX_E_DCC BIT(1)
  636. #define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQS_E_IVREF BIT(8)
  637. #define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQSP_TX_E_DCC BIT(9)
  638. #define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQSN_TX_E_DCC BIT(16)
  639. #define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_CMD_TX_E_DCC BIT(24)
  640. #define EMC_PMACRO_COMMON_PAD_TX_CTRL 0xc68
  641. #define EMC_PMACRO_AUTOCAL_CFG_COMMON 0xc78
  642. #define EMC_PMACRO_AUTOCAL_CFG_COMMON_E_CAL_BYPASS_DVFS BIT(16)
  643. #define EMC_PMACRO_VTTGEN_CTRL_2 0xcf0
  644. #define EMC_PMACRO_IB_RXRT 0xcf4
  645. #define EMC_PMACRO_TRAINING_CTRL_0 0xcf8
  646. #define EMC_PMACRO_TRAINING_CTRL_0_CH0_TRAINING_E_WRPTR BIT(3)
  647. #define EMC_PMACRO_TRAINING_CTRL_1 0xcfc
  648. #define EMC_PMACRO_TRAINING_CTRL_1_CH1_TRAINING_E_WRPTR BIT(3)
  649. #define EMC_TRAINING_CTRL 0xe04
  650. #define EMC_TRAINING_QUSE_CORS_CTRL 0xe0c
  651. #define EMC_TRAINING_QUSE_FINE_CTRL 0xe10
  652. #define EMC_TRAINING_QUSE_CTRL_MISC 0xe14
  653. #define EMC_TRAINING_WRITE_FINE_CTRL 0xe18
  654. #define EMC_TRAINING_WRITE_CTRL_MISC 0xe1c
  655. #define EMC_TRAINING_WRITE_VREF_CTRL 0xe20
  656. #define EMC_TRAINING_READ_FINE_CTRL 0xe24
  657. #define EMC_TRAINING_READ_CTRL_MISC 0xe28
  658. #define EMC_TRAINING_READ_VREF_CTRL 0xe2c
  659. #define EMC_TRAINING_CA_FINE_CTRL 0xe30
  660. #define EMC_TRAINING_CA_CTRL_MISC 0xe34
  661. #define EMC_TRAINING_CA_CTRL_MISC1 0xe38
  662. #define EMC_TRAINING_CA_VREF_CTRL 0xe3c
  663. #define EMC_TRAINING_SETTLE 0xe44
  664. #define EMC_TRAINING_MPC 0xe5c
  665. #define EMC_TRAINING_VREF_SETTLE 0xe6c
  666. #define EMC_TRAINING_QUSE_VREF_CTRL 0xed0
  667. #define EMC_TRAINING_OPT_DQS_IB_VREF_RANK0 0xed4
  668. #define EMC_TRAINING_OPT_DQS_IB_VREF_RANK1 0xed8
  669. #define EMC_COPY_TABLE_PARAM_PERIODIC_FIELDS BIT(0)
  670. #define EMC_COPY_TABLE_PARAM_TRIM_REGS BIT(1)
  671. enum burst_regs_list {
  672. EMC_RP_INDEX = 6,
  673. EMC_R2P_INDEX = 9,
  674. EMC_W2P_INDEX,
  675. EMC_MRW6_INDEX = 31,
  676. EMC_REFRESH_INDEX = 41,
  677. EMC_PRE_REFRESH_REQ_CNT_INDEX = 43,
  678. EMC_TRPAB_INDEX = 59,
  679. EMC_MRW7_INDEX = 62,
  680. EMC_FBIO_CFG5_INDEX = 65,
  681. EMC_FBIO_CFG7_INDEX,
  682. EMC_CFG_DIG_DLL_INDEX,
  683. EMC_ZCAL_INTERVAL_INDEX = 139,
  684. EMC_ZCAL_WAIT_CNT_INDEX,
  685. EMC_MRS_WAIT_CNT_INDEX = 141,
  686. EMC_DLL_CFG_0_INDEX = 144,
  687. EMC_PMACRO_AUTOCAL_CFG_COMMON_INDEX = 146,
  688. EMC_CFG_INDEX = 148,
  689. EMC_DYN_SELF_REF_CONTROL_INDEX = 150,
  690. EMC_PMACRO_CMD_PAD_TX_CTRL_INDEX = 161,
  691. EMC_PMACRO_DATA_PAD_TX_CTRL_INDEX,
  692. EMC_PMACRO_COMMON_PAD_TX_CTRL_INDEX,
  693. EMC_PMACRO_BRICK_CTRL_RFU1_INDEX = 167,
  694. EMC_PMACRO_BG_BIAS_CTRL_0_INDEX = 171,
  695. EMC_MRW14_INDEX = 199,
  696. EMC_MRW15_INDEX = 220,
  697. };
  698. enum trim_regs_list {
  699. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_INDEX = 60,
  700. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_INDEX,
  701. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_INDEX,
  702. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_INDEX,
  703. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_4_INDEX,
  704. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_5_INDEX,
  705. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_INDEX,
  706. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_INDEX,
  707. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_INDEX,
  708. EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_INDEX,
  709. };
  710. enum burst_mc_regs_list {
  711. MC_EMEM_ARB_MISC0_INDEX = 20,
  712. };
  713. enum {
  714. T_RP,
  715. T_FC_LPDDR4,
  716. T_RFC,
  717. T_PDEX,
  718. RL,
  719. };
  720. enum {
  721. AUTO_PD = 0,
  722. MAN_SR = 2,
  723. };
  724. enum {
  725. ASSEMBLY = 0,
  726. ACTIVE,
  727. };
  728. enum {
  729. C0D0U0,
  730. C0D0U1,
  731. C0D1U0,
  732. C0D1U1,
  733. C1D0U0,
  734. C1D0U1,
  735. C1D1U0,
  736. C1D1U1,
  737. DRAM_CLKTREE_NUM,
  738. };
  739. #define VREF_REGS_PER_CHANNEL_SIZE 4
  740. #define DRAM_TIMINGS_NUM 5
  741. #define BURST_REGS_PER_CHANNEL_SIZE 8
  742. #define TRIM_REGS_PER_CHANNEL_SIZE 10
  743. #define PTFV_ARRAY_SIZE 12
  744. #define SAVE_RESTORE_MOD_REGS_SIZE 12
  745. #define TRAINING_MOD_REGS_SIZE 20
  746. #define BURST_UP_DOWN_REGS_SIZE 24
  747. #define BURST_MC_REGS_SIZE 33
  748. #define TRIM_REGS_SIZE 138
  749. #define BURST_REGS_SIZE 221
  750. struct tegra210_emc_per_channel_regs {
  751. u16 bank;
  752. u16 offset;
  753. };
  754. struct tegra210_emc_table_register_offsets {
  755. u16 burst[BURST_REGS_SIZE];
  756. u16 trim[TRIM_REGS_SIZE];
  757. u16 burst_mc[BURST_MC_REGS_SIZE];
  758. u16 la_scale[BURST_UP_DOWN_REGS_SIZE];
  759. struct tegra210_emc_per_channel_regs burst_per_channel[BURST_REGS_PER_CHANNEL_SIZE];
  760. struct tegra210_emc_per_channel_regs trim_per_channel[TRIM_REGS_PER_CHANNEL_SIZE];
  761. struct tegra210_emc_per_channel_regs vref_per_channel[VREF_REGS_PER_CHANNEL_SIZE];
  762. };
  763. struct tegra210_emc_timing {
  764. u32 revision;
  765. const char dvfs_ver[60];
  766. u32 rate;
  767. u32 min_volt;
  768. u32 gpu_min_volt;
  769. const char clock_src[32];
  770. u32 clk_src_emc;
  771. u32 needs_training;
  772. u32 training_pattern;
  773. u32 trained;
  774. u32 periodic_training;
  775. u32 trained_dram_clktree[DRAM_CLKTREE_NUM];
  776. u32 current_dram_clktree[DRAM_CLKTREE_NUM];
  777. u32 run_clocks;
  778. u32 tree_margin;
  779. u32 num_burst;
  780. u32 num_burst_per_ch;
  781. u32 num_trim;
  782. u32 num_trim_per_ch;
  783. u32 num_mc_regs;
  784. u32 num_up_down;
  785. u32 vref_num;
  786. u32 training_mod_num;
  787. u32 dram_timing_num;
  788. u32 ptfv_list[PTFV_ARRAY_SIZE];
  789. u32 burst_regs[BURST_REGS_SIZE];
  790. u32 burst_reg_per_ch[BURST_REGS_PER_CHANNEL_SIZE];
  791. u32 shadow_regs_ca_train[BURST_REGS_SIZE];
  792. u32 shadow_regs_quse_train[BURST_REGS_SIZE];
  793. u32 shadow_regs_rdwr_train[BURST_REGS_SIZE];
  794. u32 trim_regs[TRIM_REGS_SIZE];
  795. u32 trim_perch_regs[TRIM_REGS_PER_CHANNEL_SIZE];
  796. u32 vref_perch_regs[VREF_REGS_PER_CHANNEL_SIZE];
  797. u32 dram_timings[DRAM_TIMINGS_NUM];
  798. u32 training_mod_regs[TRAINING_MOD_REGS_SIZE];
  799. u32 save_restore_mod_regs[SAVE_RESTORE_MOD_REGS_SIZE];
  800. u32 burst_mc_regs[BURST_MC_REGS_SIZE];
  801. u32 la_scale_regs[BURST_UP_DOWN_REGS_SIZE];
  802. u32 min_mrs_wait;
  803. u32 emc_mrw;
  804. u32 emc_mrw2;
  805. u32 emc_mrw3;
  806. u32 emc_mrw4;
  807. u32 emc_mrw9;
  808. u32 emc_mrs;
  809. u32 emc_emrs;
  810. u32 emc_emrs2;
  811. u32 emc_auto_cal_config;
  812. u32 emc_auto_cal_config2;
  813. u32 emc_auto_cal_config3;
  814. u32 emc_auto_cal_config4;
  815. u32 emc_auto_cal_config5;
  816. u32 emc_auto_cal_config6;
  817. u32 emc_auto_cal_config7;
  818. u32 emc_auto_cal_config8;
  819. u32 emc_cfg_2;
  820. u32 emc_sel_dpd_ctrl;
  821. u32 emc_fdpd_ctrl_cmd_no_ramp;
  822. u32 dll_clk_src;
  823. u32 clk_out_enb_x_0_clk_enb_emc_dll;
  824. u32 latency;
  825. };
  826. enum tegra210_emc_refresh {
  827. TEGRA210_EMC_REFRESH_NOMINAL = 0,
  828. TEGRA210_EMC_REFRESH_2X,
  829. TEGRA210_EMC_REFRESH_4X,
  830. TEGRA210_EMC_REFRESH_THROTTLE, /* 4x Refresh + derating. */
  831. };
  832. #define DRAM_TYPE_DDR3 0
  833. #define DRAM_TYPE_LPDDR4 1
  834. #define DRAM_TYPE_LPDDR2 2
  835. #define DRAM_TYPE_DDR2 3
  836. struct tegra210_emc {
  837. struct tegra_mc *mc;
  838. struct device *dev;
  839. struct clk *clk;
  840. /* nominal EMC frequency table */
  841. struct tegra210_emc_timing *nominal;
  842. /* derated EMC frequency table */
  843. struct tegra210_emc_timing *derated;
  844. /* currently selected table (nominal or derated) */
  845. struct tegra210_emc_timing *timings;
  846. unsigned int num_timings;
  847. const struct tegra210_emc_table_register_offsets *offsets;
  848. const struct tegra210_emc_sequence *sequence;
  849. spinlock_t lock;
  850. void __iomem *regs, *channel[2];
  851. unsigned int num_channels;
  852. unsigned int num_devices;
  853. unsigned int dram_type;
  854. struct tegra210_emc_timing *last;
  855. struct tegra210_emc_timing *next;
  856. unsigned int training_interval;
  857. struct timer_list training;
  858. enum tegra210_emc_refresh refresh;
  859. unsigned int refresh_poll_interval;
  860. struct timer_list refresh_timer;
  861. unsigned int temperature;
  862. atomic_t refresh_poll;
  863. ktime_t clkchange_time;
  864. int clkchange_delay;
  865. unsigned long resume_rate;
  866. struct {
  867. struct dentry *root;
  868. unsigned long min_rate;
  869. unsigned long max_rate;
  870. unsigned int temperature;
  871. } debugfs;
  872. struct tegra210_clk_emc_provider provider;
  873. };
  874. struct tegra210_emc_sequence {
  875. u8 revision;
  876. void (*set_clock)(struct tegra210_emc *emc, u32 clksrc);
  877. u32 (*periodic_compensation)(struct tegra210_emc *emc);
  878. };
  879. static inline void emc_writel(struct tegra210_emc *emc, u32 value,
  880. unsigned int offset)
  881. {
  882. writel_relaxed(value, emc->regs + offset);
  883. }
  884. static inline u32 emc_readl(struct tegra210_emc *emc, unsigned int offset)
  885. {
  886. return readl_relaxed(emc->regs + offset);
  887. }
  888. static inline void emc_channel_writel(struct tegra210_emc *emc,
  889. unsigned int channel,
  890. u32 value, unsigned int offset)
  891. {
  892. writel_relaxed(value, emc->channel[channel] + offset);
  893. }
  894. static inline u32 emc_channel_readl(struct tegra210_emc *emc,
  895. unsigned int channel, unsigned int offset)
  896. {
  897. return readl_relaxed(emc->channel[channel] + offset);
  898. }
  899. static inline void ccfifo_writel(struct tegra210_emc *emc, u32 value,
  900. unsigned int offset, u32 delay)
  901. {
  902. writel_relaxed(value, emc->regs + EMC_CCFIFO_DATA);
  903. value = EMC_CCFIFO_ADDR_STALL_BY_1 | EMC_CCFIFO_ADDR_STALL(delay) |
  904. EMC_CCFIFO_ADDR_OFFSET(offset);
  905. writel_relaxed(value, emc->regs + EMC_CCFIFO_ADDR);
  906. }
  907. static inline u32 div_o3(u32 a, u32 b)
  908. {
  909. u32 result = a / b;
  910. if ((b * result) < a)
  911. return result + 1;
  912. return result;
  913. }
  914. /* from tegra210-emc-r21021.c */
  915. extern const struct tegra210_emc_sequence tegra210_emc_r21021;
  916. int tegra210_emc_set_refresh(struct tegra210_emc *emc,
  917. enum tegra210_emc_refresh refresh);
  918. u32 tegra210_emc_mrr_read(struct tegra210_emc *emc, unsigned int chip,
  919. unsigned int address);
  920. void tegra210_emc_do_clock_change(struct tegra210_emc *emc, u32 clksrc);
  921. void tegra210_emc_set_shadow_bypass(struct tegra210_emc *emc, int set);
  922. void tegra210_emc_timing_update(struct tegra210_emc *emc);
  923. u32 tegra210_emc_get_dll_state(struct tegra210_emc_timing *next);
  924. struct tegra210_emc_timing *tegra210_emc_find_timing(struct tegra210_emc *emc,
  925. unsigned long rate);
  926. void tegra210_emc_adjust_timing(struct tegra210_emc *emc,
  927. struct tegra210_emc_timing *timing);
  928. int tegra210_emc_wait_for_update(struct tegra210_emc *emc, unsigned int channel,
  929. unsigned int offset, u32 bit_mask, bool state);
  930. unsigned long tegra210_emc_actual_osc_clocks(u32 in);
  931. u32 tegra210_emc_compensate(struct tegra210_emc_timing *next, u32 offset);
  932. void tegra210_emc_dll_disable(struct tegra210_emc *emc);
  933. void tegra210_emc_dll_enable(struct tegra210_emc *emc);
  934. u32 tegra210_emc_dll_prelock(struct tegra210_emc *emc, u32 clksrc);
  935. u32 tegra210_emc_dvfs_power_ramp_down(struct tegra210_emc *emc, u32 clk,
  936. bool flip_backward);
  937. u32 tegra210_emc_dvfs_power_ramp_up(struct tegra210_emc *emc, u32 clk,
  938. bool flip_backward);
  939. void tegra210_emc_reset_dram_clktree_values(struct tegra210_emc_timing *timing);
  940. void tegra210_emc_start_periodic_compensation(struct tegra210_emc *emc);
  941. #endif