mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-03 18:10:13 +00:00
53c45f0ca2
add rk3036 sdram driver so we can set up sdram in SPL Signed-off-by: Lin Huang <hl@rock-chips.com> Acked-by: Simon Glass <sjg@chromium.org>
341 lines
5.4 KiB
C
341 lines
5.4 KiB
C
/*
|
|
* (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
|