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