ddr.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * Copyright 2015 Freescale Semiconductor, Inc.
  4. */
  5. #ifndef __DDR_H__
  6. #define __DDR_H__
  7. extern void erratum_a008850_post(void);
  8. struct board_specific_parameters {
  9. u32 n_ranks;
  10. u32 datarate_mhz_high;
  11. u32 rank_gb;
  12. u32 clk_adjust;
  13. u32 wrlvl_start;
  14. u32 wrlvl_ctl_2;
  15. u32 wrlvl_ctl_3;
  16. u32 cpo_override;
  17. u32 write_data_delay;
  18. u32 force_2t;
  19. };
  20. /*
  21. * These tables contain all valid speeds we want to override with board
  22. * specific parameters. datarate_mhz_high values need to be in ascending order
  23. * for each n_ranks group.
  24. */
  25. static const struct board_specific_parameters udimm0[] = {
  26. /*
  27. * memory controller 0
  28. * num| hi| rank| clk| wrlvl | wrlvl | wrlvl | cpo |wrdata|2T
  29. * ranks| mhz| GB |adjst| start | ctl2 | ctl3 | |delay |
  30. */
  31. #ifdef CONFIG_SYS_FSL_DDR4
  32. {1, 1666, 0, 12, 7, 0x07090800, 0x00000000,},
  33. {1, 1900, 0, 12, 7, 0x07090800, 0x00000000,},
  34. {1, 2200, 0, 12, 7, 0x07090800, 0x00000000,},
  35. #endif
  36. {}
  37. };
  38. static const struct board_specific_parameters *udimms[] = {
  39. udimm0,
  40. };
  41. #ifndef CONFIG_SYS_DDR_RAW_TIMING
  42. fsl_ddr_cfg_regs_t ddr_cfg_regs_1600 = {
  43. .cs[0].bnds = 0x0000007F,
  44. .cs[1].bnds = 0,
  45. .cs[2].bnds = 0,
  46. .cs[3].bnds = 0,
  47. .cs[0].config = 0x80040322,
  48. .cs[0].config_2 = 0,
  49. .cs[1].config = 0,
  50. .cs[1].config_2 = 0,
  51. .cs[2].config = 0,
  52. .cs[3].config = 0,
  53. .timing_cfg_3 = 0x010C1000,
  54. .timing_cfg_0 = 0x91550018,
  55. .timing_cfg_1 = 0xBBB48C42,
  56. .timing_cfg_2 = 0x0048C111,
  57. .ddr_sdram_cfg = 0xC50C0008,
  58. .ddr_sdram_cfg_2 = 0x00401100,
  59. .ddr_sdram_cfg_3 = 0,
  60. .ddr_sdram_mode = 0x03010210,
  61. .ddr_sdram_mode_2 = 0,
  62. .ddr_sdram_mode_3 = 0x00010210,
  63. .ddr_sdram_mode_4 = 0,
  64. .ddr_sdram_mode_5 = 0x00010210,
  65. .ddr_sdram_mode_6 = 0,
  66. .ddr_sdram_mode_7 = 0x00010210,
  67. .ddr_sdram_mode_8 = 0,
  68. .ddr_sdram_mode_9 = 0x00000500,
  69. .ddr_sdram_mode_10 = 0x04000000,
  70. .ddr_sdram_mode_11 = 0x00000400,
  71. .ddr_sdram_mode_12 = 0x04000000,
  72. .ddr_sdram_mode_13 = 0x00000400,
  73. .ddr_sdram_mode_14 = 0x04000000,
  74. .ddr_sdram_mode_15 = 0x00000400,
  75. .ddr_sdram_mode_16 = 0x04000000,
  76. .ddr_sdram_interval = 0x18600618,
  77. .ddr_data_init = 0xDEADBEEF,
  78. .ddr_sdram_clk_cntl = 0x03000000,
  79. .ddr_init_addr = 0,
  80. .ddr_init_ext_addr = 0,
  81. .timing_cfg_4 = 0x00000002,
  82. .timing_cfg_5 = 0x03401400,
  83. .timing_cfg_6 = 0,
  84. .timing_cfg_7 = 0x13300000,
  85. .timing_cfg_8 = 0x02115600,
  86. .timing_cfg_9 = 0,
  87. .ddr_zq_cntl = 0x8A090705,
  88. .ddr_wrlvl_cntl = 0x8675F607,
  89. .ddr_wrlvl_cntl_2 = 0x07090800,
  90. .ddr_wrlvl_cntl_3 = 0,
  91. .ddr_sr_cntr = 0,
  92. .ddr_sdram_rcw_1 = 0,
  93. .ddr_sdram_rcw_2 = 0,
  94. .ddr_cdr1 = 0x80040000,
  95. .ddr_cdr2 = 0x0000A181,
  96. .dq_map_0 = 0,
  97. .dq_map_1 = 0,
  98. .dq_map_2 = 0,
  99. .dq_map_3 = 0,
  100. .debug[28] = 0x00700046,
  101. };
  102. fixed_ddr_parm_t fixed_ddr_parm_0[] = {
  103. {1550, 1650, &ddr_cfg_regs_1600},
  104. {0, 0, NULL}
  105. };
  106. #endif
  107. #endif