xref: /openbmc/u-boot/arch/arm/include/asm/arch-sunxi/dram_sun8i_a83t.h (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */
281f50d93Svishnupatekar /*
381f50d93Svishnupatekar  * Sun8i platform dram controller register and constant defines
481f50d93Svishnupatekar  *
581f50d93Svishnupatekar  * (C) Copyright 2007-2015 Allwinner Technology Co.
681f50d93Svishnupatekar  *                         Jerry Wang <wangflord@allwinnertech.com>
781f50d93Svishnupatekar  * (C) Copyright 2015      Vishnu Patekar <vishnupatekar0510@gmail.com>
881f50d93Svishnupatekar  * (C) Copyright 2014-2015 Hans de Goede <hdegoede@redhat.com>
981f50d93Svishnupatekar  */
1081f50d93Svishnupatekar 
1181f50d93Svishnupatekar #ifndef _SUNXI_DRAM_SUN8I_A83T_H
1281f50d93Svishnupatekar #define _SUNXI_DRAM_SUN8I_A83T_H
1381f50d93Svishnupatekar 
1481f50d93Svishnupatekar struct sunxi_mctl_com_reg {
1581f50d93Svishnupatekar 	u32 cr;			/* 0x00 */
1681f50d93Svishnupatekar 	u32 ccr;		/* 0x04 controller configuration register */
1781f50d93Svishnupatekar 	u32 dbgcr;		/* 0x08 */
1881f50d93Svishnupatekar 	u8 res0[0x4];		/* 0x0c */
1981f50d93Svishnupatekar 	u32 mcr0_0;		/* 0x10 */
2081f50d93Svishnupatekar 	u32 mcr1_0;		/* 0x14 */
2181f50d93Svishnupatekar 	u32 mcr0_1;		/* 0x18 */
2281f50d93Svishnupatekar 	u32 mcr1_1;		/* 0x1c */
2381f50d93Svishnupatekar 	u32 mcr0_2;		/* 0x20 */
2481f50d93Svishnupatekar 	u32 mcr1_2;		/* 0x24 */
2581f50d93Svishnupatekar 	u32 mcr0_3;		/* 0x28 */
2681f50d93Svishnupatekar 	u32 mcr1_3;		/* 0x2c */
2781f50d93Svishnupatekar 	u32 mcr0_4;		/* 0x30 */
2881f50d93Svishnupatekar 	u32 mcr1_4;		/* 0x34 */
2981f50d93Svishnupatekar 	u32 mcr0_5;		/* 0x38 */
3081f50d93Svishnupatekar 	u32 mcr1_5;		/* 0x3c */
3181f50d93Svishnupatekar 	u32 mcr0_6;		/* 0x40 */
3281f50d93Svishnupatekar 	u32 mcr1_6;		/* 0x44 */
3381f50d93Svishnupatekar 	u32 mcr0_7;		/* 0x48 */
3481f50d93Svishnupatekar 	u32 mcr1_7;		/* 0x4c */
3581f50d93Svishnupatekar 	u32 mcr0_8;		/* 0x50 */
3681f50d93Svishnupatekar 	u32 mcr1_8;		/* 0x54 */
3781f50d93Svishnupatekar 	u32 mcr0_9;		/* 0x58 */
3881f50d93Svishnupatekar 	u32 mcr1_9;		/* 0x5c */
3981f50d93Svishnupatekar 	u32 mcr0_10;		/* 0x60 */
4081f50d93Svishnupatekar 	u32 mcr1_10;		/* 0x64 */
4181f50d93Svishnupatekar 	u32 mcr0_11;		/* 0x68 */
4281f50d93Svishnupatekar 	u32 mcr1_11;		/* 0x6c */
4381f50d93Svishnupatekar 	u32 mcr0_12;		/* 0x70 */
4481f50d93Svishnupatekar 	u32 mcr1_12;		/* 0x74 */
4581f50d93Svishnupatekar 	u32 mcr0_13;		/* 0x78 */
4681f50d93Svishnupatekar 	u32 mcr1_13;		/* 0x7c */
4781f50d93Svishnupatekar 	u32 mcr0_14;		/* 0x80 */
4881f50d93Svishnupatekar 	u32 mcr1_14;		/* 0x84 */
4981f50d93Svishnupatekar 	u32 mcr0_15;		/* 0x88 */
5081f50d93Svishnupatekar 	u32 mcr1_15;		/* 0x8c */
5181f50d93Svishnupatekar 	u32 bwcr;		/* 0x90 */
5281f50d93Svishnupatekar 	u32 maer;		/* 0x94 */
5381f50d93Svishnupatekar 	u32 mapr;		/* 0x98 */
5481f50d93Svishnupatekar 	u32 mcgcr;		/* 0x9c */
5581f50d93Svishnupatekar 	u32 bwctr;		/* 0xa0 */
5681f50d93Svishnupatekar 	u8 res2[0x8];		/* 0xa4 */
5781f50d93Svishnupatekar 	u32 swoffr;		/* 0xac */
5881f50d93Svishnupatekar 	u8 res3[0x10];		/* 0xb0 */
5981f50d93Svishnupatekar 	u32 swonr;		/* 0xc0 */
6081f50d93Svishnupatekar 	u8 res4[0x3c];		/* 0xc4 */
6181f50d93Svishnupatekar 	u32 mdfscr;		/* 0x100 */
6281f50d93Svishnupatekar 	u32 mdfsmer;		/* 0x104 */
6381f50d93Svishnupatekar };
6481f50d93Svishnupatekar 
6581f50d93Svishnupatekar struct sunxi_mctl_ctl_reg {
6681f50d93Svishnupatekar 	u32 pir;		/* 0x00 */
6781f50d93Svishnupatekar 	u32 pwrctl;		/* 0x04 */
6881f50d93Svishnupatekar 	u32 mrctrl0;		/* 0x08 */
6981f50d93Svishnupatekar 	u32 clken;		/* 0x0c */
7081f50d93Svishnupatekar 	u32 pgsr0;		/* 0x10 */
7181f50d93Svishnupatekar 	u32 pgsr1;		/* 0x14 */
7281f50d93Svishnupatekar 	u32 statr;		/* 0x18 */
7381f50d93Svishnupatekar 	u8 res1[0x14];		/* 0x1c */
7481f50d93Svishnupatekar 	u32 mr0;		/* 0x30 */
7581f50d93Svishnupatekar 	u32 mr1;		/* 0x34 */
7681f50d93Svishnupatekar 	u32 mr2;		/* 0x38 */
7781f50d93Svishnupatekar 	u32 mr3;		/* 0x3c */
7881f50d93Svishnupatekar 	u32 pllgcr;		/* 0x40 */
7981f50d93Svishnupatekar 	u32 ptr0;		/* 0x44 */
8081f50d93Svishnupatekar 	u32 ptr1;		/* 0x48 */
8181f50d93Svishnupatekar 	u32 ptr2;		/* 0x4c */
8281f50d93Svishnupatekar 	u32 ptr3;		/* 0x50 */
8381f50d93Svishnupatekar 	u32 ptr4;		/* 0x54 */
8481f50d93Svishnupatekar 	u32 dramtmg0;		/* 0x58 dram timing parameters register 0 */
8581f50d93Svishnupatekar 	u32 dramtmg1;		/* 0x5c dram timing parameters register 1 */
8681f50d93Svishnupatekar 	u32 dramtmg2;		/* 0x60 dram timing parameters register 2 */
8781f50d93Svishnupatekar 	u32 dramtmg3;		/* 0x64 dram timing parameters register 3 */
8881f50d93Svishnupatekar 	u32 dramtmg4;		/* 0x68 dram timing parameters register 4 */
8981f50d93Svishnupatekar 	u32 dramtmg5;		/* 0x6c dram timing parameters register 5 */
9081f50d93Svishnupatekar 	u32 dramtmg6;		/* 0x70 dram timing parameters register 6 */
9181f50d93Svishnupatekar 	u32 dramtmg7;		/* 0x74 dram timing parameters register 7 */
9281f50d93Svishnupatekar 	u32 dramtmg8;		/* 0x78 dram timing parameters register 8 */
9381f50d93Svishnupatekar 	u32 odtcfg;		/* 0x7c */
9481f50d93Svishnupatekar 	u32 pitmg0;		/* 0x80 */
9581f50d93Svishnupatekar 	u32 pitmg1;		/* 0x84 */
9681f50d93Svishnupatekar 	u8 res2[0x4];		/* 0x88 */
9781f50d93Svishnupatekar 	u32 rfshctl0;		/* 0x8c */
9881f50d93Svishnupatekar 	u32 rfshtmg;		/* 0x90 */
9981f50d93Svishnupatekar 	u32 rfshctl1;		/* 0x94 */
10081f50d93Svishnupatekar 	u32 pwrtmg;		/* 0x98 */
10181f50d93Svishnupatekar 	u8  res3[0x20];		/* 0x9c */
10281f50d93Svishnupatekar 	u32 dqsgmr;		/* 0xbc */
10381f50d93Svishnupatekar 	u32 dtcr;		/* 0xc0 */
10481f50d93Svishnupatekar 	u32 dtar0;		/* 0xc4 */
10581f50d93Svishnupatekar 	u32 dtar1;		/* 0xc8 */
10681f50d93Svishnupatekar 	u32 dtar2;		/* 0xcc */
10781f50d93Svishnupatekar 	u32 dtar3;		/* 0xd0 */
10881f50d93Svishnupatekar 	u32 dtdr0;		/* 0xd4 */
10981f50d93Svishnupatekar 	u32 dtdr1;		/* 0xd8 */
11081f50d93Svishnupatekar 	u32 dtmr0;		/* 0xdc */
11181f50d93Svishnupatekar 	u32 dtmr1;		/* 0xe0 */
11281f50d93Svishnupatekar 	u32 dtbmr;		/* 0xe4 */
11381f50d93Svishnupatekar 	u32 catr0;		/* 0xe8 */
11481f50d93Svishnupatekar 	u32 catr1;		/* 0xec */
11581f50d93Svishnupatekar 	u32 dtedr0;		/* 0xf0 */
11681f50d93Svishnupatekar 	u32 dtedr1;		/* 0xf4 */
11781f50d93Svishnupatekar 	u8 res4[0x8];		/* 0xf8 */
11881f50d93Svishnupatekar 	u32 pgcr0;		/* 0x100 */
11981f50d93Svishnupatekar 	u32 pgcr1;		/* 0x104 */
12081f50d93Svishnupatekar 	u32 pgcr2;		/* 0x108 */
12181f50d93Svishnupatekar 	u32 pgcr3;		/* 0x10c */
12281f50d93Svishnupatekar 	u32 iovcr0;		/* 0x110 */
12381f50d93Svishnupatekar 	u32 iovcr1;		/* 0x114 */
12481f50d93Svishnupatekar 	u32 dqsdr;		/* 0x118 */
12581f50d93Svishnupatekar 	u32 dxccr;		/* 0x11c */
12681f50d93Svishnupatekar 	u32 odtmap;		/* 0x120 */
12781f50d93Svishnupatekar 	u32 zqctl0;		/* 0x124 */
12881f50d93Svishnupatekar 	u32 zqctl1;		/* 0x128 */
12981f50d93Svishnupatekar 	u8 res6[0x14];		/* 0x12c */
13081f50d93Svishnupatekar 	u32 zqncr;		/* 0x140 zq control register 0 */
13181f50d93Svishnupatekar 	u32 zqnpr;		/* 0x144 zq control register 1 */
13281f50d93Svishnupatekar 	u32 zqndr;		/* 0x148 zq control register 2 */
13381f50d93Svishnupatekar 	u32 zqnsr;		/* 0x14c zq status register 0 */
13481f50d93Svishnupatekar 	u32 res7;		/* 0x150 zq status register 1 */
13581f50d93Svishnupatekar 	u8 res8[0x6c];		/* 0x154 */
13681f50d93Svishnupatekar 	u32 sched;		/* 0x1c0 */
13781f50d93Svishnupatekar 	u32 perfhpr0;		/* 0x1c4 */
13881f50d93Svishnupatekar 	u32 perfhpr1;		/* 0x1c8 */
13981f50d93Svishnupatekar 	u32 perflpr0;		/* 0x1cc */
14081f50d93Svishnupatekar 	u32 perflpr1;		/* 0x1d0 */
14181f50d93Svishnupatekar 	u32 perfwr0;		/* 0x1d4 */
14281f50d93Svishnupatekar 	u32 perfwr1;		/* 0x1d8 */
14381f50d93Svishnupatekar };
14481f50d93Svishnupatekar 
14581f50d93Svishnupatekar 
14681f50d93Svishnupatekar #define ZQnPR(x)	(SUNXI_DRAM_CTL0_BASE + 0x00000144 + 0x10 * x)
14781f50d93Svishnupatekar #define ZQnDR(x)	(SUNXI_DRAM_CTL0_BASE + 0x00000148 + 0x10 * x)
14881f50d93Svishnupatekar #define ZQnSR(x)	(SUNXI_DRAM_CTL0_BASE + 0x0000014c + 0x10 * x)
14981f50d93Svishnupatekar 
15081f50d93Svishnupatekar #define DXnGTR(x)	(SUNXI_DRAM_CTL0_BASE + 0x00000340 + 0x80 * x)
15181f50d93Svishnupatekar #define DXnGCR0(x)	(SUNXI_DRAM_CTL0_BASE + 0x00000344 + 0x80 * x)
15281f50d93Svishnupatekar #define DXnGSR0(x)	(SUNXI_DRAM_CTL0_BASE + 0x00000348 + 0x80 * x)
15381f50d93Svishnupatekar #define DXnGSR1(x)	(SUNXI_DRAM_CTL0_BASE + 0x0000034c + 0x80 * x)
15481f50d93Svishnupatekar #define DXnGSR2(x)	(SUNXI_DRAM_CTL0_BASE + 0x00000350 + 0x80 * x)
15581f50d93Svishnupatekar 
15681f50d93Svishnupatekar #define CAIOCR(x)	(SUNXI_DRAM_CTL0_BASE + 0x00000210 + 0x4 * (x))
15781f50d93Svishnupatekar #define DXnMDLR(x)	(SUNXI_DRAM_CTL0_BASE + 0x00000300 + 0x80 * x)
15881f50d93Svishnupatekar #define DXMDLR0		(SUNXI_DRAM_CTL0_BASE + 0x00000300)
15981f50d93Svishnupatekar #define DXnLCDLR0(x)	(SUNXI_DRAM_CTL0_BASE + 0x00000304 + 0x80 * x)
16081f50d93Svishnupatekar #define DXnLCDLR1(x)	(SUNXI_DRAM_CTL0_BASE + 0x00000308 + 0x80 * x)
16181f50d93Svishnupatekar #define DXnLCDLR2(x)	(SUNXI_DRAM_CTL0_BASE + 0x0000030c + 0x80 * x)
16281f50d93Svishnupatekar #define DATX0IOCR(x)	(SUNXI_DRAM_CTL0_BASE + 0x00000310 + 0x4 * x)
16381f50d93Svishnupatekar #define DATX1IOCR(x)	(SUNXI_DRAM_CTL0_BASE + 0x00000390 + 0x4 * x)
16481f50d93Svishnupatekar #define DATX2IOCR(x)	(SUNXI_DRAM_CTL0_BASE + 0x00000410 + 0x4 * x)
16581f50d93Svishnupatekar #define DATX3IOCR(x)	(SUNXI_DRAM_CTL0_BASE + 0x00000490 + 0x4 * x)
16681f50d93Svishnupatekar #define MX_UPD0		(SUNXI_DRAM_CTL0_BASE + 0x00000880)
16781f50d93Svishnupatekar #define MX_UPD2		(SUNXI_DRAM_CTL0_BASE + 0x00000888)
16881f50d93Svishnupatekar 
16981f50d93Svishnupatekar #define MCTL_PROTECT		(SUNXI_DRAM_COM_BASE + 0x800)
17081f50d93Svishnupatekar #define MCTL_MASTER_CFG0(x)	(SUNXI_DRAM_COM_BASE + 0x10 + 0x8 * x)
17181f50d93Svishnupatekar #define MCTL_MASTER_CFG1(x)	(SUNXI_DRAM_COM_BASE + 0x14 + 0x8 * x)
17281f50d93Svishnupatekar 
17381f50d93Svishnupatekar /*
17481f50d93Svishnupatekar  * DRAM common (sunxi_mctl_com_reg) register constants.
17581f50d93Svishnupatekar  */
17681f50d93Svishnupatekar #define MCTL_CR_RANK_MASK		(3 << 0)
17781f50d93Svishnupatekar #define MCTL_CR_RANK(x)			(((x) - 1) << 0)
17881f50d93Svishnupatekar #define MCTL_CR_BANK_MASK		(3 << 2)
17981f50d93Svishnupatekar #define MCTL_CR_BANK(x)			((x) << 2)
18081f50d93Svishnupatekar #define MCTL_CR_ROW_MASK		(0xf << 4)
18181f50d93Svishnupatekar #define MCTL_CR_ROW(x)			(((x) - 1) << 4)
18281f50d93Svishnupatekar #define MCTL_CR_PAGE_SIZE_MASK		(0xf << 8)
18381f50d93Svishnupatekar #define MCTL_CR_PAGE_SIZE(x)		((fls(x) - 4) << 8)
18481f50d93Svishnupatekar #define MCTL_CR_BUSW_MASK		(7 << 12)
18581f50d93Svishnupatekar #define MCTL_CR_BUSW8			(0 << 12)
18681f50d93Svishnupatekar #define MCTL_CR_BUSW16			(1 << 12)
18781f50d93Svishnupatekar #define MCTL_CR_SEQUENCE		(1 << 15)
188f5fd8cafSVishnu Patekar #define MCTL_CR_DRAM_TYPE(x)		((x) << 16)
18981f50d93Svishnupatekar #define MCTL_CR_CHANNEL_MASK		(1 << 19)
19081f50d93Svishnupatekar #define MCTL_CR_CHANNEL(x)		(((x) - 1) << 19)
19181f50d93Svishnupatekar #define MCTL_CR_UNKNOWN			(0x4 << 20)
19281f50d93Svishnupatekar #define MCTL_CR_CS1_CONTROL(x)		((x) << 24)
19381f50d93Svishnupatekar 
19481f50d93Svishnupatekar /* DRAM control (sunxi_mctl_ctl_reg) register constants */
19581f50d93Svishnupatekar #define MCTL_MR0			0x1c70 /* CL=11, WR=12 */
19681f50d93Svishnupatekar #define MCTL_MR1			0x40
19781f50d93Svishnupatekar #define MCTL_MR2			0x18 /* CWL=8 */
19881f50d93Svishnupatekar #define MCTL_MR3			0x0
19981f50d93Svishnupatekar 
200f3ad64c8SVishnu Patekar #define MCTL_LPDDR3_MR0			0x0
201f3ad64c8SVishnu Patekar #define MCTL_LPDDR3_MR1			0xc3	/* twr=8, bl=8 */
202f3ad64c8SVishnu Patekar #define MCTL_LPDDR3_MR2			0xa	/* RL=12, CWL=6 */
203f3ad64c8SVishnu Patekar #define MCTL_LPDDR3_MR3			0x0
204f3ad64c8SVishnu Patekar 
205f5fd8cafSVishnu Patekar #define DRAM_TYPE_DDR3		3
206f5fd8cafSVishnu Patekar #define DRAM_TYPE_LPDDR3	7
20781f50d93Svishnupatekar #endif /* _SUNXI_DRAM_SUN8I_A83T_H */
208