ddr_ark1668e_fpga.c 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #include <common.h>
  2. #define DDR3_REG_BASE 0xE9100000
  3. #define rDDR_MCCR *((volatile unsigned int *)(DDR3_REG_BASE + 0x00))
  4. #define rDDR_MCSR *((volatile unsigned int *)(DDR3_REG_BASE + 0x04))
  5. #define rDDR_MRSVR0 *((volatile unsigned int *)(DDR3_REG_BASE + 0x08))
  6. #define rDDR_MRSVR1 *((volatile unsigned int *)(DDR3_REG_BASE + 0x0c))
  7. #define rDDR_EXRANKR *((volatile unsigned int *)(DDR3_REG_BASE + 0x10))
  8. #define rDDR_TMPR0 *((volatile unsigned int *)(DDR3_REG_BASE + 0x14))
  9. #define rDDR_TMPR1 *((volatile unsigned int *)(DDR3_REG_BASE + 0x18))
  10. #define rDDR_TMPR2 *((volatile unsigned int *)(DDR3_REG_BASE + 0x1c))
  11. #define rDDR_PHYCR0 *((volatile unsigned int *)(DDR3_REG_BASE + 0x20))
  12. #define rDDR_PHYRDTR *((volatile unsigned int *)(DDR3_REG_BASE + 0x24))
  13. #define rDDR_PHYWRTMR *((volatile unsigned int *)(DDR3_REG_BASE + 0x3c))
  14. #define rDDR_MSDLYCR *((volatile unsigned int *)(DDR3_REG_BASE + 0x74))
  15. #define rDDR_EFIFOCR *((volatile unsigned int *)(DDR3_REG_BASE + 0x138))
  16. /* int ddr3_data_training(int ba)
  17. {
  18. } */
  19. static inline void ApbWriteFun(unsigned int addr, unsigned int data)
  20. {
  21. * (volatile unsigned int *) addr = data;
  22. }
  23. void ddr3_sdramc_init(void)
  24. {
  25. // ark1668e initial DDR3
  26. ApbWriteFun(0xE9100000, 0x08c0E110 );
  27. ApbWriteFun(0xE9100008, 0x30230);
  28. //ApbWriteFun(0xE9100010, 0x10000045 ); //DDR3 128M
  29. ApbWriteFun(0xE9100010, 0x10000054 ); //DDR3 256M
  30. ApbWriteFun(0xE9100130, 0x00000000 );
  31. udelay(0x1000);
  32. ApbWriteFun(0xE910003C, 0x00010012 );
  33. ApbWriteFun(0xE910000C, 0x00000010 );
  34. ApbWriteFun(0xE9100014, 0x00000000 ); //0x240e100b
  35. ApbWriteFun(0xE9100018, 0x42951424 );
  36. ApbWriteFun(0xE910001C, 0x00002051 );
  37. ApbWriteFun(0xE9100020, 0x00001f41 );//0x00000f41
  38. ApbWriteFun(0xE9100024, 0x00000000 );
  39. ApbWriteFun(0xE9100028, 0x00000000 );
  40. ApbWriteFun(0xE910002C, 0x00001000 );
  41. ApbWriteFun(0xE9100030, 0x96ff00e5 );//0x90000000
  42. ApbWriteFun(0xE9100034, 0x00000000 );//0x05050505
  43. ApbWriteFun(0xE9100038, 0x00000000 );//0x05050305
  44. ApbWriteFun(0xE9100040, 0x0000aa00 );
  45. ApbWriteFun(0xE9100048, 0x00555500 );
  46. ApbWriteFun(0xE9100060, 0x00ff0006 );//0x0000000e
  47. ApbWriteFun(0xE9100064, 0x00000000 );
  48. ApbWriteFun(0xE9100068, 0x00000000 );
  49. ApbWriteFun(0xE910006C, 0x00000000 );//DDR PHY misc control udelaydq 0x44444444
  50. ApbWriteFun(0xE9100070, 0x000000ff );//read by software
  51. ApbWriteFun(0xE9100074, 0x11111111 );
  52. ApbWriteFun(0xE9100078, 0x00000000 );
  53. ApbWriteFun(0xE910007c, 0x00000000 );
  54. ApbWriteFun(0xE91000a0, 0x81818184 );//0x81818181
  55. ApbWriteFun(0xE91000a4, 0x00000000 );
  56. ApbWriteFun(0xE91000a8, 0x00000200 );
  57. ApbWriteFun(0xE91000ac, 0x00000200 );
  58. ApbWriteFun(0xE91000b0, 0x00000001 );
  59. ApbWriteFun(0xE91000b4, 0x03030400 );//0x03030404
  60. ApbWriteFun(0xE91000b8, 0x01010202 );//0x01010202
  61. ApbWriteFun(0xE91000c4, 0x10ff0000 );
  62. ApbWriteFun(0xE9100138, 0x00000005 );
  63. ApbWriteFun(0xE9100004, 0x00000001 );//initial operation
  64. udelay(200);
  65. rDDR_MCCR = 0x08d0e103;
  66. udelay(200000);
  67. rDDR_MSDLYCR = 0x2;
  68. udelay(200000);
  69. rDDR_PHYRDTR = 0x0;
  70. udelay(200000);
  71. }