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