ddr_ark1668_aofan.c 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. #include <common.h>
  2. #define DDRIII_BASE 0xE0A00000
  3. /* DDRII_Controller */
  4. #define rDDR_CCR *((volatile unsigned int *) (DDRIII_BASE + 0x00))
  5. #define rDDR_DCR *((volatile unsigned int *) (DDRIII_BASE + 0x04))
  6. #define rDDR_IOCR *((volatile unsigned int *) (DDRIII_BASE + 0x08))
  7. #define rDDR_CSR *((volatile unsigned int *) (DDRIII_BASE + 0x0C))
  8. #define rDDR_DRR *((volatile unsigned int *) (DDRIII_BASE + 0x10))
  9. #define rDDR_TPR0 *((volatile unsigned int *) (DDRIII_BASE + 0x14))
  10. #define rDDR_TPR1 *((volatile unsigned int *) (DDRIII_BASE + 0x18))
  11. #define rDDR_TPR2 *((volatile unsigned int *) (DDRIII_BASE + 0x1C))
  12. #define rDDR_DLLCR *((volatile unsigned int *) (DDRIII_BASE + 0x20))
  13. #define rDDR_DLLCR0 *((volatile unsigned int *) (DDRIII_BASE + 0x24))
  14. #define rDDR_DLLCR1 *((volatile unsigned int *) (DDRIII_BASE + 0x28))
  15. #define rDDR_DLLCR2 *((volatile unsigned int *) (DDRIII_BASE + 0x2C))
  16. #define rDDR_DLLCR3 *((volatile unsigned int *) (DDRIII_BASE + 0x30))
  17. #define rDDR_DLLCR4 *((volatile unsigned int *) (DDRIII_BASE + 0x34))
  18. #define rDDR_DLLCR5 *((volatile unsigned int *) (DDRIII_BASE + 0x38))
  19. #define rDDR_DLLCR6 *((volatile unsigned int *) (DDRIII_BASE + 0x3C))
  20. #define rDDR_DLLCR7 *((volatile unsigned int *) (DDRIII_BASE + 0x40))
  21. #define rDDR_DLLCR8 *((volatile unsigned int *) (DDRIII_BASE + 0x44))
  22. #define rDDR_DLLCR9 *((volatile unsigned int *) (DDRIII_BASE + 0x48))
  23. #define rDDR_RSLR0 *((volatile unsigned int *) (DDRIII_BASE + 0x4C))
  24. #define rDDR_RSLR1 *((volatile unsigned int *) (DDRIII_BASE + 0x50))
  25. #define rDDR_RSLR2 *((volatile unsigned int *) (DDRIII_BASE + 0x54))
  26. #define rDDR_RSLR3 *((volatile unsigned int *) (DDRIII_BASE + 0x58))
  27. #define rDDR_RDGR0 *((volatile unsigned int *) (DDRIII_BASE + 0x5C))
  28. #define rDDR_RDGR1 *((volatile unsigned int *) (DDRIII_BASE + 0x60))
  29. #define rDDR_RDGR2 *((volatile unsigned int *) (DDRIII_BASE + 0x64))
  30. #define rDDR_RDGR3 *((volatile unsigned int *) (DDRIII_BASE + 0x68))
  31. #define rDDR_DQTR0 *((volatile unsigned int *) (DDRIII_BASE + 0x6C))
  32. #define rDDR_DQTR1 *((volatile unsigned int *) (DDRIII_BASE + 0x70))
  33. #define rDDR_DQTR2 *((volatile unsigned int *) (DDRIII_BASE + 0x74))
  34. #define rDDR_DQTR3 *((volatile unsigned int *) (DDRIII_BASE + 0x78))
  35. #define rDDR_DQTR4 *((volatile unsigned int *) (DDRIII_BASE + 0x7C))
  36. #define rDDR_DQTR5 *((volatile unsigned int *) (DDRIII_BASE + 0x80))
  37. #define rDDR_DQTR6 *((volatile unsigned int *) (DDRIII_BASE + 0x84))
  38. #define rDDR_DQTR7 *((volatile unsigned int *) (DDRIII_BASE + 0x88))
  39. #define rDDR_DQTR8 *((volatile unsigned int *) (DDRIII_BASE + 0x8C))
  40. #define rDDR_DQSTR *((volatile unsigned int *) (DDRIII_BASE + 0x90))
  41. #define rDDR_DQSBTR *((volatile unsigned int *) (DDRIII_BASE + 0x94))
  42. #define rDDR_ODTCR *((volatile unsigned int *) (DDRIII_BASE + 0x98))
  43. #define rDDR_DTR0 *((volatile unsigned int *) (DDRIII_BASE + 0x9C))
  44. #define rDDR_DTR1 *((volatile unsigned int *) (DDRIII_BASE + 0xA0))
  45. #define rDDR_DTAR *((volatile unsigned int *) (DDRIII_BASE + 0xA4))
  46. #define rDDR_ZQCR0 *((volatile unsigned int *) (DDRIII_BASE + 0xA8))
  47. #define rDDR_ZQCR1 *((volatile unsigned int *) (DDRIII_BASE + 0xAC))
  48. #define rDDR_ZQCR2 *((volatile unsigned int *) (DDRIII_BASE + 0xB0))
  49. #define rDDR_ZQSR *((volatile unsigned int *) (DDRIII_BASE + 0xB4))
  50. #define rDDR_TPR3 *((volatile unsigned int *) (DDRIII_BASE + 0xB8))
  51. #define rDDR_ALPMR *((volatile unsigned int *) (DDRIII_BASE + 0xBC))
  52. #define rDDR_MR *((volatile unsigned int *) (DDRIII_BASE + 0x1F0))
  53. #define rDDR_EMR *((volatile unsigned int *) (DDRIII_BASE + 0x1F4))
  54. #define rDDR_EMR2 *((volatile unsigned int *) (DDRIII_BASE + 0x1F8))
  55. #define rDDR_EMR3 *((volatile unsigned int *) (DDRIII_BASE + 0x1FC))
  56. #define rDDR_HPCR0 *((volatile unsigned int *) (DDRIII_BASE + 0x200))
  57. #define rDDR_HPCR1 *((volatile unsigned int *) (DDRIII_BASE + 0x204))
  58. #define rDDR_HPCR2 *((volatile unsigned int *) (DDRIII_BASE + 0x208))
  59. #define rDDR_HPCR3 *((volatile unsigned int *) (DDRIII_BASE + 0x20C))
  60. #define rDDR_HPCR4 *((volatile unsigned int *) (DDRIII_BASE + 0x210))
  61. #define rDDR_HPCR5 *((volatile unsigned int *) (DDRIII_BASE + 0x214))
  62. #define rDDR_HPCR6 *((volatile unsigned int *) (DDRIII_BASE + 0x218))
  63. #define rDDR_HPCR7 *((volatile unsigned int *) (DDRIII_BASE + 0x21C))
  64. #define rDDR_HPCR8 *((volatile unsigned int *) (DDRIII_BASE + 0x220))
  65. #define rDDR_HPCR9 *((volatile unsigned int *) (DDRIII_BASE + 0x224))
  66. #define rDDR_HPCR10 *((volatile unsigned int *) (DDRIII_BASE + 0x228))
  67. #define rDDR_HPCR11 *((volatile unsigned int *) (DDRIII_BASE + 0x22C))
  68. #define rDDR_HPCR12 *((volatile unsigned int *) (DDRIII_BASE + 0x230))
  69. #define rDDR_HPCR13 *((volatile unsigned int *) (DDRIII_BASE + 0x234))
  70. #define rDDR_HPCR14 *((volatile unsigned int *) (DDRIII_BASE + 0x238))
  71. #define rDDR_HPCR15 *((volatile unsigned int *) (DDRIII_BASE + 0x23C))
  72. #define rDDR_HPCR16 *((volatile unsigned int *) (DDRIII_BASE + 0x240))
  73. #define rDDR_HPCR17 *((volatile unsigned int *) (DDRIII_BASE + 0x244))
  74. #define rDDR_HPCR18 *((volatile unsigned int *) (DDRIII_BASE + 0x248))
  75. #define rDDR_HPCR19 *((volatile unsigned int *) (DDRIII_BASE + 0x24C))
  76. #define rDDR_HPCR20 *((volatile unsigned int *) (DDRIII_BASE + 0x250))
  77. #define rDDR_HPCR21 *((volatile unsigned int *) (DDRIII_BASE + 0x254))
  78. #define rDDR_HPCR22 *((volatile unsigned int *) (DDRIII_BASE + 0x258))
  79. #define rDDR_HPCR23 *((volatile unsigned int *) (DDRIII_BASE + 0x25C))
  80. #define rDDR_HPCR24 *((volatile unsigned int *) (DDRIII_BASE + 0x260))
  81. #define rDDR_HPCR25 *((volatile unsigned int *) (DDRIII_BASE + 0x264))
  82. #define rDDR_HPCR26 *((volatile unsigned int *) (DDRIII_BASE + 0x268))
  83. #define rDDR_HPCR27 *((volatile unsigned int *) (DDRIII_BASE + 0x26C))
  84. #define rDDR_HPCR28 *((volatile unsigned int *) (DDRIII_BASE + 0x270))
  85. #define rDDR_HPCR29 *((volatile unsigned int *) (DDRIII_BASE + 0x274))
  86. #define rDDR_HPCR30 *((volatile unsigned int *) (DDRIII_BASE + 0x278))
  87. #define rDDR_HPCR31 *((volatile unsigned int *) (DDRIII_BASE + 0x27C))
  88. #define rDDR_PQCR0 *((volatile unsigned int *) (DDRIII_BASE + 0x280))
  89. #define rDDR_PQCR1 *((volatile unsigned int *) (DDRIII_BASE + 0x284))
  90. #define rDDR_PQCR2 *((volatile unsigned int *) (DDRIII_BASE + 0x288))
  91. #define rDDR_PQCR3 *((volatile unsigned int *) (DDRIII_BASE + 0x28C))
  92. #define rDDR_PQCR4 *((volatile unsigned int *) (DDRIII_BASE + 0x290))
  93. #define rDDR_PQCR5 *((volatile unsigned int *) (DDRIII_BASE + 0x294))
  94. #define rDDR_PQCR6 *((volatile unsigned int *) (DDRIII_BASE + 0x298))
  95. #define rDDR_PQCR7 *((volatile unsigned int *) (DDRIII_BASE + 0x29C))
  96. #define rDDR_MMGCR *((volatile unsigned int *) (DDRIII_BASE + 0x2A0))
  97. #define rSYS_DDR_STATUS *((volatile unsigned int *)(0xe4900180))
  98. int ddr3_data_training(int ba)
  99. {
  100. rDDR_DTAR = (0x80 <<12 ) | (ba<<28);
  101. rDDR_CCR |= (1<<30) ;
  102. udelay(500);
  103. if(rSYS_DDR_STATUS & (1 << 1)) {
  104. printf("training one\n");
  105. rDDR_CSR &= ~(1<<20);
  106. return -1;
  107. } else {
  108. printf("training ok\n");
  109. return 0;
  110. }
  111. }
  112. void ddr3_sdramc_init(void)
  113. {
  114. rDDR_DLLCR = 0x00707000;
  115. udelay(200);
  116. #if 0
  117. rDDR_DRR = 0x7<<24|27800<<8|0x64<<0;
  118. rDDR_CCR = 0x20004;
  119. rDDR_DLLCR0 |= (1<<5)|(1<<11)|(0x0<<14); //phase detect forward adjust middle back adjust middle phase 0x01 means 72 0x00 means 00
  120. rDDR_DLLCR1 |= (1<<5)|(1<<11)|(0x0<<14);//phase detect forward adjust middle back adjust middle phase 0x01 means 72 0x00 means 00
  121. // 0:90 1:72 2:54 3:36 4:108 8:126 c:144
  122. rDDR_DLLCR9 |= (1<<11); //cmd line dll back adjust middle
  123. // for 6 layer phase 54 middle
  124. rDDR_DQTR0 =0x55555555; //add 1 step
  125. rDDR_DQTR1 =0x55555555; //add 1 step
  126. rDDR_DQSTR =0x12; //sub 1 step
  127. rDDR_DQSBTR =0x12; //sub 1 step
  128. rDDR_MR = (0x5<<9)|(0x1<<8)|(0x2<<4); //MR0 BURST=8 CL=6 WR=10 bit4 CL= VALUE+4
  129. rDDR_EMR = (0x1<<6)|(0x3<<1); //MR1 AL=0 CWL=6
  130. rDDR_EMR2 = (0x1<<9)|(0<<3); //MR2 CWL=6 BIT3 BIT3 CWL = (VALUE-5)
  131. rDDR_ZQCR0 =0x1<<31;
  132. udelay(8000);
  133. rDDR_IOCR =(0x3<<30)|(0xf<<7)|(0x0<<3)| (3<<0); // enable odt 6pcb
  134. rDDR_TPR0 = 0;
  135. rDDR_TPR0 |= (2<<0)|(5<<2)|(5<<5)|(5<<8)|(5<<12)|(18<<16)|(5<<21)|(24<<25);
  136. rDDR_TPR1 = 0;
  137. rDDR_TPR1 |= (0x0<<2)|(25<<3)|(2<<12)|(2<<14);
  138. rDDR_TPR2 = 0;
  139. rDDR_TPR2 |= (200<<0)|(15<<10)|(6<<15);
  140. rDDR_TPR3 = 0;
  141. rDDR_TPR3 |= (2<<0)|(6<<3)|(5<<7)|(10<<11); //BURST LENGTH 8
  142. //2G
  143. rDDR_DCR = (0x1<<24)|(0x1<<14)|(0x1<<7)|(0x5<<4)|(0x2<<2)|(0x1<<0);
  144. printf("ARK169 2Gb 20180412-6-5-10_330_430_nboot 0x%x\n", rDDR_IOCR);
  145. #else
  146. //128x16 ddr
  147. rDDR_DRR = 0x7<<24|18000<<8|0x32<<0;
  148. rDDR_CCR = 0x1<<2|0x01<<17 ; //0x20104;
  149. #if 1
  150. rDDR_DLLCR0 |= (1<<5)|(1<<11)|(0x1<<15); //phase detect forward adjust middle back adjust middle phase 0x01 means 72 0x00 means 00
  151. rDDR_DLLCR1 |= (1<<5)|(1<<11)|(0x1<<15);//phase detect forward adjust middle back adjust middle phase 0x01 means 72 0x00 means 00
  152. rDDR_DLLCR9 |= (1<<11); //cmd line dll back adjust middle
  153. rDDR_DQTR0 =0x55555555; //add 1 step
  154. rDDR_DQTR1 =0x55555555; //add 1 step
  155. rDDR_DQSTR =0x12; //sub 1 step
  156. rDDR_DQSBTR =0x12; //sub 1 step
  157. #endif
  158. rDDR_MR = (0x5<<9)|(0x1<<8)|(0x3<<4); //MR0 BURST=8 CL=7 WR=10
  159. rDDR_EMR = (0x1<<6)|(0x3<<1); //MR1 AL=0 CWL=6
  160. rDDR_EMR2 = (0x1<<9)|(1<<3); //MR2 CWL=6
  161. rDDR_ZQCR0 =0x1<<31;
  162. udelay(50000);
  163. rDDR_IOCR =(0x3<<30)|(0xf<<7)|(0x0<<3)| (3<<0);
  164. rDDR_TPR0 = 0;
  165. // rDDR_TPR0 |= (3<<0)|(5<<2)|(5<<5)|(8<<8)|(8<<12)|(20<<16)|(6<<21)|(26<<25);
  166. rDDR_TPR0 |= (2<<0)|(6<<2)|(6<<5)|(11<<8)|(7<<12)|(18<<16)|(4<<21)|(24<<25);
  167. rDDR_TPR1 = 0;
  168. // rDDR_TPR1 |= (0x1<<2)|(30<<3)|(1<<11);
  169. rDDR_TPR1 |= (0x0<<2)|(30<<3)|(2<<12)|(2<<14);
  170. rDDR_TPR2 = 0;
  171. rDDR_TPR2 |= (1000<<0)|(30<<10)|(5<<15);
  172. rDDR_TPR3 = 0;
  173. rDDR_TPR3 |= (2<<0)|(7<<3)|(6<<7)|(10<<11); //BURST LENGTH 8
  174. //1G bit
  175. rDDR_DCR = 0x1<<24|(0x0<<14)|0x1<<7|0x4<<4|0x2<<2|0x1;
  176. //2G bit
  177. // rDDR_DCR = 0x1<<24|(0x0<<14)|0x1<<7|0x5<<4|0x2<<2|0x1;
  178. printf("ARKSDLOAD 1Gb 20170322_7-6-10\r\n");
  179. #endif
  180. }