mem_init.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501
  1. /*
  2. * arch/blackfin/include/asm/mem_init.h - reprogram clocks / memory
  3. *
  4. * Copyright 2004-2008 Analog Devices Inc.
  5. *
  6. * Licensed under the GPL-2 or later.
  7. */
  8. #ifndef __MEM_INIT_H__
  9. #define __MEM_INIT_H__
  10. #if defined(EBIU_SDGCTL)
  11. #if defined(CONFIG_MEM_MT48LC16M16A2TG_75) || \
  12. defined(CONFIG_MEM_MT48LC64M4A2FB_7E) || \
  13. defined(CONFIG_MEM_MT48LC16M8A2TG_75) || \
  14. defined(CONFIG_MEM_MT48LC32M8A2_75) || \
  15. defined(CONFIG_MEM_MT48LC8M32B2B5_7) || \
  16. defined(CONFIG_MEM_MT48LC32M16A2TG_75) || \
  17. defined(CONFIG_MEM_MT48LC32M8A2_75)
  18. #if (CONFIG_SCLK_HZ > 119402985)
  19. #define SDRAM_tRP TRP_2
  20. #define SDRAM_tRP_num 2
  21. #define SDRAM_tRAS TRAS_7
  22. #define SDRAM_tRAS_num 7
  23. #define SDRAM_tRCD TRCD_2
  24. #define SDRAM_tWR TWR_2
  25. #endif
  26. #if (CONFIG_SCLK_HZ > 104477612) && (CONFIG_SCLK_HZ <= 119402985)
  27. #define SDRAM_tRP TRP_2
  28. #define SDRAM_tRP_num 2
  29. #define SDRAM_tRAS TRAS_6
  30. #define SDRAM_tRAS_num 6
  31. #define SDRAM_tRCD TRCD_2
  32. #define SDRAM_tWR TWR_2
  33. #endif
  34. #if (CONFIG_SCLK_HZ > 89552239) && (CONFIG_SCLK_HZ <= 104477612)
  35. #define SDRAM_tRP TRP_2
  36. #define SDRAM_tRP_num 2
  37. #define SDRAM_tRAS TRAS_5
  38. #define SDRAM_tRAS_num 5
  39. #define SDRAM_tRCD TRCD_2
  40. #define SDRAM_tWR TWR_2
  41. #endif
  42. #if (CONFIG_SCLK_HZ > 74626866) && (CONFIG_SCLK_HZ <= 89552239)
  43. #define SDRAM_tRP TRP_2
  44. #define SDRAM_tRP_num 2
  45. #define SDRAM_tRAS TRAS_4
  46. #define SDRAM_tRAS_num 4
  47. #define SDRAM_tRCD TRCD_2
  48. #define SDRAM_tWR TWR_2
  49. #endif
  50. #if (CONFIG_SCLK_HZ > 66666667) && (CONFIG_SCLK_HZ <= 74626866)
  51. #define SDRAM_tRP TRP_2
  52. #define SDRAM_tRP_num 2
  53. #define SDRAM_tRAS TRAS_3
  54. #define SDRAM_tRAS_num 3
  55. #define SDRAM_tRCD TRCD_2
  56. #define SDRAM_tWR TWR_2
  57. #endif
  58. #if (CONFIG_SCLK_HZ > 59701493) && (CONFIG_SCLK_HZ <= 66666667)
  59. #define SDRAM_tRP TRP_1
  60. #define SDRAM_tRP_num 1
  61. #define SDRAM_tRAS TRAS_4
  62. #define SDRAM_tRAS_num 4
  63. #define SDRAM_tRCD TRCD_1
  64. #define SDRAM_tWR TWR_2
  65. #endif
  66. #if (CONFIG_SCLK_HZ > 44776119) && (CONFIG_SCLK_HZ <= 59701493)
  67. #define SDRAM_tRP TRP_1
  68. #define SDRAM_tRP_num 1
  69. #define SDRAM_tRAS TRAS_3
  70. #define SDRAM_tRAS_num 3
  71. #define SDRAM_tRCD TRCD_1
  72. #define SDRAM_tWR TWR_2
  73. #endif
  74. #if (CONFIG_SCLK_HZ > 29850746) && (CONFIG_SCLK_HZ <= 44776119)
  75. #define SDRAM_tRP TRP_1
  76. #define SDRAM_tRP_num 1
  77. #define SDRAM_tRAS TRAS_2
  78. #define SDRAM_tRAS_num 2
  79. #define SDRAM_tRCD TRCD_1
  80. #define SDRAM_tWR TWR_2
  81. #endif
  82. #if (CONFIG_SCLK_HZ <= 29850746)
  83. #define SDRAM_tRP TRP_1
  84. #define SDRAM_tRP_num 1
  85. #define SDRAM_tRAS TRAS_1
  86. #define SDRAM_tRAS_num 1
  87. #define SDRAM_tRCD TRCD_1
  88. #define SDRAM_tWR TWR_2
  89. #endif
  90. #endif
  91. /*
  92. * The BF526-EZ-Board changed SDRAM chips between revisions,
  93. * so we use below timings to accommodate both.
  94. */
  95. #if defined(CONFIG_MEM_MT48H32M16LFCJ_75)
  96. #if (CONFIG_SCLK_HZ > 119402985)
  97. #define SDRAM_tRP TRP_2
  98. #define SDRAM_tRP_num 2
  99. #define SDRAM_tRAS TRAS_8
  100. #define SDRAM_tRAS_num 8
  101. #define SDRAM_tRCD TRCD_2
  102. #define SDRAM_tWR TWR_2
  103. #endif
  104. #if (CONFIG_SCLK_HZ > 104477612) && (CONFIG_SCLK_HZ <= 119402985)
  105. #define SDRAM_tRP TRP_2
  106. #define SDRAM_tRP_num 2
  107. #define SDRAM_tRAS TRAS_7
  108. #define SDRAM_tRAS_num 7
  109. #define SDRAM_tRCD TRCD_2
  110. #define SDRAM_tWR TWR_2
  111. #endif
  112. #if (CONFIG_SCLK_HZ > 89552239) && (CONFIG_SCLK_HZ <= 104477612)
  113. #define SDRAM_tRP TRP_2
  114. #define SDRAM_tRP_num 2
  115. #define SDRAM_tRAS TRAS_6
  116. #define SDRAM_tRAS_num 6
  117. #define SDRAM_tRCD TRCD_2
  118. #define SDRAM_tWR TWR_2
  119. #endif
  120. #if (CONFIG_SCLK_HZ > 74626866) && (CONFIG_SCLK_HZ <= 89552239)
  121. #define SDRAM_tRP TRP_2
  122. #define SDRAM_tRP_num 2
  123. #define SDRAM_tRAS TRAS_5
  124. #define SDRAM_tRAS_num 5
  125. #define SDRAM_tRCD TRCD_2
  126. #define SDRAM_tWR TWR_2
  127. #endif
  128. #if (CONFIG_SCLK_HZ > 66666667) && (CONFIG_SCLK_HZ <= 74626866)
  129. #define SDRAM_tRP TRP_2
  130. #define SDRAM_tRP_num 2
  131. #define SDRAM_tRAS TRAS_4
  132. #define SDRAM_tRAS_num 4
  133. #define SDRAM_tRCD TRCD_2
  134. #define SDRAM_tWR TWR_2
  135. #endif
  136. #if (CONFIG_SCLK_HZ > 59701493) && (CONFIG_SCLK_HZ <= 66666667)
  137. #define SDRAM_tRP TRP_2
  138. #define SDRAM_tRP_num 2
  139. #define SDRAM_tRAS TRAS_4
  140. #define SDRAM_tRAS_num 4
  141. #define SDRAM_tRCD TRCD_1
  142. #define SDRAM_tWR TWR_2
  143. #endif
  144. #if (CONFIG_SCLK_HZ > 44776119) && (CONFIG_SCLK_HZ <= 59701493)
  145. #define SDRAM_tRP TRP_2
  146. #define SDRAM_tRP_num 2
  147. #define SDRAM_tRAS TRAS_3
  148. #define SDRAM_tRAS_num 3
  149. #define SDRAM_tRCD TRCD_1
  150. #define SDRAM_tWR TWR_2
  151. #endif
  152. #if (CONFIG_SCLK_HZ > 29850746) && (CONFIG_SCLK_HZ <= 44776119)
  153. #define SDRAM_tRP TRP_1
  154. #define SDRAM_tRP_num 1
  155. #define SDRAM_tRAS TRAS_3
  156. #define SDRAM_tRAS_num 3
  157. #define SDRAM_tRCD TRCD_1
  158. #define SDRAM_tWR TWR_2
  159. #endif
  160. #if (CONFIG_SCLK_HZ <= 29850746)
  161. #define SDRAM_tRP TRP_1
  162. #define SDRAM_tRP_num 1
  163. #define SDRAM_tRAS TRAS_2
  164. #define SDRAM_tRAS_num 2
  165. #define SDRAM_tRCD TRCD_1
  166. #define SDRAM_tWR TWR_2
  167. #endif
  168. #endif
  169. #if defined(CONFIG_MEM_MT48LC16M8A2TG_75) || \
  170. defined(CONFIG_MEM_MT48LC8M32B2B5_7)
  171. /*SDRAM INFORMATION: */
  172. #define SDRAM_Tref 64 /* Refresh period in milliseconds */
  173. #define SDRAM_NRA 4096 /* Number of row addresses in SDRAM */
  174. #define SDRAM_CL CL_3
  175. #endif
  176. #if defined(CONFIG_MEM_MT48LC32M8A2_75) || \
  177. defined(CONFIG_MEM_MT48LC64M4A2FB_7E) || \
  178. defined(CONFIG_MEM_MT48LC32M16A2TG_75) || \
  179. defined(CONFIG_MEM_MT48LC16M16A2TG_75) || \
  180. defined(CONFIG_MEM_MT48LC32M8A2_75)
  181. /*SDRAM INFORMATION: */
  182. #define SDRAM_Tref 64 /* Refresh period in milliseconds */
  183. #define SDRAM_NRA 8192 /* Number of row addresses in SDRAM */
  184. #define SDRAM_CL CL_3
  185. #endif
  186. #if defined(CONFIG_MEM_MT48H32M16LFCJ_75)
  187. /*SDRAM INFORMATION: */
  188. #define SDRAM_Tref 64 /* Refresh period in milliseconds */
  189. #define SDRAM_NRA 8192 /* Number of row addresses in SDRAM */
  190. #define SDRAM_CL CL_2
  191. #endif
  192. #ifdef CONFIG_BFIN_KERNEL_CLOCK_MEMINIT_CALC
  193. /* Equation from section 17 (p17-46) of BF533 HRM */
  194. #define mem_SDRRC (((CONFIG_SCLK_HZ / 1000) * SDRAM_Tref) / SDRAM_NRA) - (SDRAM_tRAS_num + SDRAM_tRP_num)
  195. /* Enable SCLK Out */
  196. #define mem_SDGCTL (SCTLE | SDRAM_CL | SDRAM_tRAS | SDRAM_tRP | SDRAM_tRCD | SDRAM_tWR | PSS)
  197. #else
  198. #define mem_SDRRC CONFIG_MEM_SDRRC
  199. #define mem_SDGCTL CONFIG_MEM_SDGCTL
  200. #endif
  201. #endif
  202. #if defined(EBIU_DDRCTL0)
  203. #define MIN_DDR_SCLK(x) (x*(CONFIG_SCLK_HZ/1000/1000)/1000 + 1)
  204. #define MAX_DDR_SCLK(x) (x*(CONFIG_SCLK_HZ/1000/1000)/1000)
  205. #define DDR_CLK_HZ(x) (1000*1000*1000/x)
  206. #if defined(CONFIG_MEM_MT46V32M16_6T)
  207. #define DDR_SIZE DEVSZ_512
  208. #define DDR_WIDTH DEVWD_16
  209. #define DDR_MAX_tCK 13
  210. #define DDR_tRC DDR_TRC(MIN_DDR_SCLK(60))
  211. #define DDR_tRAS DDR_TRAS(MIN_DDR_SCLK(42))
  212. #define DDR_tRP DDR_TRP(MIN_DDR_SCLK(15))
  213. #define DDR_tRFC DDR_TRFC(MIN_DDR_SCLK(72))
  214. #define DDR_tREFI DDR_TREFI(MAX_DDR_SCLK(7800))
  215. #define DDR_tRCD DDR_TRCD(MIN_DDR_SCLK(15))
  216. #define DDR_tWTR DDR_TWTR(1)
  217. #define DDR_tMRD DDR_TMRD(MIN_DDR_SCLK(12))
  218. #define DDR_tWR DDR_TWR(MIN_DDR_SCLK(15))
  219. #endif
  220. #if defined(CONFIG_MEM_MT46V32M16_5B)
  221. #define DDR_SIZE DEVSZ_512
  222. #define DDR_WIDTH DEVWD_16
  223. #define DDR_MAX_tCK 13
  224. #define DDR_tRC DDR_TRC(MIN_DDR_SCLK(55))
  225. #define DDR_tRAS DDR_TRAS(MIN_DDR_SCLK(40))
  226. #define DDR_tRP DDR_TRP(MIN_DDR_SCLK(15))
  227. #define DDR_tRFC DDR_TRFC(MIN_DDR_SCLK(70))
  228. #define DDR_tREFI DDR_TREFI(MAX_DDR_SCLK(7800))
  229. #define DDR_tRCD DDR_TRCD(MIN_DDR_SCLK(15))
  230. #define DDR_tWTR DDR_TWTR(2)
  231. #define DDR_tMRD DDR_TMRD(MIN_DDR_SCLK(10))
  232. #define DDR_tWR DDR_TWR(MIN_DDR_SCLK(15))
  233. #endif
  234. #if (CONFIG_SCLK_HZ < DDR_CLK_HZ(DDR_MAX_tCK))
  235. # error "CONFIG_SCLK_HZ is too small (<DDR_CLK_HZ(DDR_MAX_tCK) Hz)."
  236. #elif(CONFIG_SCLK_HZ <= 133333333)
  237. # define DDR_CL CL_2
  238. #else
  239. # error "CONFIG_SCLK_HZ is too large (>133333333 Hz)."
  240. #endif
  241. #ifdef CONFIG_BFIN_KERNEL_CLOCK_MEMINIT_CALC
  242. #define mem_DDRCTL0 (DDR_tRP | DDR_tRAS | DDR_tRC | DDR_tRFC | DDR_tREFI)
  243. #define mem_DDRCTL1 (DDR_DATWIDTH | EXTBANK_1 | DDR_SIZE | DDR_WIDTH | DDR_tWTR \
  244. | DDR_tMRD | DDR_tWR | DDR_tRCD)
  245. #define mem_DDRCTL2 DDR_CL
  246. #else
  247. #define mem_DDRCTL0 CONFIG_MEM_DDRCTL0
  248. #define mem_DDRCTL1 CONFIG_MEM_DDRCTL1
  249. #define mem_DDRCTL2 CONFIG_MEM_DDRCTL2
  250. #endif
  251. #endif
  252. #if defined CONFIG_CLKIN_HALF
  253. #define CLKIN_HALF 1
  254. #else
  255. #define CLKIN_HALF 0
  256. #endif
  257. #if defined CONFIG_PLL_BYPASS
  258. #define PLL_BYPASS 1
  259. #else
  260. #define PLL_BYPASS 0
  261. #endif
  262. #ifdef CONFIG_BF60x
  263. /* DMC status bits */
  264. #define IDLE 0x1
  265. #define MEMINITDONE 0x4
  266. #define SRACK 0x8
  267. #define PDACK 0x10
  268. #define DPDACK 0x20
  269. #define DLLCALDONE 0x2000
  270. #define PENDREF 0xF0000
  271. #define PHYRDPHASE 0xF00000
  272. #define PHYRDPHASE_OFFSET 20
  273. /* DMC control bits */
  274. #define LPDDR 0x2
  275. #define INIT 0x4
  276. #define SRREQ 0x8
  277. #define PDREQ 0x10
  278. #define DPDREQ 0x20
  279. #define PREC 0x40
  280. #define ADDRMODE 0x100
  281. #define RDTOWR 0xE00
  282. #define PPREF 0x1000
  283. #define DLLCAL 0x2000
  284. /* DMC DLL control bits */
  285. #define DLLCALRDCNT 0xFF
  286. #define DATACYC 0xF00
  287. #define DATACYC_OFFSET 8
  288. /* CGU Divisor bits */
  289. #define CSEL_OFFSET 0
  290. #define S0SEL_OFFSET 5
  291. #define SYSSEL_OFFSET 8
  292. #define S1SEL_OFFSET 13
  293. #define DSEL_OFFSET 16
  294. #define OSEL_OFFSET 22
  295. #define ALGN 0x20000000
  296. #define UPDT 0x40000000
  297. #define LOCK 0x80000000
  298. /* CGU Status bits */
  299. #define PLLEN 0x1
  300. #define PLLBP 0x2
  301. #define PLOCK 0x4
  302. #define CLKSALGN 0x8
  303. /* CGU Control bits */
  304. #define MSEL_MASK 0x7F00
  305. #define DF_MASK 0x1
  306. struct ddr_config {
  307. u32 ddr_clk;
  308. u32 dmc_ddrctl;
  309. u32 dmc_effctl;
  310. u32 dmc_ddrcfg;
  311. u32 dmc_ddrtr0;
  312. u32 dmc_ddrtr1;
  313. u32 dmc_ddrtr2;
  314. u32 dmc_ddrmr;
  315. u32 dmc_ddrmr1;
  316. };
  317. #if defined(CONFIG_MEM_MT47H64M16)
  318. static struct ddr_config ddr_config_table[] __attribute__((section(".data_l1"))) = {
  319. [0] = {
  320. .ddr_clk = 125,
  321. .dmc_ddrctl = 0x00000904,
  322. .dmc_effctl = 0x004400C0,
  323. .dmc_ddrcfg = 0x00000422,
  324. .dmc_ddrtr0 = 0x20705212,
  325. .dmc_ddrtr1 = 0x201003CF,
  326. .dmc_ddrtr2 = 0x00320107,
  327. .dmc_ddrmr = 0x00000422,
  328. .dmc_ddrmr1 = 0x4,
  329. },
  330. [1] = {
  331. .ddr_clk = 133,
  332. .dmc_ddrctl = 0x00000904,
  333. .dmc_effctl = 0x004400C0,
  334. .dmc_ddrcfg = 0x00000422,
  335. .dmc_ddrtr0 = 0x20806313,
  336. .dmc_ddrtr1 = 0x2013040D,
  337. .dmc_ddrtr2 = 0x00320108,
  338. .dmc_ddrmr = 0x00000632,
  339. .dmc_ddrmr1 = 0x4,
  340. },
  341. [2] = {
  342. .ddr_clk = 150,
  343. .dmc_ddrctl = 0x00000904,
  344. .dmc_effctl = 0x004400C0,
  345. .dmc_ddrcfg = 0x00000422,
  346. .dmc_ddrtr0 = 0x20A07323,
  347. .dmc_ddrtr1 = 0x20160492,
  348. .dmc_ddrtr2 = 0x00320209,
  349. .dmc_ddrmr = 0x00000632,
  350. .dmc_ddrmr1 = 0x4,
  351. },
  352. [3] = {
  353. .ddr_clk = 166,
  354. .dmc_ddrctl = 0x00000904,
  355. .dmc_effctl = 0x004400C0,
  356. .dmc_ddrcfg = 0x00000422,
  357. .dmc_ddrtr0 = 0x20A07323,
  358. .dmc_ddrtr1 = 0x2016050E,
  359. .dmc_ddrtr2 = 0x00320209,
  360. .dmc_ddrmr = 0x00000632,
  361. .dmc_ddrmr1 = 0x4,
  362. },
  363. [4] = {
  364. .ddr_clk = 200,
  365. .dmc_ddrctl = 0x00000904,
  366. .dmc_effctl = 0x004400C0,
  367. .dmc_ddrcfg = 0x00000422,
  368. .dmc_ddrtr0 = 0x20a07323,
  369. .dmc_ddrtr1 = 0x2016050f,
  370. .dmc_ddrtr2 = 0x00320509,
  371. .dmc_ddrmr = 0x00000632,
  372. .dmc_ddrmr1 = 0x4,
  373. },
  374. [5] = {
  375. .ddr_clk = 225,
  376. .dmc_ddrctl = 0x00000904,
  377. .dmc_effctl = 0x004400C0,
  378. .dmc_ddrcfg = 0x00000422,
  379. .dmc_ddrtr0 = 0x20E0A424,
  380. .dmc_ddrtr1 = 0x302006DB,
  381. .dmc_ddrtr2 = 0x0032020D,
  382. .dmc_ddrmr = 0x00000842,
  383. .dmc_ddrmr1 = 0x4,
  384. },
  385. [6] = {
  386. .ddr_clk = 250,
  387. .dmc_ddrctl = 0x00000904,
  388. .dmc_effctl = 0x004400C0,
  389. .dmc_ddrcfg = 0x00000422,
  390. .dmc_ddrtr0 = 0x20E0A424,
  391. .dmc_ddrtr1 = 0x3020079E,
  392. .dmc_ddrtr2 = 0x0032050D,
  393. .dmc_ddrmr = 0x00000842,
  394. .dmc_ddrmr1 = 0x4,
  395. },
  396. };
  397. #endif
  398. static inline void dmc_enter_self_refresh(void)
  399. {
  400. if (bfin_read_DMC0_STAT() & MEMINITDONE) {
  401. bfin_write_DMC0_CTL(bfin_read_DMC0_CTL() | SRREQ);
  402. while (!(bfin_read_DMC0_STAT() & SRACK))
  403. continue;
  404. }
  405. }
  406. static inline void dmc_exit_self_refresh(void)
  407. {
  408. if (bfin_read_DMC0_STAT() & MEMINITDONE) {
  409. bfin_write_DMC0_CTL(bfin_read_DMC0_CTL() & ~SRREQ);
  410. while (bfin_read_DMC0_STAT() & SRACK)
  411. continue;
  412. }
  413. }
  414. static inline void init_cgu(u32 cgu_div, u32 cgu_ctl)
  415. {
  416. dmc_enter_self_refresh();
  417. /* Don't set the same value of MSEL and DF to CGU_CTL */
  418. if ((bfin_read32(CGU0_CTL) & (MSEL_MASK | DF_MASK))
  419. != cgu_ctl) {
  420. bfin_write32(CGU0_DIV, cgu_div);
  421. bfin_write32(CGU0_CTL, cgu_ctl);
  422. while ((bfin_read32(CGU0_STAT) & (CLKSALGN | PLLBP)) ||
  423. !(bfin_read32(CGU0_STAT) & PLOCK))
  424. continue;
  425. }
  426. bfin_write32(CGU0_DIV, cgu_div | UPDT);
  427. while (bfin_read32(CGU0_STAT) & CLKSALGN)
  428. continue;
  429. dmc_exit_self_refresh();
  430. }
  431. static inline void init_dmc(u32 dmc_clk)
  432. {
  433. int i, dlldatacycle, dll_ctl;
  434. for (i = 0; i < 7; i++) {
  435. if (ddr_config_table[i].ddr_clk == dmc_clk) {
  436. bfin_write_DMC0_CFG(ddr_config_table[i].dmc_ddrcfg);
  437. bfin_write_DMC0_TR0(ddr_config_table[i].dmc_ddrtr0);
  438. bfin_write_DMC0_TR1(ddr_config_table[i].dmc_ddrtr1);
  439. bfin_write_DMC0_TR2(ddr_config_table[i].dmc_ddrtr2);
  440. bfin_write_DMC0_MR(ddr_config_table[i].dmc_ddrmr);
  441. bfin_write_DMC0_EMR1(ddr_config_table[i].dmc_ddrmr1);
  442. bfin_write_DMC0_EFFCTL(ddr_config_table[i].dmc_effctl);
  443. bfin_write_DMC0_CTL(ddr_config_table[i].dmc_ddrctl);
  444. break;
  445. }
  446. }
  447. while (!(bfin_read_DMC0_STAT() & MEMINITDONE))
  448. continue;
  449. dlldatacycle = (bfin_read_DMC0_STAT() & PHYRDPHASE) >> PHYRDPHASE_OFFSET;
  450. dll_ctl = bfin_read_DMC0_DLLCTL();
  451. dll_ctl &= ~DATACYC;
  452. bfin_write_DMC0_DLLCTL(dll_ctl | (dlldatacycle << DATACYC_OFFSET));
  453. while (!(bfin_read_DMC0_STAT() & DLLCALDONE))
  454. continue;
  455. }
  456. #endif
  457. #endif /*__MEM_INIT_H__*/