/* SPDX-License-Identifier: GPL-2.0 */ | |
/* | |
* (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH | |
*/ | |
#ifndef __ASM_ARCH_DDR_RK3368_H__ | |
#define __ASM_ARCH_DDR_RK3368_H__ | |
/* | |
* The RK3368 DDR PCTL differs from the incarnation in the RK3288 only | |
* in a few details. Most notably, it has an additional field to track | |
* tREFI in controller cycles (i.e. trefi_mem_ddr3). | |
*/ | |
struct rk3368_ddr_pctl { | |
u32 scfg; | |
u32 sctl; | |
u32 stat; | |
u32 intrstat; | |
u32 reserved0[12]; | |
u32 mcmd; | |
u32 powctl; | |
u32 powstat; | |
u32 cmdtstat; | |
u32 cmdtstaten; | |
u32 reserved1[3]; | |
u32 mrrcfg0; | |
u32 mrrstat0; | |
u32 mrrstat1; | |
u32 reserved2[4]; | |
u32 mcfg1; | |
u32 mcfg; | |
u32 ppcfg; | |
u32 mstat; | |
u32 lpddr2zqcfg; | |
u32 reserved3; | |
u32 dtupdes; | |
u32 dtuna; | |
u32 dtune; | |
u32 dtuprd0; | |
u32 dtuprd1; | |
u32 dtuprd2; | |
u32 dtuprd3; | |
u32 dtuawdt; | |
u32 reserved4[3]; | |
u32 togcnt1u; | |
u32 tinit; | |
u32 trsth; | |
u32 togcnt100n; | |
u32 trefi; | |
u32 tmrd; | |
u32 trfc; | |
u32 trp; | |
u32 trtw; | |
u32 tal; | |
u32 tcl; | |
u32 tcwl; | |
u32 tras; | |
u32 trc; | |
u32 trcd; | |
u32 trrd; | |
u32 trtp; | |
u32 twr; | |
u32 twtr; | |
u32 texsr; | |
u32 txp; | |
u32 txpdll; | |
u32 tzqcs; | |
u32 tzqcsi; | |
u32 tdqs; | |
u32 tcksre; | |
u32 tcksrx; | |
u32 tcke; | |
u32 tmod; | |
u32 trstl; | |
u32 tzqcl; | |
u32 tmrr; | |
u32 tckesr; | |
u32 tdpd; | |
u32 trefi_mem_ddr3; | |
u32 reserved5[45]; | |
u32 dtuwactl; | |
u32 dturactl; | |
u32 dtucfg; | |
u32 dtuectl; | |
u32 dtuwd0; | |
u32 dtuwd1; | |
u32 dtuwd2; | |
u32 dtuwd3; | |
u32 dtuwdm; | |
u32 dturd0; | |
u32 dturd1; | |
u32 dturd2; | |
u32 dturd3; | |
u32 dtulfsrwd; | |
u32 dtulfsrrd; | |
u32 dtueaf; | |
u32 dfitctrldelay; | |
u32 dfiodtcfg; | |
u32 dfiodtcfg1; | |
u32 dfiodtrankmap; | |
u32 dfitphywrdata; | |
u32 dfitphywrlat; | |
u32 reserved7[2]; | |
u32 dfitrddataen; | |
u32 dfitphyrdlat; | |
u32 reserved8[2]; | |
u32 dfitphyupdtype0; | |
u32 dfitphyupdtype1; | |
u32 dfitphyupdtype2; | |
u32 dfitphyupdtype3; | |
u32 dfitctrlupdmin; | |
u32 dfitctrlupdmax; | |
u32 dfitctrlupddly; | |
u32 reserved9; | |
u32 dfiupdcfg; | |
u32 dfitrefmski; | |
u32 dfitctrlupdi; | |
u32 reserved10[4]; | |
u32 dfitrcfg0; | |
u32 dfitrstat0; | |
u32 dfitrwrlvlen; | |
u32 dfitrrdlvlen; | |
u32 dfitrrdlvlgateen; | |
u32 dfiststat0; | |
u32 dfistcfg0; | |
u32 dfistcfg1; | |
u32 reserved11; | |
u32 dfitdramclken; | |
u32 dfitdramclkdis; | |
u32 dfistcfg2; | |
u32 dfistparclr; | |
u32 dfistparlog; | |
u32 reserved12[3]; | |
u32 dfilpcfg0; | |
u32 reserved13[3]; | |
u32 dfitrwrlvlresp0; | |
u32 dfitrwrlvlresp1; | |
u32 dfitrwrlvlresp2; | |
u32 dfitrrdlvlresp0; | |
u32 dfitrrdlvlresp1; | |
u32 dfitrrdlvlresp2; | |
u32 dfitrwrlvldelay0; | |
u32 dfitrwrlvldelay1; | |
u32 dfitrwrlvldelay2; | |
u32 dfitrrdlvldelay0; | |
u32 dfitrrdlvldelay1; | |
u32 dfitrrdlvldelay2; | |
u32 dfitrrdlvlgatedelay0; | |
u32 dfitrrdlvlgatedelay1; | |
u32 dfitrrdlvlgatedelay2; | |
u32 dfitrcmd; | |
u32 reserved14[46]; | |
u32 ipvr; | |
u32 iptr; | |
}; | |
check_member(rk3368_ddr_pctl, iptr, 0x03fc); | |
struct rk3368_ddrphy { | |
u32 reg[0x100]; | |
}; | |
check_member(rk3368_ddrphy, reg[0xff], 0x03fc); | |
struct rk3368_msch { | |
u32 coreid; | |
u32 revisionid; | |
u32 ddrconf; | |
u32 ddrtiming; | |
u32 ddrmode; | |
u32 readlatency; | |
u32 reserved1[8]; | |
u32 activate; | |
u32 devtodev; | |
}; | |
check_member(rk3368_msch, devtodev, 0x003c); | |
/* GRF_SOC_CON0 */ | |
enum { | |
NOC_RSP_ERR_STALL = BIT(9), | |
MOBILE_DDR_SEL = BIT(4), | |
DDR0_16BIT_EN = BIT(3), | |
MSCH0_MAINDDR3_DDR3 = BIT(2), | |
MSCH0_MAINPARTIALPOP = BIT(1), | |
UPCTL_C_ACTIVE = BIT(0), | |
}; | |
#endif |