xref: /openbmc/u-boot/arch/arm/include/asm/arch-sunxi/dram_sun8i_a23.h (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */
25e6bacdbSHans de Goede /*
35e6bacdbSHans de Goede  * Sun8i platform dram controller register and constant defines
45e6bacdbSHans de Goede  *
55e6bacdbSHans de Goede  * (C) Copyright 2007-2013
65e6bacdbSHans de Goede  * Allwinner Technology Co., Ltd. <www.allwinnertech.com>
75e6bacdbSHans de Goede  * CPL <cplanxy@allwinnertech.com>
85e6bacdbSHans de Goede  * Jerry Wang <wangflord@allwinnertech.com>
95e6bacdbSHans de Goede  *
105e6bacdbSHans de Goede  * (C) Copyright 2014 Hans de Goede <hdegoede@redhat.com>
115e6bacdbSHans de Goede  */
125e6bacdbSHans de Goede 
135e6bacdbSHans de Goede #ifndef _SUNXI_DRAM_SUN8I_H
145e6bacdbSHans de Goede #define _SUNXI_DRAM_SUN8I_H
155e6bacdbSHans de Goede 
165e6bacdbSHans de Goede struct dram_para {
175e6bacdbSHans de Goede 	u32 clock;
185e6bacdbSHans de Goede 	u32 type;
195e6bacdbSHans de Goede 	u32 zq;
205e6bacdbSHans de Goede 	u32 odt_en;
218975cdf4SHans de Goede 	s32 odt_correction;
225e6bacdbSHans de Goede 	u32 para1;
235e6bacdbSHans de Goede 	u32 para2;
245e6bacdbSHans de Goede 	u32 mr0;
255e6bacdbSHans de Goede 	u32 mr1;
265e6bacdbSHans de Goede 	u32 mr2;
275e6bacdbSHans de Goede 	u32 mr3;
285e6bacdbSHans de Goede 	u32 tpr0;
295e6bacdbSHans de Goede 	u32 tpr1;
305e6bacdbSHans de Goede 	u32 tpr2;
315e6bacdbSHans de Goede 	u32 tpr3;
325e6bacdbSHans de Goede 	u32 tpr4;
335e6bacdbSHans de Goede 	u32 tpr5;
345e6bacdbSHans de Goede 	u32 tpr6;
355e6bacdbSHans de Goede 	u32 tpr7;
365e6bacdbSHans de Goede 	u32 tpr8;
375e6bacdbSHans de Goede 	u32 tpr9;
385e6bacdbSHans de Goede 	u32 tpr10;
395e6bacdbSHans de Goede 	u32 tpr11;
405e6bacdbSHans de Goede 	u32 tpr12;
415e6bacdbSHans de Goede 	u32 tpr13;
425e6bacdbSHans de Goede };
435e6bacdbSHans de Goede 
445e6bacdbSHans de Goede struct sunxi_mctl_com_reg {
455e6bacdbSHans de Goede 	u32 cr;			/* 0x00 */
465e6bacdbSHans de Goede 	u32 ccr;		/* 0x04 controller configuration register */
475e6bacdbSHans de Goede 	u32 dbgcr;		/* 0x08 */
485e6bacdbSHans de Goede 	u8 res0[0x4];		/* 0x0c */
495e6bacdbSHans de Goede 	u32 mcr0_0;		/* 0x10 */
505e6bacdbSHans de Goede 	u32 mcr1_0;		/* 0x14 */
515e6bacdbSHans de Goede 	u32 mcr0_1;		/* 0x18 */
525e6bacdbSHans de Goede 	u32 mcr1_1;		/* 0x1c */
535e6bacdbSHans de Goede 	u32 mcr0_2;		/* 0x20 */
545e6bacdbSHans de Goede 	u32 mcr1_2;		/* 0x24 */
555e6bacdbSHans de Goede 	u32 mcr0_3;		/* 0x28 */
565e6bacdbSHans de Goede 	u32 mcr1_3;		/* 0x2c */
575e6bacdbSHans de Goede 	u32 mcr0_4;		/* 0x30 */
585e6bacdbSHans de Goede 	u32 mcr1_4;		/* 0x34 */
595e6bacdbSHans de Goede 	u32 mcr0_5;		/* 0x38 */
605e6bacdbSHans de Goede 	u32 mcr1_5;		/* 0x3c */
615e6bacdbSHans de Goede 	u32 mcr0_6;		/* 0x40 */
625e6bacdbSHans de Goede 	u32 mcr1_6;		/* 0x44 */
635e6bacdbSHans de Goede 	u32 mcr0_7;		/* 0x48 */
645e6bacdbSHans de Goede 	u32 mcr1_7;		/* 0x4c */
655e6bacdbSHans de Goede 	u32 mcr0_8;		/* 0x50 */
665e6bacdbSHans de Goede 	u32 mcr1_8;		/* 0x54 */
675e6bacdbSHans de Goede 	u32 mcr0_9;		/* 0x58 */
685e6bacdbSHans de Goede 	u32 mcr1_9;		/* 0x5c */
695e6bacdbSHans de Goede 	u32 mcr0_10;		/* 0x60 */
705e6bacdbSHans de Goede 	u32 mcr1_10;		/* 0x64 */
715e6bacdbSHans de Goede 	u32 mcr0_11;		/* 0x68 */
725e6bacdbSHans de Goede 	u32 mcr1_11;		/* 0x6c */
735e6bacdbSHans de Goede 	u32 mcr0_12;		/* 0x70 */
745e6bacdbSHans de Goede 	u32 mcr1_12;		/* 0x74 */
755e6bacdbSHans de Goede 	u32 mcr0_13;		/* 0x78 */
765e6bacdbSHans de Goede 	u32 mcr1_13;		/* 0x7c */
775e6bacdbSHans de Goede 	u32 mcr0_14;		/* 0x80 */
785e6bacdbSHans de Goede 	u32 mcr1_14;		/* 0x84 */
795e6bacdbSHans de Goede 	u32 mcr0_15;		/* 0x88 */
805e6bacdbSHans de Goede 	u32 mcr1_15;		/* 0x8c */
815e6bacdbSHans de Goede 	u32 bwcr;		/* 0x90 */
825e6bacdbSHans de Goede 	u32 maer;		/* 0x94 */
835e6bacdbSHans de Goede 	u8 res1[0x4];		/* 0x98 */
845e6bacdbSHans de Goede 	u32 mcgcr;		/* 0x9c */
855e6bacdbSHans de Goede 	u32 bwctr;		/* 0xa0 */
865e6bacdbSHans de Goede 	u8 res2[0x4];		/* 0xa4 */
875e6bacdbSHans de Goede 	u32 swonr;		/* 0xa8 */
885e6bacdbSHans de Goede 	u32 swoffr;		/* 0xac */
895e6bacdbSHans de Goede };
905e6bacdbSHans de Goede 
915e6bacdbSHans de Goede struct sunxi_mctl_ctl_reg {
925e6bacdbSHans de Goede 	u32 mstr;		/* 0x00 */
935e6bacdbSHans de Goede 	u32 statr;		/* 0x04 */
945e6bacdbSHans de Goede 	u8 res0[0x08];		/* 0x08 */
955e6bacdbSHans de Goede 	u32 mrctrl0;		/* 0x10 */
965e6bacdbSHans de Goede 	u32 mrctrl1;		/* 0x14 */
975e6bacdbSHans de Goede 	u32 mrstatr;		/* 0x18 */
985e6bacdbSHans de Goede 	u8 res1[0x04];		/* 0x1c */
995e6bacdbSHans de Goede 	u32 derateen;		/* 0x20 */
1005e6bacdbSHans de Goede 	u32 deratenint;		/* 0x24 */
1015e6bacdbSHans de Goede 	u8 res2[0x08];		/* 0x28 */
1025e6bacdbSHans de Goede 	u32 pwrctl;		/* 0x30 */
1035e6bacdbSHans de Goede 	u32 pwrtmg;		/* 0x34 */
1045e6bacdbSHans de Goede 	u8 res3[0x18];		/* 0x38 */
1055e6bacdbSHans de Goede 	u32 rfshctl0;		/* 0x50 */
1065e6bacdbSHans de Goede 	u32 rfshctl1;		/* 0x54 */
1075e6bacdbSHans de Goede 	u8 res4[0x8];		/* 0x58 */
1085e6bacdbSHans de Goede 	u32 rfshctl3;		/* 0x60 */
1095e6bacdbSHans de Goede 	u32 rfshtmg;		/* 0x64 */
1105e6bacdbSHans de Goede 	u8 res6[0x68];		/* 0x68 */
1115e6bacdbSHans de Goede 	u32 init0;		/* 0xd0 */
1125e6bacdbSHans de Goede 	u32 init1;		/* 0xd4 */
1135e6bacdbSHans de Goede 	u32 init2;		/* 0xd8 */
1145e6bacdbSHans de Goede 	u32 init3;		/* 0xdc */
1155e6bacdbSHans de Goede 	u32 init4;		/* 0xe0 */
1165e6bacdbSHans de Goede 	u32 init5;		/* 0xe4 */
1175e6bacdbSHans de Goede 	u8 res7[0x0c];		/* 0xe8 */
1185e6bacdbSHans de Goede 	u32 rankctl;		/* 0xf4 */
1195e6bacdbSHans de Goede 	u8 res8[0x08];		/* 0xf8 */
1205e6bacdbSHans de Goede 	u32 dramtmg0;		/* 0x100 */
1215e6bacdbSHans de Goede 	u32 dramtmg1;		/* 0x104 */
1225e6bacdbSHans de Goede 	u32 dramtmg2;		/* 0x108 */
1235e6bacdbSHans de Goede 	u32 dramtmg3;		/* 0x10c */
1245e6bacdbSHans de Goede 	u32 dramtmg4;		/* 0x110 */
1255e6bacdbSHans de Goede 	u32 dramtmg5;		/* 0x114 */
1265e6bacdbSHans de Goede 	u32 dramtmg6;		/* 0x118 */
1275e6bacdbSHans de Goede 	u32 dramtmg7;		/* 0x11c */
1285e6bacdbSHans de Goede 	u32 dramtmg8;		/* 0x120 */
1295e6bacdbSHans de Goede 	u8 res9[0x5c];		/* 0x124 */
1305e6bacdbSHans de Goede 	u32 zqctl0;		/* 0x180 */
1315e6bacdbSHans de Goede 	u32 zqctl1;		/* 0x184 */
1325e6bacdbSHans de Goede 	u32 zqctl2;		/* 0x188 */
1335e6bacdbSHans de Goede 	u32 zqstat;		/* 0x18c */
1345e6bacdbSHans de Goede 	u32 pitmg0;		/* 0x190 */
1355e6bacdbSHans de Goede 	u32 pitmg1;		/* 0x194 */
1365e6bacdbSHans de Goede 	u32 plpcfg0;		/* 0x198 */
1375e6bacdbSHans de Goede 	u8 res10[0x04];		/* 0x19c */
1385e6bacdbSHans de Goede 	u32 upd0;		/* 0x1a0 */
1395e6bacdbSHans de Goede 	u32 upd1;		/* 0x1a4 */
1405e6bacdbSHans de Goede 	u32 upd2;		/* 0x1a8 */
1415e6bacdbSHans de Goede 	u32 upd3;		/* 0x1ac */
1425e6bacdbSHans de Goede 	u32 pimisc;		/* 0x1b0 */
1435e6bacdbSHans de Goede 	u8 res11[0x1c];		/* 0x1b4 */
1445e6bacdbSHans de Goede 	u32 trainctl0;		/* 0x1d0 */
1455e6bacdbSHans de Goede 	u32 trainctl1;		/* 0x1d4 */
1465e6bacdbSHans de Goede 	u32 trainctl2;		/* 0x1d8 */
1475e6bacdbSHans de Goede 	u32 trainstat;		/* 0x1dc */
1485e6bacdbSHans de Goede 	u8 res12[0x60];		/* 0x1e0 */
1495e6bacdbSHans de Goede 	u32 odtcfg;		/* 0x240 */
1505e6bacdbSHans de Goede 	u32 odtmap;		/* 0x244 */
1515e6bacdbSHans de Goede 	u8 res13[0x08];		/* 0x248 */
1525e6bacdbSHans de Goede 	u32 sched;		/* 0x250 */
1535e6bacdbSHans de Goede 	u8 res14[0x04];		/* 0x254 */
1545e6bacdbSHans de Goede 	u32 perfshpr0;		/* 0x258 */
1555e6bacdbSHans de Goede 	u32 perfshpr1;		/* 0x25c */
1565e6bacdbSHans de Goede 	u32 perflpr0;		/* 0x260 */
1575e6bacdbSHans de Goede 	u32 perflpr1;		/* 0x264 */
1585e6bacdbSHans de Goede 	u32 perfwr0;		/* 0x268 */
1595e6bacdbSHans de Goede 	u32 perfwr1;		/* 0x26c */
1605e6bacdbSHans de Goede };
1615e6bacdbSHans de Goede 
1625e6bacdbSHans de Goede struct sunxi_mctl_phy_reg {
1635e6bacdbSHans de Goede 	u8 res0[0x04];		/* 0x00 */
1645e6bacdbSHans de Goede 	u32 pir;		/* 0x04 */
1655e6bacdbSHans de Goede 	u32 pgcr0;		/* 0x08 phy general configuration register */
1665e6bacdbSHans de Goede 	u32 pgcr1;		/* 0x0c phy general configuration register */
1675e6bacdbSHans de Goede 	u32 pgsr0;		/* 0x10 */
1685e6bacdbSHans de Goede 	u32 pgsr1;		/* 0x14 */
1695e6bacdbSHans de Goede 	u32 dllgcr;		/* 0x18 */
1705e6bacdbSHans de Goede 	u32 ptr0;		/* 0x1c */
1715e6bacdbSHans de Goede 	u32 ptr1;		/* 0x20 */
1725e6bacdbSHans de Goede 	u32 ptr2;		/* 0x24 */
1735e6bacdbSHans de Goede 	u32 ptr3;		/* 0x28 */
1745e6bacdbSHans de Goede 	u32 ptr4;		/* 0x2c */
1755e6bacdbSHans de Goede 	u32 acmdlr;		/* 0x30 */
1765e6bacdbSHans de Goede 	u32 acbdlr;		/* 0x34 */
1775e6bacdbSHans de Goede 	u32 aciocr;		/* 0x38 */
1785e6bacdbSHans de Goede 	u32 dxccr;		/* 0x3c DATX8 common configuration register */
1795e6bacdbSHans de Goede 	u32 dsgcr;		/* 0x40 dram system general config register */
1805e6bacdbSHans de Goede 	u32 dcr;		/* 0x44 */
1815e6bacdbSHans de Goede 	u32 dtpr0;		/* 0x48 dram timing parameters register 0 */
1825e6bacdbSHans de Goede 	u32 dtpr1;		/* 0x4c dram timing parameters register 1 */
1835e6bacdbSHans de Goede 	u32 dtpr2;		/* 0x50 dram timing parameters register 2 */
1845e6bacdbSHans de Goede 	u32 mr0;		/* 0x54 mode register 0 */
1855e6bacdbSHans de Goede 	u32 mr1;		/* 0x58 mode register 1 */
1865e6bacdbSHans de Goede 	u32 mr2;		/* 0x5c mode register 2 */
1875e6bacdbSHans de Goede 	u32 mr3;		/* 0x60 mode register 3 */
1885e6bacdbSHans de Goede 	u32 odtcr;		/* 0x64 */
1895e6bacdbSHans de Goede 	u32 dtcr;		/* 0x68 */
1905e6bacdbSHans de Goede 	u32 dtar0;		/* 0x6c data training address register 0 */
1915e6bacdbSHans de Goede 	u32 dtar1;		/* 0x70 data training address register 1 */
1925e6bacdbSHans de Goede 	u32 dtar2;		/* 0x74 data training address register 2 */
1935e6bacdbSHans de Goede 	u32 dtar3;		/* 0x78 data training address register 3 */
1945e6bacdbSHans de Goede 	u32 dtdr0;		/* 0x7c */
1955e6bacdbSHans de Goede 	u32 dtdr1;		/* 0x80 */
1965e6bacdbSHans de Goede 	u32 dtedr0;		/* 0x84 */
1975e6bacdbSHans de Goede 	u32 dtedr1;		/* 0x88 */
1985e6bacdbSHans de Goede 	u32 pgcr2;		/* 0x8c */
1995e6bacdbSHans de Goede 	u8 res1[0x70];		/* 0x90 */
2005e6bacdbSHans de Goede 	u32 bistrr;		/* 0x100 */
2015e6bacdbSHans de Goede 	u32 bistwcr;		/* 0x104 */
2025e6bacdbSHans de Goede 	u32 bistmskr0;		/* 0x108 */
2035e6bacdbSHans de Goede 	u32 bistmskr1;		/* 0x10c */
2045e6bacdbSHans de Goede 	u32 bistmskr2;		/* 0x110 */
2055e6bacdbSHans de Goede 	u32 bistlsr;		/* 0x114 */
2065e6bacdbSHans de Goede 	u32 bistar0;		/* 0x118 */
2075e6bacdbSHans de Goede 	u32 bistar1;		/* 0x11c */
2085e6bacdbSHans de Goede 	u32 bistar2;		/* 0x120 */
2095e6bacdbSHans de Goede 	u32 bistupdr;		/* 0x124 */
2105e6bacdbSHans de Goede 	u32 bistgsr;		/* 0x128 */
2115e6bacdbSHans de Goede 	u32 bistwer;		/* 0x12c */
2125e6bacdbSHans de Goede 	u32 bistber0;		/* 0x130 */
2135e6bacdbSHans de Goede 	u32 bistber1;		/* 0x134 */
2145e6bacdbSHans de Goede 	u32 bistber2;		/* 0x138 */
2155e6bacdbSHans de Goede 	u32 bistber3;		/* 0x13c */
2165e6bacdbSHans de Goede 	u32 bistwcsr;		/* 0x140 */
2175e6bacdbSHans de Goede 	u32 bistfwr0;		/* 0x144 */
2185e6bacdbSHans de Goede 	u32 bistfwr1;		/* 0x148 */
2195e6bacdbSHans de Goede 	u32 bistfwr2;		/* 0x14c */
2205e6bacdbSHans de Goede 	u8 res2[0x30];		/* 0x150 */
2215e6bacdbSHans de Goede 	u32 zqcr0;		/* 0x180 zq control register 0 */
2225e6bacdbSHans de Goede 	u32 zqcr1;		/* 0x184 zq control register 1 */
2235e6bacdbSHans de Goede 	u32 zqsr0;		/* 0x188 zq status register 0 */
2245e6bacdbSHans de Goede 	u32 zqsr1;		/* 0x18c zq status register 1 */
2255e6bacdbSHans de Goede 	u32 zqcr2;		/* 0x190 zq control register 2 */
2265e6bacdbSHans de Goede 	u8 res3[0x2c];		/* 0x194 */
2275e6bacdbSHans de Goede 	u32 dx0gcr;		/* 0x1c0 */
2285e6bacdbSHans de Goede 	u32 dx0gsr0;		/* 0x1c4 */
2295e6bacdbSHans de Goede 	u32 dx0gsr1;		/* 0x1c8 */
2305e6bacdbSHans de Goede 	u32 dx0bdlr0;		/* 0x1cc */
2315e6bacdbSHans de Goede 	u32 dx0bdlr1;		/* 0x1d0 */
2325e6bacdbSHans de Goede 	u32 dx0bdlr2;		/* 0x1d4 */
2335e6bacdbSHans de Goede 	u32 dx0bdlr3;		/* 0x1d8 */
2345e6bacdbSHans de Goede 	u32 dx0bdlr4;		/* 0x1dc */
2355e6bacdbSHans de Goede 	u32 dx0lcdlr0;		/* 0x1e0 */
2365e6bacdbSHans de Goede 	u32 dx0lcdlr1;		/* 0x1e4 */
2375e6bacdbSHans de Goede 	u32 dx0lcdlr2;		/* 0x1e8 */
2385e6bacdbSHans de Goede 	u32 dx0mdlr;		/* 0x1ec */
2395e6bacdbSHans de Goede 	u32 dx0gtr;		/* 0x1f0 */
2405e6bacdbSHans de Goede 	u32 dx0gsr2;		/* 0x1f4 */
2415e6bacdbSHans de Goede 	u8 res4[0x08];		/* 0x1f8 */
2425e6bacdbSHans de Goede 	u32 dx1gcr;		/* 0x200 */
2435e6bacdbSHans de Goede 	u32 dx1gsr0;		/* 0x204 */
2445e6bacdbSHans de Goede 	u32 dx1gsr1;		/* 0x208 */
2455e6bacdbSHans de Goede 	u32 dx1bdlr0;		/* 0x20c */
2465e6bacdbSHans de Goede 	u32 dx1bdlr1;		/* 0x210 */
2475e6bacdbSHans de Goede 	u32 dx1bdlr2;		/* 0x214 */
2485e6bacdbSHans de Goede 	u32 dx1bdlr3;		/* 0x218 */
2495e6bacdbSHans de Goede 	u32 dx1bdlr4;		/* 0x21c */
2505e6bacdbSHans de Goede 	u32 dx1lcdlr0;		/* 0x220 */
2515e6bacdbSHans de Goede 	u32 dx1lcdlr1;		/* 0x224 */
2525e6bacdbSHans de Goede 	u32 dx1lcdlr2;		/* 0x228 */
2535e6bacdbSHans de Goede 	u32 dx1mdlr;		/* 0x22c */
2545e6bacdbSHans de Goede 	u32 dx1gtr;		/* 0x230 */
2555e6bacdbSHans de Goede 	u32 dx1gsr2;		/* 0x234 */
2565e6bacdbSHans de Goede };
2575e6bacdbSHans de Goede 
2585e6bacdbSHans de Goede /*
2595e6bacdbSHans de Goede  * DRAM common (sunxi_mctl_com_reg) register constants.
2605e6bacdbSHans de Goede  */
2615e6bacdbSHans de Goede #define MCTL_CR_ROW_MASK		(0xf << 4)
2625e6bacdbSHans de Goede #define MCTL_CR_ROW(x)			(((x) - 1) << 4)
2635e6bacdbSHans de Goede #define MCTL_CR_PAGE_SIZE_MASK		(0xf << 8)
2645e6bacdbSHans de Goede #define MCTL_CR_PAGE_SIZE(x)		((x) << 8)
2655e6bacdbSHans de Goede 
2665e6bacdbSHans de Goede #endif /* _SUNXI_DRAM_SUN8I_H */
267