blob: 806557a50ea27190890ed7a455453c741bb18fb4 [file] [log] [blame]
Matthias Kaehlckefcfb6322010-02-01 21:29:39 +01001/*
2 * Cirrus Logic EP93xx register definitions.
3 *
4 * Copyright (C) 2009
5 * Matthias Kaehlcke <matthias@kaehlcke.net>
6 *
7 * Copyright (C) 2006
8 * Dominic Rath <Dominic.Rath@gmx.de>
9 *
10 * Copyright (C) 2004, 2005
11 * Cory T. Tusar, Videon Central, Inc., <ctusar@videon-central.com>
12 *
13 * Based in large part on linux/include/asm-arm/arch-ep93xx/regmap.h, which is
14 *
15 * Copyright (C) 2004 Ray Lehtiniemi
16 * Copyright (C) 2003 Cirrus Logic, Inc
17 * Copyright (C) 1999 ARM Limited.
18 *
19 * See file CREDITS for list of people who contributed to this project.
20 *
21 * This program is free software; you can redistribute it and/or modify
22 * it under the terms of the GNU General Public License as published by
23 * the Free Software Foundation; either version 2 of the License, or
24 * (at your option) any later version.
25 *
26 * This program is distributed in the hope that it will be useful, but
27 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
28 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
29 * for more details.
30 *
31 * You should have received a copy of the GNU General Public License along
32 * with this program; if not, write to the Free Software Foundation, Inc.,
33 * 675 Mass Ave, Cambridge, MA 02139, USA.
34 */
35
36#define EP93XX_AHB_BASE 0x80000000
37#define EP93XX_APB_BASE 0x80800000
38
39/*
40 * 0x80000000 - 0x8000FFFF: DMA
41 */
42#define DMA_OFFSET 0x000000
43#define DMA_BASE (EP93XX_AHB_BASE | DMA_OFFSET)
44
45#ifndef __ASSEMBLY__
46struct dma_channel {
47 uint32_t control;
48 uint32_t interrupt;
49 uint32_t ppalloc;
50 uint32_t status;
51 uint32_t reserved0;
52 uint32_t remain;
53 uint32_t reserved1[2];
54 uint32_t maxcnt0;
55 uint32_t base0;
56 uint32_t current0;
57 uint32_t reserved2;
58 uint32_t maxcnt1;
59 uint32_t base1;
60 uint32_t current1;
61 uint32_t reserved3;
62};
63
64struct dma_regs {
65 struct dma_channel m2p_channel_0;
66 struct dma_channel m2p_channel_1;
67 struct dma_channel m2p_channel_2;
68 struct dma_channel m2p_channel_3;
69 struct dma_channel m2m_channel_0;
70 struct dma_channel m2m_channel_1;
71 struct dma_channel reserved0[2];
72 struct dma_channel m2p_channel_5;
73 struct dma_channel m2p_channel_4;
74 struct dma_channel m2p_channel_7;
75 struct dma_channel m2p_channel_6;
76 struct dma_channel m2p_channel_9;
77 struct dma_channel m2p_channel_8;
78 uint32_t channel_arbitration;
79 uint32_t reserved[15];
80 uint32_t global_interrupt;
81};
82#endif
83
84/*
85 * 0x80010000 - 0x8001FFFF: Ethernet MAC
86 */
87#define MAC_OFFSET 0x010000
88#define MAC_BASE (EP93XX_AHB_BASE | MAC_OFFSET)
89
90#ifndef __ASSEMBLY__
91struct mac_queue {
92 uint32_t badd;
93 union { /* deal with half-word aligned registers */
94 uint32_t blen;
95 union {
96 uint16_t filler;
97 uint16_t curlen;
98 };
99 };
100 uint32_t curadd;
101};
102
103struct mac_regs {
104 uint32_t rxctl;
105 uint32_t txctl;
106 uint32_t testctl;
107 uint32_t reserved0;
108 uint32_t miicmd;
109 uint32_t miidata;
110 uint32_t miists;
111 uint32_t reserved1;
112 uint32_t selfctl;
113 uint32_t inten;
114 uint32_t intstsp;
115 uint32_t intstsc;
116 uint32_t reserved2[2];
117 uint32_t diagad;
118 uint32_t diagdata;
119 uint32_t gt;
120 uint32_t fct;
121 uint32_t fcf;
122 uint32_t afp;
123 union {
124 struct {
125 uint32_t indad;
126 uint32_t indad_upper;
127 };
128 uint32_t hashtbl;
129 };
130 uint32_t reserved3[2];
131 uint32_t giintsts;
132 uint32_t giintmsk;
133 uint32_t giintrosts;
134 uint32_t giintfrc;
135 uint32_t txcollcnt;
136 uint32_t rxmissnct;
137 uint32_t rxruntcnt;
138 uint32_t reserved4;
139 uint32_t bmctl;
140 uint32_t bmsts;
141 uint32_t rxbca;
142 uint32_t reserved5;
143 struct mac_queue rxdq;
144 uint32_t rxdqenq;
145 struct mac_queue rxstsq;
146 uint32_t rxstsqenq;
147 struct mac_queue txdq;
148 uint32_t txdqenq;
149 struct mac_queue txstsq;
150 uint32_t reserved6;
151 uint32_t rxbufthrshld;
152 uint32_t txbufthrshld;
153 uint32_t rxststhrshld;
154 uint32_t txststhrshld;
155 uint32_t rxdthrshld;
156 uint32_t txdthrshld;
157 uint32_t maxfrmlen;
158 uint32_t maxhdrlen;
159};
160#endif
161
162#define SELFCTL_RWP (1 << 7)
163#define SELFCTL_GPO0 (1 << 5)
164#define SELFCTL_PUWE (1 << 4)
165#define SELFCTL_PDWE (1 << 3)
166#define SELFCTL_MIIL (1 << 2)
167#define SELFCTL_RESET (1 << 0)
168
169#define INTSTS_RWI (1 << 30)
170#define INTSTS_RXMI (1 << 29)
171#define INTSTS_RXBI (1 << 28)
172#define INTSTS_RXSQI (1 << 27)
173#define INTSTS_TXLEI (1 << 26)
174#define INTSTS_ECIE (1 << 25)
175#define INTSTS_TXUHI (1 << 24)
176#define INTSTS_MOI (1 << 18)
177#define INTSTS_TXCOI (1 << 17)
178#define INTSTS_RXROI (1 << 16)
179#define INTSTS_MIII (1 << 12)
180#define INTSTS_PHYI (1 << 11)
181#define INTSTS_TI (1 << 10)
182#define INTSTS_AHBE (1 << 8)
183#define INTSTS_OTHER (1 << 4)
184#define INTSTS_TXSQ (1 << 3)
185#define INTSTS_RXSQ (1 << 2)
186
187#define BMCTL_MT (1 << 13)
188#define BMCTL_TT (1 << 12)
189#define BMCTL_UNH (1 << 11)
190#define BMCTL_TXCHR (1 << 10)
191#define BMCTL_TXDIS (1 << 9)
192#define BMCTL_TXEN (1 << 8)
193#define BMCTL_EH2 (1 << 6)
194#define BMCTL_EH1 (1 << 5)
195#define BMCTL_EEOB (1 << 4)
196#define BMCTL_RXCHR (1 << 2)
197#define BMCTL_RXDIS (1 << 1)
198#define BMCTL_RXEN (1 << 0)
199
200#define BMSTS_TXACT (1 << 7)
201#define BMSTS_TP (1 << 4)
202#define BMSTS_RXACT (1 << 3)
203#define BMSTS_QID_MASK 0x07
204#define BMSTS_QID_RXDATA 0x00
205#define BMSTS_QID_TXDATA 0x01
206#define BMSTS_QID_RXSTS 0x02
207#define BMSTS_QID_TXSTS 0x03
208#define BMSTS_QID_RXDESC 0x04
209#define BMSTS_QID_TXDESC 0x05
210
211#define AFP_MASK 0x07
212#define AFP_IAPRIMARY 0x00
213#define AFP_IASECONDARY1 0x01
214#define AFP_IASECONDARY2 0x02
215#define AFP_IASECONDARY3 0x03
216#define AFP_TX 0x06
217#define AFP_HASH 0x07
218
219#define RXCTL_PAUSEA (1 << 20)
220#define RXCTL_RXFCE1 (1 << 19)
221#define RXCTL_RXFCE0 (1 << 18)
222#define RXCTL_BCRC (1 << 17)
223#define RXCTL_SRXON (1 << 16)
224#define RXCTL_RCRCA (1 << 13)
225#define RXCTL_RA (1 << 12)
226#define RXCTL_PA (1 << 11)
227#define RXCTL_BA (1 << 10)
228#define RXCTL_MA (1 << 9)
229#define RXCTL_IAHA (1 << 8)
230#define RXCTL_IA3 (1 << 3)
231#define RXCTL_IA2 (1 << 2)
232#define RXCTL_IA1 (1 << 1)
233#define RXCTL_IA0 (1 << 0)
234
235#define TXCTL_DEFDIS (1 << 7)
236#define TXCTL_MBE (1 << 6)
237#define TXCTL_ICRC (1 << 5)
238#define TXCTL_TPD (1 << 4)
239#define TXCTL_OCOLL (1 << 3)
240#define TXCTL_SP (1 << 2)
241#define TXCTL_PB (1 << 1)
242#define TXCTL_STXON (1 << 0)
243
244#define MIICMD_REGAD_MASK (0x001F)
245#define MIICMD_PHYAD_MASK (0x03E0)
246#define MIICMD_OPCODE_MASK (0xC000)
247#define MIICMD_PHYAD_8950 (0x0000)
248#define MIICMD_OPCODE_READ (0x8000)
249#define MIICMD_OPCODE_WRITE (0x4000)
250
251#define MIISTS_BUSY (1 << 0)
252
253/*
254 * 0x80020000 - 0x8002FFFF: USB OHCI
255 */
256#define USB_OFFSET 0x020000
257#define USB_BASE (EP93XX_AHB_BASE | USB_OFFSET)
258
259/*
260 * 0x80030000 - 0x8003FFFF: Raster engine
261 */
262#if (defined(CONFIG_EP9307) || defined(CONFIG_EP9312) || defined(CONFIG_EP9315))
263#define RASTER_OFFSET 0x030000
264#define RASTER_BASE (EP93XX_AHB_BASE | RASTER_OFFSET)
265#endif
266
267/*
268 * 0x80040000 - 0x8004FFFF: Graphics accelerator
269 */
270#if defined(CONFIG_EP9315)
271#define GFX_OFFSET 0x040000
272#define GFX_BASE (EP93XX_AHB_BASE | GFX_OFFSET)
273#endif
274
275/*
276 * 0x80050000 - 0x8005FFFF: Reserved
277 */
278
279/*
280 * 0x80060000 - 0x8006FFFF: SDRAM controller
281 */
282#define SDRAM_OFFSET 0x060000
283#define SDRAM_BASE (EP93XX_AHB_BASE | SDRAM_OFFSET)
284
285#ifndef __ASSEMBLY__
286struct sdram_regs {
287 uint32_t reserved;
288 uint32_t glconfig;
289 uint32_t refrshtimr;
290 uint32_t bootsts;
291 uint32_t devcfg0;
292 uint32_t devcfg1;
293 uint32_t devcfg2;
294 uint32_t devcfg3;
295};
296#endif
297
298#define SDRAM_DEVCFG_EXTBUSWIDTH (1 << 2)
299#define SDRAM_DEVCFG_BANKCOUNT (1 << 3)
300#define SDRAM_DEVCFG_SROMLL (1 << 5)
301#define SDRAM_DEVCFG_CASLAT_2 0x00010000
302#define SDRAM_DEVCFG_RASTOCAS_2 0x00200000
303
304#define GLCONFIG_INIT (1 << 0)
305#define GLCONFIG_MRS (1 << 1)
306#define GLCONFIG_SMEMBUSY (1 << 5)
307#define GLCONFIG_LCR (1 << 6)
308#define GLCONFIG_REARBEN (1 << 7)
309#define GLCONFIG_CLKSHUTDOWN (1 << 30)
310#define GLCONFIG_CKE (1 << 31)
311
312/*
313 * 0x80070000 - 0x8007FFFF: Reserved
314 */
315
316/*
317 * 0x80080000 - 0x8008FFFF: SRAM controller & PCMCIA
318 */
319#define SMC_OFFSET 0x080000
320#define SMC_BASE (EP93XX_AHB_BASE | SMC_OFFSET)
321
322#ifndef __ASSEMBLY__
323struct smc_regs {
324 uint32_t bcr0;
325 uint32_t bcr1;
326 uint32_t bcr2;
327 uint32_t bcr3;
328 uint32_t reserved0[2];
329 uint32_t bcr6;
330 uint32_t bcr7;
331#if defined(CONFIG_EP9315)
332 uint32_t pcattribute;
333 uint32_t pccommon;
334 uint32_t pcio;
335 uint32_t reserved1[5];
336 uint32_t pcmciactrl;
337#endif
338};
339#endif
340
341#define SMC_BCR_IDCY_SHIFT 0
342#define SMC_BCR_WST1_SHIFT 5
343#define SMC_BCR_BLE (1 << 10)
344#define SMC_BCR_WST2_SHIFT 11
345#define SMC_BCR_MW_SHIFT 28
346
347/*
348 * 0x80090000 - 0x8009FFFF: Boot ROM
349 */
350
351/*
352 * 0x800A0000 - 0x800AFFFF: IDE interface
353 */
354
355/*
356 * 0x800B0000 - 0x800BFFFF: VIC1
357 */
358
359/*
360 * 0x800C0000 - 0x800CFFFF: VIC2
361 */
362
363/*
364 * 0x800D0000 - 0x800FFFFF: Reserved
365 */
366
367/*
368 * 0x80800000 - 0x8080FFFF: Reserved
369 */
370
371/*
372 * 0x80810000 - 0x8081FFFF: Timers
373 */
374#define TIMER_OFFSET 0x010000
375#define TIMER_BASE (EP93XX_APB_BASE | TIMER_OFFSET)
376
377#ifndef __ASSEMBLY__
378struct timer {
379 uint32_t load;
380 uint32_t value;
381 uint32_t control;
382 uint32_t clear;
383};
384
385struct timer4 {
386 uint32_t value_low;
387 uint32_t value_high;
388};
389
390struct timer_regs {
391 struct timer timer1;
392 uint32_t reserved0[4];
393 struct timer timer2;
394 uint32_t reserved1[12];
395 struct timer4 timer4;
396 uint32_t reserved2[6];
397 struct timer timer3;
398};
399#endif
400
401/*
402 * 0x80820000 - 0x8082FFFF: I2S
403 */
404#define I2S_OFFSET 0x020000
405#define I2S_BASE (EP93XX_APB_BASE | I2S_OFFSET)
406
407/*
408 * 0x80830000 - 0x8083FFFF: Security
409 */
410#define SECURITY_OFFSET 0x030000
411#define SECURITY_BASE (EP93XX_APB_BASE | SECURITY_OFFSET)
412
413#define EXTENSIONID (SECURITY_BASE + 0x2714)
414
415/*
416 * 0x80840000 - 0x8084FFFF: GPIO
417 */
418#define GPIO_OFFSET 0x040000
419#define GPIO_BASE (EP93XX_APB_BASE | GPIO_OFFSET)
420
421#ifndef __ASSEMBLY__
422struct gpio_int {
423 uint32_t inttype1;
424 uint32_t inttype2;
425 uint32_t eoi;
426 uint32_t inten;
427 uint32_t intsts;
428 uint32_t rawintsts;
429 uint32_t db;
430};
431
432struct gpio_regs {
433 uint32_t padr;
434 uint32_t pbdr;
435 uint32_t pcdr;
436 uint32_t pddr;
437 uint32_t paddr;
438 uint32_t pbddr;
439 uint32_t pcddr;
440 uint32_t pdddr;
441 uint32_t pedr;
442 uint32_t peddr;
443 uint32_t reserved0[2];
444 uint32_t pfdr;
445 uint32_t pfddr;
446 uint32_t pgdr;
447 uint32_t pgddr;
448 uint32_t phdr;
449 uint32_t phddr;
450 uint32_t reserved1;
451 uint32_t finttype1;
452 uint32_t finttype2;
453 uint32_t reserved2;
454 struct gpio_int pfint;
455 uint32_t reserved3[10];
456 struct gpio_int paint;
457 struct gpio_int pbint;
458 uint32_t eedrive;
459};
460#endif
461
462/*
463 * 0x80850000 - 0x8087FFFF: Reserved
464 */
465
466/*
467 * 0x80880000 - 0x8088FFFF: AAC
468 */
469#define AAC_OFFSET 0x080000
470#define AAC_BASE (EP93XX_APB_BASE | AAC_OFFSET)
471
472/*
473 * 0x80890000 - 0x8089FFFF: Reserved
474 */
475
476/*
477 * 0x808A0000 - 0x808AFFFF: SPI
478 */
479#define SPI_OFFSET 0x0A0000
480#define SPI_BASE (EP93XX_APB_BASE | SPI_OFFSET)
481
482/*
483 * 0x808B0000 - 0x808BFFFF: IrDA
484 */
485#define IRDA_OFFSET 0x0B0000
486#define IRDA_BASE (EP93XX_APB_BASE | IRDA_OFFSET)
487
488/*
489 * 0x808C0000 - 0x808CFFFF: UART1
490 */
491#define UART1_OFFSET 0x0C0000
492#define UART1_BASE (EP93XX_APB_BASE | UART1_OFFSET)
493
494/*
495 * 0x808D0000 - 0x808DFFFF: UART2
496 */
497#define UART2_OFFSET 0x0D0000
498#define UART2_BASE (EP93XX_APB_BASE | UART2_OFFSET)
499
500/*
501 * 0x808E0000 - 0x808EFFFF: UART3
502 */
503#define UART3_OFFSET 0x0E0000
504#define UART3_BASE (EP93XX_APB_BASE | UART3_OFFSET)
505
506/*
507 * 0x808F0000 - 0x808FFFFF: Key Matrix
508 */
509#define KEY_OFFSET 0x0F0000
510#define KEY_BASE (EP93XX_APB_BASE | KEY_OFFSET)
511
512/*
513 * 0x80900000 - 0x8090FFFF: Touchscreen
514 */
515#define TOUCH_OFFSET 0x900000
516#define TOUCH_BASE (EP93XX_APB_BASE | TOUCH_OFFSET)
517
518/*
519 * 0x80910000 - 0x8091FFFF: Pulse Width Modulation
520 */
521#define PWM_OFFSET 0x910000
522#define PWM_BASE (EP93XX_APB_BASE | PWM_OFFSET)
523
524/*
525 * 0x80920000 - 0x8092FFFF: Real time clock
526 */
527#define RTC_OFFSET 0x920000
528#define RTC_BASE (EP93XX_APB_BASE | RTC_OFFSET)
529
530/*
531 * 0x80930000 - 0x8093FFFF: Syscon
532 */
533#define SYSCON_OFFSET 0x930000
534#define SYSCON_BASE (EP93XX_APB_BASE | SYSCON_OFFSET)
535
536#ifndef __ASSEMBLY__
537struct syscon_regs {
538 uint32_t pwrsts;
539 uint32_t pwrcnt;
540 uint32_t halt;
541 uint32_t stby;
542 uint32_t reserved0[2];
543 uint32_t teoi;
544 uint32_t stfclr;
545 uint32_t clkset1;
546 uint32_t clkset2;
547 uint32_t reserved1[6];
548 uint32_t scratch0;
549 uint32_t scratch1;
550 uint32_t reserved2[2];
551 uint32_t apbwait;
552 uint32_t bustmstrarb;
553 uint32_t bootmodeclr;
554 uint32_t reserved3[9];
555 uint32_t devicecfg;
556 uint32_t vidclkdiv;
557 uint32_t mirclkdiv;
558 uint32_t i2sclkdiv;
559 uint32_t keytchclkdiv;
560 uint32_t chipid;
Alessandro Rubinic50a0f52010-02-06 20:53:43 +0100561 uint32_t reserved4;
Matthias Kaehlckefcfb6322010-02-01 21:29:39 +0100562 uint32_t syscfg;
Alessandro Rubinic50a0f52010-02-06 20:53:43 +0100563 uint32_t reserved5[8];
Matthias Kaehlckefcfb6322010-02-01 21:29:39 +0100564 uint32_t sysswlock;
565};
566#else
567#define SYSCON_SCRATCH0 (SYSCON_BASE + 0x0040)
568#endif
569
570#define SYSCON_PWRCNT_UART_BAUD (1 << 29)
571
572#define SYSCON_CLKSET_PLL_X2IPD_SHIFT 0
573#define SYSCON_CLKSET_PLL_X2FBD2_SHIFT 5
574#define SYSCON_CLKSET_PLL_X1FBD1_SHIFT 11
575#define SYSCON_CLKSET_PLL_PS_SHIFT 16
576#define SYSCON_CLKSET1_PCLK_DIV_SHIFT 18
577#define SYSCON_CLKSET1_HCLK_DIV_SHIFT 20
578#define SYSCON_CLKSET1_NBYP1 (1 << 23)
579#define SYSCON_CLKSET1_FCLK_DIV_SHIFT 25
580
581#define SYSCON_CLKSET2_PLL2_EN (1 << 18)
582#define SYSCON_CLKSET2_NBYP2 (1 << 19)
583#define SYSCON_CLKSET2_USB_DIV_SHIFT 28
584
585#define SYSCON_CHIPID_REV_MASK 0xF0000000
586#define SYSCON_DEVICECFG_SWRST (1 << 31)
587
588/*
589 * 0x80930000 - 0x8093FFFF: Watchdog Timer
590 */
591#define WATCHDOG_OFFSET 0x940000
592#define WATCHDOG_BASE (EP93XX_APB_BASE | WATCHDOG_OFFSET)
593
594/*
595 * 0x80950000 - 0x9000FFFF: Reserved
596 */