xref: /OK3568_Linux_fs/u-boot/arch/arm/include/asm/arch-ep93xx/ep93xx.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Cirrus Logic EP93xx register definitions.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Copyright (C) 2013
5*4882a593Smuzhiyun  * Sergey Kostanbaev <sergey.kostanbaev <at> fairwaves.ru>
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Copyright (C) 2009
8*4882a593Smuzhiyun  * Matthias Kaehlcke <matthias@kaehlcke.net>
9*4882a593Smuzhiyun  *
10*4882a593Smuzhiyun  * Copyright (C) 2006
11*4882a593Smuzhiyun  * Dominic Rath <Dominic.Rath@gmx.de>
12*4882a593Smuzhiyun  *
13*4882a593Smuzhiyun  * Copyright (C) 2004, 2005
14*4882a593Smuzhiyun  * Cory T. Tusar, Videon Central, Inc., <ctusar@videon-central.com>
15*4882a593Smuzhiyun  *
16*4882a593Smuzhiyun  * Based in large part on linux/include/asm-arm/arch-ep93xx/regmap.h, which is
17*4882a593Smuzhiyun  *
18*4882a593Smuzhiyun  * Copyright (C) 2004 Ray Lehtiniemi
19*4882a593Smuzhiyun  * Copyright (C) 2003 Cirrus Logic, Inc
20*4882a593Smuzhiyun  * Copyright (C) 1999 ARM Limited.
21*4882a593Smuzhiyun  *
22*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
23*4882a593Smuzhiyun  */
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #define EP93XX_AHB_BASE			0x80000000
26*4882a593Smuzhiyun #define EP93XX_APB_BASE			0x80800000
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun /*
29*4882a593Smuzhiyun  * 0x80000000 - 0x8000FFFF: DMA
30*4882a593Smuzhiyun  */
31*4882a593Smuzhiyun #define DMA_OFFSET			0x000000
32*4882a593Smuzhiyun #define DMA_BASE			(EP93XX_AHB_BASE | DMA_OFFSET)
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun #ifndef __ASSEMBLY__
35*4882a593Smuzhiyun struct dma_channel {
36*4882a593Smuzhiyun 	uint32_t control;
37*4882a593Smuzhiyun 	uint32_t interrupt;
38*4882a593Smuzhiyun 	uint32_t ppalloc;
39*4882a593Smuzhiyun 	uint32_t status;
40*4882a593Smuzhiyun 	uint32_t reserved0;
41*4882a593Smuzhiyun 	uint32_t remain;
42*4882a593Smuzhiyun 	uint32_t reserved1[2];
43*4882a593Smuzhiyun 	uint32_t maxcnt0;
44*4882a593Smuzhiyun 	uint32_t base0;
45*4882a593Smuzhiyun 	uint32_t current0;
46*4882a593Smuzhiyun 	uint32_t reserved2;
47*4882a593Smuzhiyun 	uint32_t maxcnt1;
48*4882a593Smuzhiyun 	uint32_t base1;
49*4882a593Smuzhiyun 	uint32_t current1;
50*4882a593Smuzhiyun 	uint32_t reserved3;
51*4882a593Smuzhiyun };
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun struct dma_regs {
54*4882a593Smuzhiyun 	struct dma_channel m2p_channel_0;
55*4882a593Smuzhiyun 	struct dma_channel m2p_channel_1;
56*4882a593Smuzhiyun 	struct dma_channel m2p_channel_2;
57*4882a593Smuzhiyun 	struct dma_channel m2p_channel_3;
58*4882a593Smuzhiyun 	struct dma_channel m2m_channel_0;
59*4882a593Smuzhiyun 	struct dma_channel m2m_channel_1;
60*4882a593Smuzhiyun 	struct dma_channel reserved0[2];
61*4882a593Smuzhiyun 	struct dma_channel m2p_channel_5;
62*4882a593Smuzhiyun 	struct dma_channel m2p_channel_4;
63*4882a593Smuzhiyun 	struct dma_channel m2p_channel_7;
64*4882a593Smuzhiyun 	struct dma_channel m2p_channel_6;
65*4882a593Smuzhiyun 	struct dma_channel m2p_channel_9;
66*4882a593Smuzhiyun 	struct dma_channel m2p_channel_8;
67*4882a593Smuzhiyun 	uint32_t channel_arbitration;
68*4882a593Smuzhiyun 	uint32_t reserved[15];
69*4882a593Smuzhiyun 	uint32_t global_interrupt;
70*4882a593Smuzhiyun };
71*4882a593Smuzhiyun #endif
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun /*
74*4882a593Smuzhiyun  * 0x80010000 - 0x8001FFFF: Ethernet MAC
75*4882a593Smuzhiyun  */
76*4882a593Smuzhiyun #define MAC_OFFSET			0x010000
77*4882a593Smuzhiyun #define MAC_BASE			(EP93XX_AHB_BASE | MAC_OFFSET)
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun #ifndef __ASSEMBLY__
80*4882a593Smuzhiyun struct mac_queue {
81*4882a593Smuzhiyun 	uint32_t badd;
82*4882a593Smuzhiyun 	union { /* deal with half-word aligned registers */
83*4882a593Smuzhiyun 		uint32_t blen;
84*4882a593Smuzhiyun 		union {
85*4882a593Smuzhiyun 			uint16_t filler;
86*4882a593Smuzhiyun 			uint16_t curlen;
87*4882a593Smuzhiyun 		};
88*4882a593Smuzhiyun 	};
89*4882a593Smuzhiyun 	uint32_t curadd;
90*4882a593Smuzhiyun };
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun struct mac_regs {
93*4882a593Smuzhiyun 	uint32_t rxctl;
94*4882a593Smuzhiyun 	uint32_t txctl;
95*4882a593Smuzhiyun 	uint32_t testctl;
96*4882a593Smuzhiyun 	uint32_t reserved0;
97*4882a593Smuzhiyun 	uint32_t miicmd;
98*4882a593Smuzhiyun 	uint32_t miidata;
99*4882a593Smuzhiyun 	uint32_t miists;
100*4882a593Smuzhiyun 	uint32_t reserved1;
101*4882a593Smuzhiyun 	uint32_t selfctl;
102*4882a593Smuzhiyun 	uint32_t inten;
103*4882a593Smuzhiyun 	uint32_t intstsp;
104*4882a593Smuzhiyun 	uint32_t intstsc;
105*4882a593Smuzhiyun 	uint32_t reserved2[2];
106*4882a593Smuzhiyun 	uint32_t diagad;
107*4882a593Smuzhiyun 	uint32_t diagdata;
108*4882a593Smuzhiyun 	uint32_t gt;
109*4882a593Smuzhiyun 	uint32_t fct;
110*4882a593Smuzhiyun 	uint32_t fcf;
111*4882a593Smuzhiyun 	uint32_t afp;
112*4882a593Smuzhiyun 	union {
113*4882a593Smuzhiyun 		struct {
114*4882a593Smuzhiyun 			uint32_t indad;
115*4882a593Smuzhiyun 			uint32_t indad_upper;
116*4882a593Smuzhiyun 		};
117*4882a593Smuzhiyun 		uint32_t hashtbl;
118*4882a593Smuzhiyun 	};
119*4882a593Smuzhiyun 	uint32_t reserved3[2];
120*4882a593Smuzhiyun 	uint32_t giintsts;
121*4882a593Smuzhiyun 	uint32_t giintmsk;
122*4882a593Smuzhiyun 	uint32_t giintrosts;
123*4882a593Smuzhiyun 	uint32_t giintfrc;
124*4882a593Smuzhiyun 	uint32_t txcollcnt;
125*4882a593Smuzhiyun 	uint32_t rxmissnct;
126*4882a593Smuzhiyun 	uint32_t rxruntcnt;
127*4882a593Smuzhiyun 	uint32_t reserved4;
128*4882a593Smuzhiyun 	uint32_t bmctl;
129*4882a593Smuzhiyun 	uint32_t bmsts;
130*4882a593Smuzhiyun 	uint32_t rxbca;
131*4882a593Smuzhiyun 	uint32_t reserved5;
132*4882a593Smuzhiyun 	struct mac_queue rxdq;
133*4882a593Smuzhiyun 	uint32_t rxdqenq;
134*4882a593Smuzhiyun 	struct mac_queue rxstsq;
135*4882a593Smuzhiyun 	uint32_t rxstsqenq;
136*4882a593Smuzhiyun 	struct mac_queue txdq;
137*4882a593Smuzhiyun 	uint32_t txdqenq;
138*4882a593Smuzhiyun 	struct mac_queue txstsq;
139*4882a593Smuzhiyun 	uint32_t reserved6;
140*4882a593Smuzhiyun 	uint32_t rxbufthrshld;
141*4882a593Smuzhiyun 	uint32_t txbufthrshld;
142*4882a593Smuzhiyun 	uint32_t rxststhrshld;
143*4882a593Smuzhiyun 	uint32_t txststhrshld;
144*4882a593Smuzhiyun 	uint32_t rxdthrshld;
145*4882a593Smuzhiyun 	uint32_t txdthrshld;
146*4882a593Smuzhiyun 	uint32_t maxfrmlen;
147*4882a593Smuzhiyun 	uint32_t maxhdrlen;
148*4882a593Smuzhiyun };
149*4882a593Smuzhiyun #endif
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun #define SELFCTL_RWP		(1 << 7)
152*4882a593Smuzhiyun #define SELFCTL_GPO0		(1 << 5)
153*4882a593Smuzhiyun #define SELFCTL_PUWE		(1 << 4)
154*4882a593Smuzhiyun #define SELFCTL_PDWE		(1 << 3)
155*4882a593Smuzhiyun #define SELFCTL_MIIL		(1 << 2)
156*4882a593Smuzhiyun #define SELFCTL_RESET		(1 << 0)
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun #define INTSTS_RWI		(1 << 30)
159*4882a593Smuzhiyun #define INTSTS_RXMI		(1 << 29)
160*4882a593Smuzhiyun #define INTSTS_RXBI		(1 << 28)
161*4882a593Smuzhiyun #define INTSTS_RXSQI		(1 << 27)
162*4882a593Smuzhiyun #define INTSTS_TXLEI		(1 << 26)
163*4882a593Smuzhiyun #define INTSTS_ECIE		(1 << 25)
164*4882a593Smuzhiyun #define INTSTS_TXUHI		(1 << 24)
165*4882a593Smuzhiyun #define INTSTS_MOI		(1 << 18)
166*4882a593Smuzhiyun #define INTSTS_TXCOI		(1 << 17)
167*4882a593Smuzhiyun #define INTSTS_RXROI		(1 << 16)
168*4882a593Smuzhiyun #define INTSTS_MIII		(1 << 12)
169*4882a593Smuzhiyun #define INTSTS_PHYI		(1 << 11)
170*4882a593Smuzhiyun #define INTSTS_TI		(1 << 10)
171*4882a593Smuzhiyun #define INTSTS_AHBE		(1 << 8)
172*4882a593Smuzhiyun #define INTSTS_OTHER		(1 << 4)
173*4882a593Smuzhiyun #define INTSTS_TXSQ		(1 << 3)
174*4882a593Smuzhiyun #define INTSTS_RXSQ		(1 << 2)
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun #define BMCTL_MT		(1 << 13)
177*4882a593Smuzhiyun #define BMCTL_TT		(1 << 12)
178*4882a593Smuzhiyun #define BMCTL_UNH		(1 << 11)
179*4882a593Smuzhiyun #define BMCTL_TXCHR		(1 << 10)
180*4882a593Smuzhiyun #define BMCTL_TXDIS		(1 << 9)
181*4882a593Smuzhiyun #define BMCTL_TXEN		(1 << 8)
182*4882a593Smuzhiyun #define BMCTL_EH2		(1 << 6)
183*4882a593Smuzhiyun #define BMCTL_EH1		(1 << 5)
184*4882a593Smuzhiyun #define BMCTL_EEOB		(1 << 4)
185*4882a593Smuzhiyun #define BMCTL_RXCHR		(1 << 2)
186*4882a593Smuzhiyun #define BMCTL_RXDIS		(1 << 1)
187*4882a593Smuzhiyun #define BMCTL_RXEN		(1 << 0)
188*4882a593Smuzhiyun 
189*4882a593Smuzhiyun #define BMSTS_TXACT		(1 << 7)
190*4882a593Smuzhiyun #define BMSTS_TP		(1 << 4)
191*4882a593Smuzhiyun #define BMSTS_RXACT		(1 << 3)
192*4882a593Smuzhiyun #define BMSTS_QID_MASK		0x07
193*4882a593Smuzhiyun #define BMSTS_QID_RXDATA	0x00
194*4882a593Smuzhiyun #define BMSTS_QID_TXDATA	0x01
195*4882a593Smuzhiyun #define BMSTS_QID_RXSTS		0x02
196*4882a593Smuzhiyun #define BMSTS_QID_TXSTS		0x03
197*4882a593Smuzhiyun #define BMSTS_QID_RXDESC	0x04
198*4882a593Smuzhiyun #define BMSTS_QID_TXDESC	0x05
199*4882a593Smuzhiyun 
200*4882a593Smuzhiyun #define AFP_MASK		0x07
201*4882a593Smuzhiyun #define AFP_IAPRIMARY		0x00
202*4882a593Smuzhiyun #define AFP_IASECONDARY1	0x01
203*4882a593Smuzhiyun #define AFP_IASECONDARY2	0x02
204*4882a593Smuzhiyun #define AFP_IASECONDARY3	0x03
205*4882a593Smuzhiyun #define AFP_TX			0x06
206*4882a593Smuzhiyun #define AFP_HASH		0x07
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun #define RXCTL_PAUSEA		(1 << 20)
209*4882a593Smuzhiyun #define RXCTL_RXFCE1		(1 << 19)
210*4882a593Smuzhiyun #define RXCTL_RXFCE0		(1 << 18)
211*4882a593Smuzhiyun #define RXCTL_BCRC		(1 << 17)
212*4882a593Smuzhiyun #define RXCTL_SRXON		(1 << 16)
213*4882a593Smuzhiyun #define RXCTL_RCRCA		(1 << 13)
214*4882a593Smuzhiyun #define RXCTL_RA		(1 << 12)
215*4882a593Smuzhiyun #define RXCTL_PA		(1 << 11)
216*4882a593Smuzhiyun #define RXCTL_BA		(1 << 10)
217*4882a593Smuzhiyun #define RXCTL_MA		(1 << 9)
218*4882a593Smuzhiyun #define RXCTL_IAHA		(1 << 8)
219*4882a593Smuzhiyun #define RXCTL_IA3		(1 << 3)
220*4882a593Smuzhiyun #define RXCTL_IA2		(1 << 2)
221*4882a593Smuzhiyun #define RXCTL_IA1		(1 << 1)
222*4882a593Smuzhiyun #define RXCTL_IA0		(1 << 0)
223*4882a593Smuzhiyun 
224*4882a593Smuzhiyun #define TXCTL_DEFDIS		(1 << 7)
225*4882a593Smuzhiyun #define TXCTL_MBE		(1 << 6)
226*4882a593Smuzhiyun #define TXCTL_ICRC		(1 << 5)
227*4882a593Smuzhiyun #define TXCTL_TPD		(1 << 4)
228*4882a593Smuzhiyun #define TXCTL_OCOLL		(1 << 3)
229*4882a593Smuzhiyun #define TXCTL_SP		(1 << 2)
230*4882a593Smuzhiyun #define TXCTL_PB		(1 << 1)
231*4882a593Smuzhiyun #define TXCTL_STXON		(1 << 0)
232*4882a593Smuzhiyun 
233*4882a593Smuzhiyun #define MIICMD_REGAD_MASK	(0x001F)
234*4882a593Smuzhiyun #define MIICMD_PHYAD_MASK	(0x03E0)
235*4882a593Smuzhiyun #define MIICMD_OPCODE_MASK	(0xC000)
236*4882a593Smuzhiyun #define MIICMD_PHYAD_8950	(0x0000)
237*4882a593Smuzhiyun #define MIICMD_OPCODE_READ	(0x8000)
238*4882a593Smuzhiyun #define MIICMD_OPCODE_WRITE	(0x4000)
239*4882a593Smuzhiyun 
240*4882a593Smuzhiyun #define MIISTS_BUSY		(1 << 0)
241*4882a593Smuzhiyun 
242*4882a593Smuzhiyun /*
243*4882a593Smuzhiyun  * 0x80020000 - 0x8002FFFF: USB OHCI
244*4882a593Smuzhiyun  */
245*4882a593Smuzhiyun #define USB_OFFSET			0x020000
246*4882a593Smuzhiyun #define USB_BASE			(EP93XX_AHB_BASE | USB_OFFSET)
247*4882a593Smuzhiyun 
248*4882a593Smuzhiyun /*
249*4882a593Smuzhiyun  * 0x80030000 - 0x8003FFFF: Raster engine
250*4882a593Smuzhiyun  */
251*4882a593Smuzhiyun #if (defined(CONFIG_EP9307) || defined(CONFIG_EP9312) || defined(CONFIG_EP9315))
252*4882a593Smuzhiyun #define RASTER_OFFSET			0x030000
253*4882a593Smuzhiyun #define RASTER_BASE			(EP93XX_AHB_BASE | RASTER_OFFSET)
254*4882a593Smuzhiyun #endif
255*4882a593Smuzhiyun 
256*4882a593Smuzhiyun /*
257*4882a593Smuzhiyun  * 0x80040000 - 0x8004FFFF: Graphics accelerator
258*4882a593Smuzhiyun  */
259*4882a593Smuzhiyun #if defined(CONFIG_EP9315)
260*4882a593Smuzhiyun #define GFX_OFFSET			0x040000
261*4882a593Smuzhiyun #define GFX_BASE			(EP93XX_AHB_BASE | GFX_OFFSET)
262*4882a593Smuzhiyun #endif
263*4882a593Smuzhiyun 
264*4882a593Smuzhiyun /*
265*4882a593Smuzhiyun  * 0x80050000 - 0x8005FFFF: Reserved
266*4882a593Smuzhiyun  */
267*4882a593Smuzhiyun 
268*4882a593Smuzhiyun /*
269*4882a593Smuzhiyun  * 0x80060000 - 0x8006FFFF: SDRAM controller
270*4882a593Smuzhiyun  */
271*4882a593Smuzhiyun #define SDRAM_OFFSET			0x060000
272*4882a593Smuzhiyun #define SDRAM_BASE			(EP93XX_AHB_BASE | SDRAM_OFFSET)
273*4882a593Smuzhiyun 
274*4882a593Smuzhiyun #ifndef __ASSEMBLY__
275*4882a593Smuzhiyun struct sdram_regs {
276*4882a593Smuzhiyun 	uint32_t reserved;
277*4882a593Smuzhiyun 	uint32_t glconfig;
278*4882a593Smuzhiyun 	uint32_t refrshtimr;
279*4882a593Smuzhiyun 	uint32_t bootsts;
280*4882a593Smuzhiyun 	uint32_t devcfg0;
281*4882a593Smuzhiyun 	uint32_t devcfg1;
282*4882a593Smuzhiyun 	uint32_t devcfg2;
283*4882a593Smuzhiyun 	uint32_t devcfg3;
284*4882a593Smuzhiyun };
285*4882a593Smuzhiyun #endif
286*4882a593Smuzhiyun 
287*4882a593Smuzhiyun #define SDRAM_DEVCFG_EXTBUSWIDTH	(1 << 2)
288*4882a593Smuzhiyun #define SDRAM_DEVCFG_BANKCOUNT		(1 << 3)
289*4882a593Smuzhiyun #define SDRAM_DEVCFG_SROMLL		(1 << 5)
290*4882a593Smuzhiyun #define SDRAM_DEVCFG_CASLAT_2		0x00010000
291*4882a593Smuzhiyun #define SDRAM_DEVCFG_RASTOCAS_2		0x00200000
292*4882a593Smuzhiyun 
293*4882a593Smuzhiyun #define SDRAM_OFF_GLCONFIG		0x0004
294*4882a593Smuzhiyun #define SDRAM_OFF_REFRSHTIMR		0x0008
295*4882a593Smuzhiyun 
296*4882a593Smuzhiyun #define SDRAM_OFF_DEVCFG0		0x0010
297*4882a593Smuzhiyun #define SDRAM_OFF_DEVCFG1		0x0014
298*4882a593Smuzhiyun #define SDRAM_OFF_DEVCFG2		0x0018
299*4882a593Smuzhiyun #define SDRAM_OFF_DEVCFG3		0x001C
300*4882a593Smuzhiyun 
301*4882a593Smuzhiyun #define SDRAM_DEVCFG0_BASE		0xC0000000
302*4882a593Smuzhiyun #define SDRAM_DEVCFG1_BASE		0xD0000000
303*4882a593Smuzhiyun #define SDRAM_DEVCFG2_BASE		0xE0000000
304*4882a593Smuzhiyun #define SDRAM_DEVCFG3_ASD0_BASE		0xF0000000
305*4882a593Smuzhiyun #define SDRAM_DEVCFG3_ASD1_BASE		0x00000000
306*4882a593Smuzhiyun 
307*4882a593Smuzhiyun #define GLCONFIG_INIT			(1 << 0)
308*4882a593Smuzhiyun #define GLCONFIG_MRS			(1 << 1)
309*4882a593Smuzhiyun #define GLCONFIG_SMEMBUSY		(1 << 5)
310*4882a593Smuzhiyun #define GLCONFIG_LCR			(1 << 6)
311*4882a593Smuzhiyun #define GLCONFIG_REARBEN		(1 << 7)
312*4882a593Smuzhiyun #define GLCONFIG_CLKSHUTDOWN		(1 << 30)
313*4882a593Smuzhiyun #define GLCONFIG_CKE			(1 << 31)
314*4882a593Smuzhiyun 
315*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL			0x80060000
316*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_GLOBALCFG_INIT		0x00000001
317*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_GLOBALCFG_MRS		0x00000002
318*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_GLOBALCFG_SMEMBUSY	0x00000020
319*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_GLOBALCFG_LCR		0x00000040
320*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_GLOBALCFG_REARBEN	0x00000080
321*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_GLOBALCFG_CLKSHUTDOWN	0x40000000
322*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_GLOBALCFG_CKE		0x80000000
323*4882a593Smuzhiyun 
324*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_REFRESH_MASK		0x0000FFFF
325*4882a593Smuzhiyun 
326*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_BOOTSTATUS_WIDTH_32	0x00000002
327*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_BOOTSTATUS_WIDTH_16	0x00000001
328*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_BOOTSTATUS_WIDTH_8	0x00000000
329*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_BOOTSTATUS_WIDTH_MASK	0x00000003
330*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_BOOTSTATUS_MEDIA	0x00000004
331*4882a593Smuzhiyun 
332*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_EXTBUSWIDTH	0x00000004
333*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_BANKCOUNT	0x00000008
334*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_SROM512		0x00000010
335*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_SROMLL		0x00000020
336*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_2KPAGE		0x00000040
337*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_SFCONFIGADDR	0x00000080
338*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_MASK	0x00070000
339*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_2	0x00010000
340*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_3	0x00020000
341*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_4	0x00030000
342*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_5	0x00040000
343*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_6	0x00050000
344*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_7	0x00060000
345*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_8	0x00070000
346*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_WBL		0x00080000
347*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_RASTOCAS_MASK	0x00300000
348*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_RASTOCAS_2	0x00200000
349*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_RASTOCAS_3	0x00300000
350*4882a593Smuzhiyun #define EP93XX_SDRAMCTRL_DEVCFG_AUTOPRECHARGE	0x01000000
351*4882a593Smuzhiyun 
352*4882a593Smuzhiyun /*
353*4882a593Smuzhiyun  * 0x80070000 - 0x8007FFFF: Reserved
354*4882a593Smuzhiyun  */
355*4882a593Smuzhiyun 
356*4882a593Smuzhiyun /*
357*4882a593Smuzhiyun  * 0x80080000 - 0x8008FFFF: SRAM controller & PCMCIA
358*4882a593Smuzhiyun  */
359*4882a593Smuzhiyun #define SMC_OFFSET			0x080000
360*4882a593Smuzhiyun #define SMC_BASE			(EP93XX_AHB_BASE | SMC_OFFSET)
361*4882a593Smuzhiyun 
362*4882a593Smuzhiyun #ifndef __ASSEMBLY__
363*4882a593Smuzhiyun struct smc_regs {
364*4882a593Smuzhiyun 	uint32_t bcr0;
365*4882a593Smuzhiyun 	uint32_t bcr1;
366*4882a593Smuzhiyun 	uint32_t bcr2;
367*4882a593Smuzhiyun 	uint32_t bcr3;
368*4882a593Smuzhiyun 	uint32_t reserved0[2];
369*4882a593Smuzhiyun 	uint32_t bcr6;
370*4882a593Smuzhiyun 	uint32_t bcr7;
371*4882a593Smuzhiyun #if defined(CONFIG_EP9315)
372*4882a593Smuzhiyun 	uint32_t pcattribute;
373*4882a593Smuzhiyun 	uint32_t pccommon;
374*4882a593Smuzhiyun 	uint32_t pcio;
375*4882a593Smuzhiyun 	uint32_t reserved1[5];
376*4882a593Smuzhiyun 	uint32_t pcmciactrl;
377*4882a593Smuzhiyun #endif
378*4882a593Smuzhiyun };
379*4882a593Smuzhiyun #endif
380*4882a593Smuzhiyun 
381*4882a593Smuzhiyun #define EP93XX_OFF_SMCBCR0		0x00
382*4882a593Smuzhiyun #define EP93XX_OFF_SMCBCR1		0x04
383*4882a593Smuzhiyun #define EP93XX_OFF_SMCBCR2		0x08
384*4882a593Smuzhiyun #define EP93XX_OFF_SMCBCR3		0x0C
385*4882a593Smuzhiyun #define EP93XX_OFF_SMCBCR6		0x18
386*4882a593Smuzhiyun #define EP93XX_OFF_SMCBCR7		0x1C
387*4882a593Smuzhiyun 
388*4882a593Smuzhiyun #define SMC_BCR_IDCY_SHIFT	0
389*4882a593Smuzhiyun #define SMC_BCR_WST1_SHIFT	5
390*4882a593Smuzhiyun #define SMC_BCR_BLE		(1 << 10)
391*4882a593Smuzhiyun #define SMC_BCR_WST2_SHIFT	11
392*4882a593Smuzhiyun #define SMC_BCR_MW_SHIFT	28
393*4882a593Smuzhiyun 
394*4882a593Smuzhiyun /*
395*4882a593Smuzhiyun  * 0x80090000 - 0x8009FFFF: Boot ROM
396*4882a593Smuzhiyun  */
397*4882a593Smuzhiyun 
398*4882a593Smuzhiyun /*
399*4882a593Smuzhiyun  * 0x800A0000 - 0x800AFFFF: IDE interface
400*4882a593Smuzhiyun  */
401*4882a593Smuzhiyun 
402*4882a593Smuzhiyun /*
403*4882a593Smuzhiyun  * 0x800B0000 - 0x800BFFFF: VIC1
404*4882a593Smuzhiyun  */
405*4882a593Smuzhiyun 
406*4882a593Smuzhiyun /*
407*4882a593Smuzhiyun  * 0x800C0000 - 0x800CFFFF: VIC2
408*4882a593Smuzhiyun  */
409*4882a593Smuzhiyun 
410*4882a593Smuzhiyun /*
411*4882a593Smuzhiyun  * 0x800D0000 - 0x800FFFFF: Reserved
412*4882a593Smuzhiyun  */
413*4882a593Smuzhiyun 
414*4882a593Smuzhiyun /*
415*4882a593Smuzhiyun  * 0x80800000 - 0x8080FFFF: Reserved
416*4882a593Smuzhiyun  */
417*4882a593Smuzhiyun 
418*4882a593Smuzhiyun /*
419*4882a593Smuzhiyun  * 0x80810000 - 0x8081FFFF: Timers
420*4882a593Smuzhiyun  */
421*4882a593Smuzhiyun #define TIMER_OFFSET		0x010000
422*4882a593Smuzhiyun #define TIMER_BASE		(EP93XX_APB_BASE | TIMER_OFFSET)
423*4882a593Smuzhiyun 
424*4882a593Smuzhiyun #ifndef __ASSEMBLY__
425*4882a593Smuzhiyun struct timer {
426*4882a593Smuzhiyun 	uint32_t load;
427*4882a593Smuzhiyun 	uint32_t value;
428*4882a593Smuzhiyun 	uint32_t control;
429*4882a593Smuzhiyun 	uint32_t clear;
430*4882a593Smuzhiyun };
431*4882a593Smuzhiyun 
432*4882a593Smuzhiyun struct timer4 {
433*4882a593Smuzhiyun 	uint32_t value_low;
434*4882a593Smuzhiyun 	uint32_t value_high;
435*4882a593Smuzhiyun };
436*4882a593Smuzhiyun 
437*4882a593Smuzhiyun struct timer_regs {
438*4882a593Smuzhiyun 	struct timer timer1;
439*4882a593Smuzhiyun 	uint32_t reserved0[4];
440*4882a593Smuzhiyun 	struct timer timer2;
441*4882a593Smuzhiyun 	uint32_t reserved1[12];
442*4882a593Smuzhiyun 	struct timer4 timer4;
443*4882a593Smuzhiyun 	uint32_t reserved2[6];
444*4882a593Smuzhiyun 	struct timer timer3;
445*4882a593Smuzhiyun };
446*4882a593Smuzhiyun #endif
447*4882a593Smuzhiyun 
448*4882a593Smuzhiyun /*
449*4882a593Smuzhiyun  * 0x80820000 - 0x8082FFFF: I2S
450*4882a593Smuzhiyun  */
451*4882a593Smuzhiyun #define I2S_OFFSET		0x020000
452*4882a593Smuzhiyun #define I2S_BASE		(EP93XX_APB_BASE | I2S_OFFSET)
453*4882a593Smuzhiyun 
454*4882a593Smuzhiyun /*
455*4882a593Smuzhiyun  * 0x80830000 - 0x8083FFFF: Security
456*4882a593Smuzhiyun  */
457*4882a593Smuzhiyun #define SECURITY_OFFSET		0x030000
458*4882a593Smuzhiyun #define SECURITY_BASE		(EP93XX_APB_BASE | SECURITY_OFFSET)
459*4882a593Smuzhiyun 
460*4882a593Smuzhiyun #define EXTENSIONID		(SECURITY_BASE + 0x2714)
461*4882a593Smuzhiyun 
462*4882a593Smuzhiyun /*
463*4882a593Smuzhiyun  * 0x80840000 - 0x8084FFFF: GPIO
464*4882a593Smuzhiyun  */
465*4882a593Smuzhiyun #define GPIO_OFFSET		0x040000
466*4882a593Smuzhiyun #define GPIO_BASE		(EP93XX_APB_BASE | GPIO_OFFSET)
467*4882a593Smuzhiyun 
468*4882a593Smuzhiyun #ifndef __ASSEMBLY__
469*4882a593Smuzhiyun struct gpio_int {
470*4882a593Smuzhiyun 	uint32_t inttype1;
471*4882a593Smuzhiyun 	uint32_t inttype2;
472*4882a593Smuzhiyun 	uint32_t eoi;
473*4882a593Smuzhiyun 	uint32_t inten;
474*4882a593Smuzhiyun 	uint32_t intsts;
475*4882a593Smuzhiyun 	uint32_t rawintsts;
476*4882a593Smuzhiyun 	uint32_t db;
477*4882a593Smuzhiyun };
478*4882a593Smuzhiyun 
479*4882a593Smuzhiyun struct gpio_regs {
480*4882a593Smuzhiyun 	uint32_t padr;
481*4882a593Smuzhiyun 	uint32_t pbdr;
482*4882a593Smuzhiyun 	uint32_t pcdr;
483*4882a593Smuzhiyun 	uint32_t pddr;
484*4882a593Smuzhiyun 	uint32_t paddr;
485*4882a593Smuzhiyun 	uint32_t pbddr;
486*4882a593Smuzhiyun 	uint32_t pcddr;
487*4882a593Smuzhiyun 	uint32_t pdddr;
488*4882a593Smuzhiyun 	uint32_t pedr;
489*4882a593Smuzhiyun 	uint32_t peddr;
490*4882a593Smuzhiyun 	uint32_t reserved0[2];
491*4882a593Smuzhiyun 	uint32_t pfdr;
492*4882a593Smuzhiyun 	uint32_t pfddr;
493*4882a593Smuzhiyun 	uint32_t pgdr;
494*4882a593Smuzhiyun 	uint32_t pgddr;
495*4882a593Smuzhiyun 	uint32_t phdr;
496*4882a593Smuzhiyun 	uint32_t phddr;
497*4882a593Smuzhiyun 	uint32_t reserved1;
498*4882a593Smuzhiyun 	uint32_t finttype1;
499*4882a593Smuzhiyun 	uint32_t finttype2;
500*4882a593Smuzhiyun 	uint32_t reserved2;
501*4882a593Smuzhiyun 	struct gpio_int pfint;
502*4882a593Smuzhiyun 	uint32_t reserved3[10];
503*4882a593Smuzhiyun 	struct gpio_int paint;
504*4882a593Smuzhiyun 	struct gpio_int pbint;
505*4882a593Smuzhiyun 	uint32_t eedrive;
506*4882a593Smuzhiyun };
507*4882a593Smuzhiyun #endif
508*4882a593Smuzhiyun 
509*4882a593Smuzhiyun #define EP93XX_LED_DATA		0x80840020
510*4882a593Smuzhiyun #define EP93XX_LED_GREEN_ON	0x0001
511*4882a593Smuzhiyun #define EP93XX_LED_RED_ON	0x0002
512*4882a593Smuzhiyun 
513*4882a593Smuzhiyun #define EP93XX_LED_DDR		0x80840024
514*4882a593Smuzhiyun #define EP93XX_LED_GREEN_ENABLE	0x0001
515*4882a593Smuzhiyun #define EP93XX_LED_RED_ENABLE	0x00020000
516*4882a593Smuzhiyun 
517*4882a593Smuzhiyun /*
518*4882a593Smuzhiyun  * 0x80850000 - 0x8087FFFF: Reserved
519*4882a593Smuzhiyun  */
520*4882a593Smuzhiyun 
521*4882a593Smuzhiyun /*
522*4882a593Smuzhiyun  * 0x80880000 - 0x8088FFFF: AAC
523*4882a593Smuzhiyun  */
524*4882a593Smuzhiyun #define AAC_OFFSET		0x080000
525*4882a593Smuzhiyun #define AAC_BASE		(EP93XX_APB_BASE | AAC_OFFSET)
526*4882a593Smuzhiyun 
527*4882a593Smuzhiyun /*
528*4882a593Smuzhiyun  * 0x80890000 - 0x8089FFFF: Reserved
529*4882a593Smuzhiyun  */
530*4882a593Smuzhiyun 
531*4882a593Smuzhiyun /*
532*4882a593Smuzhiyun  * 0x808A0000 - 0x808AFFFF: SPI
533*4882a593Smuzhiyun  */
534*4882a593Smuzhiyun #define SPI_OFFSET		0x0A0000
535*4882a593Smuzhiyun #define SPI_BASE		(EP93XX_APB_BASE | SPI_OFFSET)
536*4882a593Smuzhiyun 
537*4882a593Smuzhiyun /*
538*4882a593Smuzhiyun  * 0x808B0000 - 0x808BFFFF: IrDA
539*4882a593Smuzhiyun  */
540*4882a593Smuzhiyun #define IRDA_OFFSET		0x0B0000
541*4882a593Smuzhiyun #define IRDA_BASE		(EP93XX_APB_BASE | IRDA_OFFSET)
542*4882a593Smuzhiyun 
543*4882a593Smuzhiyun /*
544*4882a593Smuzhiyun  * 0x808C0000 - 0x808CFFFF: UART1
545*4882a593Smuzhiyun  */
546*4882a593Smuzhiyun #define UART1_OFFSET		0x0C0000
547*4882a593Smuzhiyun #define UART1_BASE		(EP93XX_APB_BASE | UART1_OFFSET)
548*4882a593Smuzhiyun 
549*4882a593Smuzhiyun /*
550*4882a593Smuzhiyun  * 0x808D0000 - 0x808DFFFF: UART2
551*4882a593Smuzhiyun  */
552*4882a593Smuzhiyun #define UART2_OFFSET		0x0D0000
553*4882a593Smuzhiyun #define UART2_BASE		(EP93XX_APB_BASE | UART2_OFFSET)
554*4882a593Smuzhiyun 
555*4882a593Smuzhiyun /*
556*4882a593Smuzhiyun  * 0x808E0000 - 0x808EFFFF: UART3
557*4882a593Smuzhiyun  */
558*4882a593Smuzhiyun #define UART3_OFFSET		0x0E0000
559*4882a593Smuzhiyun #define UART3_BASE		(EP93XX_APB_BASE | UART3_OFFSET)
560*4882a593Smuzhiyun 
561*4882a593Smuzhiyun /*
562*4882a593Smuzhiyun  * 0x808F0000 - 0x808FFFFF: Key Matrix
563*4882a593Smuzhiyun  */
564*4882a593Smuzhiyun #define KEY_OFFSET		0x0F0000
565*4882a593Smuzhiyun #define KEY_BASE		(EP93XX_APB_BASE | KEY_OFFSET)
566*4882a593Smuzhiyun 
567*4882a593Smuzhiyun /*
568*4882a593Smuzhiyun  * 0x80900000 - 0x8090FFFF: Touchscreen
569*4882a593Smuzhiyun  */
570*4882a593Smuzhiyun #define TOUCH_OFFSET		0x900000
571*4882a593Smuzhiyun #define TOUCH_BASE		(EP93XX_APB_BASE | TOUCH_OFFSET)
572*4882a593Smuzhiyun 
573*4882a593Smuzhiyun /*
574*4882a593Smuzhiyun  * 0x80910000 - 0x8091FFFF: Pulse Width Modulation
575*4882a593Smuzhiyun  */
576*4882a593Smuzhiyun #define PWM_OFFSET		0x910000
577*4882a593Smuzhiyun #define PWM_BASE		(EP93XX_APB_BASE | PWM_OFFSET)
578*4882a593Smuzhiyun 
579*4882a593Smuzhiyun /*
580*4882a593Smuzhiyun  * 0x80920000 - 0x8092FFFF: Real time clock
581*4882a593Smuzhiyun  */
582*4882a593Smuzhiyun #define RTC_OFFSET		0x920000
583*4882a593Smuzhiyun #define RTC_BASE		(EP93XX_APB_BASE | RTC_OFFSET)
584*4882a593Smuzhiyun 
585*4882a593Smuzhiyun /*
586*4882a593Smuzhiyun  * 0x80930000 - 0x8093FFFF: Syscon
587*4882a593Smuzhiyun  */
588*4882a593Smuzhiyun #define SYSCON_OFFSET		0x930000
589*4882a593Smuzhiyun #define SYSCON_BASE		(EP93XX_APB_BASE | SYSCON_OFFSET)
590*4882a593Smuzhiyun 
591*4882a593Smuzhiyun /* Security */
592*4882a593Smuzhiyun #define SECURITY_EXTENSIONID	0x80832714
593*4882a593Smuzhiyun 
594*4882a593Smuzhiyun #ifndef __ASSEMBLY__
595*4882a593Smuzhiyun struct syscon_regs {
596*4882a593Smuzhiyun 	uint32_t pwrsts;
597*4882a593Smuzhiyun 	uint32_t pwrcnt;
598*4882a593Smuzhiyun 	uint32_t halt;
599*4882a593Smuzhiyun 	uint32_t stby;
600*4882a593Smuzhiyun 	uint32_t reserved0[2];
601*4882a593Smuzhiyun 	uint32_t teoi;
602*4882a593Smuzhiyun 	uint32_t stfclr;
603*4882a593Smuzhiyun 	uint32_t clkset1;
604*4882a593Smuzhiyun 	uint32_t clkset2;
605*4882a593Smuzhiyun 	uint32_t reserved1[6];
606*4882a593Smuzhiyun 	uint32_t scratch0;
607*4882a593Smuzhiyun 	uint32_t scratch1;
608*4882a593Smuzhiyun 	uint32_t reserved2[2];
609*4882a593Smuzhiyun 	uint32_t apbwait;
610*4882a593Smuzhiyun 	uint32_t bustmstrarb;
611*4882a593Smuzhiyun 	uint32_t bootmodeclr;
612*4882a593Smuzhiyun 	uint32_t reserved3[9];
613*4882a593Smuzhiyun 	uint32_t devicecfg;
614*4882a593Smuzhiyun 	uint32_t vidclkdiv;
615*4882a593Smuzhiyun 	uint32_t mirclkdiv;
616*4882a593Smuzhiyun 	uint32_t i2sclkdiv;
617*4882a593Smuzhiyun 	uint32_t keytchclkdiv;
618*4882a593Smuzhiyun 	uint32_t chipid;
619*4882a593Smuzhiyun 	uint32_t reserved4;
620*4882a593Smuzhiyun 	uint32_t syscfg;
621*4882a593Smuzhiyun 	uint32_t reserved5[8];
622*4882a593Smuzhiyun 	uint32_t sysswlock;
623*4882a593Smuzhiyun };
624*4882a593Smuzhiyun #else
625*4882a593Smuzhiyun #define SYSCON_SCRATCH0		(SYSCON_BASE + 0x0040)
626*4882a593Smuzhiyun #endif
627*4882a593Smuzhiyun 
628*4882a593Smuzhiyun #define SYSCON_OFF_CLKSET1			0x0020
629*4882a593Smuzhiyun #define SYSCON_OFF_SYSCFG			0x009c
630*4882a593Smuzhiyun 
631*4882a593Smuzhiyun #define SYSCON_PWRCNT_UART_BAUD			(1 << 29)
632*4882a593Smuzhiyun #define SYSCON_PWRCNT_USH_EN			(1 << 28)
633*4882a593Smuzhiyun 
634*4882a593Smuzhiyun #define SYSCON_CLKSET_PLL_X2IPD_SHIFT		0
635*4882a593Smuzhiyun #define SYSCON_CLKSET_PLL_X2FBD2_SHIFT		5
636*4882a593Smuzhiyun #define SYSCON_CLKSET_PLL_X1FBD1_SHIFT		11
637*4882a593Smuzhiyun #define SYSCON_CLKSET_PLL_PS_SHIFT		16
638*4882a593Smuzhiyun #define SYSCON_CLKSET1_PCLK_DIV_SHIFT		18
639*4882a593Smuzhiyun #define SYSCON_CLKSET1_HCLK_DIV_SHIFT		20
640*4882a593Smuzhiyun #define SYSCON_CLKSET1_NBYP1			(1 << 23)
641*4882a593Smuzhiyun #define SYSCON_CLKSET1_FCLK_DIV_SHIFT		25
642*4882a593Smuzhiyun 
643*4882a593Smuzhiyun #define SYSCON_CLKSET2_PLL2_EN			(1 << 18)
644*4882a593Smuzhiyun #define SYSCON_CLKSET2_NBYP2			(1 << 19)
645*4882a593Smuzhiyun #define SYSCON_CLKSET2_USB_DIV_SHIFT		28
646*4882a593Smuzhiyun 
647*4882a593Smuzhiyun #define SYSCON_CHIPID_REV_MASK			0xF0000000
648*4882a593Smuzhiyun #define SYSCON_DEVICECFG_SWRST			(1 << 31)
649*4882a593Smuzhiyun 
650*4882a593Smuzhiyun #define SYSCON_SYSCFG_LASDO			0x00000020
651*4882a593Smuzhiyun 
652*4882a593Smuzhiyun /*
653*4882a593Smuzhiyun  * 0x80930000 - 0x8093FFFF: Watchdog Timer
654*4882a593Smuzhiyun  */
655*4882a593Smuzhiyun #define WATCHDOG_OFFSET		0x940000
656*4882a593Smuzhiyun #define WATCHDOG_BASE		(EP93XX_APB_BASE | WATCHDOG_OFFSET)
657*4882a593Smuzhiyun 
658*4882a593Smuzhiyun /*
659*4882a593Smuzhiyun  * 0x80950000 - 0x9000FFFF: Reserved
660*4882a593Smuzhiyun  */
661*4882a593Smuzhiyun 
662*4882a593Smuzhiyun /*
663*4882a593Smuzhiyun  * During low_level init we store memory layout in memory at specific location
664*4882a593Smuzhiyun  */
665*4882a593Smuzhiyun #define UBOOT_MEMORYCNF_BANK_SIZE		0x2000
666*4882a593Smuzhiyun #define UBOOT_MEMORYCNF_BANK_MASK		0x2004
667*4882a593Smuzhiyun #define UBOOT_MEMORYCNF_BANK_COUNT		0x2008
668