1*64da4a85SKever Yang /* 2*64da4a85SKever Yang * (C) Copyright 2017 Rockchip Electronics Co., Ltd 3*64da4a85SKever Yang * 4*64da4a85SKever Yang * SPDX-License-Identifier: GPL-2.0+ 5*64da4a85SKever Yang */ 6*64da4a85SKever Yang #ifndef _ASM_ARCH_SDRAM_RK322X_H 7*64da4a85SKever Yang #define _ASM_ARCH_SDRAM_RK322X_H 8*64da4a85SKever Yang 9*64da4a85SKever Yang #include <common.h> 10*64da4a85SKever Yang 11*64da4a85SKever Yang struct rk322x_sdram_channel { 12*64da4a85SKever Yang /* 13*64da4a85SKever Yang * bit width in address, eg: 14*64da4a85SKever Yang * 8 banks using 3 bit to address, 15*64da4a85SKever Yang * 2 cs using 1 bit to address. 16*64da4a85SKever Yang */ 17*64da4a85SKever Yang u8 rank; 18*64da4a85SKever Yang u8 col; 19*64da4a85SKever Yang u8 bk; 20*64da4a85SKever Yang u8 bw; 21*64da4a85SKever Yang u8 dbw; 22*64da4a85SKever Yang u8 row_3_4; 23*64da4a85SKever Yang u8 cs0_row; 24*64da4a85SKever Yang u8 cs1_row; 25*64da4a85SKever Yang #if CONFIG_IS_ENABLED(OF_PLATDATA) 26*64da4a85SKever Yang /* 27*64da4a85SKever Yang * For of-platdata, which would otherwise convert this into two 28*64da4a85SKever Yang * byte-swapped integers. With a size of 9 bytes, this struct will 29*64da4a85SKever Yang * appear in of-platdata as a byte array. 30*64da4a85SKever Yang * 31*64da4a85SKever Yang * If OF_PLATDATA enabled, need to add a dummy byte in dts.(i.e 0xff) 32*64da4a85SKever Yang */ 33*64da4a85SKever Yang u8 dummy; 34*64da4a85SKever Yang #endif 35*64da4a85SKever Yang }; 36*64da4a85SKever Yang 37*64da4a85SKever Yang struct rk322x_ddr_pctl { 38*64da4a85SKever Yang u32 scfg; 39*64da4a85SKever Yang u32 sctl; 40*64da4a85SKever Yang u32 stat; 41*64da4a85SKever Yang u32 intrstat; 42*64da4a85SKever Yang u32 reserved0[(0x40 - 0x10) / 4]; 43*64da4a85SKever Yang u32 mcmd; 44*64da4a85SKever Yang u32 powctl; 45*64da4a85SKever Yang u32 powstat; 46*64da4a85SKever Yang u32 cmdtstat; 47*64da4a85SKever Yang u32 cmdtstaten; 48*64da4a85SKever Yang u32 reserved1[(0x60 - 0x54) / 4]; 49*64da4a85SKever Yang u32 mrrcfg0; 50*64da4a85SKever Yang u32 mrrstat0; 51*64da4a85SKever Yang u32 mrrstat1; 52*64da4a85SKever Yang u32 reserved2[(0x7c - 0x6c) / 4]; 53*64da4a85SKever Yang 54*64da4a85SKever Yang u32 mcfg1; 55*64da4a85SKever Yang u32 mcfg; 56*64da4a85SKever Yang u32 ppcfg; 57*64da4a85SKever Yang u32 mstat; 58*64da4a85SKever Yang u32 lpddr2zqcfg; 59*64da4a85SKever Yang u32 reserved3; 60*64da4a85SKever Yang 61*64da4a85SKever Yang u32 dtupdes; 62*64da4a85SKever Yang u32 dtuna; 63*64da4a85SKever Yang u32 dtune; 64*64da4a85SKever Yang u32 dtuprd0; 65*64da4a85SKever Yang u32 dtuprd1; 66*64da4a85SKever Yang u32 dtuprd2; 67*64da4a85SKever Yang u32 dtuprd3; 68*64da4a85SKever Yang u32 dtuawdt; 69*64da4a85SKever Yang u32 reserved4[(0xc0 - 0xb4) / 4]; 70*64da4a85SKever Yang 71*64da4a85SKever Yang u32 togcnt1u; 72*64da4a85SKever Yang u32 tinit; 73*64da4a85SKever Yang u32 trsth; 74*64da4a85SKever Yang u32 togcnt100n; 75*64da4a85SKever Yang u32 trefi; 76*64da4a85SKever Yang u32 tmrd; 77*64da4a85SKever Yang u32 trfc; 78*64da4a85SKever Yang u32 trp; 79*64da4a85SKever Yang u32 trtw; 80*64da4a85SKever Yang u32 tal; 81*64da4a85SKever Yang u32 tcl; 82*64da4a85SKever Yang u32 tcwl; 83*64da4a85SKever Yang u32 tras; 84*64da4a85SKever Yang u32 trc; 85*64da4a85SKever Yang u32 trcd; 86*64da4a85SKever Yang u32 trrd; 87*64da4a85SKever Yang u32 trtp; 88*64da4a85SKever Yang u32 twr; 89*64da4a85SKever Yang u32 twtr; 90*64da4a85SKever Yang u32 texsr; 91*64da4a85SKever Yang u32 txp; 92*64da4a85SKever Yang u32 txpdll; 93*64da4a85SKever Yang u32 tzqcs; 94*64da4a85SKever Yang u32 tzqcsi; 95*64da4a85SKever Yang u32 tdqs; 96*64da4a85SKever Yang u32 tcksre; 97*64da4a85SKever Yang u32 tcksrx; 98*64da4a85SKever Yang u32 tcke; 99*64da4a85SKever Yang u32 tmod; 100*64da4a85SKever Yang u32 trstl; 101*64da4a85SKever Yang u32 tzqcl; 102*64da4a85SKever Yang u32 tmrr; 103*64da4a85SKever Yang u32 tckesr; 104*64da4a85SKever Yang u32 tdpd; 105*64da4a85SKever Yang u32 tref_mem_ddr3; 106*64da4a85SKever Yang u32 reserved5[(0x180 - 0x14c) / 4]; 107*64da4a85SKever Yang u32 ecccfg; 108*64da4a85SKever Yang u32 ecctst; 109*64da4a85SKever Yang u32 eccclr; 110*64da4a85SKever Yang u32 ecclog; 111*64da4a85SKever Yang u32 reserved6[(0x200 - 0x190) / 4]; 112*64da4a85SKever Yang u32 dtuwactl; 113*64da4a85SKever Yang u32 dturactl; 114*64da4a85SKever Yang u32 dtucfg; 115*64da4a85SKever Yang u32 dtuectl; 116*64da4a85SKever Yang u32 dtuwd0; 117*64da4a85SKever Yang u32 dtuwd1; 118*64da4a85SKever Yang u32 dtuwd2; 119*64da4a85SKever Yang u32 dtuwd3; 120*64da4a85SKever Yang u32 dtuwdm; 121*64da4a85SKever Yang u32 dturd0; 122*64da4a85SKever Yang u32 dturd1; 123*64da4a85SKever Yang u32 dturd2; 124*64da4a85SKever Yang u32 dturd3; 125*64da4a85SKever Yang u32 dtulfsrwd; 126*64da4a85SKever Yang u32 dtulfsrrd; 127*64da4a85SKever Yang u32 dtueaf; 128*64da4a85SKever Yang /* dfi control registers */ 129*64da4a85SKever Yang u32 dfitctrldelay; 130*64da4a85SKever Yang u32 dfiodtcfg; 131*64da4a85SKever Yang u32 dfiodtcfg1; 132*64da4a85SKever Yang u32 dfiodtrankmap; 133*64da4a85SKever Yang /* dfi write data registers */ 134*64da4a85SKever Yang u32 dfitphywrdata; 135*64da4a85SKever Yang u32 dfitphywrlat; 136*64da4a85SKever Yang u32 reserved7[(0x260 - 0x258) / 4]; 137*64da4a85SKever Yang u32 dfitrddataen; 138*64da4a85SKever Yang u32 dfitphyrdlat; 139*64da4a85SKever Yang u32 reserved8[(0x270 - 0x268) / 4]; 140*64da4a85SKever Yang u32 dfitphyupdtype0; 141*64da4a85SKever Yang u32 dfitphyupdtype1; 142*64da4a85SKever Yang u32 dfitphyupdtype2; 143*64da4a85SKever Yang u32 dfitphyupdtype3; 144*64da4a85SKever Yang u32 dfitctrlupdmin; 145*64da4a85SKever Yang u32 dfitctrlupdmax; 146*64da4a85SKever Yang u32 dfitctrlupddly; 147*64da4a85SKever Yang u32 reserved9; 148*64da4a85SKever Yang u32 dfiupdcfg; 149*64da4a85SKever Yang u32 dfitrefmski; 150*64da4a85SKever Yang u32 dfitctrlupdi; 151*64da4a85SKever Yang u32 reserved10[(0x2ac - 0x29c) / 4]; 152*64da4a85SKever Yang u32 dfitrcfg0; 153*64da4a85SKever Yang u32 dfitrstat0; 154*64da4a85SKever Yang u32 dfitrwrlvlen; 155*64da4a85SKever Yang u32 dfitrrdlvlen; 156*64da4a85SKever Yang u32 dfitrrdlvlgateen; 157*64da4a85SKever Yang u32 dfiststat0; 158*64da4a85SKever Yang u32 dfistcfg0; 159*64da4a85SKever Yang u32 dfistcfg1; 160*64da4a85SKever Yang u32 reserved11; 161*64da4a85SKever Yang u32 dfitdramclken; 162*64da4a85SKever Yang u32 dfitdramclkdis; 163*64da4a85SKever Yang u32 dfistcfg2; 164*64da4a85SKever Yang u32 dfistparclr; 165*64da4a85SKever Yang u32 dfistparlog; 166*64da4a85SKever Yang u32 reserved12[(0x2f0 - 0x2e4) / 4]; 167*64da4a85SKever Yang 168*64da4a85SKever Yang u32 dfilpcfg0; 169*64da4a85SKever Yang u32 reserved13[(0x300 - 0x2f4) / 4]; 170*64da4a85SKever Yang u32 dfitrwrlvlresp0; 171*64da4a85SKever Yang u32 dfitrwrlvlresp1; 172*64da4a85SKever Yang u32 dfitrwrlvlresp2; 173*64da4a85SKever Yang u32 dfitrrdlvlresp0; 174*64da4a85SKever Yang u32 dfitrrdlvlresp1; 175*64da4a85SKever Yang u32 dfitrrdlvlresp2; 176*64da4a85SKever Yang u32 dfitrwrlvldelay0; 177*64da4a85SKever Yang u32 dfitrwrlvldelay1; 178*64da4a85SKever Yang u32 dfitrwrlvldelay2; 179*64da4a85SKever Yang u32 dfitrrdlvldelay0; 180*64da4a85SKever Yang u32 dfitrrdlvldelay1; 181*64da4a85SKever Yang u32 dfitrrdlvldelay2; 182*64da4a85SKever Yang u32 dfitrrdlvlgatedelay0; 183*64da4a85SKever Yang u32 dfitrrdlvlgatedelay1; 184*64da4a85SKever Yang u32 dfitrrdlvlgatedelay2; 185*64da4a85SKever Yang u32 dfitrcmd; 186*64da4a85SKever Yang u32 reserved14[(0x3f8 - 0x340) / 4]; 187*64da4a85SKever Yang u32 ipvr; 188*64da4a85SKever Yang u32 iptr; 189*64da4a85SKever Yang }; 190*64da4a85SKever Yang check_member(rk322x_ddr_pctl, iptr, 0x03fc); 191*64da4a85SKever Yang 192*64da4a85SKever Yang struct rk322x_ddr_phy { 193*64da4a85SKever Yang u32 ddrphy_reg[0x100]; 194*64da4a85SKever Yang }; 195*64da4a85SKever Yang 196*64da4a85SKever Yang struct rk322x_pctl_timing { 197*64da4a85SKever Yang u32 togcnt1u; 198*64da4a85SKever Yang u32 tinit; 199*64da4a85SKever Yang u32 trsth; 200*64da4a85SKever Yang u32 togcnt100n; 201*64da4a85SKever Yang u32 trefi; 202*64da4a85SKever Yang u32 tmrd; 203*64da4a85SKever Yang u32 trfc; 204*64da4a85SKever Yang u32 trp; 205*64da4a85SKever Yang u32 trtw; 206*64da4a85SKever Yang u32 tal; 207*64da4a85SKever Yang u32 tcl; 208*64da4a85SKever Yang u32 tcwl; 209*64da4a85SKever Yang u32 tras; 210*64da4a85SKever Yang u32 trc; 211*64da4a85SKever Yang u32 trcd; 212*64da4a85SKever Yang u32 trrd; 213*64da4a85SKever Yang u32 trtp; 214*64da4a85SKever Yang u32 twr; 215*64da4a85SKever Yang u32 twtr; 216*64da4a85SKever Yang u32 texsr; 217*64da4a85SKever Yang u32 txp; 218*64da4a85SKever Yang u32 txpdll; 219*64da4a85SKever Yang u32 tzqcs; 220*64da4a85SKever Yang u32 tzqcsi; 221*64da4a85SKever Yang u32 tdqs; 222*64da4a85SKever Yang u32 tcksre; 223*64da4a85SKever Yang u32 tcksrx; 224*64da4a85SKever Yang u32 tcke; 225*64da4a85SKever Yang u32 tmod; 226*64da4a85SKever Yang u32 trstl; 227*64da4a85SKever Yang u32 tzqcl; 228*64da4a85SKever Yang u32 tmrr; 229*64da4a85SKever Yang u32 tckesr; 230*64da4a85SKever Yang u32 tdpd; 231*64da4a85SKever Yang u32 trefi_mem_ddr3; 232*64da4a85SKever Yang }; 233*64da4a85SKever Yang 234*64da4a85SKever Yang struct rk322x_phy_timing { 235*64da4a85SKever Yang u32 mr[4]; 236*64da4a85SKever Yang u32 mr11; 237*64da4a85SKever Yang u32 bl; 238*64da4a85SKever Yang u32 cl_al; 239*64da4a85SKever Yang }; 240*64da4a85SKever Yang 241*64da4a85SKever Yang struct rk322x_msch_timings { 242*64da4a85SKever Yang u32 ddrtiming; 243*64da4a85SKever Yang u32 ddrmode; 244*64da4a85SKever Yang u32 readlatency; 245*64da4a85SKever Yang u32 activate; 246*64da4a85SKever Yang u32 devtodev; 247*64da4a85SKever Yang }; 248*64da4a85SKever Yang 249*64da4a85SKever Yang struct rk322x_service_sys { 250*64da4a85SKever Yang u32 id_coreid; 251*64da4a85SKever Yang u32 id_revisionid; 252*64da4a85SKever Yang u32 ddrconf; 253*64da4a85SKever Yang u32 ddrtiming; 254*64da4a85SKever Yang u32 ddrmode; 255*64da4a85SKever Yang u32 readlatency; 256*64da4a85SKever Yang u32 activate; 257*64da4a85SKever Yang u32 devtodev; 258*64da4a85SKever Yang }; 259*64da4a85SKever Yang 260*64da4a85SKever Yang struct rk322x_base_params { 261*64da4a85SKever Yang struct rk322x_msch_timings noc_timing; 262*64da4a85SKever Yang u32 ddrconfig; 263*64da4a85SKever Yang u32 ddr_freq; 264*64da4a85SKever Yang u32 dramtype; 265*64da4a85SKever Yang /* 266*64da4a85SKever Yang * unused for rk322x 267*64da4a85SKever Yang */ 268*64da4a85SKever Yang u32 stride; 269*64da4a85SKever Yang u32 odt; 270*64da4a85SKever Yang }; 271*64da4a85SKever Yang 272*64da4a85SKever Yang /* PCT_DFISTCFG0 */ 273*64da4a85SKever Yang #define DFI_INIT_START (1 << 0) 274*64da4a85SKever Yang #define DFI_DATA_BYTE_DISABLE_EN (1 << 2) 275*64da4a85SKever Yang 276*64da4a85SKever Yang /* PCT_DFISTCFG1 */ 277*64da4a85SKever Yang #define DFI_DRAM_CLK_SR_EN (1 << 0) 278*64da4a85SKever Yang #define DFI_DRAM_CLK_DPD_EN (1 << 1) 279*64da4a85SKever Yang 280*64da4a85SKever Yang /* PCT_DFISTCFG2 */ 281*64da4a85SKever Yang #define DFI_PARITY_INTR_EN (1 << 0) 282*64da4a85SKever Yang #define DFI_PARITY_EN (1 << 1) 283*64da4a85SKever Yang 284*64da4a85SKever Yang /* PCT_DFILPCFG0 */ 285*64da4a85SKever Yang #define TLP_RESP_TIME_SHIFT 16 286*64da4a85SKever Yang #define LP_SR_EN (1 << 8) 287*64da4a85SKever Yang #define LP_PD_EN (1 << 0) 288*64da4a85SKever Yang 289*64da4a85SKever Yang /* PCT_DFITCTRLDELAY */ 290*64da4a85SKever Yang #define TCTRL_DELAY_TIME_SHIFT 0 291*64da4a85SKever Yang 292*64da4a85SKever Yang /* PCT_DFITPHYWRDATA */ 293*64da4a85SKever Yang #define TPHY_WRDATA_TIME_SHIFT 0 294*64da4a85SKever Yang 295*64da4a85SKever Yang /* PCT_DFITPHYRDLAT */ 296*64da4a85SKever Yang #define TPHY_RDLAT_TIME_SHIFT 0 297*64da4a85SKever Yang 298*64da4a85SKever Yang /* PCT_DFITDRAMCLKDIS */ 299*64da4a85SKever Yang #define TDRAM_CLK_DIS_TIME_SHIFT 0 300*64da4a85SKever Yang 301*64da4a85SKever Yang /* PCT_DFITDRAMCLKEN */ 302*64da4a85SKever Yang #define TDRAM_CLK_EN_TIME_SHIFT 0 303*64da4a85SKever Yang 304*64da4a85SKever Yang /* PCTL_DFIODTCFG */ 305*64da4a85SKever Yang #define RANK0_ODT_WRITE_SEL (1 << 3) 306*64da4a85SKever Yang #define RANK1_ODT_WRITE_SEL (1 << 11) 307*64da4a85SKever Yang 308*64da4a85SKever Yang /* PCTL_DFIODTCFG1 */ 309*64da4a85SKever Yang #define ODT_LEN_BL8_W_SHIFT 16 310*64da4a85SKever Yang 311*64da4a85SKever Yang /* PUBL_ACDLLCR */ 312*64da4a85SKever Yang #define ACDLLCR_DLLDIS (1 << 31) 313*64da4a85SKever Yang #define ACDLLCR_DLLSRST (1 << 30) 314*64da4a85SKever Yang 315*64da4a85SKever Yang /* PUBL_DXDLLCR */ 316*64da4a85SKever Yang #define DXDLLCR_DLLDIS (1 << 31) 317*64da4a85SKever Yang #define DXDLLCR_DLLSRST (1 << 30) 318*64da4a85SKever Yang 319*64da4a85SKever Yang /* PUBL_DLLGCR */ 320*64da4a85SKever Yang #define DLLGCR_SBIAS (1 << 30) 321*64da4a85SKever Yang 322*64da4a85SKever Yang /* PUBL_DXGCR */ 323*64da4a85SKever Yang #define DQSRTT (1 << 9) 324*64da4a85SKever Yang #define DQRTT (1 << 10) 325*64da4a85SKever Yang 326*64da4a85SKever Yang /* PIR */ 327*64da4a85SKever Yang #define PIR_INIT (1 << 0) 328*64da4a85SKever Yang #define PIR_DLLSRST (1 << 1) 329*64da4a85SKever Yang #define PIR_DLLLOCK (1 << 2) 330*64da4a85SKever Yang #define PIR_ZCAL (1 << 3) 331*64da4a85SKever Yang #define PIR_ITMSRST (1 << 4) 332*64da4a85SKever Yang #define PIR_DRAMRST (1 << 5) 333*64da4a85SKever Yang #define PIR_DRAMINIT (1 << 6) 334*64da4a85SKever Yang #define PIR_QSTRN (1 << 7) 335*64da4a85SKever Yang #define PIR_RVTRN (1 << 8) 336*64da4a85SKever Yang #define PIR_ICPC (1 << 16) 337*64da4a85SKever Yang #define PIR_DLLBYP (1 << 17) 338*64da4a85SKever Yang #define PIR_CTLDINIT (1 << 18) 339*64da4a85SKever Yang #define PIR_CLRSR (1 << 28) 340*64da4a85SKever Yang #define PIR_LOCKBYP (1 << 29) 341*64da4a85SKever Yang #define PIR_ZCALBYP (1 << 30) 342*64da4a85SKever Yang #define PIR_INITBYP (1u << 31) 343*64da4a85SKever Yang 344*64da4a85SKever Yang /* PGCR */ 345*64da4a85SKever Yang #define PGCR_DFTLMT_SHIFT 3 346*64da4a85SKever Yang #define PGCR_DFTCMP_SHIFT 2 347*64da4a85SKever Yang #define PGCR_DQSCFG_SHIFT 1 348*64da4a85SKever Yang #define PGCR_ITMDMD_SHIFT 0 349*64da4a85SKever Yang 350*64da4a85SKever Yang /* PGSR */ 351*64da4a85SKever Yang #define PGSR_IDONE (1 << 0) 352*64da4a85SKever Yang #define PGSR_DLDONE (1 << 1) 353*64da4a85SKever Yang #define PGSR_ZCDONE (1 << 2) 354*64da4a85SKever Yang #define PGSR_DIDONE (1 << 3) 355*64da4a85SKever Yang #define PGSR_DTDONE (1 << 4) 356*64da4a85SKever Yang #define PGSR_DTERR (1 << 5) 357*64da4a85SKever Yang #define PGSR_DTIERR (1 << 6) 358*64da4a85SKever Yang #define PGSR_DFTERR (1 << 7) 359*64da4a85SKever Yang #define PGSR_RVERR (1 << 8) 360*64da4a85SKever Yang #define PGSR_RVEIRR (1 << 9) 361*64da4a85SKever Yang 362*64da4a85SKever Yang /* PTR0 */ 363*64da4a85SKever Yang #define PRT_ITMSRST_SHIFT 18 364*64da4a85SKever Yang #define PRT_DLLLOCK_SHIFT 6 365*64da4a85SKever Yang #define PRT_DLLSRST_SHIFT 0 366*64da4a85SKever Yang 367*64da4a85SKever Yang /* PTR1 */ 368*64da4a85SKever Yang #define PRT_DINIT0_SHIFT 0 369*64da4a85SKever Yang #define PRT_DINIT1_SHIFT 19 370*64da4a85SKever Yang 371*64da4a85SKever Yang /* PTR2 */ 372*64da4a85SKever Yang #define PRT_DINIT2_SHIFT 0 373*64da4a85SKever Yang #define PRT_DINIT3_SHIFT 17 374*64da4a85SKever Yang 375*64da4a85SKever Yang /* DCR */ 376*64da4a85SKever Yang #define DDRMD_LPDDR 0 377*64da4a85SKever Yang #define DDRMD_DDR 1 378*64da4a85SKever Yang #define DDRMD_DDR2 2 379*64da4a85SKever Yang #define DDRMD_DDR3 3 380*64da4a85SKever Yang #define DDRMD_LPDDR2_LPDDR3 4 381*64da4a85SKever Yang #define DDRMD_MASK 7 382*64da4a85SKever Yang #define DDRMD_SHIFT 0 383*64da4a85SKever Yang #define PDQ_MASK 7 384*64da4a85SKever Yang #define PDQ_SHIFT 4 385*64da4a85SKever Yang 386*64da4a85SKever Yang /* DXCCR */ 387*64da4a85SKever Yang #define DQSNRES_MASK 0xf 388*64da4a85SKever Yang #define DQSNRES_SHIFT 8 389*64da4a85SKever Yang #define DQSRES_MASK 0xf 390*64da4a85SKever Yang #define DQSRES_SHIFT 4 391*64da4a85SKever Yang 392*64da4a85SKever Yang /* DTPR */ 393*64da4a85SKever Yang #define TDQSCKMAX_SHIFT 27 394*64da4a85SKever Yang #define TDQSCKMAX_MASK 7 395*64da4a85SKever Yang #define TDQSCK_SHIFT 24 396*64da4a85SKever Yang #define TDQSCK_MASK 7 397*64da4a85SKever Yang 398*64da4a85SKever Yang /* DSGCR */ 399*64da4a85SKever Yang #define DQSGX_SHIFT 5 400*64da4a85SKever Yang #define DQSGX_MASK 7 401*64da4a85SKever Yang #define DQSGE_SHIFT 8 402*64da4a85SKever Yang #define DQSGE_MASK 7 403*64da4a85SKever Yang 404*64da4a85SKever Yang /* SCTL */ 405*64da4a85SKever Yang #define INIT_STATE 0 406*64da4a85SKever Yang #define CFG_STATE 1 407*64da4a85SKever Yang #define GO_STATE 2 408*64da4a85SKever Yang #define SLEEP_STATE 3 409*64da4a85SKever Yang #define WAKEUP_STATE 4 410*64da4a85SKever Yang 411*64da4a85SKever Yang /* STAT */ 412*64da4a85SKever Yang #define LP_TRIG_SHIFT 4 413*64da4a85SKever Yang #define LP_TRIG_MASK 7 414*64da4a85SKever Yang #define PCTL_STAT_MASK 7 415*64da4a85SKever Yang #define INIT_MEM 0 416*64da4a85SKever Yang #define CONFIG 1 417*64da4a85SKever Yang #define CONFIG_REQ 2 418*64da4a85SKever Yang #define ACCESS 3 419*64da4a85SKever Yang #define ACCESS_REQ 4 420*64da4a85SKever Yang #define LOW_POWER 5 421*64da4a85SKever Yang #define LOW_POWER_ENTRY_REQ 6 422*64da4a85SKever Yang #define LOW_POWER_EXIT_REQ 7 423*64da4a85SKever Yang 424*64da4a85SKever Yang /* ZQCR*/ 425*64da4a85SKever Yang #define PD_OUTPUT_SHIFT 0 426*64da4a85SKever Yang #define PU_OUTPUT_SHIFT 5 427*64da4a85SKever Yang #define PD_ONDIE_SHIFT 10 428*64da4a85SKever Yang #define PU_ONDIE_SHIFT 15 429*64da4a85SKever Yang #define ZDEN_SHIFT 28 430*64da4a85SKever Yang 431*64da4a85SKever Yang /* DDLGCR */ 432*64da4a85SKever Yang #define SBIAS_BYPASS (1 << 23) 433*64da4a85SKever Yang 434*64da4a85SKever Yang /* MCFG */ 435*64da4a85SKever Yang #define MDDR_LPDDR2_CLK_STOP_IDLE_SHIFT 24 436*64da4a85SKever Yang #define PD_IDLE_SHIFT 8 437*64da4a85SKever Yang #define MDDR_EN (2 << 22) 438*64da4a85SKever Yang #define LPDDR2_EN (3 << 22) 439*64da4a85SKever Yang #define LPDDR3_EN (1 << 22) 440*64da4a85SKever Yang #define DDR2_EN (0 << 5) 441*64da4a85SKever Yang #define DDR3_EN (1 << 5) 442*64da4a85SKever Yang #define LPDDR2_S2 (0 << 6) 443*64da4a85SKever Yang #define LPDDR2_S4 (1 << 6) 444*64da4a85SKever Yang #define MDDR_LPDDR2_BL_2 (0 << 20) 445*64da4a85SKever Yang #define MDDR_LPDDR2_BL_4 (1 << 20) 446*64da4a85SKever Yang #define MDDR_LPDDR2_BL_8 (2 << 20) 447*64da4a85SKever Yang #define MDDR_LPDDR2_BL_16 (3 << 20) 448*64da4a85SKever Yang #define DDR2_DDR3_BL_4 0 449*64da4a85SKever Yang #define DDR2_DDR3_BL_8 1 450*64da4a85SKever Yang #define TFAW_SHIFT 18 451*64da4a85SKever Yang #define PD_EXIT_SLOW (0 << 17) 452*64da4a85SKever Yang #define PD_EXIT_FAST (1 << 17) 453*64da4a85SKever Yang #define PD_TYPE_SHIFT 16 454*64da4a85SKever Yang #define BURSTLENGTH_SHIFT 20 455*64da4a85SKever Yang 456*64da4a85SKever Yang /* POWCTL */ 457*64da4a85SKever Yang #define POWER_UP_START (1 << 0) 458*64da4a85SKever Yang 459*64da4a85SKever Yang /* POWSTAT */ 460*64da4a85SKever Yang #define POWER_UP_DONE (1 << 0) 461*64da4a85SKever Yang 462*64da4a85SKever Yang /* MCMD */ 463*64da4a85SKever Yang enum { 464*64da4a85SKever Yang DESELECT_CMD = 0, 465*64da4a85SKever Yang PREA_CMD, 466*64da4a85SKever Yang REF_CMD, 467*64da4a85SKever Yang MRS_CMD, 468*64da4a85SKever Yang ZQCS_CMD, 469*64da4a85SKever Yang ZQCL_CMD, 470*64da4a85SKever Yang RSTL_CMD, 471*64da4a85SKever Yang MRR_CMD = 8, 472*64da4a85SKever Yang DPDE_CMD, 473*64da4a85SKever Yang }; 474*64da4a85SKever Yang 475*64da4a85SKever Yang #define BANK_ADDR_MASK 7 476*64da4a85SKever Yang #define BANK_ADDR_SHIFT 17 477*64da4a85SKever Yang #define CMD_ADDR_MASK 0x1fff 478*64da4a85SKever Yang #define CMD_ADDR_SHIFT 4 479*64da4a85SKever Yang 480*64da4a85SKever Yang #define LPDDR23_MA_SHIFT 4 481*64da4a85SKever Yang #define LPDDR23_MA_MASK 0xff 482*64da4a85SKever Yang #define LPDDR23_OP_SHIFT 12 483*64da4a85SKever Yang #define LPDDR23_OP_MASK 0xff 484*64da4a85SKever Yang 485*64da4a85SKever Yang #define START_CMD (1u << 31) 486*64da4a85SKever Yang 487*64da4a85SKever Yang /* DDRPHY REG */ 488*64da4a85SKever Yang enum { 489*64da4a85SKever Yang /* DDRPHY_REG0 */ 490*64da4a85SKever Yang SOFT_RESET_MASK = 3, 491*64da4a85SKever Yang SOFT_DERESET_ANALOG = 1 << 2, 492*64da4a85SKever Yang SOFT_DERESET_DIGITAL = 1 << 3, 493*64da4a85SKever Yang SOFT_RESET_SHIFT = 2, 494*64da4a85SKever Yang 495*64da4a85SKever Yang /* DDRPHY REG1 */ 496*64da4a85SKever Yang PHY_DDR3 = 0, 497*64da4a85SKever Yang PHY_DDR2 = 1, 498*64da4a85SKever Yang PHY_LPDDR3 = 2, 499*64da4a85SKever Yang PHY_LPDDR2 = 3, 500*64da4a85SKever Yang 501*64da4a85SKever Yang PHT_BL_8 = 1 << 2, 502*64da4a85SKever Yang PHY_BL_4 = 0 << 2, 503*64da4a85SKever Yang 504*64da4a85SKever Yang /* DDRPHY_REG2 */ 505*64da4a85SKever Yang MEMORY_SELECT_DDR3 = 0 << 0, 506*64da4a85SKever Yang MEMORY_SELECT_LPDDR3 = 2 << 0, 507*64da4a85SKever Yang MEMORY_SELECT_LPDDR2 = 3 << 0, 508*64da4a85SKever Yang DQS_SQU_CAL_SEL_CS0_CS1 = 0 << 4, 509*64da4a85SKever Yang DQS_SQU_CAL_SEL_CS1 = 1 << 4, 510*64da4a85SKever Yang DQS_SQU_CAL_SEL_CS0 = 2 << 4, 511*64da4a85SKever Yang DQS_SQU_CAL_NORMAL_MODE = 0 << 1, 512*64da4a85SKever Yang DQS_SQU_CAL_BYPASS_MODE = 1 << 1, 513*64da4a85SKever Yang DQS_SQU_CAL_START = 1 << 0, 514*64da4a85SKever Yang DQS_SQU_NO_CAL = 0 << 0, 515*64da4a85SKever Yang }; 516*64da4a85SKever Yang 517*64da4a85SKever Yang /* CK pull up/down driver strength control */ 518*64da4a85SKever Yang enum { 519*64da4a85SKever Yang PHY_RON_RTT_DISABLE = 0, 520*64da4a85SKever Yang PHY_RON_RTT_451OHM = 1, 521*64da4a85SKever Yang PHY_RON_RTT_225OHM, 522*64da4a85SKever Yang PHY_RON_RTT_150OHM, 523*64da4a85SKever Yang PHY_RON_RTT_112OHM, 524*64da4a85SKever Yang PHY_RON_RTT_90OHM, 525*64da4a85SKever Yang PHY_RON_RTT_75OHM, 526*64da4a85SKever Yang PHY_RON_RTT_64OHM = 7, 527*64da4a85SKever Yang 528*64da4a85SKever Yang PHY_RON_RTT_56OHM = 16, 529*64da4a85SKever Yang PHY_RON_RTT_50OHM, 530*64da4a85SKever Yang PHY_RON_RTT_45OHM, 531*64da4a85SKever Yang PHY_RON_RTT_41OHM, 532*64da4a85SKever Yang PHY_RON_RTT_37OHM, 533*64da4a85SKever Yang PHY_RON_RTT_34OHM, 534*64da4a85SKever Yang PHY_RON_RTT_33OHM, 535*64da4a85SKever Yang PHY_RON_RTT_30OHM = 23, 536*64da4a85SKever Yang 537*64da4a85SKever Yang PHY_RON_RTT_28OHM = 24, 538*64da4a85SKever Yang PHY_RON_RTT_26OHM, 539*64da4a85SKever Yang PHY_RON_RTT_25OHM, 540*64da4a85SKever Yang PHY_RON_RTT_23OHM, 541*64da4a85SKever Yang PHY_RON_RTT_22OHM, 542*64da4a85SKever Yang PHY_RON_RTT_21OHM, 543*64da4a85SKever Yang PHY_RON_RTT_20OHM, 544*64da4a85SKever Yang PHY_RON_RTT_19OHM = 31, 545*64da4a85SKever Yang }; 546*64da4a85SKever Yang 547*64da4a85SKever Yang /* DQS squelch DLL delay */ 548*64da4a85SKever Yang enum { 549*64da4a85SKever Yang DQS_DLL_NO_DELAY = 0, 550*64da4a85SKever Yang DQS_DLL_22P5_DELAY, 551*64da4a85SKever Yang DQS_DLL_45_DELAY, 552*64da4a85SKever Yang DQS_DLL_67P5_DELAY, 553*64da4a85SKever Yang DQS_DLL_90_DELAY, 554*64da4a85SKever Yang DQS_DLL_112P5_DELAY, 555*64da4a85SKever Yang DQS_DLL_135_DELAY, 556*64da4a85SKever Yang DQS_DLL_157P5_DELAY, 557*64da4a85SKever Yang }; 558*64da4a85SKever Yang 559*64da4a85SKever Yang /* GRF_SOC_CON0 */ 560*64da4a85SKever Yang #define GRF_DDR_16BIT_EN (((0x1 << 0) << 16) | (0x1 << 0)) 561*64da4a85SKever Yang #define GRF_DDR_32BIT_EN (((0x1 << 0) << 16) | (0x0 << 0)) 562*64da4a85SKever Yang #define GRF_MSCH_NOC_16BIT_EN (((0x1 << 7) << 16) | (0x1 << 7)) 563*64da4a85SKever Yang #define GRF_MSCH_NOC_32BIT_EN (((0x1 << 7) << 16) | (0x0 << 7)) 564*64da4a85SKever Yang 565*64da4a85SKever Yang #define GRF_DDRPHY_BUFFEREN_CORE_EN (((0x1 << 8) << 16) | (0x0 << 8)) 566*64da4a85SKever Yang #define GRF_DDRPHY_BUFFEREN_CORE_DIS (((0x1 << 8) << 16) | (0x1 << 8)) 567*64da4a85SKever Yang 568*64da4a85SKever Yang #define GRF_DDR3_EN (((0x1 << 6) << 16) | (0x1 << 6)) 569*64da4a85SKever Yang #define GRF_LPDDR2_3_EN (((0x1 << 6) << 16) | (0x0 << 6)) 570*64da4a85SKever Yang 571*64da4a85SKever Yang #define PHY_DRV_ODT_SET(n) (((n) << 4) | (n)) 572*64da4a85SKever Yang #define DDR3_DLL_RESET (1 << 8) 573*64da4a85SKever Yang 574*64da4a85SKever Yang #endif /* _ASM_ARCH_SDRAM_RK322X_H */ 575