| /* |
| * (C) Copyright 2015 Rockchip Electronics Co., Ltd |
| * |
| * SPDX-License-Identifier: GPL-2.0+ |
| */ |
| #ifndef _ASM_ARCH_SDRAM_RK3036_H |
| #define _ASM_ARCH_SDRAM_RK3036_H |
| |
| #include <common.h> |
| |
| struct rk3036_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 reserved5[47]; |
| 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(rk3036_ddr_pctl, iptr, 0x03fc); |
| |
| struct rk3036_ddr_phy { |
| u32 ddrphy_reg1; |
| u32 ddrphy_reg3; |
| u32 ddrphy_reg2; |
| u32 reserve[11]; |
| u32 ddrphy_reg4a; |
| u32 ddrphy_reg4b; |
| u32 reserve1[5]; |
| u32 ddrphy_reg16; |
| u32 reserve2; |
| u32 ddrphy_reg18; |
| u32 ddrphy_reg19; |
| u32 reserve3; |
| u32 ddrphy_reg21; |
| u32 reserve4; |
| u32 ddrphy_reg22; |
| u32 reserve5[3]; |
| u32 ddrphy_reg25; |
| u32 ddrphy_reg26; |
| u32 ddrphy_reg27; |
| u32 ddrphy_reg28; |
| u32 reserve6[17]; |
| u32 ddrphy_reg6; |
| u32 ddrphy_reg7; |
| u32 reserve7; |
| u32 ddrphy_reg8; |
| u32 ddrphy_reg0e4; |
| u32 reserve8[11]; |
| u32 ddrphy_reg9; |
| u32 ddrphy_reg10; |
| u32 reserve9; |
| u32 ddrphy_reg11; |
| u32 ddrphy_reg124; |
| u32 reserve10[38]; |
| u32 ddrphy_reg29; |
| u32 reserve11[40]; |
| u32 ddrphy_reg264; |
| u32 reserve12[18]; |
| u32 ddrphy_reg2a; |
| u32 reserve13[4]; |
| u32 ddrphy_reg30; |
| u32 ddrphy_reg31; |
| u32 ddrphy_reg32; |
| u32 ddrphy_reg33; |
| u32 ddrphy_reg34; |
| u32 ddrphy_reg35; |
| u32 ddrphy_reg36; |
| u32 ddrphy_reg37; |
| u32 ddrphy_reg38; |
| u32 ddrphy_reg39; |
| u32 ddrphy_reg40; |
| u32 ddrphy_reg41; |
| u32 ddrphy_reg42; |
| u32 ddrphy_reg43; |
| u32 ddrphy_reg44; |
| u32 ddrphy_reg45; |
| u32 ddrphy_reg46; |
| u32 ddrphy_reg47; |
| u32 ddrphy_reg48; |
| u32 ddrphy_reg49; |
| u32 ddrphy_reg50; |
| u32 ddrphy_reg51; |
| u32 ddrphy_reg52; |
| u32 ddrphy_reg53; |
| u32 reserve14; |
| u32 ddrphy_reg54; |
| u32 ddrphy_reg55; |
| u32 ddrphy_reg56; |
| u32 ddrphy_reg57; |
| u32 ddrphy_reg58; |
| u32 ddrphy_reg59; |
| u32 ddrphy_reg5a; |
| u32 ddrphy_reg5b; |
| u32 ddrphy_reg5c; |
| u32 ddrphy_reg5d; |
| u32 ddrphy_reg5e; |
| u32 reserve15[28]; |
| u32 ddrphy_reg5f; |
| u32 reserve16[6]; |
| u32 ddrphy_reg60; |
| u32 ddrphy_reg61; |
| u32 ddrphy_reg62; |
| }; |
| check_member(rk3036_ddr_phy, ddrphy_reg62, 0x03e8); |
| |
| struct rk3036_pctl_timing { |
| 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; |
| }; |
| |
| struct rk3036_phy_timing { |
| u32 mr[4]; |
| u32 bl; |
| u32 cl_al; |
| }; |
| |
| typedef union { |
| u32 noc_timing; |
| struct { |
| u32 acttoact:6; |
| u32 rdtomiss:6; |
| u32 wrtomiss:6; |
| u32 burstlen:3; |
| u32 rdtowr:5; |
| u32 wrtord:5; |
| u32 bwratio:1; |
| }; |
| } rk3036_noc_timing; |
| |
| struct rk3036_ddr_timing { |
| u32 freq; |
| struct rk3036_pctl_timing pctl_timing; |
| struct rk3036_phy_timing phy_timing; |
| rk3036_noc_timing noc_timing; |
| }; |
| |
| struct rk3036_service_sys { |
| u32 id_coreid; |
| u32 id_revisionid; |
| u32 ddrconf; |
| u32 ddrtiming; |
| u32 ddrmode; |
| u32 readlatency; |
| }; |
| |
| struct rk3036_ddr_config { |
| /* |
| * 000: lpddr |
| * 001: ddr |
| * 010: ddr2 |
| * 011: ddr3 |
| * 100: lpddr2-s2 |
| * 101: lpddr2-s4 |
| * 110: lpddr3 |
| */ |
| u32 ddr_type; |
| u32 rank; |
| u32 cs0_row; |
| u32 cs1_row; |
| |
| /* 2: 4bank, 3: 8bank */ |
| u32 bank; |
| u32 col; |
| |
| /* bw(0: 8bit, 1: 16bit, 2: 32bit) */ |
| u32 bw; |
| }; |
| |
| /* rk3036 sdram initial */ |
| void sdram_init(void); |
| |
| /* get ddr die config, implement in specific board */ |
| void get_ddr_config(struct rk3036_ddr_config *config); |
| |
| /* get ddr size on board */ |
| size_t sdram_size(void); |
| #endif |