jedec_ddr.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Definitions for DDR memories based on JEDEC specs
  4. *
  5. * Copyright (C) 2012 Texas Instruments, Inc.
  6. *
  7. * Aneesh V <[email protected]>
  8. */
  9. #ifndef __JEDEC_DDR_H
  10. #define __JEDEC_DDR_H
  11. #include <linux/types.h>
  12. /* DDR Densities */
  13. #define DDR_DENSITY_64Mb 1
  14. #define DDR_DENSITY_128Mb 2
  15. #define DDR_DENSITY_256Mb 3
  16. #define DDR_DENSITY_512Mb 4
  17. #define DDR_DENSITY_1Gb 5
  18. #define DDR_DENSITY_2Gb 6
  19. #define DDR_DENSITY_4Gb 7
  20. #define DDR_DENSITY_8Gb 8
  21. #define DDR_DENSITY_16Gb 9
  22. #define DDR_DENSITY_32Gb 10
  23. /* DDR type */
  24. #define DDR_TYPE_DDR2 1
  25. #define DDR_TYPE_DDR3 2
  26. #define DDR_TYPE_LPDDR2_S4 3
  27. #define DDR_TYPE_LPDDR2_S2 4
  28. #define DDR_TYPE_LPDDR2_NVM 5
  29. #define DDR_TYPE_LPDDR3 6
  30. /* DDR IO width */
  31. #define DDR_IO_WIDTH_4 1
  32. #define DDR_IO_WIDTH_8 2
  33. #define DDR_IO_WIDTH_16 3
  34. #define DDR_IO_WIDTH_32 4
  35. /* Number of Row bits */
  36. #define R9 9
  37. #define R10 10
  38. #define R11 11
  39. #define R12 12
  40. #define R13 13
  41. #define R14 14
  42. #define R15 15
  43. #define R16 16
  44. /* Number of Column bits */
  45. #define C7 7
  46. #define C8 8
  47. #define C9 9
  48. #define C10 10
  49. #define C11 11
  50. #define C12 12
  51. /* Number of Banks */
  52. #define B1 0
  53. #define B2 1
  54. #define B4 2
  55. #define B8 3
  56. /* Refresh rate in nano-seconds */
  57. #define T_REFI_15_6 15600
  58. #define T_REFI_7_8 7800
  59. #define T_REFI_3_9 3900
  60. /* tRFC values */
  61. #define T_RFC_90 90000
  62. #define T_RFC_110 110000
  63. #define T_RFC_130 130000
  64. #define T_RFC_160 160000
  65. #define T_RFC_210 210000
  66. #define T_RFC_300 300000
  67. #define T_RFC_350 350000
  68. /* Mode register numbers */
  69. #define DDR_MR0 0
  70. #define DDR_MR1 1
  71. #define DDR_MR2 2
  72. #define DDR_MR3 3
  73. #define DDR_MR4 4
  74. #define DDR_MR5 5
  75. #define DDR_MR6 6
  76. #define DDR_MR7 7
  77. #define DDR_MR8 8
  78. #define DDR_MR9 9
  79. #define DDR_MR10 10
  80. #define DDR_MR11 11
  81. #define DDR_MR16 16
  82. #define DDR_MR17 17
  83. #define DDR_MR18 18
  84. /*
  85. * LPDDR2 related defines
  86. */
  87. /* MR4 register fields */
  88. #define MR4_SDRAM_REF_RATE_SHIFT 0
  89. #define MR4_SDRAM_REF_RATE_MASK 7
  90. #define MR4_TUF_SHIFT 7
  91. #define MR4_TUF_MASK (1 << 7)
  92. /* MR4 SDRAM Refresh Rate field values */
  93. #define SDRAM_TEMP_NOMINAL 0x3
  94. #define SDRAM_TEMP_RESERVED_4 0x4
  95. #define SDRAM_TEMP_HIGH_DERATE_REFRESH 0x5
  96. #define SDRAM_TEMP_HIGH_DERATE_REFRESH_AND_TIMINGS 0x6
  97. #define SDRAM_TEMP_VERY_HIGH_SHUTDOWN 0x7
  98. #define NUM_DDR_ADDR_TABLE_ENTRIES 11
  99. #define NUM_DDR_TIMING_TABLE_ENTRIES 4
  100. #define LPDDR2_MANID_SAMSUNG 1
  101. #define LPDDR2_MANID_QIMONDA 2
  102. #define LPDDR2_MANID_ELPIDA 3
  103. #define LPDDR2_MANID_ETRON 4
  104. #define LPDDR2_MANID_NANYA 5
  105. #define LPDDR2_MANID_HYNIX 6
  106. #define LPDDR2_MANID_MOSEL 7
  107. #define LPDDR2_MANID_WINBOND 8
  108. #define LPDDR2_MANID_ESMT 9
  109. #define LPDDR2_MANID_SPANSION 11
  110. #define LPDDR2_MANID_SST 12
  111. #define LPDDR2_MANID_ZMOS 13
  112. #define LPDDR2_MANID_INTEL 14
  113. #define LPDDR2_MANID_NUMONYX 254
  114. #define LPDDR2_MANID_MICRON 255
  115. #define LPDDR2_TYPE_S4 0
  116. #define LPDDR2_TYPE_S2 1
  117. #define LPDDR2_TYPE_NVM 2
  118. /* Structure for DDR addressing info from the JEDEC spec */
  119. struct lpddr2_addressing {
  120. u32 num_banks;
  121. u32 tREFI_ns;
  122. u32 tRFCab_ps;
  123. };
  124. /*
  125. * Structure for timings from the LPDDR2 datasheet
  126. * All parameters are in pico seconds(ps) unless explicitly indicated
  127. * with a suffix like tRAS_max_ns below
  128. */
  129. struct lpddr2_timings {
  130. u32 max_freq;
  131. u32 min_freq;
  132. u32 tRPab;
  133. u32 tRCD;
  134. u32 tWR;
  135. u32 tRAS_min;
  136. u32 tRRD;
  137. u32 tWTR;
  138. u32 tXP;
  139. u32 tRTP;
  140. u32 tCKESR;
  141. u32 tDQSCK_max;
  142. u32 tDQSCK_max_derated;
  143. u32 tFAW;
  144. u32 tZQCS;
  145. u32 tZQCL;
  146. u32 tZQinit;
  147. u32 tRAS_max_ns;
  148. };
  149. /*
  150. * Min value for some parameters in terms of number of tCK cycles(nCK)
  151. * Please set to zero parameters that are not valid for a given memory
  152. * type
  153. */
  154. struct lpddr2_min_tck {
  155. u32 tRPab;
  156. u32 tRCD;
  157. u32 tWR;
  158. u32 tRASmin;
  159. u32 tRRD;
  160. u32 tWTR;
  161. u32 tXP;
  162. u32 tRTP;
  163. u32 tCKE;
  164. u32 tCKESR;
  165. u32 tFAW;
  166. };
  167. extern const struct lpddr2_addressing
  168. lpddr2_jedec_addressing_table[NUM_DDR_ADDR_TABLE_ENTRIES];
  169. extern const struct lpddr2_timings
  170. lpddr2_jedec_timings[NUM_DDR_TIMING_TABLE_ENTRIES];
  171. extern const struct lpddr2_min_tck lpddr2_jedec_min_tck;
  172. /* Structure of MR8 */
  173. union lpddr2_basic_config4 {
  174. u32 value;
  175. struct {
  176. unsigned int arch_type : 2;
  177. unsigned int density : 4;
  178. unsigned int io_width : 2;
  179. } __packed;
  180. };
  181. /*
  182. * Structure for information about LPDDR2 chip. All parameters are
  183. * matching raw values of standard mode register bitfields or set to
  184. * -ENOENT if info unavailable.
  185. */
  186. struct lpddr2_info {
  187. int arch_type;
  188. int density;
  189. int io_width;
  190. int manufacturer_id;
  191. int revision_id1;
  192. int revision_id2;
  193. };
  194. const char *lpddr2_jedec_manufacturer(unsigned int manufacturer_id);
  195. /*
  196. * Structure for timings for LPDDR3 based on LPDDR2 plus additional fields.
  197. * All parameters are in pico seconds(ps) excluding max_freq, min_freq which
  198. * are in Hz.
  199. */
  200. struct lpddr3_timings {
  201. u32 max_freq;
  202. u32 min_freq;
  203. u32 tRFC;
  204. u32 tRRD;
  205. u32 tRPab;
  206. u32 tRPpb;
  207. u32 tRCD;
  208. u32 tRC;
  209. u32 tRAS;
  210. u32 tWTR;
  211. u32 tWR;
  212. u32 tRTP;
  213. u32 tW2W_C2C;
  214. u32 tR2R_C2C;
  215. u32 tWL;
  216. u32 tDQSCK;
  217. u32 tRL;
  218. u32 tFAW;
  219. u32 tXSR;
  220. u32 tXP;
  221. u32 tCKE;
  222. u32 tCKESR;
  223. u32 tMRD;
  224. };
  225. /*
  226. * Min value for some parameters in terms of number of tCK cycles(nCK)
  227. * Please set to zero parameters that are not valid for a given memory
  228. * type
  229. */
  230. struct lpddr3_min_tck {
  231. u32 tRFC;
  232. u32 tRRD;
  233. u32 tRPab;
  234. u32 tRPpb;
  235. u32 tRCD;
  236. u32 tRC;
  237. u32 tRAS;
  238. u32 tWTR;
  239. u32 tWR;
  240. u32 tRTP;
  241. u32 tW2W_C2C;
  242. u32 tR2R_C2C;
  243. u32 tWL;
  244. u32 tDQSCK;
  245. u32 tRL;
  246. u32 tFAW;
  247. u32 tXSR;
  248. u32 tXP;
  249. u32 tCKE;
  250. u32 tCKESR;
  251. u32 tMRD;
  252. };
  253. #endif /* __JEDEC_DDR_H */