1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef __ASM_ARCH_DDR_RK3368_H__ 8*4882a593Smuzhiyun #define __ASM_ARCH_DDR_RK3368_H__ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun /* 11*4882a593Smuzhiyun * The RK3368 DDR PCTL differs from the incarnation in the RK3288 only 12*4882a593Smuzhiyun * in a few details. Most notably, it has an additional field to track 13*4882a593Smuzhiyun * tREFI in controller cycles (i.e. trefi_mem_ddr3). 14*4882a593Smuzhiyun */ 15*4882a593Smuzhiyun struct rk3368_ddr_pctl { 16*4882a593Smuzhiyun u32 scfg; 17*4882a593Smuzhiyun u32 sctl; 18*4882a593Smuzhiyun u32 stat; 19*4882a593Smuzhiyun u32 intrstat; 20*4882a593Smuzhiyun u32 reserved0[12]; 21*4882a593Smuzhiyun u32 mcmd; 22*4882a593Smuzhiyun u32 powctl; 23*4882a593Smuzhiyun u32 powstat; 24*4882a593Smuzhiyun u32 cmdtstat; 25*4882a593Smuzhiyun u32 cmdtstaten; 26*4882a593Smuzhiyun u32 reserved1[3]; 27*4882a593Smuzhiyun u32 mrrcfg0; 28*4882a593Smuzhiyun u32 mrrstat0; 29*4882a593Smuzhiyun u32 mrrstat1; 30*4882a593Smuzhiyun u32 reserved2[4]; 31*4882a593Smuzhiyun u32 mcfg1; 32*4882a593Smuzhiyun u32 mcfg; 33*4882a593Smuzhiyun u32 ppcfg; 34*4882a593Smuzhiyun u32 mstat; 35*4882a593Smuzhiyun u32 lpddr2zqcfg; 36*4882a593Smuzhiyun u32 reserved3; 37*4882a593Smuzhiyun u32 dtupdes; 38*4882a593Smuzhiyun u32 dtuna; 39*4882a593Smuzhiyun u32 dtune; 40*4882a593Smuzhiyun u32 dtuprd0; 41*4882a593Smuzhiyun u32 dtuprd1; 42*4882a593Smuzhiyun u32 dtuprd2; 43*4882a593Smuzhiyun u32 dtuprd3; 44*4882a593Smuzhiyun u32 dtuawdt; 45*4882a593Smuzhiyun u32 reserved4[3]; 46*4882a593Smuzhiyun u32 togcnt1u; 47*4882a593Smuzhiyun u32 tinit; 48*4882a593Smuzhiyun u32 trsth; 49*4882a593Smuzhiyun u32 togcnt100n; 50*4882a593Smuzhiyun u32 trefi; 51*4882a593Smuzhiyun u32 tmrd; 52*4882a593Smuzhiyun u32 trfc; 53*4882a593Smuzhiyun u32 trp; 54*4882a593Smuzhiyun u32 trtw; 55*4882a593Smuzhiyun u32 tal; 56*4882a593Smuzhiyun u32 tcl; 57*4882a593Smuzhiyun u32 tcwl; 58*4882a593Smuzhiyun u32 tras; 59*4882a593Smuzhiyun u32 trc; 60*4882a593Smuzhiyun u32 trcd; 61*4882a593Smuzhiyun u32 trrd; 62*4882a593Smuzhiyun u32 trtp; 63*4882a593Smuzhiyun u32 twr; 64*4882a593Smuzhiyun u32 twtr; 65*4882a593Smuzhiyun u32 texsr; 66*4882a593Smuzhiyun u32 txp; 67*4882a593Smuzhiyun u32 txpdll; 68*4882a593Smuzhiyun u32 tzqcs; 69*4882a593Smuzhiyun u32 tzqcsi; 70*4882a593Smuzhiyun u32 tdqs; 71*4882a593Smuzhiyun u32 tcksre; 72*4882a593Smuzhiyun u32 tcksrx; 73*4882a593Smuzhiyun u32 tcke; 74*4882a593Smuzhiyun u32 tmod; 75*4882a593Smuzhiyun u32 trstl; 76*4882a593Smuzhiyun u32 tzqcl; 77*4882a593Smuzhiyun u32 tmrr; 78*4882a593Smuzhiyun u32 tckesr; 79*4882a593Smuzhiyun u32 tdpd; 80*4882a593Smuzhiyun u32 trefi_mem_ddr3; 81*4882a593Smuzhiyun u32 reserved5[45]; 82*4882a593Smuzhiyun u32 dtuwactl; 83*4882a593Smuzhiyun u32 dturactl; 84*4882a593Smuzhiyun u32 dtucfg; 85*4882a593Smuzhiyun u32 dtuectl; 86*4882a593Smuzhiyun u32 dtuwd0; 87*4882a593Smuzhiyun u32 dtuwd1; 88*4882a593Smuzhiyun u32 dtuwd2; 89*4882a593Smuzhiyun u32 dtuwd3; 90*4882a593Smuzhiyun u32 dtuwdm; 91*4882a593Smuzhiyun u32 dturd0; 92*4882a593Smuzhiyun u32 dturd1; 93*4882a593Smuzhiyun u32 dturd2; 94*4882a593Smuzhiyun u32 dturd3; 95*4882a593Smuzhiyun u32 dtulfsrwd; 96*4882a593Smuzhiyun u32 dtulfsrrd; 97*4882a593Smuzhiyun u32 dtueaf; 98*4882a593Smuzhiyun u32 dfitctrldelay; 99*4882a593Smuzhiyun u32 dfiodtcfg; 100*4882a593Smuzhiyun u32 dfiodtcfg1; 101*4882a593Smuzhiyun u32 dfiodtrankmap; 102*4882a593Smuzhiyun u32 dfitphywrdata; 103*4882a593Smuzhiyun u32 dfitphywrlat; 104*4882a593Smuzhiyun u32 reserved7[2]; 105*4882a593Smuzhiyun u32 dfitrddataen; 106*4882a593Smuzhiyun u32 dfitphyrdlat; 107*4882a593Smuzhiyun u32 reserved8[2]; 108*4882a593Smuzhiyun u32 dfitphyupdtype0; 109*4882a593Smuzhiyun u32 dfitphyupdtype1; 110*4882a593Smuzhiyun u32 dfitphyupdtype2; 111*4882a593Smuzhiyun u32 dfitphyupdtype3; 112*4882a593Smuzhiyun u32 dfitctrlupdmin; 113*4882a593Smuzhiyun u32 dfitctrlupdmax; 114*4882a593Smuzhiyun u32 dfitctrlupddly; 115*4882a593Smuzhiyun u32 reserved9; 116*4882a593Smuzhiyun u32 dfiupdcfg; 117*4882a593Smuzhiyun u32 dfitrefmski; 118*4882a593Smuzhiyun u32 dfitctrlupdi; 119*4882a593Smuzhiyun u32 reserved10[4]; 120*4882a593Smuzhiyun u32 dfitrcfg0; 121*4882a593Smuzhiyun u32 dfitrstat0; 122*4882a593Smuzhiyun u32 dfitrwrlvlen; 123*4882a593Smuzhiyun u32 dfitrrdlvlen; 124*4882a593Smuzhiyun u32 dfitrrdlvlgateen; 125*4882a593Smuzhiyun u32 dfiststat0; 126*4882a593Smuzhiyun u32 dfistcfg0; 127*4882a593Smuzhiyun u32 dfistcfg1; 128*4882a593Smuzhiyun u32 reserved11; 129*4882a593Smuzhiyun u32 dfitdramclken; 130*4882a593Smuzhiyun u32 dfitdramclkdis; 131*4882a593Smuzhiyun u32 dfistcfg2; 132*4882a593Smuzhiyun u32 dfistparclr; 133*4882a593Smuzhiyun u32 dfistparlog; 134*4882a593Smuzhiyun u32 reserved12[3]; 135*4882a593Smuzhiyun u32 dfilpcfg0; 136*4882a593Smuzhiyun u32 reserved13[3]; 137*4882a593Smuzhiyun u32 dfitrwrlvlresp0; 138*4882a593Smuzhiyun u32 dfitrwrlvlresp1; 139*4882a593Smuzhiyun u32 dfitrwrlvlresp2; 140*4882a593Smuzhiyun u32 dfitrrdlvlresp0; 141*4882a593Smuzhiyun u32 dfitrrdlvlresp1; 142*4882a593Smuzhiyun u32 dfitrrdlvlresp2; 143*4882a593Smuzhiyun u32 dfitrwrlvldelay0; 144*4882a593Smuzhiyun u32 dfitrwrlvldelay1; 145*4882a593Smuzhiyun u32 dfitrwrlvldelay2; 146*4882a593Smuzhiyun u32 dfitrrdlvldelay0; 147*4882a593Smuzhiyun u32 dfitrrdlvldelay1; 148*4882a593Smuzhiyun u32 dfitrrdlvldelay2; 149*4882a593Smuzhiyun u32 dfitrrdlvlgatedelay0; 150*4882a593Smuzhiyun u32 dfitrrdlvlgatedelay1; 151*4882a593Smuzhiyun u32 dfitrrdlvlgatedelay2; 152*4882a593Smuzhiyun u32 dfitrcmd; 153*4882a593Smuzhiyun u32 reserved14[46]; 154*4882a593Smuzhiyun u32 ipvr; 155*4882a593Smuzhiyun u32 iptr; 156*4882a593Smuzhiyun }; 157*4882a593Smuzhiyun check_member(rk3368_ddr_pctl, iptr, 0x03fc); 158*4882a593Smuzhiyun 159*4882a593Smuzhiyun struct rk3368_ddrphy { 160*4882a593Smuzhiyun u32 reg[0x100]; 161*4882a593Smuzhiyun }; 162*4882a593Smuzhiyun check_member(rk3368_ddrphy, reg[0xff], 0x03fc); 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun struct rk3368_msch { 165*4882a593Smuzhiyun u32 coreid; 166*4882a593Smuzhiyun u32 revisionid; 167*4882a593Smuzhiyun u32 ddrconf; 168*4882a593Smuzhiyun u32 ddrtiming; 169*4882a593Smuzhiyun u32 ddrmode; 170*4882a593Smuzhiyun u32 readlatency; 171*4882a593Smuzhiyun u32 reserved1[8]; 172*4882a593Smuzhiyun u32 activate; 173*4882a593Smuzhiyun u32 devtodev; 174*4882a593Smuzhiyun }; 175*4882a593Smuzhiyun check_member(rk3368_msch, devtodev, 0x003c); 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun /* GRF_SOC_CON0 */ 178*4882a593Smuzhiyun enum { 179*4882a593Smuzhiyun NOC_RSP_ERR_STALL = BIT(9), 180*4882a593Smuzhiyun MOBILE_DDR_SEL = BIT(4), 181*4882a593Smuzhiyun DDR0_16BIT_EN = BIT(3), 182*4882a593Smuzhiyun MSCH0_MAINDDR3_DDR3 = BIT(2), 183*4882a593Smuzhiyun MSCH0_MAINPARTIALPOP = BIT(1), 184*4882a593Smuzhiyun UPCTL_C_ACTIVE = BIT(0), 185*4882a593Smuzhiyun }; 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun #endif 188