blob: 5de3220d6f19a8d80be61063cd6fddca61c908ac [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* (C) Copyright 2015 Rockchip Electronics Co., Ltd
*/
#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