xref: /openbmc/linux/drivers/memory/jedec_ddr.h (revision 03ab8e6297acd1bc0eedaa050e2a1635c576fd11)
18362fd64SLinus Torvalds /* SPDX-License-Identifier: GPL-2.0-only */
25ec47cdaSMasahiro Yamada /*
35ec47cdaSMasahiro Yamada  * Definitions for DDR memories based on JEDEC specs
45ec47cdaSMasahiro Yamada  *
55ec47cdaSMasahiro Yamada  * Copyright (C) 2012 Texas Instruments, Inc.
65ec47cdaSMasahiro Yamada  *
75ec47cdaSMasahiro Yamada  * Aneesh V <aneesh@ti.com>
85ec47cdaSMasahiro Yamada  */
95ec47cdaSMasahiro Yamada #ifndef __JEDEC_DDR_H
105ec47cdaSMasahiro Yamada #define __JEDEC_DDR_H
115ec47cdaSMasahiro Yamada 
125ec47cdaSMasahiro Yamada #include <linux/types.h>
135ec47cdaSMasahiro Yamada 
145ec47cdaSMasahiro Yamada /* DDR Densities */
155ec47cdaSMasahiro Yamada #define DDR_DENSITY_64Mb	1
165ec47cdaSMasahiro Yamada #define DDR_DENSITY_128Mb	2
175ec47cdaSMasahiro Yamada #define DDR_DENSITY_256Mb	3
185ec47cdaSMasahiro Yamada #define DDR_DENSITY_512Mb	4
195ec47cdaSMasahiro Yamada #define DDR_DENSITY_1Gb		5
205ec47cdaSMasahiro Yamada #define DDR_DENSITY_2Gb		6
215ec47cdaSMasahiro Yamada #define DDR_DENSITY_4Gb		7
225ec47cdaSMasahiro Yamada #define DDR_DENSITY_8Gb		8
235ec47cdaSMasahiro Yamada #define DDR_DENSITY_16Gb	9
245ec47cdaSMasahiro Yamada #define DDR_DENSITY_32Gb	10
255ec47cdaSMasahiro Yamada 
265ec47cdaSMasahiro Yamada /* DDR type */
275ec47cdaSMasahiro Yamada #define DDR_TYPE_DDR2		1
285ec47cdaSMasahiro Yamada #define DDR_TYPE_DDR3		2
295ec47cdaSMasahiro Yamada #define DDR_TYPE_LPDDR2_S4	3
305ec47cdaSMasahiro Yamada #define DDR_TYPE_LPDDR2_S2	4
315ec47cdaSMasahiro Yamada #define DDR_TYPE_LPDDR2_NVM	5
32976897ddSLukasz Luba #define DDR_TYPE_LPDDR3		6
335ec47cdaSMasahiro Yamada 
345ec47cdaSMasahiro Yamada /* DDR IO width */
355ec47cdaSMasahiro Yamada #define DDR_IO_WIDTH_4		1
365ec47cdaSMasahiro Yamada #define DDR_IO_WIDTH_8		2
375ec47cdaSMasahiro Yamada #define DDR_IO_WIDTH_16		3
385ec47cdaSMasahiro Yamada #define DDR_IO_WIDTH_32		4
395ec47cdaSMasahiro Yamada 
405ec47cdaSMasahiro Yamada /* Number of Row bits */
415ec47cdaSMasahiro Yamada #define R9			9
425ec47cdaSMasahiro Yamada #define R10			10
435ec47cdaSMasahiro Yamada #define R11			11
445ec47cdaSMasahiro Yamada #define R12			12
455ec47cdaSMasahiro Yamada #define R13			13
465ec47cdaSMasahiro Yamada #define R14			14
475ec47cdaSMasahiro Yamada #define R15			15
485ec47cdaSMasahiro Yamada #define R16			16
495ec47cdaSMasahiro Yamada 
505ec47cdaSMasahiro Yamada /* Number of Column bits */
515ec47cdaSMasahiro Yamada #define C7			7
525ec47cdaSMasahiro Yamada #define C8			8
535ec47cdaSMasahiro Yamada #define C9			9
545ec47cdaSMasahiro Yamada #define C10			10
555ec47cdaSMasahiro Yamada #define C11			11
565ec47cdaSMasahiro Yamada #define C12			12
575ec47cdaSMasahiro Yamada 
585ec47cdaSMasahiro Yamada /* Number of Banks */
595ec47cdaSMasahiro Yamada #define B1			0
605ec47cdaSMasahiro Yamada #define B2			1
615ec47cdaSMasahiro Yamada #define B4			2
625ec47cdaSMasahiro Yamada #define B8			3
635ec47cdaSMasahiro Yamada 
645ec47cdaSMasahiro Yamada /* Refresh rate in nano-seconds */
655ec47cdaSMasahiro Yamada #define T_REFI_15_6		15600
665ec47cdaSMasahiro Yamada #define T_REFI_7_8		7800
675ec47cdaSMasahiro Yamada #define T_REFI_3_9		3900
685ec47cdaSMasahiro Yamada 
695ec47cdaSMasahiro Yamada /* tRFC values */
705ec47cdaSMasahiro Yamada #define T_RFC_90		90000
715ec47cdaSMasahiro Yamada #define T_RFC_110		110000
725ec47cdaSMasahiro Yamada #define T_RFC_130		130000
735ec47cdaSMasahiro Yamada #define T_RFC_160		160000
745ec47cdaSMasahiro Yamada #define T_RFC_210		210000
755ec47cdaSMasahiro Yamada #define T_RFC_300		300000
765ec47cdaSMasahiro Yamada #define T_RFC_350		350000
775ec47cdaSMasahiro Yamada 
785ec47cdaSMasahiro Yamada /* Mode register numbers */
795ec47cdaSMasahiro Yamada #define DDR_MR0			0
805ec47cdaSMasahiro Yamada #define DDR_MR1			1
815ec47cdaSMasahiro Yamada #define DDR_MR2			2
825ec47cdaSMasahiro Yamada #define DDR_MR3			3
835ec47cdaSMasahiro Yamada #define DDR_MR4			4
845ec47cdaSMasahiro Yamada #define DDR_MR5			5
855ec47cdaSMasahiro Yamada #define DDR_MR6			6
865ec47cdaSMasahiro Yamada #define DDR_MR7			7
875ec47cdaSMasahiro Yamada #define DDR_MR8			8
885ec47cdaSMasahiro Yamada #define DDR_MR9			9
895ec47cdaSMasahiro Yamada #define DDR_MR10		10
905ec47cdaSMasahiro Yamada #define DDR_MR11		11
915ec47cdaSMasahiro Yamada #define DDR_MR16		16
925ec47cdaSMasahiro Yamada #define DDR_MR17		17
935ec47cdaSMasahiro Yamada #define DDR_MR18		18
945ec47cdaSMasahiro Yamada 
955ec47cdaSMasahiro Yamada /*
965ec47cdaSMasahiro Yamada  * LPDDR2 related defines
975ec47cdaSMasahiro Yamada  */
985ec47cdaSMasahiro Yamada 
995ec47cdaSMasahiro Yamada /* MR4 register fields */
1005ec47cdaSMasahiro Yamada #define MR4_SDRAM_REF_RATE_SHIFT			0
1015ec47cdaSMasahiro Yamada #define MR4_SDRAM_REF_RATE_MASK				7
1025ec47cdaSMasahiro Yamada #define MR4_TUF_SHIFT					7
1035ec47cdaSMasahiro Yamada #define MR4_TUF_MASK					(1 << 7)
1045ec47cdaSMasahiro Yamada 
1055ec47cdaSMasahiro Yamada /* MR4 SDRAM Refresh Rate field values */
1065ec47cdaSMasahiro Yamada #define SDRAM_TEMP_NOMINAL				0x3
1075ec47cdaSMasahiro Yamada #define SDRAM_TEMP_RESERVED_4				0x4
1085ec47cdaSMasahiro Yamada #define SDRAM_TEMP_HIGH_DERATE_REFRESH			0x5
1095ec47cdaSMasahiro Yamada #define SDRAM_TEMP_HIGH_DERATE_REFRESH_AND_TIMINGS	0x6
1105ec47cdaSMasahiro Yamada #define SDRAM_TEMP_VERY_HIGH_SHUTDOWN			0x7
1115ec47cdaSMasahiro Yamada 
1125ec47cdaSMasahiro Yamada #define NUM_DDR_ADDR_TABLE_ENTRIES			11
1135ec47cdaSMasahiro Yamada #define NUM_DDR_TIMING_TABLE_ENTRIES			4
1145ec47cdaSMasahiro Yamada 
115*38322cf4SDmitry Osipenko #define LPDDR2_MANID_SAMSUNG				1
116*38322cf4SDmitry Osipenko #define LPDDR2_MANID_QIMONDA				2
117*38322cf4SDmitry Osipenko #define LPDDR2_MANID_ELPIDA				3
118*38322cf4SDmitry Osipenko #define LPDDR2_MANID_ETRON				4
119*38322cf4SDmitry Osipenko #define LPDDR2_MANID_NANYA				5
120*38322cf4SDmitry Osipenko #define LPDDR2_MANID_HYNIX				6
121*38322cf4SDmitry Osipenko #define LPDDR2_MANID_MOSEL				7
122*38322cf4SDmitry Osipenko #define LPDDR2_MANID_WINBOND				8
123*38322cf4SDmitry Osipenko #define LPDDR2_MANID_ESMT				9
124*38322cf4SDmitry Osipenko #define LPDDR2_MANID_SPANSION				11
125*38322cf4SDmitry Osipenko #define LPDDR2_MANID_SST				12
126*38322cf4SDmitry Osipenko #define LPDDR2_MANID_ZMOS				13
127*38322cf4SDmitry Osipenko #define LPDDR2_MANID_INTEL				14
128*38322cf4SDmitry Osipenko #define LPDDR2_MANID_NUMONYX				254
129*38322cf4SDmitry Osipenko #define LPDDR2_MANID_MICRON				255
130*38322cf4SDmitry Osipenko 
131*38322cf4SDmitry Osipenko #define LPDDR2_TYPE_S4					0
132*38322cf4SDmitry Osipenko #define LPDDR2_TYPE_S2					1
133*38322cf4SDmitry Osipenko #define LPDDR2_TYPE_NVM					2
134*38322cf4SDmitry Osipenko 
1355ec47cdaSMasahiro Yamada /* Structure for DDR addressing info from the JEDEC spec */
1365ec47cdaSMasahiro Yamada struct lpddr2_addressing {
1375ec47cdaSMasahiro Yamada 	u32 num_banks;
1385ec47cdaSMasahiro Yamada 	u32 tREFI_ns;
1395ec47cdaSMasahiro Yamada 	u32 tRFCab_ps;
1405ec47cdaSMasahiro Yamada };
1415ec47cdaSMasahiro Yamada 
1425ec47cdaSMasahiro Yamada /*
1435ec47cdaSMasahiro Yamada  * Structure for timings from the LPDDR2 datasheet
1445ec47cdaSMasahiro Yamada  * All parameters are in pico seconds(ps) unless explicitly indicated
1455ec47cdaSMasahiro Yamada  * with a suffix like tRAS_max_ns below
1465ec47cdaSMasahiro Yamada  */
1475ec47cdaSMasahiro Yamada struct lpddr2_timings {
1485ec47cdaSMasahiro Yamada 	u32 max_freq;
1495ec47cdaSMasahiro Yamada 	u32 min_freq;
1505ec47cdaSMasahiro Yamada 	u32 tRPab;
1515ec47cdaSMasahiro Yamada 	u32 tRCD;
1525ec47cdaSMasahiro Yamada 	u32 tWR;
1535ec47cdaSMasahiro Yamada 	u32 tRAS_min;
1545ec47cdaSMasahiro Yamada 	u32 tRRD;
1555ec47cdaSMasahiro Yamada 	u32 tWTR;
1565ec47cdaSMasahiro Yamada 	u32 tXP;
1575ec47cdaSMasahiro Yamada 	u32 tRTP;
1585ec47cdaSMasahiro Yamada 	u32 tCKESR;
1595ec47cdaSMasahiro Yamada 	u32 tDQSCK_max;
1605ec47cdaSMasahiro Yamada 	u32 tDQSCK_max_derated;
1615ec47cdaSMasahiro Yamada 	u32 tFAW;
1625ec47cdaSMasahiro Yamada 	u32 tZQCS;
1635ec47cdaSMasahiro Yamada 	u32 tZQCL;
1645ec47cdaSMasahiro Yamada 	u32 tZQinit;
1655ec47cdaSMasahiro Yamada 	u32 tRAS_max_ns;
1665ec47cdaSMasahiro Yamada };
1675ec47cdaSMasahiro Yamada 
1685ec47cdaSMasahiro Yamada /*
1695ec47cdaSMasahiro Yamada  * Min value for some parameters in terms of number of tCK cycles(nCK)
1705ec47cdaSMasahiro Yamada  * Please set to zero parameters that are not valid for a given memory
1715ec47cdaSMasahiro Yamada  * type
1725ec47cdaSMasahiro Yamada  */
1735ec47cdaSMasahiro Yamada struct lpddr2_min_tck {
1745ec47cdaSMasahiro Yamada 	u32 tRPab;
1755ec47cdaSMasahiro Yamada 	u32 tRCD;
1765ec47cdaSMasahiro Yamada 	u32 tWR;
1775ec47cdaSMasahiro Yamada 	u32 tRASmin;
1785ec47cdaSMasahiro Yamada 	u32 tRRD;
1795ec47cdaSMasahiro Yamada 	u32 tWTR;
1805ec47cdaSMasahiro Yamada 	u32 tXP;
1815ec47cdaSMasahiro Yamada 	u32 tRTP;
1825ec47cdaSMasahiro Yamada 	u32 tCKE;
1835ec47cdaSMasahiro Yamada 	u32 tCKESR;
1845ec47cdaSMasahiro Yamada 	u32 tFAW;
1855ec47cdaSMasahiro Yamada };
1865ec47cdaSMasahiro Yamada 
1875ec47cdaSMasahiro Yamada extern const struct lpddr2_addressing
1885ec47cdaSMasahiro Yamada 	lpddr2_jedec_addressing_table[NUM_DDR_ADDR_TABLE_ENTRIES];
1895ec47cdaSMasahiro Yamada extern const struct lpddr2_timings
1905ec47cdaSMasahiro Yamada 	lpddr2_jedec_timings[NUM_DDR_TIMING_TABLE_ENTRIES];
1915ec47cdaSMasahiro Yamada extern const struct lpddr2_min_tck lpddr2_jedec_min_tck;
1925ec47cdaSMasahiro Yamada 
193*38322cf4SDmitry Osipenko /* Structure of MR8 */
194*38322cf4SDmitry Osipenko union lpddr2_basic_config4 {
195*38322cf4SDmitry Osipenko 	u32 value;
196*38322cf4SDmitry Osipenko 
197*38322cf4SDmitry Osipenko 	struct {
198*38322cf4SDmitry Osipenko 		unsigned int arch_type : 2;
199*38322cf4SDmitry Osipenko 		unsigned int density : 4;
200*38322cf4SDmitry Osipenko 		unsigned int io_width : 2;
201*38322cf4SDmitry Osipenko 	} __packed;
202*38322cf4SDmitry Osipenko };
203*38322cf4SDmitry Osipenko 
204*38322cf4SDmitry Osipenko /*
205*38322cf4SDmitry Osipenko  * Structure for information about LPDDR2 chip. All parameters are
206*38322cf4SDmitry Osipenko  * matching raw values of standard mode register bitfields or set to
207*38322cf4SDmitry Osipenko  * -ENOENT if info unavailable.
208*38322cf4SDmitry Osipenko  */
209*38322cf4SDmitry Osipenko struct lpddr2_info {
210*38322cf4SDmitry Osipenko 	int arch_type;
211*38322cf4SDmitry Osipenko 	int density;
212*38322cf4SDmitry Osipenko 	int io_width;
213*38322cf4SDmitry Osipenko 	int manufacturer_id;
214*38322cf4SDmitry Osipenko 	int revision_id1;
215*38322cf4SDmitry Osipenko 	int revision_id2;
216*38322cf4SDmitry Osipenko };
217*38322cf4SDmitry Osipenko 
218*38322cf4SDmitry Osipenko const char *lpddr2_jedec_manufacturer(unsigned int manufacturer_id);
219*38322cf4SDmitry Osipenko 
220976897ddSLukasz Luba /*
221976897ddSLukasz Luba  * Structure for timings for LPDDR3 based on LPDDR2 plus additional fields.
222976897ddSLukasz Luba  * All parameters are in pico seconds(ps) excluding max_freq, min_freq which
223976897ddSLukasz Luba  * are in Hz.
224976897ddSLukasz Luba  */
225976897ddSLukasz Luba struct lpddr3_timings {
226976897ddSLukasz Luba 	u32 max_freq;
227976897ddSLukasz Luba 	u32 min_freq;
228976897ddSLukasz Luba 	u32 tRFC;
229976897ddSLukasz Luba 	u32 tRRD;
230976897ddSLukasz Luba 	u32 tRPab;
231976897ddSLukasz Luba 	u32 tRPpb;
232976897ddSLukasz Luba 	u32 tRCD;
233976897ddSLukasz Luba 	u32 tRC;
234976897ddSLukasz Luba 	u32 tRAS;
235976897ddSLukasz Luba 	u32 tWTR;
236976897ddSLukasz Luba 	u32 tWR;
237976897ddSLukasz Luba 	u32 tRTP;
238976897ddSLukasz Luba 	u32 tW2W_C2C;
239976897ddSLukasz Luba 	u32 tR2R_C2C;
240976897ddSLukasz Luba 	u32 tWL;
241976897ddSLukasz Luba 	u32 tDQSCK;
242976897ddSLukasz Luba 	u32 tRL;
243976897ddSLukasz Luba 	u32 tFAW;
244976897ddSLukasz Luba 	u32 tXSR;
245976897ddSLukasz Luba 	u32 tXP;
246976897ddSLukasz Luba 	u32 tCKE;
247976897ddSLukasz Luba 	u32 tCKESR;
248976897ddSLukasz Luba 	u32 tMRD;
249976897ddSLukasz Luba };
250976897ddSLukasz Luba 
251976897ddSLukasz Luba /*
252976897ddSLukasz Luba  * Min value for some parameters in terms of number of tCK cycles(nCK)
253976897ddSLukasz Luba  * Please set to zero parameters that are not valid for a given memory
254976897ddSLukasz Luba  * type
255976897ddSLukasz Luba  */
256976897ddSLukasz Luba struct lpddr3_min_tck {
257976897ddSLukasz Luba 	u32 tRFC;
258976897ddSLukasz Luba 	u32 tRRD;
259976897ddSLukasz Luba 	u32 tRPab;
260976897ddSLukasz Luba 	u32 tRPpb;
261976897ddSLukasz Luba 	u32 tRCD;
262976897ddSLukasz Luba 	u32 tRC;
263976897ddSLukasz Luba 	u32 tRAS;
264976897ddSLukasz Luba 	u32 tWTR;
265976897ddSLukasz Luba 	u32 tWR;
266976897ddSLukasz Luba 	u32 tRTP;
267976897ddSLukasz Luba 	u32 tW2W_C2C;
268976897ddSLukasz Luba 	u32 tR2R_C2C;
269976897ddSLukasz Luba 	u32 tWL;
270976897ddSLukasz Luba 	u32 tDQSCK;
271976897ddSLukasz Luba 	u32 tRL;
272976897ddSLukasz Luba 	u32 tFAW;
273976897ddSLukasz Luba 	u32 tXSR;
274976897ddSLukasz Luba 	u32 tXP;
275976897ddSLukasz Luba 	u32 tCKE;
276976897ddSLukasz Luba 	u32 tCKESR;
277976897ddSLukasz Luba 	u32 tMRD;
278976897ddSLukasz Luba };
279976897ddSLukasz Luba 
2805ec47cdaSMasahiro Yamada #endif /* __JEDEC_DDR_H */
281