xref: /openbmc/u-boot/arch/arm/include/asm/arch-sunxi/dram_sun8i_a33.h (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */
2ffc0ae0cSVishnu Patekar /*
3ffc0ae0cSVishnu Patekar  * Sun8i platform dram controller register and constant defines
4ffc0ae0cSVishnu Patekar  *
5ffc0ae0cSVishnu Patekar  * (C) Copyright 2007-2015 Allwinner Technology Co.
6ffc0ae0cSVishnu Patekar  *                         Jerry Wang <wangflord@allwinnertech.com>
7ffc0ae0cSVishnu Patekar  * (C) Copyright 2015      Vishnu Patekar <vishnupatekar0510@gmail.com>
8ffc0ae0cSVishnu Patekar  * (C) Copyright 2014-2015 Hans de Goede <hdegoede@redhat.com>
9ffc0ae0cSVishnu Patekar  */
10ffc0ae0cSVishnu Patekar 
11ffc0ae0cSVishnu Patekar #ifndef _SUNXI_DRAM_SUN8I_A33_H
12ffc0ae0cSVishnu Patekar #define _SUNXI_DRAM_SUN8I_A33_H
13ffc0ae0cSVishnu Patekar 
14ffc0ae0cSVishnu Patekar struct sunxi_mctl_com_reg {
15ffc0ae0cSVishnu Patekar 	u32 cr;			/* 0x00 */
16ffc0ae0cSVishnu Patekar 	u32 ccr;		/* 0x04 controller configuration register */
17ffc0ae0cSVishnu Patekar 	u32 dbgcr;		/* 0x08 */
18ffc0ae0cSVishnu Patekar 	u8 res0[0x4];		/* 0x0c */
19ffc0ae0cSVishnu Patekar 	u32 mcr0_0;		/* 0x10 */
20ffc0ae0cSVishnu Patekar 	u32 mcr1_0;		/* 0x14 */
21ffc0ae0cSVishnu Patekar 	u32 mcr0_1;		/* 0x18 */
22ffc0ae0cSVishnu Patekar 	u32 mcr1_1;		/* 0x1c */
23ffc0ae0cSVishnu Patekar 	u32 mcr0_2;		/* 0x20 */
24ffc0ae0cSVishnu Patekar 	u32 mcr1_2;		/* 0x24 */
25ffc0ae0cSVishnu Patekar 	u32 mcr0_3;		/* 0x28 */
26ffc0ae0cSVishnu Patekar 	u32 mcr1_3;		/* 0x2c */
27ffc0ae0cSVishnu Patekar 	u32 mcr0_4;		/* 0x30 */
28ffc0ae0cSVishnu Patekar 	u32 mcr1_4;		/* 0x34 */
29ffc0ae0cSVishnu Patekar 	u32 mcr0_5;		/* 0x38 */
30ffc0ae0cSVishnu Patekar 	u32 mcr1_5;		/* 0x3c */
31ffc0ae0cSVishnu Patekar 	u32 mcr0_6;		/* 0x40 */
32ffc0ae0cSVishnu Patekar 	u32 mcr1_6;		/* 0x44 */
33ffc0ae0cSVishnu Patekar 	u32 mcr0_7;		/* 0x48 */
34ffc0ae0cSVishnu Patekar 	u32 mcr1_7;		/* 0x4c */
35ffc0ae0cSVishnu Patekar 	u32 mcr0_8;		/* 0x50 */
36ffc0ae0cSVishnu Patekar 	u32 mcr1_8;		/* 0x54 */
37ffc0ae0cSVishnu Patekar 	u32 mcr0_9;		/* 0x58 */
38ffc0ae0cSVishnu Patekar 	u32 mcr1_9;		/* 0x5c */
39ffc0ae0cSVishnu Patekar 	u32 mcr0_10;		/* 0x60 */
40ffc0ae0cSVishnu Patekar 	u32 mcr1_10;		/* 0x64 */
41ffc0ae0cSVishnu Patekar 	u32 mcr0_11;		/* 0x68 */
42ffc0ae0cSVishnu Patekar 	u32 mcr1_11;		/* 0x6c */
43ffc0ae0cSVishnu Patekar 	u32 mcr0_12;		/* 0x70 */
44ffc0ae0cSVishnu Patekar 	u32 mcr1_12;		/* 0x74 */
45ffc0ae0cSVishnu Patekar 	u32 mcr0_13;		/* 0x78 */
46ffc0ae0cSVishnu Patekar 	u32 mcr1_13;		/* 0x7c */
47ffc0ae0cSVishnu Patekar 	u32 mcr0_14;		/* 0x80 */
48ffc0ae0cSVishnu Patekar 	u32 mcr1_14;		/* 0x84 */
49ffc0ae0cSVishnu Patekar 	u32 mcr0_15;		/* 0x88 */
50ffc0ae0cSVishnu Patekar 	u32 mcr1_15;		/* 0x8c */
51ffc0ae0cSVishnu Patekar 	u32 bwcr;		/* 0x90 */
52ffc0ae0cSVishnu Patekar 	u32 maer;		/* 0x94 */
53ffc0ae0cSVishnu Patekar 	u32 mapr;		/* 0x98 */
54ffc0ae0cSVishnu Patekar 	u32 mcgcr;		/* 0x9c */
55ffc0ae0cSVishnu Patekar 	u32 bwctr;		/* 0xa0 */
56ffc0ae0cSVishnu Patekar 	u8 res2[0x8];		/* 0xa4 */
57ffc0ae0cSVishnu Patekar 	u32 swoffr;		/* 0xac */
58ffc0ae0cSVishnu Patekar 	u8 res3[0x10];		/* 0xb0 */
59ffc0ae0cSVishnu Patekar 	u32 swonr;		/* 0xc0 */
60ffc0ae0cSVishnu Patekar 	u8 res4[0x3c];		/* 0xc4 */
61ffc0ae0cSVishnu Patekar 	u32 mdfscr;		/* 0x100 */
62ffc0ae0cSVishnu Patekar 	u32 mdfsmer;		/* 0x104 */
63ffc0ae0cSVishnu Patekar };
64ffc0ae0cSVishnu Patekar 
65ffc0ae0cSVishnu Patekar struct sunxi_mctl_ctl_reg {
66ffc0ae0cSVishnu Patekar 	u32 pir;		/* 0x00 */
67ffc0ae0cSVishnu Patekar 	u32 pwrctl;		/* 0x04 */
68ffc0ae0cSVishnu Patekar 	u32 mrctrl0;		/* 0x08 */
69ffc0ae0cSVishnu Patekar 	u32 clken;		/* 0x0c */
70ffc0ae0cSVishnu Patekar 	u32 pgsr0;		/* 0x10 */
71ffc0ae0cSVishnu Patekar 	u32 pgsr1;		/* 0x14 */
72ffc0ae0cSVishnu Patekar 	u32 statr;		/* 0x18 */
73ffc0ae0cSVishnu Patekar 	u8 res1[0x14];		/* 0x1c */
74ffc0ae0cSVishnu Patekar 	u32 mr0;		/* 0x30 */
75ffc0ae0cSVishnu Patekar 	u32 mr1;		/* 0x34 */
76ffc0ae0cSVishnu Patekar 	u32 mr2;		/* 0x38 */
77ffc0ae0cSVishnu Patekar 	u32 mr3;		/* 0x3c */
78ffc0ae0cSVishnu Patekar 	u32 pllgcr;		/* 0x40 */
79ffc0ae0cSVishnu Patekar 	u32 ptr0;		/* 0x44 */
80ffc0ae0cSVishnu Patekar 	u32 ptr1;		/* 0x48 */
81ffc0ae0cSVishnu Patekar 	u32 ptr2;		/* 0x4c */
82ffc0ae0cSVishnu Patekar 	u32 ptr3;		/* 0x50 */
83ffc0ae0cSVishnu Patekar 	u32 ptr4;		/* 0x54 */
84ffc0ae0cSVishnu Patekar 	u32 dramtmg0;		/* 0x58 dram timing parameters register 0 */
85ffc0ae0cSVishnu Patekar 	u32 dramtmg1;		/* 0x5c dram timing parameters register 1 */
86ffc0ae0cSVishnu Patekar 	u32 dramtmg2;		/* 0x60 dram timing parameters register 2 */
87ffc0ae0cSVishnu Patekar 	u32 dramtmg3;		/* 0x64 dram timing parameters register 3 */
88ffc0ae0cSVishnu Patekar 	u32 dramtmg4;		/* 0x68 dram timing parameters register 4 */
89ffc0ae0cSVishnu Patekar 	u32 dramtmg5;		/* 0x6c dram timing parameters register 5 */
90ffc0ae0cSVishnu Patekar 	u32 dramtmg6;		/* 0x70 dram timing parameters register 6 */
91ffc0ae0cSVishnu Patekar 	u32 dramtmg7;		/* 0x74 dram timing parameters register 7 */
92ffc0ae0cSVishnu Patekar 	u32 dramtmg8;		/* 0x78 dram timing parameters register 8 */
93ffc0ae0cSVishnu Patekar 	u32 odtcfg;		/* 0x7c */
94ffc0ae0cSVishnu Patekar 	u32 pitmg0;		/* 0x80 */
95ffc0ae0cSVishnu Patekar 	u32 pitmg1;		/* 0x84 */
96ffc0ae0cSVishnu Patekar 	u8 res2[0x4];		/* 0x88 */
97ffc0ae0cSVishnu Patekar 	u32 rfshctl0;		/* 0x8c */
98ffc0ae0cSVishnu Patekar 	u32 rfshtmg;		/* 0x90 */
99ffc0ae0cSVishnu Patekar 	u32 rfshctl1;		/* 0x94 */
100ffc0ae0cSVishnu Patekar 	u32 pwrtmg;		/* 0x98 */
101ffc0ae0cSVishnu Patekar 	u8  res3[0x20];		/* 0x9c */
102ffc0ae0cSVishnu Patekar 	u32 dqsgmr;		/* 0xbc */
103ffc0ae0cSVishnu Patekar 	u32 dtcr;		/* 0xc0 */
104ffc0ae0cSVishnu Patekar 	u32 dtar0;		/* 0xc4 */
105ffc0ae0cSVishnu Patekar 	u32 dtar1;		/* 0xc8 */
106ffc0ae0cSVishnu Patekar 	u32 dtar2;		/* 0xcc */
107ffc0ae0cSVishnu Patekar 	u32 dtar3;		/* 0xd0 */
108ffc0ae0cSVishnu Patekar 	u32 dtdr0;		/* 0xd4 */
109ffc0ae0cSVishnu Patekar 	u32 dtdr1;		/* 0xd8 */
110ffc0ae0cSVishnu Patekar 	u32 dtmr0;		/* 0xdc */
111ffc0ae0cSVishnu Patekar 	u32 dtmr1;		/* 0xe0 */
112ffc0ae0cSVishnu Patekar 	u32 dtbmr;		/* 0xe4 */
113ffc0ae0cSVishnu Patekar 	u32 catr0;		/* 0xe8 */
114ffc0ae0cSVishnu Patekar 	u32 catr1;		/* 0xec */
115ffc0ae0cSVishnu Patekar 	u32 dtedr0;		/* 0xf0 */
116ffc0ae0cSVishnu Patekar 	u32 dtedr1;		/* 0xf4 */
117ffc0ae0cSVishnu Patekar 	u8 res4[0x8];		/* 0xf8 */
118ffc0ae0cSVishnu Patekar 	u32 pgcr0;		/* 0x100 */
119ffc0ae0cSVishnu Patekar 	u32 pgcr1;		/* 0x104 */
120ffc0ae0cSVishnu Patekar 	u32 pgcr2;		/* 0x108 */
121ffc0ae0cSVishnu Patekar 	u8 res5[0x4];		/* 0x10c */
122ffc0ae0cSVishnu Patekar 	u32 iovcr0;		/* 0x110 */
123ffc0ae0cSVishnu Patekar 	u32 iovcr1;		/* 0x114 */
124ffc0ae0cSVishnu Patekar 	u32 dqsdr;		/* 0x118 */
125ffc0ae0cSVishnu Patekar 	u32 dxccr;		/* 0x11c */
126ffc0ae0cSVishnu Patekar 	u32 odtmap;		/* 0x120 */
127ffc0ae0cSVishnu Patekar 	u32 zqctl0;		/* 0x124 */
128ffc0ae0cSVishnu Patekar 	u32 zqctl1;		/* 0x128 */
129ffc0ae0cSVishnu Patekar 	u8 res6[0x14];		/* 0x12c */
130ffc0ae0cSVishnu Patekar 	u32 zqcr0;		/* 0x140 zq control register 0 */
131ffc0ae0cSVishnu Patekar 	u32 zqcr1;		/* 0x144 zq control register 1 */
132ffc0ae0cSVishnu Patekar 	u32 zqcr2;		/* 0x148 zq control register 2 */
133ffc0ae0cSVishnu Patekar 	u32 zqsr0;		/* 0x14c zq status register 0 */
134ffc0ae0cSVishnu Patekar 	u32 zqsr1;		/* 0x150 zq status register 1 */
135ffc0ae0cSVishnu Patekar 	u8 res7[0x6c];		/* 0x154 */
136ffc0ae0cSVishnu Patekar 	u32 sched;		/* 0x1c0 */
137ffc0ae0cSVishnu Patekar 	u32 perfhpr0;		/* 0x1c4 */
138ffc0ae0cSVishnu Patekar 	u32 perfhpr1;		/* 0x1c8 */
139ffc0ae0cSVishnu Patekar 	u32 perflpr0;		/* 0x1cc */
140ffc0ae0cSVishnu Patekar 	u32 perflpr1;		/* 0x1d0 */
141ffc0ae0cSVishnu Patekar 	u32 perfwr0;		/* 0x1d4 */
142ffc0ae0cSVishnu Patekar 	u32 perfwr1;		/* 0x1d8 */
143ffc0ae0cSVishnu Patekar };
144ffc0ae0cSVishnu Patekar 
145ffc0ae0cSVishnu Patekar #define DXnGTR(x)	(SUNXI_DRAM_CTL0_BASE + 0x00000340 + 0x80 * x)
146ffc0ae0cSVishnu Patekar #define DXnGCR0(x)	(SUNXI_DRAM_CTL0_BASE + 0x00000344 + 0x80 * x)
147ffc0ae0cSVishnu Patekar #define DXnGSR0(x)	(SUNXI_DRAM_CTL0_BASE + 0x00000348 + 0x80 * x)
148ffc0ae0cSVishnu Patekar #define DXnGSR1(x)	(SUNXI_DRAM_CTL0_BASE + 0x0000034c + 0x80 * x)
149ffc0ae0cSVishnu Patekar #define DXnGSR2(x)	(SUNXI_DRAM_CTL0_BASE + 0x00000350 + 0x80 * x)
150ffc0ae0cSVishnu Patekar 
151ffc0ae0cSVishnu Patekar /*
152ffc0ae0cSVishnu Patekar  * DRAM common (sunxi_mctl_com_reg) register constants.
153ffc0ae0cSVishnu Patekar  */
154ffc0ae0cSVishnu Patekar #define MCTL_CR_RANK_MASK		(3 << 0)
155ffc0ae0cSVishnu Patekar #define MCTL_CR_RANK(x)			(((x) - 1) << 0)
156ffc0ae0cSVishnu Patekar #define MCTL_CR_BANK_MASK		(3 << 2)
157ffc0ae0cSVishnu Patekar #define MCTL_CR_BANK(x)			((x) << 2)
158ffc0ae0cSVishnu Patekar #define MCTL_CR_ROW_MASK		(0xf << 4)
159ffc0ae0cSVishnu Patekar #define MCTL_CR_ROW(x)			(((x) - 1) << 4)
160ffc0ae0cSVishnu Patekar #define MCTL_CR_PAGE_SIZE_MASK		(0xf << 8)
161ffc0ae0cSVishnu Patekar #define MCTL_CR_PAGE_SIZE(x)		((fls(x) - 4) << 8)
162ffc0ae0cSVishnu Patekar #define MCTL_CR_BUSW_MASK		(7 << 12)
163ffc0ae0cSVishnu Patekar #define MCTL_CR_BUSW8			(0 << 12)
164ffc0ae0cSVishnu Patekar #define MCTL_CR_BUSW16			(1 << 12)
165ffc0ae0cSVishnu Patekar #define MCTL_CR_SEQUENCE		(1 << 15)
166ffc0ae0cSVishnu Patekar #define MCTL_CR_DDR3			(3 << 16)
167ffc0ae0cSVishnu Patekar #define MCTL_CR_CHANNEL_MASK		(1 << 19)
168ffc0ae0cSVishnu Patekar #define MCTL_CR_CHANNEL(x)		(((x) - 1) << 19)
169ffc0ae0cSVishnu Patekar #define MCTL_CR_UNKNOWN			(0x4 << 20)
170ffc0ae0cSVishnu Patekar #define MCTL_CR_CS1_CONTROL(x)		((x) << 24)
171ffc0ae0cSVishnu Patekar 
172ffc0ae0cSVishnu Patekar /* DRAM control (sunxi_mctl_ctl_reg) register constants */
173ffc0ae0cSVishnu Patekar #define MCTL_MR0			0x1c70 /* CL=11, WR=12 */
174ffc0ae0cSVishnu Patekar #define MCTL_MR1			0x40
175ffc0ae0cSVishnu Patekar #define MCTL_MR2			0x18 /* CWL=8 */
176ffc0ae0cSVishnu Patekar #define MCTL_MR3			0x0
177ffc0ae0cSVishnu Patekar 
178ffc0ae0cSVishnu Patekar #endif /* _SUNXI_DRAM_SUN8I_A33_H */
179