/*
 * (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
