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