1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef DRAM_SPEC_TIMING_H 8*91f16700Schasinglulu #define DRAM_SPEC_TIMING_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <stdint.h> 11*91f16700Schasinglulu 12*91f16700Schasinglulu enum ddr3_speed_rate { 13*91f16700Schasinglulu /* 5-5-5 */ 14*91f16700Schasinglulu DDR3_800D = 0, 15*91f16700Schasinglulu /* 6-6-6 */ 16*91f16700Schasinglulu DDR3_800E = 1, 17*91f16700Schasinglulu /* 6-6-6 */ 18*91f16700Schasinglulu DDR3_1066E = 2, 19*91f16700Schasinglulu /* 7-7-7 */ 20*91f16700Schasinglulu DDR3_1066F = 3, 21*91f16700Schasinglulu /* 8-8-8 */ 22*91f16700Schasinglulu DDR3_1066G = 4, 23*91f16700Schasinglulu /* 7-7-7 */ 24*91f16700Schasinglulu DDR3_1333F = 5, 25*91f16700Schasinglulu /* 8-8-8 */ 26*91f16700Schasinglulu DDR3_1333G = 6, 27*91f16700Schasinglulu /* 9-9-9 */ 28*91f16700Schasinglulu DDR3_1333H = 7, 29*91f16700Schasinglulu /* 10-10-10 */ 30*91f16700Schasinglulu DDR3_1333J = 8, 31*91f16700Schasinglulu /* 8-8-8 */ 32*91f16700Schasinglulu DDR3_1600G = 9, 33*91f16700Schasinglulu /* 9-9-9 */ 34*91f16700Schasinglulu DDR3_1600H = 10, 35*91f16700Schasinglulu /* 10-10-10 */ 36*91f16700Schasinglulu DDR3_1600J = 11, 37*91f16700Schasinglulu /* 11-11-11 */ 38*91f16700Schasinglulu DDR3_1600K = 12, 39*91f16700Schasinglulu /* 10-10-10 */ 40*91f16700Schasinglulu DDR3_1866J = 13, 41*91f16700Schasinglulu /* 11-11-11 */ 42*91f16700Schasinglulu DDR3_1866K = 14, 43*91f16700Schasinglulu /* 12-12-12 */ 44*91f16700Schasinglulu DDR3_1866L = 15, 45*91f16700Schasinglulu /* 13-13-13 */ 46*91f16700Schasinglulu DDR3_1866M = 16, 47*91f16700Schasinglulu /* 11-11-11 */ 48*91f16700Schasinglulu DDR3_2133K = 17, 49*91f16700Schasinglulu /* 12-12-12 */ 50*91f16700Schasinglulu DDR3_2133L = 18, 51*91f16700Schasinglulu /* 13-13-13 */ 52*91f16700Schasinglulu DDR3_2133M = 19, 53*91f16700Schasinglulu /* 14-14-14 */ 54*91f16700Schasinglulu DDR3_2133N = 20, 55*91f16700Schasinglulu DDR3_DEFAULT = 21, 56*91f16700Schasinglulu }; 57*91f16700Schasinglulu 58*91f16700Schasinglulu #define max(a, b) (((a) > (b)) ? (a) : (b)) 59*91f16700Schasinglulu #define range(mi, val, ma) (((ma) > (val)) ? (max(mi, val)) : (ma)) 60*91f16700Schasinglulu 61*91f16700Schasinglulu struct dram_timing_t { 62*91f16700Schasinglulu /* unit MHz */ 63*91f16700Schasinglulu uint32_t mhz; 64*91f16700Schasinglulu /* some timing unit is us */ 65*91f16700Schasinglulu uint32_t tinit1; 66*91f16700Schasinglulu uint32_t tinit2; 67*91f16700Schasinglulu uint32_t tinit3; 68*91f16700Schasinglulu uint32_t tinit4; 69*91f16700Schasinglulu uint32_t tinit5; 70*91f16700Schasinglulu /* reset low, DDR3:200us */ 71*91f16700Schasinglulu uint32_t trstl; 72*91f16700Schasinglulu /* reset high to CKE high, DDR3:500us */ 73*91f16700Schasinglulu uint32_t trsth; 74*91f16700Schasinglulu uint32_t trefi; 75*91f16700Schasinglulu /* base */ 76*91f16700Schasinglulu uint32_t trcd; 77*91f16700Schasinglulu /* trp per bank */ 78*91f16700Schasinglulu uint32_t trppb; 79*91f16700Schasinglulu /* trp all bank */ 80*91f16700Schasinglulu uint32_t trp; 81*91f16700Schasinglulu uint32_t twr; 82*91f16700Schasinglulu uint32_t tdal; 83*91f16700Schasinglulu uint32_t trtp; 84*91f16700Schasinglulu uint32_t trc; 85*91f16700Schasinglulu uint32_t trrd; 86*91f16700Schasinglulu uint32_t tccd; 87*91f16700Schasinglulu uint32_t twtr; 88*91f16700Schasinglulu uint32_t trtw; 89*91f16700Schasinglulu uint32_t tras_max; 90*91f16700Schasinglulu uint32_t tras_min; 91*91f16700Schasinglulu uint32_t tfaw; 92*91f16700Schasinglulu uint32_t trfc; 93*91f16700Schasinglulu uint32_t tdqsck; 94*91f16700Schasinglulu uint32_t tdqsck_max; 95*91f16700Schasinglulu /* pd or sr */ 96*91f16700Schasinglulu uint32_t txsr; 97*91f16700Schasinglulu uint32_t txsnr; 98*91f16700Schasinglulu uint32_t txp; 99*91f16700Schasinglulu uint32_t txpdll; 100*91f16700Schasinglulu uint32_t tdllk; 101*91f16700Schasinglulu uint32_t tcke; 102*91f16700Schasinglulu uint32_t tckesr; 103*91f16700Schasinglulu uint32_t tcksre; 104*91f16700Schasinglulu uint32_t tcksrx; 105*91f16700Schasinglulu uint32_t tdpd; 106*91f16700Schasinglulu /* mode register timing */ 107*91f16700Schasinglulu uint32_t tmod; 108*91f16700Schasinglulu uint32_t tmrd; 109*91f16700Schasinglulu uint32_t tmrr; 110*91f16700Schasinglulu uint32_t tmrri; 111*91f16700Schasinglulu /* ODT */ 112*91f16700Schasinglulu uint32_t todton; 113*91f16700Schasinglulu /* ZQ */ 114*91f16700Schasinglulu uint32_t tzqinit; 115*91f16700Schasinglulu uint32_t tzqcs; 116*91f16700Schasinglulu uint32_t tzqoper; 117*91f16700Schasinglulu uint32_t tzqreset; 118*91f16700Schasinglulu /* Write Leveling */ 119*91f16700Schasinglulu uint32_t twlmrd; 120*91f16700Schasinglulu uint32_t twlo; 121*91f16700Schasinglulu uint32_t twldqsen; 122*91f16700Schasinglulu /* CA Training */ 123*91f16700Schasinglulu uint32_t tcackel; 124*91f16700Schasinglulu uint32_t tcaent; 125*91f16700Schasinglulu uint32_t tcamrd; 126*91f16700Schasinglulu uint32_t tcackeh; 127*91f16700Schasinglulu uint32_t tcaext; 128*91f16700Schasinglulu uint32_t tadr; 129*91f16700Schasinglulu uint32_t tmrz; 130*91f16700Schasinglulu uint32_t tcacd; 131*91f16700Schasinglulu /* mode register */ 132*91f16700Schasinglulu uint32_t mr[4]; 133*91f16700Schasinglulu uint32_t mr11; 134*91f16700Schasinglulu /* lpddr4 spec */ 135*91f16700Schasinglulu uint32_t mr12; 136*91f16700Schasinglulu uint32_t mr13; 137*91f16700Schasinglulu uint32_t mr14; 138*91f16700Schasinglulu uint32_t mr16; 139*91f16700Schasinglulu uint32_t mr17; 140*91f16700Schasinglulu uint32_t mr20; 141*91f16700Schasinglulu uint32_t mr22; 142*91f16700Schasinglulu uint32_t tccdmw; 143*91f16700Schasinglulu uint32_t tppd; 144*91f16700Schasinglulu uint32_t tescke; 145*91f16700Schasinglulu uint32_t tsr; 146*91f16700Schasinglulu uint32_t tcmdcke; 147*91f16700Schasinglulu uint32_t tcscke; 148*91f16700Schasinglulu uint32_t tckelcs; 149*91f16700Schasinglulu uint32_t tcsckeh; 150*91f16700Schasinglulu uint32_t tckehcs; 151*91f16700Schasinglulu uint32_t tmrwckel; 152*91f16700Schasinglulu uint32_t tzqcal; 153*91f16700Schasinglulu uint32_t tzqlat; 154*91f16700Schasinglulu uint32_t tzqcke; 155*91f16700Schasinglulu uint32_t tvref_long; 156*91f16700Schasinglulu uint32_t tvref_short; 157*91f16700Schasinglulu uint32_t tvrcg_enable; 158*91f16700Schasinglulu uint32_t tvrcg_disable; 159*91f16700Schasinglulu uint32_t tfc_long; 160*91f16700Schasinglulu uint32_t tckfspe; 161*91f16700Schasinglulu uint32_t tckfspx; 162*91f16700Schasinglulu uint32_t tckehcmd; 163*91f16700Schasinglulu uint32_t tckelcmd; 164*91f16700Schasinglulu uint32_t tckelpd; 165*91f16700Schasinglulu uint32_t tckckel; 166*91f16700Schasinglulu /* other */ 167*91f16700Schasinglulu uint32_t al; 168*91f16700Schasinglulu uint32_t cl; 169*91f16700Schasinglulu uint32_t cwl; 170*91f16700Schasinglulu uint32_t bl; 171*91f16700Schasinglulu }; 172*91f16700Schasinglulu 173*91f16700Schasinglulu struct dram_info_t { 174*91f16700Schasinglulu /* speed_rate only used when DDR3 */ 175*91f16700Schasinglulu enum ddr3_speed_rate speed_rate; 176*91f16700Schasinglulu /* 1: use CS0, 2: use CS0 and CS1 */ 177*91f16700Schasinglulu uint32_t cs_cnt; 178*91f16700Schasinglulu /* give the max per-die capability on each rank/cs */ 179*91f16700Schasinglulu uint32_t per_die_capability[2]; 180*91f16700Schasinglulu }; 181*91f16700Schasinglulu 182*91f16700Schasinglulu struct timing_related_config { 183*91f16700Schasinglulu struct dram_info_t dram_info[2]; 184*91f16700Schasinglulu uint32_t dram_type; 185*91f16700Schasinglulu /* MHz */ 186*91f16700Schasinglulu uint32_t freq; 187*91f16700Schasinglulu uint32_t ch_cnt; 188*91f16700Schasinglulu uint32_t bl; 189*91f16700Schasinglulu /* 1:auto precharge, 0:never auto precharge */ 190*91f16700Schasinglulu uint32_t ap; 191*91f16700Schasinglulu /* 192*91f16700Schasinglulu * 1:dll bypass, 0:dll normal 193*91f16700Schasinglulu * dram and controller dll bypass at the same time 194*91f16700Schasinglulu */ 195*91f16700Schasinglulu uint32_t dllbp; 196*91f16700Schasinglulu /* 1:odt enable, 0:odt disable */ 197*91f16700Schasinglulu uint32_t odt; 198*91f16700Schasinglulu /* 1:enable, 0:disabe */ 199*91f16700Schasinglulu uint32_t rdbi; 200*91f16700Schasinglulu uint32_t wdbi; 201*91f16700Schasinglulu /* dram driver strength */ 202*91f16700Schasinglulu uint32_t dramds; 203*91f16700Schasinglulu /* dram ODT, if odt=0, this parameter invalid */ 204*91f16700Schasinglulu uint32_t dramodt; 205*91f16700Schasinglulu /* 206*91f16700Schasinglulu * ca ODT, if odt=0, this parameter invalid 207*91f16700Schasinglulu * it only used by LPDDR4 208*91f16700Schasinglulu */ 209*91f16700Schasinglulu uint32_t caodt; 210*91f16700Schasinglulu }; 211*91f16700Schasinglulu 212*91f16700Schasinglulu /* mr0 for ddr3 */ 213*91f16700Schasinglulu #define DDR3_BL8 (0) 214*91f16700Schasinglulu #define DDR3_BC4_8 (1) 215*91f16700Schasinglulu #define DDR3_BC4 (2) 216*91f16700Schasinglulu #define DDR3_CL(n) (((((n) - 4) & 0x7) << 4)\ 217*91f16700Schasinglulu | ((((n) - 4) & 0x8) >> 1)) 218*91f16700Schasinglulu #define DDR3_WR(n) (((n) & 0x7) << 9) 219*91f16700Schasinglulu #define DDR3_DLL_RESET (1 << 8) 220*91f16700Schasinglulu #define DDR3_DLL_DERESET (0 << 8) 221*91f16700Schasinglulu 222*91f16700Schasinglulu /* mr1 for ddr3 */ 223*91f16700Schasinglulu #define DDR3_DLL_ENABLE (0) 224*91f16700Schasinglulu #define DDR3_DLL_DISABLE (1) 225*91f16700Schasinglulu #define DDR3_MR1_AL(n) (((n) & 0x3) << 3) 226*91f16700Schasinglulu 227*91f16700Schasinglulu #define DDR3_DS_40 (0) 228*91f16700Schasinglulu #define DDR3_DS_34 (1 << 1) 229*91f16700Schasinglulu #define DDR3_RTT_NOM_DIS (0) 230*91f16700Schasinglulu #define DDR3_RTT_NOM_60 (1 << 2) 231*91f16700Schasinglulu #define DDR3_RTT_NOM_120 (1 << 6) 232*91f16700Schasinglulu #define DDR3_RTT_NOM_40 ((1 << 2) | (1 << 6)) 233*91f16700Schasinglulu #define DDR3_TDQS (1 << 11) 234*91f16700Schasinglulu 235*91f16700Schasinglulu /* mr2 for ddr3 */ 236*91f16700Schasinglulu #define DDR3_MR2_CWL(n) ((((n) - 5) & 0x7) << 3) 237*91f16700Schasinglulu #define DDR3_RTT_WR_DIS (0) 238*91f16700Schasinglulu #define DDR3_RTT_WR_60 (1 << 9) 239*91f16700Schasinglulu #define DDR3_RTT_WR_120 (2 << 9) 240*91f16700Schasinglulu 241*91f16700Schasinglulu /* 242*91f16700Schasinglulu * MR0 (Device Information) 243*91f16700Schasinglulu * 0:DAI complete, 1:DAI still in progress 244*91f16700Schasinglulu */ 245*91f16700Schasinglulu #define LPDDR2_DAI (0x1) 246*91f16700Schasinglulu /* 0:S2 or S4 SDRAM, 1:NVM */ 247*91f16700Schasinglulu #define LPDDR2_DI (0x1 << 1) 248*91f16700Schasinglulu /* 0:DNV not supported, 1:DNV supported */ 249*91f16700Schasinglulu #define LPDDR2_DNVI (0x1 << 2) 250*91f16700Schasinglulu #define LPDDR2_RZQI (0x3 << 3) 251*91f16700Schasinglulu 252*91f16700Schasinglulu /* 253*91f16700Schasinglulu * 00:RZQ self test not supported, 254*91f16700Schasinglulu * 01:ZQ-pin may connect to VDDCA or float 255*91f16700Schasinglulu * 10:ZQ-pin may short to GND. 256*91f16700Schasinglulu * 11:ZQ-pin self test completed, no error condition detected. 257*91f16700Schasinglulu */ 258*91f16700Schasinglulu 259*91f16700Schasinglulu /* MR1 (Device Feature) */ 260*91f16700Schasinglulu #define LPDDR2_BL4 (0x2) 261*91f16700Schasinglulu #define LPDDR2_BL8 (0x3) 262*91f16700Schasinglulu #define LPDDR2_BL16 (0x4) 263*91f16700Schasinglulu #define LPDDR2_N_WR(n) (((n) - 2) << 5) 264*91f16700Schasinglulu 265*91f16700Schasinglulu /* MR2 (Device Feature 2) */ 266*91f16700Schasinglulu #define LPDDR2_RL3_WL1 (0x1) 267*91f16700Schasinglulu #define LPDDR2_RL4_WL2 (0x2) 268*91f16700Schasinglulu #define LPDDR2_RL5_WL2 (0x3) 269*91f16700Schasinglulu #define LPDDR2_RL6_WL3 (0x4) 270*91f16700Schasinglulu #define LPDDR2_RL7_WL4 (0x5) 271*91f16700Schasinglulu #define LPDDR2_RL8_WL4 (0x6) 272*91f16700Schasinglulu 273*91f16700Schasinglulu /* MR3 (IO Configuration 1) */ 274*91f16700Schasinglulu #define LPDDR2_DS_34 (0x1) 275*91f16700Schasinglulu #define LPDDR2_DS_40 (0x2) 276*91f16700Schasinglulu #define LPDDR2_DS_48 (0x3) 277*91f16700Schasinglulu #define LPDDR2_DS_60 (0x4) 278*91f16700Schasinglulu #define LPDDR2_DS_80 (0x6) 279*91f16700Schasinglulu /* optional */ 280*91f16700Schasinglulu #define LPDDR2_DS_120 (0x7) 281*91f16700Schasinglulu 282*91f16700Schasinglulu /* MR4 (Device Temperature) */ 283*91f16700Schasinglulu #define LPDDR2_TREF_MASK (0x7) 284*91f16700Schasinglulu #define LPDDR2_4_TREF (0x1) 285*91f16700Schasinglulu #define LPDDR2_2_TREF (0x2) 286*91f16700Schasinglulu #define LPDDR2_1_TREF (0x3) 287*91f16700Schasinglulu #define LPDDR2_025_TREF (0x5) 288*91f16700Schasinglulu #define LPDDR2_025_TREF_DERATE (0x6) 289*91f16700Schasinglulu 290*91f16700Schasinglulu #define LPDDR2_TUF (0x1 << 7) 291*91f16700Schasinglulu 292*91f16700Schasinglulu /* MR8 (Basic configuration 4) */ 293*91f16700Schasinglulu #define LPDDR2_S4 (0x0) 294*91f16700Schasinglulu #define LPDDR2_S2 (0x1) 295*91f16700Schasinglulu #define LPDDR2_N (0x2) 296*91f16700Schasinglulu /* Unit:MB */ 297*91f16700Schasinglulu #define LPDDR2_DENSITY(mr8) (8 << (((mr8) >> 2) & 0xf)) 298*91f16700Schasinglulu #define LPDDR2_IO_WIDTH(mr8) (32 >> (((mr8) >> 6) & 0x3)) 299*91f16700Schasinglulu 300*91f16700Schasinglulu /* MR10 (Calibration) */ 301*91f16700Schasinglulu #define LPDDR2_ZQINIT (0xff) 302*91f16700Schasinglulu #define LPDDR2_ZQCL (0xab) 303*91f16700Schasinglulu #define LPDDR2_ZQCS (0x56) 304*91f16700Schasinglulu #define LPDDR2_ZQRESET (0xc3) 305*91f16700Schasinglulu 306*91f16700Schasinglulu /* MR16 (PASR Bank Mask), S2 SDRAM Only */ 307*91f16700Schasinglulu #define LPDDR2_PASR_FULL (0x0) 308*91f16700Schasinglulu #define LPDDR2_PASR_1_2 (0x1) 309*91f16700Schasinglulu #define LPDDR2_PASR_1_4 (0x2) 310*91f16700Schasinglulu #define LPDDR2_PASR_1_8 (0x3) 311*91f16700Schasinglulu 312*91f16700Schasinglulu /* 313*91f16700Schasinglulu * MR0 (Device Information) 314*91f16700Schasinglulu * 0:DAI complete, 315*91f16700Schasinglulu * 1:DAI still in progress 316*91f16700Schasinglulu */ 317*91f16700Schasinglulu #define LPDDR3_DAI (0x1) 318*91f16700Schasinglulu /* 319*91f16700Schasinglulu * 00:RZQ self test not supported, 320*91f16700Schasinglulu * 01:ZQ-pin may connect to VDDCA or float 321*91f16700Schasinglulu * 10:ZQ-pin may short to GND. 322*91f16700Schasinglulu * 11:ZQ-pin self test completed, no error condition detected. 323*91f16700Schasinglulu */ 324*91f16700Schasinglulu #define LPDDR3_RZQI (0x3 << 3) 325*91f16700Schasinglulu /* 326*91f16700Schasinglulu * 0:DRAM does not support WL(Set B), 327*91f16700Schasinglulu * 1:DRAM support WL(Set B) 328*91f16700Schasinglulu */ 329*91f16700Schasinglulu #define LPDDR3_WL_SUPOT (1 << 6) 330*91f16700Schasinglulu /* 331*91f16700Schasinglulu * 0:DRAM does not support RL=3,nWR=3,WL=1; 332*91f16700Schasinglulu * 1:DRAM supports RL=3,nWR=3,WL=1 for frequencies <=166 333*91f16700Schasinglulu */ 334*91f16700Schasinglulu #define LPDDR3_RL3_SUPOT (1 << 7) 335*91f16700Schasinglulu 336*91f16700Schasinglulu /* MR1 (Device Feature) */ 337*91f16700Schasinglulu #define LPDDR3_BL8 (0x3) 338*91f16700Schasinglulu #define LPDDR3_N_WR(n) ((n) << 5) 339*91f16700Schasinglulu 340*91f16700Schasinglulu /* MR2 (Device Feature 2), WL Set A,default */ 341*91f16700Schasinglulu /* <=166MHz,optional*/ 342*91f16700Schasinglulu #define LPDDR3_RL3_WL1 (0x1) 343*91f16700Schasinglulu /* <=400MHz*/ 344*91f16700Schasinglulu #define LPDDR3_RL6_WL3 (0x4) 345*91f16700Schasinglulu /* <=533MHz*/ 346*91f16700Schasinglulu #define LPDDR3_RL8_WL4 (0x6) 347*91f16700Schasinglulu /* <=600MHz*/ 348*91f16700Schasinglulu #define LPDDR3_RL9_WL5 (0x7) 349*91f16700Schasinglulu /* <=667MHz,default*/ 350*91f16700Schasinglulu #define LPDDR3_RL10_WL6 (0x8) 351*91f16700Schasinglulu /* <=733MHz*/ 352*91f16700Schasinglulu #define LPDDR3_RL11_WL6 (0x9) 353*91f16700Schasinglulu /* <=800MHz*/ 354*91f16700Schasinglulu #define LPDDR3_RL12_WL6 (0xa) 355*91f16700Schasinglulu /* <=933MHz*/ 356*91f16700Schasinglulu #define LPDDR3_RL14_WL8 (0xc) 357*91f16700Schasinglulu /* <=1066MHz*/ 358*91f16700Schasinglulu #define LPDDR3_RL16_WL8 (0xe) 359*91f16700Schasinglulu 360*91f16700Schasinglulu /* WL Set B, optional */ 361*91f16700Schasinglulu /* <=667MHz,default*/ 362*91f16700Schasinglulu #define LPDDR3_RL10_WL8 (0x8) 363*91f16700Schasinglulu /* <=733MHz*/ 364*91f16700Schasinglulu #define LPDDR3_RL11_WL9 (0x9) 365*91f16700Schasinglulu /* <=800MHz*/ 366*91f16700Schasinglulu #define LPDDR3_RL12_WL9 (0xa) 367*91f16700Schasinglulu /* <=933MHz*/ 368*91f16700Schasinglulu #define LPDDR3_RL14_WL11 (0xc) 369*91f16700Schasinglulu /* <=1066MHz*/ 370*91f16700Schasinglulu #define LPDDR3_RL16_WL13 (0xe) 371*91f16700Schasinglulu 372*91f16700Schasinglulu /* 1:enable nWR programming > 9(default)*/ 373*91f16700Schasinglulu #define LPDDR3_N_WRE (1 << 4) 374*91f16700Schasinglulu /* 1:Select WL Set B*/ 375*91f16700Schasinglulu #define LPDDR3_WL_S (1 << 6) 376*91f16700Schasinglulu /* 1:enable*/ 377*91f16700Schasinglulu #define LPDDR3_WR_LEVEL (1 << 7) 378*91f16700Schasinglulu 379*91f16700Schasinglulu /* MR3 (IO Configuration 1) */ 380*91f16700Schasinglulu #define LPDDR3_DS_34 (0x1) 381*91f16700Schasinglulu #define LPDDR3_DS_40 (0x2) 382*91f16700Schasinglulu #define LPDDR3_DS_48 (0x3) 383*91f16700Schasinglulu #define LPDDR3_DS_60 (0x4) 384*91f16700Schasinglulu #define LPDDR3_DS_80 (0x6) 385*91f16700Schasinglulu #define LPDDR3_DS_34D_40U (0x9) 386*91f16700Schasinglulu #define LPDDR3_DS_40D_48U (0xa) 387*91f16700Schasinglulu #define LPDDR3_DS_34D_48U (0xb) 388*91f16700Schasinglulu 389*91f16700Schasinglulu /* MR4 (Device Temperature) */ 390*91f16700Schasinglulu #define LPDDR3_TREF_MASK (0x7) 391*91f16700Schasinglulu /* SDRAM Low temperature operating limit exceeded */ 392*91f16700Schasinglulu #define LPDDR3_LT_EXED (0x0) 393*91f16700Schasinglulu #define LPDDR3_4_TREF (0x1) 394*91f16700Schasinglulu #define LPDDR3_2_TREF (0x2) 395*91f16700Schasinglulu #define LPDDR3_1_TREF (0x3) 396*91f16700Schasinglulu #define LPDDR3_05_TREF (0x4) 397*91f16700Schasinglulu #define LPDDR3_025_TREF (0x5) 398*91f16700Schasinglulu #define LPDDR3_025_TREF_DERATE (0x6) 399*91f16700Schasinglulu /* SDRAM High temperature operating limit exceeded */ 400*91f16700Schasinglulu #define LPDDR3_HT_EXED (0x7) 401*91f16700Schasinglulu 402*91f16700Schasinglulu /* 1:value has changed since last read of MR4 */ 403*91f16700Schasinglulu #define LPDDR3_TUF (0x1 << 7) 404*91f16700Schasinglulu 405*91f16700Schasinglulu /* MR8 (Basic configuration 4) */ 406*91f16700Schasinglulu #define LPDDR3_S8 (0x3) 407*91f16700Schasinglulu #define LPDDR3_DENSITY(mr8) (8 << (((mr8) >> 2) & 0xf)) 408*91f16700Schasinglulu #define LPDDR3_IO_WIDTH(mr8) (32 >> (((mr8) >> 6) & 0x3)) 409*91f16700Schasinglulu 410*91f16700Schasinglulu /* MR10 (Calibration) */ 411*91f16700Schasinglulu #define LPDDR3_ZQINIT (0xff) 412*91f16700Schasinglulu #define LPDDR3_ZQCL (0xab) 413*91f16700Schasinglulu #define LPDDR3_ZQCS (0x56) 414*91f16700Schasinglulu #define LPDDR3_ZQRESET (0xc3) 415*91f16700Schasinglulu 416*91f16700Schasinglulu /* MR11 (ODT Control) */ 417*91f16700Schasinglulu #define LPDDR3_ODT_60 (1) 418*91f16700Schasinglulu #define LPDDR3_ODT_120 (2) 419*91f16700Schasinglulu #define LPDDR3_ODT_240 (3) 420*91f16700Schasinglulu #define LPDDR3_ODT_DIS (0) 421*91f16700Schasinglulu 422*91f16700Schasinglulu /* MR2 (Device Feature 2) */ 423*91f16700Schasinglulu /* RL & nRTP for DBI-RD Disabled */ 424*91f16700Schasinglulu #define LPDDR4_RL6_NRTP8 (0x0) 425*91f16700Schasinglulu #define LPDDR4_RL10_NRTP8 (0x1) 426*91f16700Schasinglulu #define LPDDR4_RL14_NRTP8 (0x2) 427*91f16700Schasinglulu #define LPDDR4_RL20_NRTP8 (0x3) 428*91f16700Schasinglulu #define LPDDR4_RL24_NRTP10 (0x4) 429*91f16700Schasinglulu #define LPDDR4_RL28_NRTP12 (0x5) 430*91f16700Schasinglulu #define LPDDR4_RL32_NRTP14 (0x6) 431*91f16700Schasinglulu #define LPDDR4_RL36_NRTP16 (0x7) 432*91f16700Schasinglulu /* RL & nRTP for DBI-RD Disabled */ 433*91f16700Schasinglulu #define LPDDR4_RL12_NRTP8 (0x1) 434*91f16700Schasinglulu #define LPDDR4_RL16_NRTP8 (0x2) 435*91f16700Schasinglulu #define LPDDR4_RL22_NRTP8 (0x3) 436*91f16700Schasinglulu #define LPDDR4_RL28_NRTP10 (0x4) 437*91f16700Schasinglulu #define LPDDR4_RL32_NRTP12 (0x5) 438*91f16700Schasinglulu #define LPDDR4_RL36_NRTP14 (0x6) 439*91f16700Schasinglulu #define LPDDR4_RL40_NRTP16 (0x7) 440*91f16700Schasinglulu /* WL Set A,default */ 441*91f16700Schasinglulu #define LPDDR4_A_WL4 (0x0) 442*91f16700Schasinglulu #define LPDDR4_A_WL6 (0x1) 443*91f16700Schasinglulu #define LPDDR4_A_WL8 (0x2) 444*91f16700Schasinglulu #define LPDDR4_A_WL10 (0x3) 445*91f16700Schasinglulu #define LPDDR4_A_WL12 (0x4) 446*91f16700Schasinglulu #define LPDDR4_A_WL14 (0x5) 447*91f16700Schasinglulu #define LPDDR4_A_WL16 (0x6) 448*91f16700Schasinglulu #define LPDDR4_A_WL18 (0x7) 449*91f16700Schasinglulu /* WL Set B, optional */ 450*91f16700Schasinglulu #define LPDDR4_B_WL4 (0x0 << 3) 451*91f16700Schasinglulu #define LPDDR4_B_WL8 (0x1 << 3) 452*91f16700Schasinglulu #define LPDDR4_B_WL12 (0x2 << 3) 453*91f16700Schasinglulu #define LPDDR4_B_WL18 (0x3 << 3) 454*91f16700Schasinglulu #define LPDDR4_B_WL22 (0x4 << 3) 455*91f16700Schasinglulu #define LPDDR4_B_WL26 (0x5 << 3) 456*91f16700Schasinglulu #define LPDDR4_B_WL30 (0x6 << 3) 457*91f16700Schasinglulu #define LPDDR4_B_WL34 (0x7 << 3) 458*91f16700Schasinglulu /* 1:Select WL Set B*/ 459*91f16700Schasinglulu #define LPDDR4_WL_B (1 << 6) 460*91f16700Schasinglulu /* 1:enable*/ 461*91f16700Schasinglulu #define LPDDR4_WR_LEVEL (1 << 7) 462*91f16700Schasinglulu 463*91f16700Schasinglulu /* MR3 */ 464*91f16700Schasinglulu #define LPDDR4_VDDQ_2_5 (0) 465*91f16700Schasinglulu #define LPDDR4_VDDQ_3 (1) 466*91f16700Schasinglulu #define LPDDR4_WRPST_0_5_TCK (0 << 1) 467*91f16700Schasinglulu #define LPDDR4_WRPST_1_5_TCK (1 << 1) 468*91f16700Schasinglulu #define LPDDR4_PPR_EN (1 << 2) 469*91f16700Schasinglulu /* PDDS */ 470*91f16700Schasinglulu #define LPDDR4_PDDS_240 (0x1 << 3) 471*91f16700Schasinglulu #define LPDDR4_PDDS_120 (0x2 << 3) 472*91f16700Schasinglulu #define LPDDR4_PDDS_80 (0x3 << 3) 473*91f16700Schasinglulu #define LPDDR4_PDDS_60 (0x4 << 3) 474*91f16700Schasinglulu #define LPDDR4_PDDS_48 (0x5 << 3) 475*91f16700Schasinglulu #define LPDDR4_PDDS_40 (0x6 << 3) 476*91f16700Schasinglulu #define LPDDR4_DBI_RD_EN (1 << 6) 477*91f16700Schasinglulu #define LPDDR4_DBI_WR_EN (1 << 7) 478*91f16700Schasinglulu 479*91f16700Schasinglulu /* MR11 (ODT Control) */ 480*91f16700Schasinglulu #define LPDDR4_DQODT_240 (1) 481*91f16700Schasinglulu #define LPDDR4_DQODT_120 (2) 482*91f16700Schasinglulu #define LPDDR4_DQODT_80 (3) 483*91f16700Schasinglulu #define LPDDR4_DQODT_60 (4) 484*91f16700Schasinglulu #define LPDDR4_DQODT_48 (5) 485*91f16700Schasinglulu #define LPDDR4_DQODT_40 (6) 486*91f16700Schasinglulu #define LPDDR4_DQODT_DIS (0) 487*91f16700Schasinglulu #define LPDDR4_CAODT_240 (1 << 4) 488*91f16700Schasinglulu #define LPDDR4_CAODT_120 (2 << 4) 489*91f16700Schasinglulu #define LPDDR4_CAODT_80 (3 << 4) 490*91f16700Schasinglulu #define LPDDR4_CAODT_60 (4 << 4) 491*91f16700Schasinglulu #define LPDDR4_CAODT_48 (5 << 4) 492*91f16700Schasinglulu #define LPDDR4_CAODT_40 (6 << 4) 493*91f16700Schasinglulu #define LPDDR4_CAODT_DIS (0 << 4) 494*91f16700Schasinglulu 495*91f16700Schasinglulu /* 496*91f16700Schasinglulu * Description: depend on input parameter "timing_config", 497*91f16700Schasinglulu * and calculate correspond "dram_type" 498*91f16700Schasinglulu * spec timing to "pdram_timing" 499*91f16700Schasinglulu * parameters: 500*91f16700Schasinglulu * input: timing_config 501*91f16700Schasinglulu * output: pdram_timing 502*91f16700Schasinglulu * NOTE: MR ODT is set, need to disable by controller 503*91f16700Schasinglulu */ 504*91f16700Schasinglulu void dram_get_parameter(struct timing_related_config *timing_config, 505*91f16700Schasinglulu struct dram_timing_t *pdram_timing); 506*91f16700Schasinglulu 507*91f16700Schasinglulu #endif /* DRAM_SPEC_TIMING_H */ 508