xref: /OK3568_Linux_fs/kernel/drivers/memory/jedec_ddr_data.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-only
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * DDR addressing details and AC timing parameters from 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 
10*4882a593Smuzhiyun #include <linux/export.h>
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include "jedec_ddr.h"
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun /* LPDDR2 addressing details from JESD209-2 section 2.4 */
15*4882a593Smuzhiyun const struct lpddr2_addressing
16*4882a593Smuzhiyun 	lpddr2_jedec_addressing_table[NUM_DDR_ADDR_TABLE_ENTRIES] = {
17*4882a593Smuzhiyun 	{B4, T_REFI_15_6, T_RFC_90}, /* 64M */
18*4882a593Smuzhiyun 	{B4, T_REFI_15_6, T_RFC_90}, /* 128M */
19*4882a593Smuzhiyun 	{B4, T_REFI_7_8,  T_RFC_90}, /* 256M */
20*4882a593Smuzhiyun 	{B4, T_REFI_7_8,  T_RFC_90}, /* 512M */
21*4882a593Smuzhiyun 	{B8, T_REFI_7_8, T_RFC_130}, /* 1GS4 */
22*4882a593Smuzhiyun 	{B8, T_REFI_3_9, T_RFC_130}, /* 2GS4 */
23*4882a593Smuzhiyun 	{B8, T_REFI_3_9, T_RFC_130}, /* 4G */
24*4882a593Smuzhiyun 	{B8, T_REFI_3_9, T_RFC_210}, /* 8G */
25*4882a593Smuzhiyun 	{B4, T_REFI_7_8, T_RFC_130}, /* 1GS2 */
26*4882a593Smuzhiyun 	{B4, T_REFI_3_9, T_RFC_130}, /* 2GS2 */
27*4882a593Smuzhiyun };
28*4882a593Smuzhiyun EXPORT_SYMBOL_GPL(lpddr2_jedec_addressing_table);
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun /* LPDDR2 AC timing parameters from JESD209-2 section 12 */
31*4882a593Smuzhiyun const struct lpddr2_timings
32*4882a593Smuzhiyun 	lpddr2_jedec_timings[NUM_DDR_TIMING_TABLE_ENTRIES] = {
33*4882a593Smuzhiyun 	/* Speed bin 400(200 MHz) */
34*4882a593Smuzhiyun 	[0] = {
35*4882a593Smuzhiyun 		.max_freq	= 200000000,
36*4882a593Smuzhiyun 		.min_freq	= 10000000,
37*4882a593Smuzhiyun 		.tRPab		= 21000,
38*4882a593Smuzhiyun 		.tRCD		= 18000,
39*4882a593Smuzhiyun 		.tWR		= 15000,
40*4882a593Smuzhiyun 		.tRAS_min	= 42000,
41*4882a593Smuzhiyun 		.tRRD		= 10000,
42*4882a593Smuzhiyun 		.tWTR		= 10000,
43*4882a593Smuzhiyun 		.tXP		= 7500,
44*4882a593Smuzhiyun 		.tRTP		= 7500,
45*4882a593Smuzhiyun 		.tCKESR		= 15000,
46*4882a593Smuzhiyun 		.tDQSCK_max	= 5500,
47*4882a593Smuzhiyun 		.tFAW		= 50000,
48*4882a593Smuzhiyun 		.tZQCS		= 90000,
49*4882a593Smuzhiyun 		.tZQCL		= 360000,
50*4882a593Smuzhiyun 		.tZQinit	= 1000000,
51*4882a593Smuzhiyun 		.tRAS_max_ns	= 70000,
52*4882a593Smuzhiyun 		.tDQSCK_max_derated = 6000,
53*4882a593Smuzhiyun 	},
54*4882a593Smuzhiyun 	/* Speed bin 533(266 MHz) */
55*4882a593Smuzhiyun 	[1] = {
56*4882a593Smuzhiyun 		.max_freq	= 266666666,
57*4882a593Smuzhiyun 		.min_freq	= 10000000,
58*4882a593Smuzhiyun 		.tRPab		= 21000,
59*4882a593Smuzhiyun 		.tRCD		= 18000,
60*4882a593Smuzhiyun 		.tWR		= 15000,
61*4882a593Smuzhiyun 		.tRAS_min	= 42000,
62*4882a593Smuzhiyun 		.tRRD		= 10000,
63*4882a593Smuzhiyun 		.tWTR		= 7500,
64*4882a593Smuzhiyun 		.tXP		= 7500,
65*4882a593Smuzhiyun 		.tRTP		= 7500,
66*4882a593Smuzhiyun 		.tCKESR		= 15000,
67*4882a593Smuzhiyun 		.tDQSCK_max	= 5500,
68*4882a593Smuzhiyun 		.tFAW		= 50000,
69*4882a593Smuzhiyun 		.tZQCS		= 90000,
70*4882a593Smuzhiyun 		.tZQCL		= 360000,
71*4882a593Smuzhiyun 		.tZQinit	= 1000000,
72*4882a593Smuzhiyun 		.tRAS_max_ns	= 70000,
73*4882a593Smuzhiyun 		.tDQSCK_max_derated = 6000,
74*4882a593Smuzhiyun 	},
75*4882a593Smuzhiyun 	/* Speed bin 800(400 MHz) */
76*4882a593Smuzhiyun 	[2] = {
77*4882a593Smuzhiyun 		.max_freq	= 400000000,
78*4882a593Smuzhiyun 		.min_freq	= 10000000,
79*4882a593Smuzhiyun 		.tRPab		= 21000,
80*4882a593Smuzhiyun 		.tRCD		= 18000,
81*4882a593Smuzhiyun 		.tWR		= 15000,
82*4882a593Smuzhiyun 		.tRAS_min	= 42000,
83*4882a593Smuzhiyun 		.tRRD		= 10000,
84*4882a593Smuzhiyun 		.tWTR		= 7500,
85*4882a593Smuzhiyun 		.tXP		= 7500,
86*4882a593Smuzhiyun 		.tRTP		= 7500,
87*4882a593Smuzhiyun 		.tCKESR		= 15000,
88*4882a593Smuzhiyun 		.tDQSCK_max	= 5500,
89*4882a593Smuzhiyun 		.tFAW		= 50000,
90*4882a593Smuzhiyun 		.tZQCS		= 90000,
91*4882a593Smuzhiyun 		.tZQCL		= 360000,
92*4882a593Smuzhiyun 		.tZQinit	= 1000000,
93*4882a593Smuzhiyun 		.tRAS_max_ns	= 70000,
94*4882a593Smuzhiyun 		.tDQSCK_max_derated = 6000,
95*4882a593Smuzhiyun 	},
96*4882a593Smuzhiyun 	/* Speed bin 1066(533 MHz) */
97*4882a593Smuzhiyun 	[3] = {
98*4882a593Smuzhiyun 		.max_freq	= 533333333,
99*4882a593Smuzhiyun 		.min_freq	= 10000000,
100*4882a593Smuzhiyun 		.tRPab		= 21000,
101*4882a593Smuzhiyun 		.tRCD		= 18000,
102*4882a593Smuzhiyun 		.tWR		= 15000,
103*4882a593Smuzhiyun 		.tRAS_min	= 42000,
104*4882a593Smuzhiyun 		.tRRD		= 10000,
105*4882a593Smuzhiyun 		.tWTR		= 7500,
106*4882a593Smuzhiyun 		.tXP		= 7500,
107*4882a593Smuzhiyun 		.tRTP		= 7500,
108*4882a593Smuzhiyun 		.tCKESR		= 15000,
109*4882a593Smuzhiyun 		.tDQSCK_max	= 5500,
110*4882a593Smuzhiyun 		.tFAW		= 50000,
111*4882a593Smuzhiyun 		.tZQCS		= 90000,
112*4882a593Smuzhiyun 		.tZQCL		= 360000,
113*4882a593Smuzhiyun 		.tZQinit	= 1000000,
114*4882a593Smuzhiyun 		.tRAS_max_ns	= 70000,
115*4882a593Smuzhiyun 		.tDQSCK_max_derated = 5620,
116*4882a593Smuzhiyun 	},
117*4882a593Smuzhiyun };
118*4882a593Smuzhiyun EXPORT_SYMBOL_GPL(lpddr2_jedec_timings);
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun const struct lpddr2_min_tck lpddr2_jedec_min_tck = {
121*4882a593Smuzhiyun 	.tRPab		= 3,
122*4882a593Smuzhiyun 	.tRCD		= 3,
123*4882a593Smuzhiyun 	.tWR		= 3,
124*4882a593Smuzhiyun 	.tRASmin	= 3,
125*4882a593Smuzhiyun 	.tRRD		= 2,
126*4882a593Smuzhiyun 	.tWTR		= 2,
127*4882a593Smuzhiyun 	.tXP		= 2,
128*4882a593Smuzhiyun 	.tRTP		= 2,
129*4882a593Smuzhiyun 	.tCKE		= 3,
130*4882a593Smuzhiyun 	.tCKESR		= 3,
131*4882a593Smuzhiyun 	.tFAW		= 8
132*4882a593Smuzhiyun };
133*4882a593Smuzhiyun EXPORT_SYMBOL_GPL(lpddr2_jedec_min_tck);
134