ddr.h 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * Copyright 2017 NXP
  4. */
  5. #ifndef __ASM_ARCH_IMX8M_DDR_H
  6. #define __ASM_ARCH_IMX8M_DDR_H
  7. #include <asm/io.h>
  8. #include <asm/types.h>
  9. #include <asm/arch/ddr.h>
  10. #define DDRC_DDR_SS_GPR0 0x3d000000
  11. #define DDRC_IPS_BASE_ADDR_0 0x3f400000
  12. #define IP2APB_DDRPHY_IPS_BASE_ADDR(X) (0x3c000000 + (X * 0x2000000))
  13. #define DDRPHY_MEM(X) (0x3c000000 + (X * 0x2000000) + 0x50000)
  14. struct ddrc_freq {
  15. u32 res0[8];
  16. u32 derateen;
  17. u32 derateint;
  18. u32 res1[10];
  19. u32 rfshctl0;
  20. u32 res2[4];
  21. u32 rfshtmg;
  22. u32 rfshtmg1;
  23. u32 res3[28];
  24. u32 init3;
  25. u32 init4;
  26. u32 res;
  27. u32 init6;
  28. u32 init7;
  29. u32 res4[4];
  30. u32 dramtmg0;
  31. u32 dramtmg1;
  32. u32 dramtmg2;
  33. u32 dramtmg3;
  34. u32 dramtmg4;
  35. u32 dramtmg5;
  36. u32 dramtmg6;
  37. u32 dramtmg7;
  38. u32 dramtmg8;
  39. u32 dramtmg9;
  40. u32 dramtmg10;
  41. u32 dramtmg11;
  42. u32 dramtmg12;
  43. u32 dramtmg13;
  44. u32 dramtmg14;
  45. u32 dramtmg15;
  46. u32 dramtmg16;
  47. u32 dramtmg17;
  48. u32 res5[10];
  49. u32 mramtmg0;
  50. u32 mramtmg1;
  51. u32 mramtmg4;
  52. u32 mramtmg9;
  53. u32 zqctl0;
  54. u32 res6[3];
  55. u32 dfitmg0;
  56. u32 dfitmg1;
  57. u32 res7[7];
  58. u32 dfitmg2;
  59. u32 dfitmg3;
  60. u32 res8[33];
  61. u32 odtcfg;
  62. };
  63. struct imx8m_ddrc_regs {
  64. u32 mstr;
  65. u32 stat;
  66. u32 mstr1;
  67. u32 res1;
  68. u32 mrctrl0;
  69. u32 mrctrl1;
  70. u32 mrstat;
  71. u32 mrctrl2;
  72. u32 derateen;
  73. u32 derateint;
  74. u32 mstr2;
  75. u32 res2;
  76. u32 pwrctl;
  77. u32 pwrtmg;
  78. u32 hwlpctl;
  79. u32 hwffcctl;
  80. u32 hwffcstat;
  81. u32 res3[3];
  82. u32 rfshctl0;
  83. u32 rfshctl1;
  84. u32 rfshctl2;
  85. u32 rfshctl4;
  86. u32 rfshctl3;
  87. u32 rfshtmg;
  88. u32 rfshtmg1;
  89. u32 res4;
  90. u32 ecccfg0;
  91. u32 ecccfg1;
  92. u32 eccstat;
  93. u32 eccclr;
  94. u32 eccerrcnt;
  95. u32 ecccaddr0;
  96. u32 ecccaddr1;
  97. u32 ecccsyn0;
  98. u32 ecccsyn1;
  99. u32 ecccsyn2;
  100. u32 eccbitmask0;
  101. u32 eccbitmask1;
  102. u32 eccbitmask2;
  103. u32 eccuaddr0;
  104. u32 eccuaddr1;
  105. u32 eccusyn0;
  106. u32 eccusyn1;
  107. u32 eccusyn2;
  108. u32 eccpoisonaddr0;
  109. u32 eccpoisonaddr1;
  110. u32 crcparctl0;
  111. u32 crcparctl1;
  112. u32 crcparctl2;
  113. u32 crcparstat;
  114. u32 init0;
  115. u32 init1;
  116. u32 init2;
  117. u32 init3;
  118. u32 init4;
  119. u32 init5;
  120. u32 init6;
  121. u32 init7;
  122. u32 dimmctl;
  123. u32 rankctl;
  124. u32 res5;
  125. u32 chctl;
  126. u32 dramtmg0;
  127. u32 dramtmg1;
  128. u32 dramtmg2;
  129. u32 dramtmg3;
  130. u32 dramtmg4;
  131. u32 dramtmg5;
  132. u32 dramtmg6;
  133. u32 dramtmg7;
  134. u32 dramtmg8;
  135. u32 dramtmg9;
  136. u32 dramtmg10;
  137. u32 dramtmg11;
  138. u32 dramtmg12;
  139. u32 dramtmg13;
  140. u32 dramtmg14;
  141. u32 dramtmg15;
  142. u32 dramtmg16;
  143. u32 dramtmg17;
  144. u32 res6[10];
  145. u32 mramtmg0;
  146. u32 mramtmg1;
  147. u32 mramtmg4;
  148. u32 mramtmg9;
  149. u32 zqctl0;
  150. u32 zqctl1;
  151. u32 zqctl2;
  152. u32 zqstat;
  153. u32 dfitmg0;
  154. u32 dfitmg1;
  155. u32 dfilpcfg0;
  156. u32 dfilpcfg1;
  157. u32 dfiupd0;
  158. u32 dfiupd1;
  159. u32 dfiupd2;
  160. u32 res7;
  161. u32 dfimisc;
  162. u32 dfitmg2;
  163. u32 dfitmg3;
  164. u32 dfistat;
  165. u32 dbictl;
  166. u32 dfiphymstr;
  167. u32 res8[14];
  168. u32 addrmap0;
  169. u32 addrmap1;
  170. u32 addrmap2;
  171. u32 addrmap3;
  172. u32 addrmap4;
  173. u32 addrmap5;
  174. u32 addrmap6;
  175. u32 addrmap7;
  176. u32 addrmap8;
  177. u32 addrmap9;
  178. u32 addrmap10;
  179. u32 addrmap11;
  180. u32 res9[4];
  181. u32 odtcfg;
  182. u32 odtmap;
  183. u32 res10[2];
  184. u32 sched;
  185. u32 sched1;
  186. u32 sched2;
  187. u32 perfhpr1;
  188. u32 res11;
  189. u32 perflpr1;
  190. u32 res12;
  191. u32 perfwr1;
  192. u32 res13[4];
  193. u32 dqmap0;
  194. u32 dqmap1;
  195. u32 dqmap2;
  196. u32 dqmap3;
  197. u32 dqmap4;
  198. u32 dqmap5;
  199. u32 res14[26];
  200. u32 dbg0;
  201. u32 dbg1;
  202. u32 dbgcam;
  203. u32 dbgcmd;
  204. u32 dbgstat;
  205. u32 res15[3];
  206. u32 swctl;
  207. u32 swstat;
  208. u32 res16[2];
  209. u32 ocparcfg0;
  210. u32 ocparcfg1;
  211. u32 ocparcfg2;
  212. u32 ocparcfg3;
  213. u32 ocparstat0;
  214. u32 ocparstat1;
  215. u32 ocparwlog0;
  216. u32 ocparwlog1;
  217. u32 ocparwlog2;
  218. u32 ocparawlog0;
  219. u32 ocparawlog1;
  220. u32 ocparrlog0;
  221. u32 ocparrlog1;
  222. u32 ocpararlog0;
  223. u32 ocpararlog1;
  224. u32 poisoncfg;
  225. u32 poisonstat;
  226. u32 adveccindex;
  227. union {
  228. u32 adveccstat;
  229. u32 eccapstat;
  230. };
  231. u32 eccpoisonpat0;
  232. u32 eccpoisonpat1;
  233. u32 eccpoisonpat2;
  234. u32 res17[6];
  235. u32 caparpoisonctl;
  236. u32 caparpoisonstat;
  237. u32 res18[2];
  238. u32 dynbsmstat;
  239. u32 res19[18];
  240. u32 pstat;
  241. u32 pccfg;
  242. struct {
  243. u32 pcfgr;
  244. u32 pcfgw;
  245. u32 pcfgc;
  246. struct {
  247. u32 pcfgidmaskch0;
  248. u32 pcfidvaluech0;
  249. } pcfgid[16];
  250. u32 pctrl;
  251. u32 pcfgqos0;
  252. u32 pcfgqos1;
  253. u32 pcfgwqos0;
  254. u32 pcfgwqos1;
  255. u32 res[4];
  256. } pcfg[16];
  257. struct {
  258. u32 sarbase;
  259. u32 sarsize;
  260. } sar[4];
  261. u32 sbrctl;
  262. u32 sbrstat;
  263. u32 sbrwdata0;
  264. u32 sbrwdata1;
  265. u32 pdch;
  266. u32 res20[755];
  267. /* umctl2_regs_dch1 */
  268. u32 ch1_stat;
  269. u32 res21[2];
  270. u32 ch1_mrctrl0;
  271. u32 ch1_mrctrl1;
  272. u32 ch1_mrstat;
  273. u32 ch1_mrctrl2;
  274. u32 res22[4];
  275. u32 ch1_pwrctl;
  276. u32 ch1_pwrtmg;
  277. u32 ch1_hwlpctl;
  278. u32 res23[15];
  279. u32 ch1_eccstat;
  280. u32 ch1_eccclr;
  281. u32 ch1_eccerrcnt;
  282. u32 ch1_ecccaddr0;
  283. u32 ch1_ecccaddr1;
  284. u32 ch1_ecccsyn0;
  285. u32 ch1_ecccsyn1;
  286. u32 ch1_ecccsyn2;
  287. u32 ch1_eccbitmask0;
  288. u32 ch1_eccbitmask1;
  289. u32 ch1_eccbitmask2;
  290. u32 ch1_eccuaddr0;
  291. u32 ch1_eccuaddr1;
  292. u32 ch1_eccusyn0;
  293. u32 ch1_eccusyn1;
  294. u32 ch1_eccusyn2;
  295. u32 res24[2];
  296. u32 ch1_crcparctl0;
  297. u32 res25[2];
  298. u32 ch1_crcparstat;
  299. u32 res26[46];
  300. u32 ch1_zqctl2;
  301. u32 ch1_zqstat;
  302. u32 res27[11];
  303. u32 ch1_dfistat;
  304. u32 res28[33];
  305. u32 ch1_odtmap;
  306. u32 res29[47];
  307. u32 ch1_dbg1;
  308. u32 ch1_dbgcam;
  309. u32 ch1_dbgcmd;
  310. u32 ch1_dbgstat;
  311. u32 res30[123];
  312. /* umctl2_regs_freq1 */
  313. struct ddrc_freq freq1;
  314. u32 res31[109];
  315. /* umctl2_regs_addrmap_alt */
  316. u32 addrmap0_alt;
  317. u32 addrmap1_alt;
  318. u32 addrmap2_alt;
  319. u32 addrmap3_alt;
  320. u32 addrmap4_alt;
  321. u32 addrmap5_alt;
  322. u32 addrmap6_alt;
  323. u32 addrmap7_alt;
  324. u32 addrmap8_alt;
  325. u32 addrmap9_alt;
  326. u32 addrmap10_alt;
  327. u32 addrmap11_alt;
  328. u32 res32[758];
  329. /* umctl2_regs_freq2 */
  330. struct ddrc_freq freq2;
  331. u32 res33[879];
  332. /* umctl2_regs_freq3 */
  333. struct ddrc_freq freq3;
  334. };
  335. struct imx8m_ddrphy_regs {
  336. u32 reg[0xf0000];
  337. };
  338. /* PHY State */
  339. enum pstate {
  340. PS0,
  341. PS1,
  342. PS2,
  343. PS3,
  344. };
  345. enum msg_response {
  346. TRAIN_SUCCESS = 0x7,
  347. TRAIN_STREAM_START = 0x8,
  348. TRAIN_FAIL = 0xff,
  349. };
  350. #define DDRC_MSTR_0 0x3d400000
  351. #define DDRC_STAT_0 0x3d400004
  352. #define DDRC_MSTR1_0 0x3d400008
  353. #define DDRC_MRCTRL0_0 0x3d400010
  354. #define DDRC_MRCTRL1_0 0x3d400014
  355. #define DDRC_MRSTAT_0 0x3d400018
  356. #define DDRC_MRCTRL2_0 0x3d40001c
  357. #define DDRC_DERATEEN_0 0x3d400020
  358. #define DDRC_DERATEINT_0 0x3d400024
  359. #define DDRC_MSTR2_0 0x3d400028
  360. #define DDRC_PWRCTL_0 0x3d400030
  361. #define DDRC_PWRTMG_0 0x3d400034
  362. #define DDRC_HWLPCTL_0 0x3d400038
  363. #define DDRC_HWFFCCTL_0 0x3d40003c
  364. #define DDRC_HWFFCSTAT_0 0x3d400040
  365. #define DDRC_RFSHCTL0_0 0x3d400050
  366. #define DDRC_RFSHCTL1_0 0x3d400054
  367. #define DDRC_RFSHCTL2_0 0x3d400058
  368. #define DDRC_RFSHCTL3_0 0x3d400060
  369. #define DDRC_RFSHTMG_0 0x3d400064
  370. #define DDRC_ECCCFG0_0 0x3d400070
  371. #define DDRC_ECCCFG1_0 0x3d400074
  372. #define DDRC_ECCSTAT_0 0x3d400078
  373. #define DDRC_ECCCLR_0 0x3d40007c
  374. #define DDRC_ECCERRCNT_0 0x3d400080
  375. #define DDRC_ECCCADDR0_0 0x3d400084
  376. #define DDRC_ECCCADDR1_0 0x3d400088
  377. #define DDRC_ECCCSYN0_0 0x3d40008c
  378. #define DDRC_ECCCSYN1_0 0x3d400090
  379. #define DDRC_ECCCSYN2_0 0x3d400094
  380. #define DDRC_ECCBITMASK0_0 0x3d400098
  381. #define DDRC_ECCBITMASK1_0 0x3d40009c
  382. #define DDRC_ECCBITMASK2_0 0x3d4000a0
  383. #define DDRC_ECCUADDR0_0 0x3d4000a4
  384. #define DDRC_ECCUADDR1_0 0x3d4000a8
  385. #define DDRC_ECCUSYN0_0 0x3d4000ac
  386. #define DDRC_ECCUSYN1_0 0x3d4000b0
  387. #define DDRC_ECCUSYN2_0 0x3d4000b4
  388. #define DDRC_ECCPOISONADDR0_0 0x3d4000b8
  389. #define DDRC_ECCPOISONADDR1_0 0x3d4000bc
  390. #define DDRC_CRCPARCTL0_0 0x3d4000c0
  391. #define DDRC_CRCPARCTL1_0 0x3d4000c4
  392. #define DDRC_CRCPARCTL2_0 0x3d4000c8
  393. #define DDRC_CRCPARSTAT_0 0x3d4000cc
  394. #define DDRC_INIT0_0 0x3d4000d0
  395. #define DDRC_INIT1_0 0x3d4000d4
  396. #define DDRC_INIT2_0 0x3d4000d8
  397. #define DDRC_INIT3_0 0x3d4000dc
  398. #define DDRC_INIT4_0 0x3d4000e0
  399. #define DDRC_INIT5_0 0x3d4000e4
  400. #define DDRC_INIT6_0 0x3d4000e8
  401. #define DDRC_INIT7_0 0x3d4000ec
  402. #define DDRC_DIMMCTL_0 0x3d4000f0
  403. #define DDRC_RANKCTL_0 0x3d4000f4
  404. #define DDRC_DRAMTMG0_0 0x3d400100
  405. #define DDRC_DRAMTMG1_0 0x3d400104
  406. #define DDRC_DRAMTMG2_0 0x3d400108
  407. #define DDRC_DRAMTMG3_0 0x3d40010c
  408. #define DDRC_DRAMTMG4_0 0x3d400110
  409. #define DDRC_DRAMTMG5_0 0x3d400114
  410. #define DDRC_DRAMTMG6_0 0x3d400118
  411. #define DDRC_DRAMTMG7_0 0x3d40011c
  412. #define DDRC_DRAMTMG8_0 0x3d400120
  413. #define DDRC_DRAMTMG9_0 0x3d400124
  414. #define DDRC_DRAMTMG10_0 0x3d400128
  415. #define DDRC_DRAMTMG11_0 0x3d40012c
  416. #define DDRC_DRAMTMG12_0 0x3d400130
  417. #define DDRC_DRAMTMG13_0 0x3d400134
  418. #define DDRC_DRAMTMG14_0 0x3d400138
  419. #define DDRC_DRAMTMG15_0 0x3d40013C
  420. #define DDRC_DRAMTMG16_0 0x3d400140
  421. #define DDRC_DRAMTMG17_0 0x3d400144
  422. #define DDRC_ZQCTL0_0 0x3d400180
  423. #define DDRC_ZQCTL1_0 0x3d400184
  424. #define DDRC_ZQCTL2_0 0x3d400188
  425. #define DDRC_ZQSTAT_0 0x3d40018c
  426. #define DDRC_DFITMG0_0 0x3d400190
  427. #define DDRC_DFITMG1_0 0x3d400194
  428. #define DDRC_DFILPCFG0_0 0x3d400198
  429. #define DDRC_DFILPCFG1_0 0x3d40019c
  430. #define DDRC_DFIUPD0_0 0x3d4001a0
  431. #define DDRC_DFIUPD1_0 0x3d4001a4
  432. #define DDRC_DFIUPD2_0 0x3d4001a8
  433. #define DDRC_DFIMISC_0 0x3d4001b0
  434. #define DDRC_DFITMG2_0 0x3d4001b4
  435. #define DDRC_DFITMG3_0 0x3d4001b8
  436. #define DDRC_DFISTAT_0 0x3d4001bc
  437. #define DDRC_DBICTL_0 0x3d4001c0
  438. #define DDRC_DFIPHYMSTR_0 0x3d4001c4
  439. #define DDRC_TRAINCTL0_0 0x3d4001d0
  440. #define DDRC_TRAINCTL1_0 0x3d4001d4
  441. #define DDRC_TRAINCTL2_0 0x3d4001d8
  442. #define DDRC_TRAINSTAT_0 0x3d4001dc
  443. #define DDRC_ADDRMAP0_0 0x3d400200
  444. #define DDRC_ADDRMAP1_0 0x3d400204
  445. #define DDRC_ADDRMAP2_0 0x3d400208
  446. #define DDRC_ADDRMAP3_0 0x3d40020c
  447. #define DDRC_ADDRMAP4_0 0x3d400210
  448. #define DDRC_ADDRMAP5_0 0x3d400214
  449. #define DDRC_ADDRMAP6_0 0x3d400218
  450. #define DDRC_ADDRMAP7_0 0x3d40021c
  451. #define DDRC_ADDRMAP8_0 0x3d400220
  452. #define DDRC_ADDRMAP9_0 0x3d400224
  453. #define DDRC_ADDRMAP10_0 0x3d400228
  454. #define DDRC_ADDRMAP11_0 0x3d40022c
  455. #define DDRC_ODTCFG_0 0x3d400240
  456. #define DDRC_ODTMAP_0 0x3d400244
  457. #define DDRC_SCHED_0 0x3d400250
  458. #define DDRC_SCHED1_0 0x3d400254
  459. #define DDRC_PERFHPR1_0 0x3d40025c
  460. #define DDRC_PERFLPR1_0 0x3d400264
  461. #define DDRC_PERFWR1_0 0x3d40026c
  462. #define DDRC_PERFVPR1_0 0x3d400274
  463. #define DDRC_PERFVPW1_0 0x3d400278
  464. #define DDRC_DQMAP0_0 0x3d400280
  465. #define DDRC_DQMAP1_0 0x3d400284
  466. #define DDRC_DQMAP2_0 0x3d400288
  467. #define DDRC_DQMAP3_0 0x3d40028c
  468. #define DDRC_DQMAP4_0 0x3d400290
  469. #define DDRC_DQMAP5_0 0x3d400294
  470. #define DDRC_DBG0_0 0x3d400300
  471. #define DDRC_DBG1_0 0x3d400304
  472. #define DDRC_DBGCAM_0 0x3d400308
  473. #define DDRC_DBGCMD_0 0x3d40030c
  474. #define DDRC_DBGSTAT_0 0x3d400310
  475. #define DDRC_SWCTL_0 0x3d400320
  476. #define DDRC_SWSTAT_0 0x3d400324
  477. #define DDRC_OCPARCFG0_0 0x3d400330
  478. #define DDRC_OCPARCFG1_0 0x3d400334
  479. #define DDRC_OCPARCFG2_0 0x3d400338
  480. #define DDRC_OCPARCFG3_0 0x3d40033c
  481. #define DDRC_OCPARSTAT0_0 0x3d400340
  482. #define DDRC_OCPARSTAT1_0 0x3d400344
  483. #define DDRC_OCPARWLOG0_0 0x3d400348
  484. #define DDRC_OCPARWLOG1_0 0x3d40034c
  485. #define DDRC_OCPARWLOG2_0 0x3d400350
  486. #define DDRC_OCPARAWLOG0_0 0x3d400354
  487. #define DDRC_OCPARAWLOG1_0 0x3d400358
  488. #define DDRC_OCPARRLOG0_0 0x3d40035c
  489. #define DDRC_OCPARRLOG1_0 0x3d400360
  490. #define DDRC_OCPARARLOG0_0 0x3d400364
  491. #define DDRC_OCPARARLOG1_0 0x3d400368
  492. #define DDRC_POISONCFG_0 0x3d40036C
  493. #define DDRC_POISONSTAT_0 0x3d400370
  494. #define DDRC_ADVECCINDEX_0 0x3d400003
  495. #define DDRC_ADVECCSTAT_0 0x3d400003
  496. #define DDRC_ECCPOISONPAT0_0 0x3d400003
  497. #define DDRC_ECCPOISONPAT1_0 0x3d400003
  498. #define DDRC_ECCPOISONPAT2_0 0x3d400003
  499. #define DDRC_HIFCTL_0 0x3d400003
  500. #define DDRC_PSTAT_0 0x3d4003fc
  501. #define DDRC_PCCFG_0 0x3d400400
  502. #define DDRC_PCFGR_0_0 0x3d400404
  503. #define DDRC_PCFGR_1_0 0x3d4004b4
  504. #define DDRC_PCFGR_2_0 0x3d400564
  505. #define DDRC_PCFGR_3_0 0x3d400614
  506. #define DDRC_PCFGW_0_0 0x3d400408
  507. #define DDRC_PCFGW_1_0 0x3d400408
  508. #define DDRC_PCFGW_2_0 0x3d400568
  509. #define DDRC_PCFGW_3_0 0x3d400618
  510. #define DDRC_PCFGC_0_0 0x3d40040c
  511. #define DDRC_PCFGIDMASKCH_0 0x3d400410
  512. #define DDRC_PCFGIDVALUECH_0 0x3d400414
  513. #define DDRC_PCTRL_0_0 0x3d400490
  514. #define DDRC_PCTRL_1_0 0x3d400540
  515. #define DDRC_PCTRL_2_0 0x3d4005f0
  516. #define DDRC_PCTRL_3_0 0x3d4006a0
  517. #define DDRC_PCFGQOS0_0_0 0x3d400494
  518. #define DDRC_PCFGQOS1_0_0 0x3d400498
  519. #define DDRC_PCFGWQOS0_0_0 0x3d40049c
  520. #define DDRC_PCFGWQOS1_0_0 0x3d4004a0
  521. #define DDRC_SARBASE0_0 0x3d400f04
  522. #define DDRC_SARSIZE0_0 0x3d400f08
  523. #define DDRC_SBRCTL_0 0x3d400f24
  524. #define DDRC_SBRSTAT_0 0x3d400f28
  525. #define DDRC_SBRWDATA0_0 0x3d400f2c
  526. #define DDRC_SBRWDATA1_0 0x3d400f30
  527. #define DDRC_PDCH_0 0x3d400f34
  528. /**********************/
  529. #define DDRC_MSTR(X) (DDRC_IPS_BASE_ADDR(X) + 0x00)
  530. #define DDRC_STAT(X) (DDRC_IPS_BASE_ADDR(X) + 0x04)
  531. #define DDRC_MSTR1(X) (DDRC_IPS_BASE_ADDR(X) + 0x08)
  532. #define DDRC_MRCTRL0(X) (DDRC_IPS_BASE_ADDR(X) + 0x10)
  533. #define DDRC_MRCTRL1(X) (DDRC_IPS_BASE_ADDR(X) + 0x14)
  534. #define DDRC_MRSTAT(X) (DDRC_IPS_BASE_ADDR(X) + 0x18)
  535. #define DDRC_MRCTRL2(X) (DDRC_IPS_BASE_ADDR(X) + 0x1c)
  536. #define DDRC_DERATEEN(X) (DDRC_IPS_BASE_ADDR(X) + 0x20)
  537. #define DDRC_DERATEINT(X) (DDRC_IPS_BASE_ADDR(X) + 0x24)
  538. #define DDRC_MSTR2(X) (DDRC_IPS_BASE_ADDR(X) + 0x28)
  539. #define DDRC_PWRCTL(X) (DDRC_IPS_BASE_ADDR(X) + 0x30)
  540. #define DDRC_PWRTMG(X) (DDRC_IPS_BASE_ADDR(X) + 0x34)
  541. #define DDRC_HWLPCTL(X) (DDRC_IPS_BASE_ADDR(X) + 0x38)
  542. #define DDRC_HWFFCCTL(X) (DDRC_IPS_BASE_ADDR(X) + 0x3c)
  543. #define DDRC_HWFFCSTAT(X) (DDRC_IPS_BASE_ADDR(X) + 0x40)
  544. #define DDRC_RFSHCTL0(X) (DDRC_IPS_BASE_ADDR(X) + 0x50)
  545. #define DDRC_RFSHCTL1(X) (DDRC_IPS_BASE_ADDR(X) + 0x54)
  546. #define DDRC_RFSHCTL2(X) (DDRC_IPS_BASE_ADDR(X) + 0x58)
  547. #define DDRC_RFSHCTL3(X) (DDRC_IPS_BASE_ADDR(X) + 0x60)
  548. #define DDRC_RFSHTMG(X) (DDRC_IPS_BASE_ADDR(X) + 0x64)
  549. #define DDRC_ECCCFG0(X) (DDRC_IPS_BASE_ADDR(X) + 0x70)
  550. #define DDRC_ECCCFG1(X) (DDRC_IPS_BASE_ADDR(X) + 0x74)
  551. #define DDRC_ECCSTAT(X) (DDRC_IPS_BASE_ADDR(X) + 0x78)
  552. #define DDRC_ECCCLR(X) (DDRC_IPS_BASE_ADDR(X) + 0x7c)
  553. #define DDRC_ECCERRCNT(X) (DDRC_IPS_BASE_ADDR(X) + 0x80)
  554. #define DDRC_ECCCADDR0(X) (DDRC_IPS_BASE_ADDR(X) + 0x84)
  555. #define DDRC_ECCCADDR1(X) (DDRC_IPS_BASE_ADDR(X) + 0x88)
  556. #define DDRC_ECCCSYN0(X) (DDRC_IPS_BASE_ADDR(X) + 0x8c)
  557. #define DDRC_ECCCSYN1(X) (DDRC_IPS_BASE_ADDR(X) + 0x90)
  558. #define DDRC_ECCCSYN2(X) (DDRC_IPS_BASE_ADDR(X) + 0x94)
  559. #define DDRC_ECCBITMASK0(X) (DDRC_IPS_BASE_ADDR(X) + 0x98)
  560. #define DDRC_ECCBITMASK1(X) (DDRC_IPS_BASE_ADDR(X) + 0x9c)
  561. #define DDRC_ECCBITMASK2(X) (DDRC_IPS_BASE_ADDR(X) + 0xa0)
  562. #define DDRC_ECCUADDR0(X) (DDRC_IPS_BASE_ADDR(X) + 0xa4)
  563. #define DDRC_ECCUADDR1(X) (DDRC_IPS_BASE_ADDR(X) + 0xa8)
  564. #define DDRC_ECCUSYN0(X) (DDRC_IPS_BASE_ADDR(X) + 0xac)
  565. #define DDRC_ECCUSYN1(X) (DDRC_IPS_BASE_ADDR(X) + 0xb0)
  566. #define DDRC_ECCUSYN2(X) (DDRC_IPS_BASE_ADDR(X) + 0xb4)
  567. #define DDRC_ECCPOISONADDR0(X) (DDRC_IPS_BASE_ADDR(X) + 0xb8)
  568. #define DDRC_ECCPOISONADDR1(X) (DDRC_IPS_BASE_ADDR(X) + 0xbc)
  569. #define DDRC_CRCPARCTL0(X) (DDRC_IPS_BASE_ADDR(X) + 0xc0)
  570. #define DDRC_CRCPARCTL1(X) (DDRC_IPS_BASE_ADDR(X) + 0xc4)
  571. #define DDRC_CRCPARCTL2(X) (DDRC_IPS_BASE_ADDR(X) + 0xc8)
  572. #define DDRC_CRCPARSTAT(X) (DDRC_IPS_BASE_ADDR(X) + 0xcc)
  573. #define DDRC_INIT0(X) (DDRC_IPS_BASE_ADDR(X) + 0xd0)
  574. #define DDRC_INIT1(X) (DDRC_IPS_BASE_ADDR(X) + 0xd4)
  575. #define DDRC_INIT2(X) (DDRC_IPS_BASE_ADDR(X) + 0xd8)
  576. #define DDRC_INIT3(X) (DDRC_IPS_BASE_ADDR(X) + 0xdc)
  577. #define DDRC_INIT4(X) (DDRC_IPS_BASE_ADDR(X) + 0xe0)
  578. #define DDRC_INIT5(X) (DDRC_IPS_BASE_ADDR(X) + 0xe4)
  579. #define DDRC_INIT6(X) (DDRC_IPS_BASE_ADDR(X) + 0xe8)
  580. #define DDRC_INIT7(X) (DDRC_IPS_BASE_ADDR(X) + 0xec)
  581. #define DDRC_DIMMCTL(X) (DDRC_IPS_BASE_ADDR(X) + 0xf0)
  582. #define DDRC_RANKCTL(X) (DDRC_IPS_BASE_ADDR(X) + 0xf4)
  583. #define DDRC_DRAMTMG0(X) (DDRC_IPS_BASE_ADDR(X) + 0x100)
  584. #define DDRC_DRAMTMG1(X) (DDRC_IPS_BASE_ADDR(X) + 0x104)
  585. #define DDRC_DRAMTMG2(X) (DDRC_IPS_BASE_ADDR(X) + 0x108)
  586. #define DDRC_DRAMTMG3(X) (DDRC_IPS_BASE_ADDR(X) + 0x10c)
  587. #define DDRC_DRAMTMG4(X) (DDRC_IPS_BASE_ADDR(X) + 0x110)
  588. #define DDRC_DRAMTMG5(X) (DDRC_IPS_BASE_ADDR(X) + 0x114)
  589. #define DDRC_DRAMTMG6(X) (DDRC_IPS_BASE_ADDR(X) + 0x118)
  590. #define DDRC_DRAMTMG7(X) (DDRC_IPS_BASE_ADDR(X) + 0x11c)
  591. #define DDRC_DRAMTMG8(X) (DDRC_IPS_BASE_ADDR(X) + 0x120)
  592. #define DDRC_DRAMTMG9(X) (DDRC_IPS_BASE_ADDR(X) + 0x124)
  593. #define DDRC_DRAMTMG10(X) (DDRC_IPS_BASE_ADDR(X) + 0x128)
  594. #define DDRC_DRAMTMG11(X) (DDRC_IPS_BASE_ADDR(X) + 0x12c)
  595. #define DDRC_DRAMTMG12(X) (DDRC_IPS_BASE_ADDR(X) + 0x130)
  596. #define DDRC_DRAMTMG13(X) (DDRC_IPS_BASE_ADDR(X) + 0x134)
  597. #define DDRC_DRAMTMG14(X) (DDRC_IPS_BASE_ADDR(X) + 0x138)
  598. #define DDRC_DRAMTMG15(X) (DDRC_IPS_BASE_ADDR(X) + 0x13C)
  599. #define DDRC_DRAMTMG16(X) (DDRC_IPS_BASE_ADDR(X) + 0x140)
  600. #define DDRC_DRAMTMG17(X) (DDRC_IPS_BASE_ADDR(X) + 0x144)
  601. #define DDRC_ZQCTL0(X) (DDRC_IPS_BASE_ADDR(X) + 0x180)
  602. #define DDRC_ZQCTL1(X) (DDRC_IPS_BASE_ADDR(X) + 0x184)
  603. #define DDRC_ZQCTL2(X) (DDRC_IPS_BASE_ADDR(X) + 0x188)
  604. #define DDRC_ZQSTAT(X) (DDRC_IPS_BASE_ADDR(X) + 0x18c)
  605. #define DDRC_DFITMG0(X) (DDRC_IPS_BASE_ADDR(X) + 0x190)
  606. #define DDRC_DFITMG1(X) (DDRC_IPS_BASE_ADDR(X) + 0x194)
  607. #define DDRC_DFILPCFG0(X) (DDRC_IPS_BASE_ADDR(X) + 0x198)
  608. #define DDRC_DFILPCFG1(X) (DDRC_IPS_BASE_ADDR(X) + 0x19c)
  609. #define DDRC_DFIUPD0(X) (DDRC_IPS_BASE_ADDR(X) + 0x1a0)
  610. #define DDRC_DFIUPD1(X) (DDRC_IPS_BASE_ADDR(X) + 0x1a4)
  611. #define DDRC_DFIUPD2(X) (DDRC_IPS_BASE_ADDR(X) + 0x1a8)
  612. #define DDRC_DFIMISC(X) (DDRC_IPS_BASE_ADDR(X) + 0x1b0)
  613. #define DDRC_DFITMG2(X) (DDRC_IPS_BASE_ADDR(X) + 0x1b4)
  614. #define DDRC_DFITMG3(X) (DDRC_IPS_BASE_ADDR(X) + 0x1b8)
  615. #define DDRC_DFISTAT(X) (DDRC_IPS_BASE_ADDR(X) + 0x1bc)
  616. #define DDRC_DBICTL(X) (DDRC_IPS_BASE_ADDR(X) + 0x1c0)
  617. #define DDRC_DFIPHYMSTR(X) (DDRC_IPS_BASE_ADDR(X) + 0x1c4)
  618. #define DDRC_TRAINCTL0(X) (DDRC_IPS_BASE_ADDR(X) + 0x1d0)
  619. #define DDRC_TRAINCTL1(X) (DDRC_IPS_BASE_ADDR(X) + 0x1d4)
  620. #define DDRC_TRAINCTL2(X) (DDRC_IPS_BASE_ADDR(X) + 0x1d8)
  621. #define DDRC_TRAINSTAT(X) (DDRC_IPS_BASE_ADDR(X) + 0x1dc)
  622. #define DDRC_ADDRMAP0(X) (DDRC_IPS_BASE_ADDR(X) + 0x200)
  623. #define DDRC_ADDRMAP1(X) (DDRC_IPS_BASE_ADDR(X) + 0x204)
  624. #define DDRC_ADDRMAP2(X) (DDRC_IPS_BASE_ADDR(X) + 0x208)
  625. #define DDRC_ADDRMAP3(X) (DDRC_IPS_BASE_ADDR(X) + 0x20c)
  626. #define DDRC_ADDRMAP4(X) (DDRC_IPS_BASE_ADDR(X) + 0x210)
  627. #define DDRC_ADDRMAP5(X) (DDRC_IPS_BASE_ADDR(X) + 0x214)
  628. #define DDRC_ADDRMAP6(X) (DDRC_IPS_BASE_ADDR(X) + 0x218)
  629. #define DDRC_ADDRMAP7(X) (DDRC_IPS_BASE_ADDR(X) + 0x21c)
  630. #define DDRC_ADDRMAP8(X) (DDRC_IPS_BASE_ADDR(X) + 0x220)
  631. #define DDRC_ADDRMAP9(X) (DDRC_IPS_BASE_ADDR(X) + 0x224)
  632. #define DDRC_ADDRMAP10(X) (DDRC_IPS_BASE_ADDR(X) + 0x228)
  633. #define DDRC_ADDRMAP11(X) (DDRC_IPS_BASE_ADDR(X) + 0x22c)
  634. #define DDRC_ODTCFG(X) (DDRC_IPS_BASE_ADDR(X) + 0x240)
  635. #define DDRC_ODTMAP(X) (DDRC_IPS_BASE_ADDR(X) + 0x244)
  636. #define DDRC_SCHED(X) (DDRC_IPS_BASE_ADDR(X) + 0x250)
  637. #define DDRC_SCHED1(X) (DDRC_IPS_BASE_ADDR(X) + 0x254)
  638. #define DDRC_PERFHPR1(X) (DDRC_IPS_BASE_ADDR(X) + 0x25c)
  639. #define DDRC_PERFLPR1(X) (DDRC_IPS_BASE_ADDR(X) + 0x264)
  640. #define DDRC_PERFWR1(X) (DDRC_IPS_BASE_ADDR(X) + 0x26c)
  641. #define DDRC_PERFVPR1(X) (DDRC_IPS_BASE_ADDR(X) + 0x274)
  642. #define DDRC_PERFVPW1(X) (DDRC_IPS_BASE_ADDR(X) + 0x278)
  643. #define DDRC_DQMAP0(X) (DDRC_IPS_BASE_ADDR(X) + 0x280)
  644. #define DDRC_DQMAP1(X) (DDRC_IPS_BASE_ADDR(X) + 0x284)
  645. #define DDRC_DQMAP2(X) (DDRC_IPS_BASE_ADDR(X) + 0x288)
  646. #define DDRC_DQMAP3(X) (DDRC_IPS_BASE_ADDR(X) + 0x28c)
  647. #define DDRC_DQMAP4(X) (DDRC_IPS_BASE_ADDR(X) + 0x290)
  648. #define DDRC_DQMAP5(X) (DDRC_IPS_BASE_ADDR(X) + 0x294)
  649. #define DDRC_DBG0(X) (DDRC_IPS_BASE_ADDR(X) + 0x300)
  650. #define DDRC_DBG1(X) (DDRC_IPS_BASE_ADDR(X) + 0x304)
  651. #define DDRC_DBGCAM(X) (DDRC_IPS_BASE_ADDR(X) + 0x308)
  652. #define DDRC_DBGCMD(X) (DDRC_IPS_BASE_ADDR(X) + 0x30c)
  653. #define DDRC_DBGSTAT(X) (DDRC_IPS_BASE_ADDR(X) + 0x310)
  654. #define DDRC_SWCTL(X) (DDRC_IPS_BASE_ADDR(X) + 0x320)
  655. #define DDRC_SWSTAT(X) (DDRC_IPS_BASE_ADDR(X) + 0x324)
  656. #define DDRC_OCPARCFG0(X) (DDRC_IPS_BASE_ADDR(X) + 0x330)
  657. #define DDRC_OCPARCFG1(X) (DDRC_IPS_BASE_ADDR(X) + 0x334)
  658. #define DDRC_OCPARCFG2(X) (DDRC_IPS_BASE_ADDR(X) + 0x338)
  659. #define DDRC_OCPARCFG3(X) (DDRC_IPS_BASE_ADDR(X) + 0x33c)
  660. #define DDRC_OCPARSTAT0(X) (DDRC_IPS_BASE_ADDR(X) + 0x340)
  661. #define DDRC_OCPARSTAT1(X) (DDRC_IPS_BASE_ADDR(X) + 0x344)
  662. #define DDRC_OCPARWLOG0(X) (DDRC_IPS_BASE_ADDR(X) + 0x348)
  663. #define DDRC_OCPARWLOG1(X) (DDRC_IPS_BASE_ADDR(X) + 0x34c)
  664. #define DDRC_OCPARWLOG2(X) (DDRC_IPS_BASE_ADDR(X) + 0x350)
  665. #define DDRC_OCPARAWLOG0(X) (DDRC_IPS_BASE_ADDR(X) + 0x354)
  666. #define DDRC_OCPARAWLOG1(X) (DDRC_IPS_BASE_ADDR(X) + 0x358)
  667. #define DDRC_OCPARRLOG0(X) (DDRC_IPS_BASE_ADDR(X) + 0x35c)
  668. #define DDRC_OCPARRLOG1(X) (DDRC_IPS_BASE_ADDR(X) + 0x360)
  669. #define DDRC_OCPARARLOG0(X) (DDRC_IPS_BASE_ADDR(X) + 0x364)
  670. #define DDRC_OCPARARLOG1(X) (DDRC_IPS_BASE_ADDR(X) + 0x368)
  671. #define DDRC_POISONCFG(X) (DDRC_IPS_BASE_ADDR(X) + 0x36C)
  672. #define DDRC_POISONSTAT(X) (DDRC_IPS_BASE_ADDR(X) + 0x370)
  673. #define DDRC_PSTAT(X) (DDRC_IPS_BASE_ADDR(X) + 0x3fc)
  674. #define DDRC_PCCFG(X) (DDRC_IPS_BASE_ADDR(X) + 0x400)
  675. #define DDRC_PCFGR_0(X) (DDRC_IPS_BASE_ADDR(X) + 0x404)
  676. #define DDRC_PCFGR_1(X) (DDRC_IPS_BASE_ADDR(X) + 1 * 0xb0 + 0x404)
  677. #define DDRC_PCFGR_2(X) (DDRC_IPS_BASE_ADDR(X) + 2 * 0xb0 + 0x404)
  678. #define DDRC_PCFGR_3(X) (DDRC_IPS_BASE_ADDR(X) + 3 * 0xb0 + 0x404)
  679. #define DDRC_PCFGW_0(X) (DDRC_IPS_BASE_ADDR(X) + 0x408)
  680. #define DDRC_PCFGW_1(X) (DDRC_IPS_BASE_ADDR(X) + 1 * 0xb0 + 0x408)
  681. #define DDRC_PCFGW_2(X) (DDRC_IPS_BASE_ADDR(X) + 2 * 0xb0 + 0x408)
  682. #define DDRC_PCFGW_3(X) (DDRC_IPS_BASE_ADDR(X) + 3 * 0xb0 + 0x408)
  683. #define DDRC_PCFGC_0(X) (DDRC_IPS_BASE_ADDR(X) + 0x40c)
  684. #define DDRC_PCFGIDMASKCH(X) (DDRC_IPS_BASE_ADDR(X) + 0x410)
  685. #define DDRC_PCFGIDVALUECH(X) (DDRC_IPS_BASE_ADDR(X) + 0x414)
  686. #define DDRC_PCTRL_0(X) (DDRC_IPS_BASE_ADDR(X) + 0x490)
  687. #define DDRC_PCTRL_1(X) (DDRC_IPS_BASE_ADDR(X) + 0x490 + 1 * 0xb0)
  688. #define DDRC_PCTRL_2(X) (DDRC_IPS_BASE_ADDR(X) + 0x490 + 2 * 0xb0)
  689. #define DDRC_PCTRL_3(X) (DDRC_IPS_BASE_ADDR(X) + 0x490 + 3 * 0xb0)
  690. #define DDRC_PCFGQOS0_0(X) (DDRC_IPS_BASE_ADDR(X) + 0x494)
  691. #define DDRC_PCFGQOS1_0(X) (DDRC_IPS_BASE_ADDR(X) + 0x498)
  692. #define DDRC_PCFGWQOS0_0(X) (DDRC_IPS_BASE_ADDR(X) + 0x49c)
  693. #define DDRC_PCFGWQOS1_0(X) (DDRC_IPS_BASE_ADDR(X) + 0x4a0)
  694. #define DDRC_SARBASE0(X) (DDRC_IPS_BASE_ADDR(X) + 0xf04)
  695. #define DDRC_SARSIZE0(X) (DDRC_IPS_BASE_ADDR(X) + 0xf08)
  696. #define DDRC_SBRCTL(X) (DDRC_IPS_BASE_ADDR(X) + 0xf24)
  697. #define DDRC_SBRSTAT(X) (DDRC_IPS_BASE_ADDR(X) + 0xf28)
  698. #define DDRC_SBRWDATA0(X) (DDRC_IPS_BASE_ADDR(X) + 0xf2c)
  699. #define DDRC_SBRWDATA1(X) (DDRC_IPS_BASE_ADDR(X) + 0xf30)
  700. #define DDRC_PDCH(X) (DDRC_IPS_BASE_ADDR(X) + 0xf34)
  701. #define DDRC_FREQ1_DERATEEN(X) (DDRC_IPS_BASE_ADDR(X) + 0x2020)
  702. #define DDRC_FREQ1_DERATEINT(X) (DDRC_IPS_BASE_ADDR(X) + 0x2024)
  703. #define DDRC_FREQ1_RFSHCTL0(X) (DDRC_IPS_BASE_ADDR(X) + 0x2050)
  704. #define DDRC_FREQ1_RFSHTMG(X) (DDRC_IPS_BASE_ADDR(X) + 0x2064)
  705. #define DDRC_FREQ1_INIT3(X) (DDRC_IPS_BASE_ADDR(X) + 0x20dc)
  706. #define DDRC_FREQ1_INIT4(X) (DDRC_IPS_BASE_ADDR(X) + 0x20e0)
  707. #define DDRC_FREQ1_INIT6(X) (DDRC_IPS_BASE_ADDR(X) + 0x20e8)
  708. #define DDRC_FREQ1_INIT7(X) (DDRC_IPS_BASE_ADDR(X) + 0x20ec)
  709. #define DDRC_FREQ1_DRAMTMG0(X) (DDRC_IPS_BASE_ADDR(X) + 0x2100)
  710. #define DDRC_FREQ1_DRAMTMG1(X) (DDRC_IPS_BASE_ADDR(X) + 0x2104)
  711. #define DDRC_FREQ1_DRAMTMG2(X) (DDRC_IPS_BASE_ADDR(X) + 0x2108)
  712. #define DDRC_FREQ1_DRAMTMG3(X) (DDRC_IPS_BASE_ADDR(X) + 0x210c)
  713. #define DDRC_FREQ1_DRAMTMG4(X) (DDRC_IPS_BASE_ADDR(X) + 0x2110)
  714. #define DDRC_FREQ1_DRAMTMG5(X) (DDRC_IPS_BASE_ADDR(X) + 0x2114)
  715. #define DDRC_FREQ1_DRAMTMG6(X) (DDRC_IPS_BASE_ADDR(X) + 0x2118)
  716. #define DDRC_FREQ1_DRAMTMG7(X) (DDRC_IPS_BASE_ADDR(X) + 0x211c)
  717. #define DDRC_FREQ1_DRAMTMG8(X) (DDRC_IPS_BASE_ADDR(X) + 0x2120)
  718. #define DDRC_FREQ1_DRAMTMG9(X) (DDRC_IPS_BASE_ADDR(X) + 0x2124)
  719. #define DDRC_FREQ1_DRAMTMG10(X) (DDRC_IPS_BASE_ADDR(X) + 0x2128)
  720. #define DDRC_FREQ1_DRAMTMG11(X) (DDRC_IPS_BASE_ADDR(X) + 0x212c)
  721. #define DDRC_FREQ1_DRAMTMG12(X) (DDRC_IPS_BASE_ADDR(X) + 0x2130)
  722. #define DDRC_FREQ1_DRAMTMG13(X) (DDRC_IPS_BASE_ADDR(X) + 0x2134)
  723. #define DDRC_FREQ1_DRAMTMG14(X) (DDRC_IPS_BASE_ADDR(X) + 0x2138)
  724. #define DDRC_FREQ1_DRAMTMG15(X) (DDRC_IPS_BASE_ADDR(X) + 0x213C)
  725. #define DDRC_FREQ1_DRAMTMG16(X) (DDRC_IPS_BASE_ADDR(X) + 0x2140)
  726. #define DDRC_FREQ1_DRAMTMG17(X) (DDRC_IPS_BASE_ADDR(X) + 0x2144)
  727. #define DDRC_FREQ1_ZQCTL0(X) (DDRC_IPS_BASE_ADDR(X) + 0x2180)
  728. #define DDRC_FREQ1_DFITMG0(X) (DDRC_IPS_BASE_ADDR(X) + 0x2190)
  729. #define DDRC_FREQ1_DFITMG1(X) (DDRC_IPS_BASE_ADDR(X) + 0x2194)
  730. #define DDRC_FREQ1_DFITMG2(X) (DDRC_IPS_BASE_ADDR(X) + 0x21b4)
  731. #define DDRC_FREQ1_DFITMG3(X) (DDRC_IPS_BASE_ADDR(X) + 0x21b8)
  732. #define DDRC_FREQ1_ODTCFG(X) (DDRC_IPS_BASE_ADDR(X) + 0x2240)
  733. #define DDRC_FREQ2_DERATEEN(X) (DDRC_IPS_BASE_ADDR(X) + 0x3020)
  734. #define DDRC_FREQ2_DERATEINT(X) (DDRC_IPS_BASE_ADDR(X) + 0x3024)
  735. #define DDRC_FREQ2_RFSHCTL0(X) (DDRC_IPS_BASE_ADDR(X) + 0x3050)
  736. #define DDRC_FREQ2_RFSHTMG(X) (DDRC_IPS_BASE_ADDR(X) + 0x3064)
  737. #define DDRC_FREQ2_INIT3(X) (DDRC_IPS_BASE_ADDR(X) + 0x30dc)
  738. #define DDRC_FREQ2_INIT4(X) (DDRC_IPS_BASE_ADDR(X) + 0x30e0)
  739. #define DDRC_FREQ2_INIT6(X) (DDRC_IPS_BASE_ADDR(X) + 0x30e8)
  740. #define DDRC_FREQ2_INIT7(X) (DDRC_IPS_BASE_ADDR(X) + 0x30ec)
  741. #define DDRC_FREQ2_DRAMTMG0(X) (DDRC_IPS_BASE_ADDR(X) + 0x3100)
  742. #define DDRC_FREQ2_DRAMTMG1(X) (DDRC_IPS_BASE_ADDR(X) + 0x3104)
  743. #define DDRC_FREQ2_DRAMTMG2(X) (DDRC_IPS_BASE_ADDR(X) + 0x3108)
  744. #define DDRC_FREQ2_DRAMTMG3(X) (DDRC_IPS_BASE_ADDR(X) + 0x310c)
  745. #define DDRC_FREQ2_DRAMTMG4(X) (DDRC_IPS_BASE_ADDR(X) + 0x3110)
  746. #define DDRC_FREQ2_DRAMTMG5(X) (DDRC_IPS_BASE_ADDR(X) + 0x3114)
  747. #define DDRC_FREQ2_DRAMTMG6(X) (DDRC_IPS_BASE_ADDR(X) + 0x3118)
  748. #define DDRC_FREQ2_DRAMTMG7(X) (DDRC_IPS_BASE_ADDR(X) + 0x311c)
  749. #define DDRC_FREQ2_DRAMTMG8(X) (DDRC_IPS_BASE_ADDR(X) + 0x3120)
  750. #define DDRC_FREQ2_DRAMTMG9(X) (DDRC_IPS_BASE_ADDR(X) + 0x3124)
  751. #define DDRC_FREQ2_DRAMTMG10(X) (DDRC_IPS_BASE_ADDR(X) + 0x3128)
  752. #define DDRC_FREQ2_DRAMTMG11(X) (DDRC_IPS_BASE_ADDR(X) + 0x312c)
  753. #define DDRC_FREQ2_DRAMTMG12(X) (DDRC_IPS_BASE_ADDR(X) + 0x3130)
  754. #define DDRC_FREQ2_DRAMTMG13(X) (DDRC_IPS_BASE_ADDR(X) + 0x3134)
  755. #define DDRC_FREQ2_DRAMTMG14(X) (DDRC_IPS_BASE_ADDR(X) + 0x3138)
  756. #define DDRC_FREQ2_DRAMTMG15(X) (DDRC_IPS_BASE_ADDR(X) + 0x313C)
  757. #define DDRC_FREQ2_DRAMTMG16(X) (DDRC_IPS_BASE_ADDR(X) + 0x3140)
  758. #define DDRC_FREQ2_DRAMTMG17(X) (DDRC_IPS_BASE_ADDR(X) + 0x3144)
  759. #define DDRC_FREQ2_ZQCTL0(X) (DDRC_IPS_BASE_ADDR(X) + 0x3180)
  760. #define DDRC_FREQ2_DFITMG0(X) (DDRC_IPS_BASE_ADDR(X) + 0x3190)
  761. #define DDRC_FREQ2_DFITMG1(X) (DDRC_IPS_BASE_ADDR(X) + 0x3194)
  762. #define DDRC_FREQ2_DFITMG2(X) (DDRC_IPS_BASE_ADDR(X) + 0x31b4)
  763. #define DDRC_FREQ2_DFITMG3(X) (DDRC_IPS_BASE_ADDR(X) + 0x31b8)
  764. #define DDRC_FREQ2_ODTCFG(X) (DDRC_IPS_BASE_ADDR(X) + 0x3240)
  765. #define DDRC_FREQ3_DERATEEN(X) (DDRC_IPS_BASE_ADDR(X) + 0x4020)
  766. #define DDRC_FREQ3_DERATEINT(X) (DDRC_IPS_BASE_ADDR(X) + 0x4024)
  767. #define DDRC_FREQ3_RFSHCTL0(X) (DDRC_IPS_BASE_ADDR(X) + 0x4050)
  768. #define DDRC_FREQ3_RFSHTMG(X) (DDRC_IPS_BASE_ADDR(X) + 0x4064)
  769. #define DDRC_FREQ3_INIT3(X) (DDRC_IPS_BASE_ADDR(X) + 0x40dc)
  770. #define DDRC_FREQ3_INIT4(X) (DDRC_IPS_BASE_ADDR(X) + 0x40e0)
  771. #define DDRC_FREQ3_INIT6(X) (DDRC_IPS_BASE_ADDR(X) + 0x40e8)
  772. #define DDRC_FREQ3_INIT7(X) (DDRC_IPS_BASE_ADDR(X) + 0x40ec)
  773. #define DDRC_FREQ3_DRAMTMG0(X) (DDRC_IPS_BASE_ADDR(X) + 0x4100)
  774. #define DDRC_FREQ3_DRAMTMG1(X) (DDRC_IPS_BASE_ADDR(X) + 0x4104)
  775. #define DDRC_FREQ3_DRAMTMG2(X) (DDRC_IPS_BASE_ADDR(X) + 0x4108)
  776. #define DDRC_FREQ3_DRAMTMG3(X) (DDRC_IPS_BASE_ADDR(X) + 0x410c)
  777. #define DDRC_FREQ3_DRAMTMG4(X) (DDRC_IPS_BASE_ADDR(X) + 0x4110)
  778. #define DDRC_FREQ3_DRAMTMG5(X) (DDRC_IPS_BASE_ADDR(X) + 0x4114)
  779. #define DDRC_FREQ3_DRAMTMG6(X) (DDRC_IPS_BASE_ADDR(X) + 0x4118)
  780. #define DDRC_FREQ3_DRAMTMG7(X) (DDRC_IPS_BASE_ADDR(X) + 0x411c)
  781. #define DDRC_FREQ3_DRAMTMG8(X) (DDRC_IPS_BASE_ADDR(X) + 0x4120)
  782. #define DDRC_FREQ3_DRAMTMG9(X) (DDRC_IPS_BASE_ADDR(X) + 0x4124)
  783. #define DDRC_FREQ3_DRAMTMG10(X) (DDRC_IPS_BASE_ADDR(X) + 0x4128)
  784. #define DDRC_FREQ3_DRAMTMG11(X) (DDRC_IPS_BASE_ADDR(X) + 0x412c)
  785. #define DDRC_FREQ3_DRAMTMG12(X) (DDRC_IPS_BASE_ADDR(X) + 0x4130)
  786. #define DDRC_FREQ3_DRAMTMG13(X) (DDRC_IPS_BASE_ADDR(X) + 0x4134)
  787. #define DDRC_FREQ3_DRAMTMG14(X) (DDRC_IPS_BASE_ADDR(X) + 0x4138)
  788. #define DDRC_FREQ3_DRAMTMG15(X) (DDRC_IPS_BASE_ADDR(X) + 0x413C)
  789. #define DDRC_FREQ3_DRAMTMG16(X) (DDRC_IPS_BASE_ADDR(X) + 0x4140)
  790. #define DDRC_FREQ3_ZQCTL0(X) (DDRC_IPS_BASE_ADDR(X) + 0x4180)
  791. #define DDRC_FREQ3_DFITMG0(X) (DDRC_IPS_BASE_ADDR(X) + 0x4190)
  792. #define DDRC_FREQ3_DFITMG1(X) (DDRC_IPS_BASE_ADDR(X) + 0x4194)
  793. #define DDRC_FREQ3_DFITMG2(X) (DDRC_IPS_BASE_ADDR(X) + 0x41b4)
  794. #define DDRC_FREQ3_DFITMG3(X) (DDRC_IPS_BASE_ADDR(X) + 0x41b8)
  795. #define DDRC_FREQ3_ODTCFG(X) (DDRC_IPS_BASE_ADDR(X) + 0x4240)
  796. #define DDRC_DFITMG0_SHADOW(X) (DDRC_IPS_BASE_ADDR(X) + 0x2190)
  797. #define DDRC_DFITMG1_SHADOW(X) (DDRC_IPS_BASE_ADDR(X) + 0x2194)
  798. #define DDRC_DFITMG2_SHADOW(X) (DDRC_IPS_BASE_ADDR(X) + 0x21b4)
  799. #define DDRC_DFITMG3_SHADOW(X) (DDRC_IPS_BASE_ADDR(X) + 0x21b8)
  800. #define DDRC_ODTCFG_SHADOW(X) (DDRC_IPS_BASE_ADDR(X) + 0x2240)
  801. #define DDRPHY_CalBusy(X) (IP2APB_DDRPHY_IPS_BASE_ADDR(X) + 4 * 0x020097)
  802. #define DRC_PERF_MON_BASE_ADDR(X) (0x3d800000 + ((X) * 0x2000000))
  803. #define DRC_PERF_MON_CNT0_CTL(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x0)
  804. #define DRC_PERF_MON_CNT1_CTL(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x4)
  805. #define DRC_PERF_MON_CNT2_CTL(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x8)
  806. #define DRC_PERF_MON_CNT3_CTL(X) (DRC_PERF_MON_BASE_ADDR(X) + 0xC)
  807. #define DRC_PERF_MON_CNT0_DAT(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x20)
  808. #define DRC_PERF_MON_CNT1_DAT(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x24)
  809. #define DRC_PERF_MON_CNT2_DAT(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x28)
  810. #define DRC_PERF_MON_CNT3_DAT(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x2C)
  811. #define DRC_PERF_MON_MRR0_DAT(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x40)
  812. #define DRC_PERF_MON_MRR1_DAT(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x44)
  813. #define DRC_PERF_MON_MRR2_DAT(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x48)
  814. #define DRC_PERF_MON_MRR3_DAT(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x4C)
  815. #define DRC_PERF_MON_MRR4_DAT(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x50)
  816. #define DRC_PERF_MON_MRR5_DAT(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x54)
  817. #define DRC_PERF_MON_MRR6_DAT(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x58)
  818. #define DRC_PERF_MON_MRR7_DAT(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x5C)
  819. #define DRC_PERF_MON_MRR8_DAT(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x60)
  820. #define DRC_PERF_MON_MRR9_DAT(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x64)
  821. #define DRC_PERF_MON_MRR10_DAT(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x68)
  822. #define DRC_PERF_MON_MRR11_DAT(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x6C)
  823. #define DRC_PERF_MON_MRR12_DAT(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x70)
  824. #define DRC_PERF_MON_MRR13_DAT(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x74)
  825. #define DRC_PERF_MON_MRR14_DAT(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x78)
  826. #define DRC_PERF_MON_MRR15_DAT(X) (DRC_PERF_MON_BASE_ADDR(X) + 0x7C)
  827. /* user data type */
  828. enum fw_type {
  829. FW_1D_IMAGE,
  830. FW_2D_IMAGE,
  831. };
  832. struct dram_cfg_param {
  833. unsigned int reg;
  834. unsigned int val;
  835. };
  836. struct dram_fsp_msg {
  837. unsigned int drate;
  838. enum fw_type fw_type;
  839. struct dram_cfg_param *fsp_cfg;
  840. unsigned int fsp_cfg_num;
  841. };
  842. struct dram_timing_info {
  843. /* umctl2 config */
  844. struct dram_cfg_param *ddrc_cfg;
  845. unsigned int ddrc_cfg_num;
  846. /* ddrphy config */
  847. struct dram_cfg_param *ddrphy_cfg;
  848. unsigned int ddrphy_cfg_num;
  849. /* ddr fsp train info */
  850. struct dram_fsp_msg *fsp_msg;
  851. unsigned int fsp_msg_num;
  852. /* ddr phy trained CSR */
  853. struct dram_cfg_param *ddrphy_trained_csr;
  854. unsigned int ddrphy_trained_csr_num;
  855. /* ddr phy PIE */
  856. struct dram_cfg_param *ddrphy_pie;
  857. unsigned int ddrphy_pie_num;
  858. /* initialized drate table */
  859. unsigned int fsp_table[4];
  860. };
  861. extern struct dram_timing_info dram_timing;
  862. void ddr_load_train_firmware(enum fw_type type);
  863. void ddr_init(struct dram_timing_info *timing_info);
  864. void ddr_cfg_phy(struct dram_timing_info *timing_info);
  865. void load_lpddr4_phy_pie(void);
  866. void ddrphy_trained_csr_save(struct dram_cfg_param *param, unsigned int num);
  867. void dram_config_save(struct dram_timing_info *info, unsigned long base);
  868. /* utils function for ddr phy training */
  869. void wait_ddrphy_training_complete(void);
  870. void ddrphy_init_set_dfi_clk(unsigned int drate);
  871. void ddrphy_init_read_msg_block(enum fw_type type);
  872. static inline void reg32_write(unsigned long addr, u32 val)
  873. {
  874. writel(val, addr);
  875. }
  876. static inline u32 reg32_read(unsigned long addr)
  877. {
  878. return readl(addr);
  879. }
  880. static inline void reg32setbit(unsigned long addr, u32 bit)
  881. {
  882. setbits_le32(addr, (1 << bit));
  883. }
  884. #define dwc_ddrphy_apb_wr(addr, data) \
  885. reg32_write(IP2APB_DDRPHY_IPS_BASE_ADDR(0) + 4 * (addr), data)
  886. #define dwc_ddrphy_apb_rd(addr) \
  887. reg32_read(IP2APB_DDRPHY_IPS_BASE_ADDR(0) + 4 * (addr))
  888. extern struct dram_cfg_param ddrphy_trained_csr[];
  889. extern uint32_t ddrphy_trained_csr_num;
  890. #endif