xref: /rk3399_rockchip-uboot/arch/arm/include/asm/arch-ep93xx/ep93xx.h (revision dab5e3469d294a4e1ffed8407d296a78e02cc01f)
1819833afSPeter Tyser /*
2819833afSPeter Tyser  * Cirrus Logic EP93xx register definitions.
3819833afSPeter Tyser  *
4*7237d22bSSergey Kostanbaev  * Copyright (C) 2013
5*7237d22bSSergey Kostanbaev  * Sergey Kostanbaev <sergey.kostanbaev <at> fairwaves.ru>
6*7237d22bSSergey Kostanbaev  *
7819833afSPeter Tyser  * Copyright (C) 2009
8819833afSPeter Tyser  * Matthias Kaehlcke <matthias@kaehlcke.net>
9819833afSPeter Tyser  *
10819833afSPeter Tyser  * Copyright (C) 2006
11819833afSPeter Tyser  * Dominic Rath <Dominic.Rath@gmx.de>
12819833afSPeter Tyser  *
13819833afSPeter Tyser  * Copyright (C) 2004, 2005
14819833afSPeter Tyser  * Cory T. Tusar, Videon Central, Inc., <ctusar@videon-central.com>
15819833afSPeter Tyser  *
16819833afSPeter Tyser  * Based in large part on linux/include/asm-arm/arch-ep93xx/regmap.h, which is
17819833afSPeter Tyser  *
18819833afSPeter Tyser  * Copyright (C) 2004 Ray Lehtiniemi
19819833afSPeter Tyser  * Copyright (C) 2003 Cirrus Logic, Inc
20819833afSPeter Tyser  * Copyright (C) 1999 ARM Limited.
21819833afSPeter Tyser  *
221a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
23819833afSPeter Tyser  */
24819833afSPeter Tyser 
25819833afSPeter Tyser #define EP93XX_AHB_BASE			0x80000000
26819833afSPeter Tyser #define EP93XX_APB_BASE			0x80800000
27819833afSPeter Tyser 
28819833afSPeter Tyser /*
29819833afSPeter Tyser  * 0x80000000 - 0x8000FFFF: DMA
30819833afSPeter Tyser  */
31819833afSPeter Tyser #define DMA_OFFSET			0x000000
32819833afSPeter Tyser #define DMA_BASE			(EP93XX_AHB_BASE | DMA_OFFSET)
33819833afSPeter Tyser 
34819833afSPeter Tyser #ifndef __ASSEMBLY__
35819833afSPeter Tyser struct dma_channel {
36819833afSPeter Tyser 	uint32_t control;
37819833afSPeter Tyser 	uint32_t interrupt;
38819833afSPeter Tyser 	uint32_t ppalloc;
39819833afSPeter Tyser 	uint32_t status;
40819833afSPeter Tyser 	uint32_t reserved0;
41819833afSPeter Tyser 	uint32_t remain;
42819833afSPeter Tyser 	uint32_t reserved1[2];
43819833afSPeter Tyser 	uint32_t maxcnt0;
44819833afSPeter Tyser 	uint32_t base0;
45819833afSPeter Tyser 	uint32_t current0;
46819833afSPeter Tyser 	uint32_t reserved2;
47819833afSPeter Tyser 	uint32_t maxcnt1;
48819833afSPeter Tyser 	uint32_t base1;
49819833afSPeter Tyser 	uint32_t current1;
50819833afSPeter Tyser 	uint32_t reserved3;
51819833afSPeter Tyser };
52819833afSPeter Tyser 
53819833afSPeter Tyser struct dma_regs {
54819833afSPeter Tyser 	struct dma_channel m2p_channel_0;
55819833afSPeter Tyser 	struct dma_channel m2p_channel_1;
56819833afSPeter Tyser 	struct dma_channel m2p_channel_2;
57819833afSPeter Tyser 	struct dma_channel m2p_channel_3;
58819833afSPeter Tyser 	struct dma_channel m2m_channel_0;
59819833afSPeter Tyser 	struct dma_channel m2m_channel_1;
60819833afSPeter Tyser 	struct dma_channel reserved0[2];
61819833afSPeter Tyser 	struct dma_channel m2p_channel_5;
62819833afSPeter Tyser 	struct dma_channel m2p_channel_4;
63819833afSPeter Tyser 	struct dma_channel m2p_channel_7;
64819833afSPeter Tyser 	struct dma_channel m2p_channel_6;
65819833afSPeter Tyser 	struct dma_channel m2p_channel_9;
66819833afSPeter Tyser 	struct dma_channel m2p_channel_8;
67819833afSPeter Tyser 	uint32_t channel_arbitration;
68819833afSPeter Tyser 	uint32_t reserved[15];
69819833afSPeter Tyser 	uint32_t global_interrupt;
70819833afSPeter Tyser };
71819833afSPeter Tyser #endif
72819833afSPeter Tyser 
73819833afSPeter Tyser /*
74819833afSPeter Tyser  * 0x80010000 - 0x8001FFFF: Ethernet MAC
75819833afSPeter Tyser  */
76819833afSPeter Tyser #define MAC_OFFSET			0x010000
77819833afSPeter Tyser #define MAC_BASE			(EP93XX_AHB_BASE | MAC_OFFSET)
78819833afSPeter Tyser 
79819833afSPeter Tyser #ifndef __ASSEMBLY__
80819833afSPeter Tyser struct mac_queue {
81819833afSPeter Tyser 	uint32_t badd;
82819833afSPeter Tyser 	union { /* deal with half-word aligned registers */
83819833afSPeter Tyser 		uint32_t blen;
84819833afSPeter Tyser 		union {
85819833afSPeter Tyser 			uint16_t filler;
86819833afSPeter Tyser 			uint16_t curlen;
87819833afSPeter Tyser 		};
88819833afSPeter Tyser 	};
89819833afSPeter Tyser 	uint32_t curadd;
90819833afSPeter Tyser };
91819833afSPeter Tyser 
92819833afSPeter Tyser struct mac_regs {
93819833afSPeter Tyser 	uint32_t rxctl;
94819833afSPeter Tyser 	uint32_t txctl;
95819833afSPeter Tyser 	uint32_t testctl;
96819833afSPeter Tyser 	uint32_t reserved0;
97819833afSPeter Tyser 	uint32_t miicmd;
98819833afSPeter Tyser 	uint32_t miidata;
99819833afSPeter Tyser 	uint32_t miists;
100819833afSPeter Tyser 	uint32_t reserved1;
101819833afSPeter Tyser 	uint32_t selfctl;
102819833afSPeter Tyser 	uint32_t inten;
103819833afSPeter Tyser 	uint32_t intstsp;
104819833afSPeter Tyser 	uint32_t intstsc;
105819833afSPeter Tyser 	uint32_t reserved2[2];
106819833afSPeter Tyser 	uint32_t diagad;
107819833afSPeter Tyser 	uint32_t diagdata;
108819833afSPeter Tyser 	uint32_t gt;
109819833afSPeter Tyser 	uint32_t fct;
110819833afSPeter Tyser 	uint32_t fcf;
111819833afSPeter Tyser 	uint32_t afp;
112819833afSPeter Tyser 	union {
113819833afSPeter Tyser 		struct {
114819833afSPeter Tyser 			uint32_t indad;
115819833afSPeter Tyser 			uint32_t indad_upper;
116819833afSPeter Tyser 		};
117819833afSPeter Tyser 		uint32_t hashtbl;
118819833afSPeter Tyser 	};
119819833afSPeter Tyser 	uint32_t reserved3[2];
120819833afSPeter Tyser 	uint32_t giintsts;
121819833afSPeter Tyser 	uint32_t giintmsk;
122819833afSPeter Tyser 	uint32_t giintrosts;
123819833afSPeter Tyser 	uint32_t giintfrc;
124819833afSPeter Tyser 	uint32_t txcollcnt;
125819833afSPeter Tyser 	uint32_t rxmissnct;
126819833afSPeter Tyser 	uint32_t rxruntcnt;
127819833afSPeter Tyser 	uint32_t reserved4;
128819833afSPeter Tyser 	uint32_t bmctl;
129819833afSPeter Tyser 	uint32_t bmsts;
130819833afSPeter Tyser 	uint32_t rxbca;
131819833afSPeter Tyser 	uint32_t reserved5;
132819833afSPeter Tyser 	struct mac_queue rxdq;
133819833afSPeter Tyser 	uint32_t rxdqenq;
134819833afSPeter Tyser 	struct mac_queue rxstsq;
135819833afSPeter Tyser 	uint32_t rxstsqenq;
136819833afSPeter Tyser 	struct mac_queue txdq;
137819833afSPeter Tyser 	uint32_t txdqenq;
138819833afSPeter Tyser 	struct mac_queue txstsq;
139819833afSPeter Tyser 	uint32_t reserved6;
140819833afSPeter Tyser 	uint32_t rxbufthrshld;
141819833afSPeter Tyser 	uint32_t txbufthrshld;
142819833afSPeter Tyser 	uint32_t rxststhrshld;
143819833afSPeter Tyser 	uint32_t txststhrshld;
144819833afSPeter Tyser 	uint32_t rxdthrshld;
145819833afSPeter Tyser 	uint32_t txdthrshld;
146819833afSPeter Tyser 	uint32_t maxfrmlen;
147819833afSPeter Tyser 	uint32_t maxhdrlen;
148819833afSPeter Tyser };
149819833afSPeter Tyser #endif
150819833afSPeter Tyser 
151819833afSPeter Tyser #define SELFCTL_RWP		(1 << 7)
152819833afSPeter Tyser #define SELFCTL_GPO0		(1 << 5)
153819833afSPeter Tyser #define SELFCTL_PUWE		(1 << 4)
154819833afSPeter Tyser #define SELFCTL_PDWE		(1 << 3)
155819833afSPeter Tyser #define SELFCTL_MIIL		(1 << 2)
156819833afSPeter Tyser #define SELFCTL_RESET		(1 << 0)
157819833afSPeter Tyser 
158819833afSPeter Tyser #define INTSTS_RWI		(1 << 30)
159819833afSPeter Tyser #define INTSTS_RXMI		(1 << 29)
160819833afSPeter Tyser #define INTSTS_RXBI		(1 << 28)
161819833afSPeter Tyser #define INTSTS_RXSQI		(1 << 27)
162819833afSPeter Tyser #define INTSTS_TXLEI		(1 << 26)
163819833afSPeter Tyser #define INTSTS_ECIE		(1 << 25)
164819833afSPeter Tyser #define INTSTS_TXUHI		(1 << 24)
165819833afSPeter Tyser #define INTSTS_MOI		(1 << 18)
166819833afSPeter Tyser #define INTSTS_TXCOI		(1 << 17)
167819833afSPeter Tyser #define INTSTS_RXROI		(1 << 16)
168819833afSPeter Tyser #define INTSTS_MIII		(1 << 12)
169819833afSPeter Tyser #define INTSTS_PHYI		(1 << 11)
170819833afSPeter Tyser #define INTSTS_TI		(1 << 10)
171819833afSPeter Tyser #define INTSTS_AHBE		(1 << 8)
172819833afSPeter Tyser #define INTSTS_OTHER		(1 << 4)
173819833afSPeter Tyser #define INTSTS_TXSQ		(1 << 3)
174819833afSPeter Tyser #define INTSTS_RXSQ		(1 << 2)
175819833afSPeter Tyser 
176819833afSPeter Tyser #define BMCTL_MT		(1 << 13)
177819833afSPeter Tyser #define BMCTL_TT		(1 << 12)
178819833afSPeter Tyser #define BMCTL_UNH		(1 << 11)
179819833afSPeter Tyser #define BMCTL_TXCHR		(1 << 10)
180819833afSPeter Tyser #define BMCTL_TXDIS		(1 << 9)
181819833afSPeter Tyser #define BMCTL_TXEN		(1 << 8)
182819833afSPeter Tyser #define BMCTL_EH2		(1 << 6)
183819833afSPeter Tyser #define BMCTL_EH1		(1 << 5)
184819833afSPeter Tyser #define BMCTL_EEOB		(1 << 4)
185819833afSPeter Tyser #define BMCTL_RXCHR		(1 << 2)
186819833afSPeter Tyser #define BMCTL_RXDIS		(1 << 1)
187819833afSPeter Tyser #define BMCTL_RXEN		(1 << 0)
188819833afSPeter Tyser 
189819833afSPeter Tyser #define BMSTS_TXACT		(1 << 7)
190819833afSPeter Tyser #define BMSTS_TP		(1 << 4)
191819833afSPeter Tyser #define BMSTS_RXACT		(1 << 3)
192819833afSPeter Tyser #define BMSTS_QID_MASK		0x07
193819833afSPeter Tyser #define BMSTS_QID_RXDATA	0x00
194819833afSPeter Tyser #define BMSTS_QID_TXDATA	0x01
195819833afSPeter Tyser #define BMSTS_QID_RXSTS		0x02
196819833afSPeter Tyser #define BMSTS_QID_TXSTS		0x03
197819833afSPeter Tyser #define BMSTS_QID_RXDESC	0x04
198819833afSPeter Tyser #define BMSTS_QID_TXDESC	0x05
199819833afSPeter Tyser 
200819833afSPeter Tyser #define AFP_MASK		0x07
201819833afSPeter Tyser #define AFP_IAPRIMARY		0x00
202819833afSPeter Tyser #define AFP_IASECONDARY1	0x01
203819833afSPeter Tyser #define AFP_IASECONDARY2	0x02
204819833afSPeter Tyser #define AFP_IASECONDARY3	0x03
205819833afSPeter Tyser #define AFP_TX			0x06
206819833afSPeter Tyser #define AFP_HASH		0x07
207819833afSPeter Tyser 
208819833afSPeter Tyser #define RXCTL_PAUSEA		(1 << 20)
209819833afSPeter Tyser #define RXCTL_RXFCE1		(1 << 19)
210819833afSPeter Tyser #define RXCTL_RXFCE0		(1 << 18)
211819833afSPeter Tyser #define RXCTL_BCRC		(1 << 17)
212819833afSPeter Tyser #define RXCTL_SRXON		(1 << 16)
213819833afSPeter Tyser #define RXCTL_RCRCA		(1 << 13)
214819833afSPeter Tyser #define RXCTL_RA		(1 << 12)
215819833afSPeter Tyser #define RXCTL_PA		(1 << 11)
216819833afSPeter Tyser #define RXCTL_BA		(1 << 10)
217819833afSPeter Tyser #define RXCTL_MA		(1 << 9)
218819833afSPeter Tyser #define RXCTL_IAHA		(1 << 8)
219819833afSPeter Tyser #define RXCTL_IA3		(1 << 3)
220819833afSPeter Tyser #define RXCTL_IA2		(1 << 2)
221819833afSPeter Tyser #define RXCTL_IA1		(1 << 1)
222819833afSPeter Tyser #define RXCTL_IA0		(1 << 0)
223819833afSPeter Tyser 
224819833afSPeter Tyser #define TXCTL_DEFDIS		(1 << 7)
225819833afSPeter Tyser #define TXCTL_MBE		(1 << 6)
226819833afSPeter Tyser #define TXCTL_ICRC		(1 << 5)
227819833afSPeter Tyser #define TXCTL_TPD		(1 << 4)
228819833afSPeter Tyser #define TXCTL_OCOLL		(1 << 3)
229819833afSPeter Tyser #define TXCTL_SP		(1 << 2)
230819833afSPeter Tyser #define TXCTL_PB		(1 << 1)
231819833afSPeter Tyser #define TXCTL_STXON		(1 << 0)
232819833afSPeter Tyser 
233819833afSPeter Tyser #define MIICMD_REGAD_MASK	(0x001F)
234819833afSPeter Tyser #define MIICMD_PHYAD_MASK	(0x03E0)
235819833afSPeter Tyser #define MIICMD_OPCODE_MASK	(0xC000)
236819833afSPeter Tyser #define MIICMD_PHYAD_8950	(0x0000)
237819833afSPeter Tyser #define MIICMD_OPCODE_READ	(0x8000)
238819833afSPeter Tyser #define MIICMD_OPCODE_WRITE	(0x4000)
239819833afSPeter Tyser 
240819833afSPeter Tyser #define MIISTS_BUSY		(1 << 0)
241819833afSPeter Tyser 
242819833afSPeter Tyser /*
243819833afSPeter Tyser  * 0x80020000 - 0x8002FFFF: USB OHCI
244819833afSPeter Tyser  */
245819833afSPeter Tyser #define USB_OFFSET			0x020000
246819833afSPeter Tyser #define USB_BASE			(EP93XX_AHB_BASE | USB_OFFSET)
247819833afSPeter Tyser 
248819833afSPeter Tyser /*
249819833afSPeter Tyser  * 0x80030000 - 0x8003FFFF: Raster engine
250819833afSPeter Tyser  */
251819833afSPeter Tyser #if (defined(CONFIG_EP9307) || defined(CONFIG_EP9312) || defined(CONFIG_EP9315))
252819833afSPeter Tyser #define RASTER_OFFSET			0x030000
253819833afSPeter Tyser #define RASTER_BASE			(EP93XX_AHB_BASE | RASTER_OFFSET)
254819833afSPeter Tyser #endif
255819833afSPeter Tyser 
256819833afSPeter Tyser /*
257819833afSPeter Tyser  * 0x80040000 - 0x8004FFFF: Graphics accelerator
258819833afSPeter Tyser  */
259819833afSPeter Tyser #if defined(CONFIG_EP9315)
260819833afSPeter Tyser #define GFX_OFFSET			0x040000
261819833afSPeter Tyser #define GFX_BASE			(EP93XX_AHB_BASE | GFX_OFFSET)
262819833afSPeter Tyser #endif
263819833afSPeter Tyser 
264819833afSPeter Tyser /*
265819833afSPeter Tyser  * 0x80050000 - 0x8005FFFF: Reserved
266819833afSPeter Tyser  */
267819833afSPeter Tyser 
268819833afSPeter Tyser /*
269819833afSPeter Tyser  * 0x80060000 - 0x8006FFFF: SDRAM controller
270819833afSPeter Tyser  */
271819833afSPeter Tyser #define SDRAM_OFFSET			0x060000
272819833afSPeter Tyser #define SDRAM_BASE			(EP93XX_AHB_BASE | SDRAM_OFFSET)
273819833afSPeter Tyser 
274819833afSPeter Tyser #ifndef __ASSEMBLY__
275819833afSPeter Tyser struct sdram_regs {
276819833afSPeter Tyser 	uint32_t reserved;
277819833afSPeter Tyser 	uint32_t glconfig;
278819833afSPeter Tyser 	uint32_t refrshtimr;
279819833afSPeter Tyser 	uint32_t bootsts;
280819833afSPeter Tyser 	uint32_t devcfg0;
281819833afSPeter Tyser 	uint32_t devcfg1;
282819833afSPeter Tyser 	uint32_t devcfg2;
283819833afSPeter Tyser 	uint32_t devcfg3;
284819833afSPeter Tyser };
285819833afSPeter Tyser #endif
286819833afSPeter Tyser 
287819833afSPeter Tyser #define SDRAM_DEVCFG_EXTBUSWIDTH	(1 << 2)
288819833afSPeter Tyser #define SDRAM_DEVCFG_BANKCOUNT		(1 << 3)
289819833afSPeter Tyser #define SDRAM_DEVCFG_SROMLL		(1 << 5)
290819833afSPeter Tyser #define SDRAM_DEVCFG_CASLAT_2		0x00010000
291819833afSPeter Tyser #define SDRAM_DEVCFG_RASTOCAS_2		0x00200000
292819833afSPeter Tyser 
293*7237d22bSSergey Kostanbaev #define SDRAM_OFF_GLCONFIG		0x0004
294*7237d22bSSergey Kostanbaev #define SDRAM_OFF_REFRSHTIMR		0x0008
295*7237d22bSSergey Kostanbaev 
296*7237d22bSSergey Kostanbaev #define SDRAM_OFF_DEVCFG0		0x0010
297*7237d22bSSergey Kostanbaev #define SDRAM_OFF_DEVCFG1		0x0014
298*7237d22bSSergey Kostanbaev #define SDRAM_OFF_DEVCFG2		0x0018
299*7237d22bSSergey Kostanbaev #define SDRAM_OFF_DEVCFG3		0x001C
300*7237d22bSSergey Kostanbaev 
301*7237d22bSSergey Kostanbaev #define SDRAM_DEVCFG0_BASE		0xC0000000
302*7237d22bSSergey Kostanbaev #define SDRAM_DEVCFG1_BASE		0xD0000000
303*7237d22bSSergey Kostanbaev #define SDRAM_DEVCFG2_BASE		0xE0000000
304*7237d22bSSergey Kostanbaev #define SDRAM_DEVCFG3_ASD0_BASE		0xF0000000
305*7237d22bSSergey Kostanbaev #define SDRAM_DEVCFG3_ASD1_BASE		0x00000000
306*7237d22bSSergey Kostanbaev 
307819833afSPeter Tyser #define GLCONFIG_INIT			(1 << 0)
308819833afSPeter Tyser #define GLCONFIG_MRS			(1 << 1)
309819833afSPeter Tyser #define GLCONFIG_SMEMBUSY		(1 << 5)
310819833afSPeter Tyser #define GLCONFIG_LCR			(1 << 6)
311819833afSPeter Tyser #define GLCONFIG_REARBEN		(1 << 7)
312819833afSPeter Tyser #define GLCONFIG_CLKSHUTDOWN		(1 << 30)
313819833afSPeter Tyser #define GLCONFIG_CKE			(1 << 31)
314819833afSPeter Tyser 
315*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL			0x80060000
316*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_GLOBALCFG_INIT		0x00000001
317*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_GLOBALCFG_MRS		0x00000002
318*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_GLOBALCFG_SMEMBUSY	0x00000020
319*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_GLOBALCFG_LCR		0x00000040
320*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_GLOBALCFG_REARBEN	0x00000080
321*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_GLOBALCFG_CLKSHUTDOWN	0x40000000
322*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_GLOBALCFG_CKE		0x80000000
323*7237d22bSSergey Kostanbaev 
324*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_REFRESH_MASK		0x0000FFFF
325*7237d22bSSergey Kostanbaev 
326*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_BOOTSTATUS_WIDTH_32	0x00000002
327*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_BOOTSTATUS_WIDTH_16	0x00000001
328*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_BOOTSTATUS_WIDTH_8	0x00000000
329*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_BOOTSTATUS_WIDTH_MASK	0x00000003
330*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_BOOTSTATUS_MEDIA	0x00000004
331*7237d22bSSergey Kostanbaev 
332*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_DEVCFG_EXTBUSWIDTH	0x00000004
333*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_DEVCFG_BANKCOUNT	0x00000008
334*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_DEVCFG_SROM512		0x00000010
335*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_DEVCFG_SROMLL		0x00000020
336*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_DEVCFG_2KPAGE		0x00000040
337*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_DEVCFG_SFCONFIGADDR	0x00000080
338*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_MASK	0x00070000
339*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_2	0x00010000
340*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_3	0x00020000
341*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_4	0x00030000
342*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_5	0x00040000
343*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_6	0x00050000
344*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_7	0x00060000
345*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_DEVCFG_CASLAT_8	0x00070000
346*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_DEVCFG_WBL		0x00080000
347*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_DEVCFG_RASTOCAS_MASK	0x00300000
348*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_DEVCFG_RASTOCAS_2	0x00200000
349*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_DEVCFG_RASTOCAS_3	0x00300000
350*7237d22bSSergey Kostanbaev #define EP93XX_SDRAMCTRL_DEVCFG_AUTOPRECHARGE	0x01000000
351*7237d22bSSergey Kostanbaev 
352819833afSPeter Tyser /*
353819833afSPeter Tyser  * 0x80070000 - 0x8007FFFF: Reserved
354819833afSPeter Tyser  */
355819833afSPeter Tyser 
356819833afSPeter Tyser /*
357819833afSPeter Tyser  * 0x80080000 - 0x8008FFFF: SRAM controller & PCMCIA
358819833afSPeter Tyser  */
359819833afSPeter Tyser #define SMC_OFFSET			0x080000
360819833afSPeter Tyser #define SMC_BASE			(EP93XX_AHB_BASE | SMC_OFFSET)
361819833afSPeter Tyser 
362819833afSPeter Tyser #ifndef __ASSEMBLY__
363819833afSPeter Tyser struct smc_regs {
364819833afSPeter Tyser 	uint32_t bcr0;
365819833afSPeter Tyser 	uint32_t bcr1;
366819833afSPeter Tyser 	uint32_t bcr2;
367819833afSPeter Tyser 	uint32_t bcr3;
368819833afSPeter Tyser 	uint32_t reserved0[2];
369819833afSPeter Tyser 	uint32_t bcr6;
370819833afSPeter Tyser 	uint32_t bcr7;
371819833afSPeter Tyser #if defined(CONFIG_EP9315)
372819833afSPeter Tyser 	uint32_t pcattribute;
373819833afSPeter Tyser 	uint32_t pccommon;
374819833afSPeter Tyser 	uint32_t pcio;
375819833afSPeter Tyser 	uint32_t reserved1[5];
376819833afSPeter Tyser 	uint32_t pcmciactrl;
377819833afSPeter Tyser #endif
378819833afSPeter Tyser };
379819833afSPeter Tyser #endif
380819833afSPeter Tyser 
381*7237d22bSSergey Kostanbaev #define EP93XX_OFF_SMCBCR0		0x00
382*7237d22bSSergey Kostanbaev #define EP93XX_OFF_SMCBCR1		0x04
383*7237d22bSSergey Kostanbaev #define EP93XX_OFF_SMCBCR2		0x08
384*7237d22bSSergey Kostanbaev #define EP93XX_OFF_SMCBCR3		0x0C
385*7237d22bSSergey Kostanbaev #define EP93XX_OFF_SMCBCR6		0x18
386*7237d22bSSergey Kostanbaev #define EP93XX_OFF_SMCBCR7		0x1C
387*7237d22bSSergey Kostanbaev 
388819833afSPeter Tyser #define SMC_BCR_IDCY_SHIFT	0
389819833afSPeter Tyser #define SMC_BCR_WST1_SHIFT	5
390819833afSPeter Tyser #define SMC_BCR_BLE		(1 << 10)
391819833afSPeter Tyser #define SMC_BCR_WST2_SHIFT	11
392819833afSPeter Tyser #define SMC_BCR_MW_SHIFT	28
393819833afSPeter Tyser 
394819833afSPeter Tyser /*
395819833afSPeter Tyser  * 0x80090000 - 0x8009FFFF: Boot ROM
396819833afSPeter Tyser  */
397819833afSPeter Tyser 
398819833afSPeter Tyser /*
399819833afSPeter Tyser  * 0x800A0000 - 0x800AFFFF: IDE interface
400819833afSPeter Tyser  */
401819833afSPeter Tyser 
402819833afSPeter Tyser /*
403819833afSPeter Tyser  * 0x800B0000 - 0x800BFFFF: VIC1
404819833afSPeter Tyser  */
405819833afSPeter Tyser 
406819833afSPeter Tyser /*
407819833afSPeter Tyser  * 0x800C0000 - 0x800CFFFF: VIC2
408819833afSPeter Tyser  */
409819833afSPeter Tyser 
410819833afSPeter Tyser /*
411819833afSPeter Tyser  * 0x800D0000 - 0x800FFFFF: Reserved
412819833afSPeter Tyser  */
413819833afSPeter Tyser 
414819833afSPeter Tyser /*
415819833afSPeter Tyser  * 0x80800000 - 0x8080FFFF: Reserved
416819833afSPeter Tyser  */
417819833afSPeter Tyser 
418819833afSPeter Tyser /*
419819833afSPeter Tyser  * 0x80810000 - 0x8081FFFF: Timers
420819833afSPeter Tyser  */
421819833afSPeter Tyser #define TIMER_OFFSET		0x010000
422819833afSPeter Tyser #define TIMER_BASE		(EP93XX_APB_BASE | TIMER_OFFSET)
423819833afSPeter Tyser 
424819833afSPeter Tyser #ifndef __ASSEMBLY__
425819833afSPeter Tyser struct timer {
426819833afSPeter Tyser 	uint32_t load;
427819833afSPeter Tyser 	uint32_t value;
428819833afSPeter Tyser 	uint32_t control;
429819833afSPeter Tyser 	uint32_t clear;
430819833afSPeter Tyser };
431819833afSPeter Tyser 
432819833afSPeter Tyser struct timer4 {
433819833afSPeter Tyser 	uint32_t value_low;
434819833afSPeter Tyser 	uint32_t value_high;
435819833afSPeter Tyser };
436819833afSPeter Tyser 
437819833afSPeter Tyser struct timer_regs {
438819833afSPeter Tyser 	struct timer timer1;
439819833afSPeter Tyser 	uint32_t reserved0[4];
440819833afSPeter Tyser 	struct timer timer2;
441819833afSPeter Tyser 	uint32_t reserved1[12];
442819833afSPeter Tyser 	struct timer4 timer4;
443819833afSPeter Tyser 	uint32_t reserved2[6];
444819833afSPeter Tyser 	struct timer timer3;
445819833afSPeter Tyser };
446819833afSPeter Tyser #endif
447819833afSPeter Tyser 
448819833afSPeter Tyser /*
449819833afSPeter Tyser  * 0x80820000 - 0x8082FFFF: I2S
450819833afSPeter Tyser  */
451819833afSPeter Tyser #define I2S_OFFSET		0x020000
452819833afSPeter Tyser #define I2S_BASE		(EP93XX_APB_BASE | I2S_OFFSET)
453819833afSPeter Tyser 
454819833afSPeter Tyser /*
455819833afSPeter Tyser  * 0x80830000 - 0x8083FFFF: Security
456819833afSPeter Tyser  */
457819833afSPeter Tyser #define SECURITY_OFFSET		0x030000
458819833afSPeter Tyser #define SECURITY_BASE		(EP93XX_APB_BASE | SECURITY_OFFSET)
459819833afSPeter Tyser 
460819833afSPeter Tyser #define EXTENSIONID		(SECURITY_BASE + 0x2714)
461819833afSPeter Tyser 
462819833afSPeter Tyser /*
463819833afSPeter Tyser  * 0x80840000 - 0x8084FFFF: GPIO
464819833afSPeter Tyser  */
465819833afSPeter Tyser #define GPIO_OFFSET		0x040000
466819833afSPeter Tyser #define GPIO_BASE		(EP93XX_APB_BASE | GPIO_OFFSET)
467819833afSPeter Tyser 
468819833afSPeter Tyser #ifndef __ASSEMBLY__
469819833afSPeter Tyser struct gpio_int {
470819833afSPeter Tyser 	uint32_t inttype1;
471819833afSPeter Tyser 	uint32_t inttype2;
472819833afSPeter Tyser 	uint32_t eoi;
473819833afSPeter Tyser 	uint32_t inten;
474819833afSPeter Tyser 	uint32_t intsts;
475819833afSPeter Tyser 	uint32_t rawintsts;
476819833afSPeter Tyser 	uint32_t db;
477819833afSPeter Tyser };
478819833afSPeter Tyser 
479819833afSPeter Tyser struct gpio_regs {
480819833afSPeter Tyser 	uint32_t padr;
481819833afSPeter Tyser 	uint32_t pbdr;
482819833afSPeter Tyser 	uint32_t pcdr;
483819833afSPeter Tyser 	uint32_t pddr;
484819833afSPeter Tyser 	uint32_t paddr;
485819833afSPeter Tyser 	uint32_t pbddr;
486819833afSPeter Tyser 	uint32_t pcddr;
487819833afSPeter Tyser 	uint32_t pdddr;
488819833afSPeter Tyser 	uint32_t pedr;
489819833afSPeter Tyser 	uint32_t peddr;
490819833afSPeter Tyser 	uint32_t reserved0[2];
491819833afSPeter Tyser 	uint32_t pfdr;
492819833afSPeter Tyser 	uint32_t pfddr;
493819833afSPeter Tyser 	uint32_t pgdr;
494819833afSPeter Tyser 	uint32_t pgddr;
495819833afSPeter Tyser 	uint32_t phdr;
496819833afSPeter Tyser 	uint32_t phddr;
497819833afSPeter Tyser 	uint32_t reserved1;
498819833afSPeter Tyser 	uint32_t finttype1;
499819833afSPeter Tyser 	uint32_t finttype2;
500819833afSPeter Tyser 	uint32_t reserved2;
501819833afSPeter Tyser 	struct gpio_int pfint;
502819833afSPeter Tyser 	uint32_t reserved3[10];
503819833afSPeter Tyser 	struct gpio_int paint;
504819833afSPeter Tyser 	struct gpio_int pbint;
505819833afSPeter Tyser 	uint32_t eedrive;
506819833afSPeter Tyser };
507819833afSPeter Tyser #endif
508819833afSPeter Tyser 
509*7237d22bSSergey Kostanbaev #define EP93XX_LED_DATA		0x80840020
510*7237d22bSSergey Kostanbaev #define EP93XX_LED_GREEN_ON	0x0001
511*7237d22bSSergey Kostanbaev #define EP93XX_LED_RED_ON	0x0002
512*7237d22bSSergey Kostanbaev 
513*7237d22bSSergey Kostanbaev #define EP93XX_LED_DDR		0x80840024
514*7237d22bSSergey Kostanbaev #define EP93XX_LED_GREEN_ENABLE	0x0001
515*7237d22bSSergey Kostanbaev #define EP93XX_LED_RED_ENABLE	0x00020000
516*7237d22bSSergey Kostanbaev 
517819833afSPeter Tyser /*
518819833afSPeter Tyser  * 0x80850000 - 0x8087FFFF: Reserved
519819833afSPeter Tyser  */
520819833afSPeter Tyser 
521819833afSPeter Tyser /*
522819833afSPeter Tyser  * 0x80880000 - 0x8088FFFF: AAC
523819833afSPeter Tyser  */
524819833afSPeter Tyser #define AAC_OFFSET		0x080000
525819833afSPeter Tyser #define AAC_BASE		(EP93XX_APB_BASE | AAC_OFFSET)
526819833afSPeter Tyser 
527819833afSPeter Tyser /*
528819833afSPeter Tyser  * 0x80890000 - 0x8089FFFF: Reserved
529819833afSPeter Tyser  */
530819833afSPeter Tyser 
531819833afSPeter Tyser /*
532819833afSPeter Tyser  * 0x808A0000 - 0x808AFFFF: SPI
533819833afSPeter Tyser  */
534819833afSPeter Tyser #define SPI_OFFSET		0x0A0000
535819833afSPeter Tyser #define SPI_BASE		(EP93XX_APB_BASE | SPI_OFFSET)
536819833afSPeter Tyser 
537819833afSPeter Tyser /*
538819833afSPeter Tyser  * 0x808B0000 - 0x808BFFFF: IrDA
539819833afSPeter Tyser  */
540819833afSPeter Tyser #define IRDA_OFFSET		0x0B0000
541819833afSPeter Tyser #define IRDA_BASE		(EP93XX_APB_BASE | IRDA_OFFSET)
542819833afSPeter Tyser 
543819833afSPeter Tyser /*
544819833afSPeter Tyser  * 0x808C0000 - 0x808CFFFF: UART1
545819833afSPeter Tyser  */
546819833afSPeter Tyser #define UART1_OFFSET		0x0C0000
547819833afSPeter Tyser #define UART1_BASE		(EP93XX_APB_BASE | UART1_OFFSET)
548819833afSPeter Tyser 
549819833afSPeter Tyser /*
550819833afSPeter Tyser  * 0x808D0000 - 0x808DFFFF: UART2
551819833afSPeter Tyser  */
552819833afSPeter Tyser #define UART2_OFFSET		0x0D0000
553819833afSPeter Tyser #define UART2_BASE		(EP93XX_APB_BASE | UART2_OFFSET)
554819833afSPeter Tyser 
555819833afSPeter Tyser /*
556819833afSPeter Tyser  * 0x808E0000 - 0x808EFFFF: UART3
557819833afSPeter Tyser  */
558819833afSPeter Tyser #define UART3_OFFSET		0x0E0000
559819833afSPeter Tyser #define UART3_BASE		(EP93XX_APB_BASE | UART3_OFFSET)
560819833afSPeter Tyser 
561819833afSPeter Tyser /*
562819833afSPeter Tyser  * 0x808F0000 - 0x808FFFFF: Key Matrix
563819833afSPeter Tyser  */
564819833afSPeter Tyser #define KEY_OFFSET		0x0F0000
565819833afSPeter Tyser #define KEY_BASE		(EP93XX_APB_BASE | KEY_OFFSET)
566819833afSPeter Tyser 
567819833afSPeter Tyser /*
568819833afSPeter Tyser  * 0x80900000 - 0x8090FFFF: Touchscreen
569819833afSPeter Tyser  */
570819833afSPeter Tyser #define TOUCH_OFFSET		0x900000
571819833afSPeter Tyser #define TOUCH_BASE		(EP93XX_APB_BASE | TOUCH_OFFSET)
572819833afSPeter Tyser 
573819833afSPeter Tyser /*
574819833afSPeter Tyser  * 0x80910000 - 0x8091FFFF: Pulse Width Modulation
575819833afSPeter Tyser  */
576819833afSPeter Tyser #define PWM_OFFSET		0x910000
577819833afSPeter Tyser #define PWM_BASE		(EP93XX_APB_BASE | PWM_OFFSET)
578819833afSPeter Tyser 
579819833afSPeter Tyser /*
580819833afSPeter Tyser  * 0x80920000 - 0x8092FFFF: Real time clock
581819833afSPeter Tyser  */
582819833afSPeter Tyser #define RTC_OFFSET		0x920000
583819833afSPeter Tyser #define RTC_BASE		(EP93XX_APB_BASE | RTC_OFFSET)
584819833afSPeter Tyser 
585819833afSPeter Tyser /*
586819833afSPeter Tyser  * 0x80930000 - 0x8093FFFF: Syscon
587819833afSPeter Tyser  */
588819833afSPeter Tyser #define SYSCON_OFFSET		0x930000
589819833afSPeter Tyser #define SYSCON_BASE		(EP93XX_APB_BASE | SYSCON_OFFSET)
590819833afSPeter Tyser 
591*7237d22bSSergey Kostanbaev /* Security */
592*7237d22bSSergey Kostanbaev #define SECURITY_EXTENSIONID	0x80832714
593*7237d22bSSergey Kostanbaev 
594819833afSPeter Tyser #ifndef __ASSEMBLY__
595819833afSPeter Tyser struct syscon_regs {
596819833afSPeter Tyser 	uint32_t pwrsts;
597819833afSPeter Tyser 	uint32_t pwrcnt;
598819833afSPeter Tyser 	uint32_t halt;
599819833afSPeter Tyser 	uint32_t stby;
600819833afSPeter Tyser 	uint32_t reserved0[2];
601819833afSPeter Tyser 	uint32_t teoi;
602819833afSPeter Tyser 	uint32_t stfclr;
603819833afSPeter Tyser 	uint32_t clkset1;
604819833afSPeter Tyser 	uint32_t clkset2;
605819833afSPeter Tyser 	uint32_t reserved1[6];
606819833afSPeter Tyser 	uint32_t scratch0;
607819833afSPeter Tyser 	uint32_t scratch1;
608819833afSPeter Tyser 	uint32_t reserved2[2];
609819833afSPeter Tyser 	uint32_t apbwait;
610819833afSPeter Tyser 	uint32_t bustmstrarb;
611819833afSPeter Tyser 	uint32_t bootmodeclr;
612819833afSPeter Tyser 	uint32_t reserved3[9];
613819833afSPeter Tyser 	uint32_t devicecfg;
614819833afSPeter Tyser 	uint32_t vidclkdiv;
615819833afSPeter Tyser 	uint32_t mirclkdiv;
616819833afSPeter Tyser 	uint32_t i2sclkdiv;
617819833afSPeter Tyser 	uint32_t keytchclkdiv;
618819833afSPeter Tyser 	uint32_t chipid;
619819833afSPeter Tyser 	uint32_t reserved4;
620819833afSPeter Tyser 	uint32_t syscfg;
621819833afSPeter Tyser 	uint32_t reserved5[8];
622819833afSPeter Tyser 	uint32_t sysswlock;
623819833afSPeter Tyser };
624819833afSPeter Tyser #else
625819833afSPeter Tyser #define SYSCON_SCRATCH0		(SYSCON_BASE + 0x0040)
626819833afSPeter Tyser #endif
627819833afSPeter Tyser 
628*7237d22bSSergey Kostanbaev #define SYSCON_OFF_CLKSET1			0x0020
629*7237d22bSSergey Kostanbaev #define SYSCON_OFF_SYSCFG			0x009c
630*7237d22bSSergey Kostanbaev 
631819833afSPeter Tyser #define SYSCON_PWRCNT_UART_BAUD			(1 << 29)
632*7237d22bSSergey Kostanbaev #define SYSCON_PWRCNT_USH_EN			(1 << 28)
633819833afSPeter Tyser 
634819833afSPeter Tyser #define SYSCON_CLKSET_PLL_X2IPD_SHIFT		0
635819833afSPeter Tyser #define SYSCON_CLKSET_PLL_X2FBD2_SHIFT		5
636819833afSPeter Tyser #define SYSCON_CLKSET_PLL_X1FBD1_SHIFT		11
637819833afSPeter Tyser #define SYSCON_CLKSET_PLL_PS_SHIFT		16
638819833afSPeter Tyser #define SYSCON_CLKSET1_PCLK_DIV_SHIFT		18
639819833afSPeter Tyser #define SYSCON_CLKSET1_HCLK_DIV_SHIFT		20
640819833afSPeter Tyser #define SYSCON_CLKSET1_NBYP1			(1 << 23)
641819833afSPeter Tyser #define SYSCON_CLKSET1_FCLK_DIV_SHIFT		25
642819833afSPeter Tyser 
643819833afSPeter Tyser #define SYSCON_CLKSET2_PLL2_EN			(1 << 18)
644819833afSPeter Tyser #define SYSCON_CLKSET2_NBYP2			(1 << 19)
645819833afSPeter Tyser #define SYSCON_CLKSET2_USB_DIV_SHIFT		28
646819833afSPeter Tyser 
647819833afSPeter Tyser #define SYSCON_CHIPID_REV_MASK			0xF0000000
648819833afSPeter Tyser #define SYSCON_DEVICECFG_SWRST			(1 << 31)
649819833afSPeter Tyser 
650*7237d22bSSergey Kostanbaev #define SYSCON_SYSCFG_LASDO			0x00000020
651*7237d22bSSergey Kostanbaev 
652819833afSPeter Tyser /*
653819833afSPeter Tyser  * 0x80930000 - 0x8093FFFF: Watchdog Timer
654819833afSPeter Tyser  */
655819833afSPeter Tyser #define WATCHDOG_OFFSET		0x940000
656819833afSPeter Tyser #define WATCHDOG_BASE		(EP93XX_APB_BASE | WATCHDOG_OFFSET)
657819833afSPeter Tyser 
658819833afSPeter Tyser /*
659819833afSPeter Tyser  * 0x80950000 - 0x9000FFFF: Reserved
660819833afSPeter Tyser  */
661*7237d22bSSergey Kostanbaev 
662*7237d22bSSergey Kostanbaev /*
663*7237d22bSSergey Kostanbaev  * During low_level init we store memory layout in memory at specific location
664*7237d22bSSergey Kostanbaev  */
665*7237d22bSSergey Kostanbaev #define UBOOT_MEMORYCNF_BANK_SIZE		0x2000
666*7237d22bSSergey Kostanbaev #define UBOOT_MEMORYCNF_BANK_MASK		0x2004
667*7237d22bSSergey Kostanbaev #define UBOOT_MEMORYCNF_BANK_COUNT		0x2008
668