]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
Initial revision
authorwdenk <wdenk>
Sun, 3 Nov 2002 10:24:00 +0000 (10:24 +0000)
committerwdenk <wdenk>
Sun, 3 Nov 2002 10:24:00 +0000 (10:24 +0000)
board/csb226/memsetup.S [new file with mode: 0644]
cpu/ppc4xx/start.S [new file with mode: 0644]
include/asm-arm/arch-pxa/pxa-regs.h [new file with mode: 0644]
include/asm-arm/arch-xscale/pxa-regs.h [new file with mode: 0644]
include/ppc405.h [new file with mode: 0644]

diff --git a/board/csb226/memsetup.S b/board/csb226/memsetup.S
new file mode 100644 (file)
index 0000000..5a584c1
--- /dev/null
@@ -0,0 +1,428 @@
+/*
+ * Most of this taken from Redboot hal_platform_setup.h with cleanup
+ *
+ * NOTE: I haven't clean this up considerably, just enough to get it
+ * running. See hal_platform_setup.h for the source. See
+ * board/cradle/memsetup.S for another PXA250 setup that is
+ * much cleaner.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <config.h>
+#include <version.h>
+#include <asm/arch/pxa-regs.h>
+
+DRAM_SIZE:  .long   CFG_DRAM_SIZE
+
+/* wait for coprocessor write complete */
+   .macro CPWAIT reg
+   mrc  p15,0,\reg,c2,c0,0
+   mov  \reg,\reg
+   sub  pc,pc,#4
+   .endm
+
+
+/*
+ *     Memory setup
+ */
+
+.globl memsetup
+memsetup:
+
+    mov      r10, lr
+
+       /* Set up GPIO pins first ----------------------------------------- */
+
+       ldr             r0,     =GPSR0
+       ldr             r1,     =CFG_GPSR0_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GPSR1
+       ldr             r1,     =CFG_GPSR1_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GPSR2
+       ldr             r1,     =CFG_GPSR2_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GPCR0
+       ldr             r1,     =CFG_GPCR0_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GPCR1
+       ldr             r1,     =CFG_GPCR1_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GPCR2
+       ldr             r1,     =CFG_GPCR2_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GPDR0
+       ldr             r1,     =CFG_GPDR0_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GPDR1
+       ldr             r1,     =CFG_GPDR1_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GPDR2
+       ldr             r1,     =CFG_GPDR2_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GAFR0_L
+       ldr             r1,     =CFG_GAFR0_L_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GAFR0_U
+       ldr             r1,     =CFG_GAFR0_U_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GAFR1_L
+       ldr             r1,     =CFG_GAFR1_L_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GAFR1_U
+       ldr             r1,     =CFG_GAFR1_U_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GAFR2_L
+       ldr             r1,     =CFG_GAFR2_L_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GAFR2_U
+       ldr             r1,     =CFG_GAFR2_U_VAL
+       str             r1,   [r0]
+
+       ldr     r0,     =PSSR           /* enable GPIO pins */
+       ldr             r1,     =CFG_PSSR_VAL
+       str             r1,   [r0]
+
+/*     ldr     r3,     =MSC1           /  low - bank 2 Lubbock Registers / SRAM */
+/*     ldr     r2,     =CFG_MSC1_VAL   /  high - bank 3 Ethernet Controller */
+/*     str     r2,     [r3]            /  need to set MSC1 before trying to write to the HEX LEDs */
+/*     ldr     r2,     [r3]            /  need to read it back to make sure the value latches (see MSC section of manual) */
+/* */
+/*     ldr     r1,     =LED_BLANK */
+/*     mov     r0,     #0xFF */
+/*     str     r0,     [r1]            /  turn on hex leds */
+/* */
+/*loop: */
+/* */
+/*   ldr       r0, =0xB0070001 */
+/*   ldr       r1, =_LED */
+/*   str       r0, [r1]                /  hex display */
+
+
+       /* ---------------------------------------------------------------- */
+       /* Enable memory interface                                          */
+       /*                                                                  */
+       /* The sequence below is based on the recommended init steps        */
+       /* detailed in the Intel PXA250 Operating Systems Developers Guide, */
+       /* Chapter 10.                                                      */
+       /* ---------------------------------------------------------------- */
+
+       /* ---------------------------------------------------------------- */
+       /* Step 1: Wait for at least 200 microsedonds to allow internal     */
+       /*         clocks to settle. Only necessary after hard reset...     */
+       /*         FIXME: can be optimized later                            */
+       /* ---------------------------------------------------------------- */
+
+       ldr r3, =OSCR                   /* reset the OS Timer Count to zero */
+       mov r2, #0
+       str r2, [r3]
+       ldr r4, =0x300                  /* really 0x2E1 is about 200usec,   */
+                                       /* so 0x300 should be plenty        */
+1:
+       ldr r2, [r3]
+       cmp r4, r2
+       bgt 1b
+
+mem_init:
+
+        ldr     r1,  =MEMC_BASE                /* get memory controller base addr. */
+
+       /* ---------------------------------------------------------------- */
+       /* Step 2a: Initialize Asynchronous static memory controller        */
+       /* ---------------------------------------------------------------- */
+
+       /* MSC registers: timing, bus width, mem type                       */
+
+        /* MSC0: nCS(0,1)                                                   */
+        ldr     r2,   =CFG_MSC0_VAL
+        str     r2,   [r1, #MSC0_OFFSET]
+        ldr     r2,   [r1, #MSC0_OFFSET]       /* read back to ensure      */
+                                               /* that data latches        */
+        /* MSC1: nCS(2,3)                                                   */
+        ldr     r2,  =CFG_MSC1_VAL
+        str     r2,  [r1, #MSC1_OFFSET]
+        ldr     r2,  [r1, #MSC1_OFFSET]
+
+       /* MSC2: nCS(4,5)                                                   */
+        ldr     r2,  =CFG_MSC2_VAL
+        str     r2,  [r1, #MSC2_OFFSET]
+        ldr     r2,  [r1, #MSC2_OFFSET]
+
+       /* ---------------------------------------------------------------- */
+       /* Step 2b: Initialize Card Interface                               */
+       /* ---------------------------------------------------------------- */
+
+       /* MECR: Memory Expansion Card Register                             */
+        ldr     r2,  =CFG_MECR_VAL
+        str     r2,  [r1, #MECR_OFFSET]
+       ldr     r2,     [r1, #MECR_OFFSET]
+
+       /* MCMEM0: Card Interface slot 0 timing                             */
+        ldr     r2,  =CFG_MCMEM0_VAL
+        str     r2,  [r1, #MCMEM0_OFFSET]
+       ldr     r2,     [r1, #MCMEM0_OFFSET]
+
+        /* MCMEM1: Card Interface slot 1 timing                             */
+        ldr     r2,  =CFG_MCMEM1_VAL
+        str     r2,  [r1, #MCMEM1_OFFSET]
+       ldr     r2,     [r1, #MCMEM1_OFFSET]
+
+       /* MCATT0: Card Interface Attribute Space Timing, slot 0            */
+        ldr     r2,  =CFG_MCATT0_VAL
+        str     r2,  [r1, #MCATT0_OFFSET]
+       ldr     r2,     [r1, #MCATT0_OFFSET]
+
+       /* MCATT1: Card Interface Attribute Space Timing, slot 1            */
+        ldr     r2,  =CFG_MCATT1_VAL
+        str     r2,  [r1, #MCATT1_OFFSET]
+       ldr     r2,     [r1, #MCATT1_OFFSET]
+
+       /* MCIO0: Card Interface I/O Space Timing, slot 0                   */
+        ldr     r2,  =CFG_MCIO0_VAL
+        str     r2,  [r1, #MCIO0_OFFSET]
+       ldr     r2,     [r1, #MCIO0_OFFSET]
+
+       /* MCIO1: Card Interface I/O Space Timing, slot 1                   */
+        ldr     r2,  =CFG_MCIO1_VAL
+        str     r2,  [r1, #MCIO1_OFFSET]
+       ldr     r2,     [r1, #MCIO1_OFFSET]
+
+       /* ---------------------------------------------------------------- */
+        /* Step 2c: Write FLYCNFG  FIXME: what's that???                    */
+        /* ---------------------------------------------------------------- */
+
+
+       /* ---------------------------------------------------------------- */
+        /* Step 2d: Initialize Timing for Sync Memory (SDCLK0)              */
+        /* ---------------------------------------------------------------- */
+
+       /* Before accessing MDREFR we need a valid DRI field, so we set     */
+       /* this to power on defaults + DIR field.                           */
+
+       ldr     r4,     =0x03ca4fff
+       str     r4,     [r1, #MDREFR_OFFSET]    /* write back MDREFR        */
+        ldr     r4,  [r1, #MDREFR_OFFSET]
+
+       ldr     r4,     =0x03ca4030
+       str     r4,     [r1, #MDREFR_OFFSET]    /* write back MDREFR        */
+       ldr     r4,     [r1, #MDREFR_OFFSET]
+
+        /* Note: preserve the mdrefr value in r4                            */
+
+
+       /* ---------------------------------------------------------------- */
+       /* Step 3: Initialize Synchronous Static Memory (Flash/Peripherals) */
+       /* ---------------------------------------------------------------- */
+
+       /* Initialize SXCNFG register. Assert the enable bits               */
+
+       /* Write SXMRS to cause an MRS command to all enabled banks of      */
+       /* synchronous static memory. Note that SXLCR need not be written   */
+       /* at this time.                                                    */
+
+       /* FIXME: we use async mode for now                                 */
+
+
+        /* ---------------------------------------------------------------- */
+        /* Step 4: Initialize SDRAM                                         */
+        /* ---------------------------------------------------------------- */
+
+       /* Step 4a: assert MDREFR:K1RUN and MDREFR:K2RUN and configure      */
+       /*          MDREFR:K1DB2 and MDREFR:K2DB2 as desired.               */
+
+       orr     r4,     r4,     #(MDREFR_K1RUN|MDREFR_K2RUN|MDREFR_K0RUN)
+
+       str     r4,     [r1, #MDREFR_OFFSET]    /* write back MDREFR        */
+       ldr     r4,     [r1, #MDREFR_OFFSET]
+
+
+       /* Step 4b: de-assert MDREFR:SLFRSH.                                */
+
+       bic     r4,     r4,     #(MDREFR_SLFRSH)
+
+        str     r4,     [r1, #MDREFR_OFFSET]    /* write back MDREFR        */
+        ldr     r4,     [r1, #MDREFR_OFFSET]
+
+
+       /* Step 4c: assert MDREFR:E1PIN and E0PIO                           */
+
+       orr     r4,     r4,     #(MDREFR_E1PIN|MDREFR_E0PIN)
+
+        str     r4,     [r1, #MDREFR_OFFSET]    /* write back MDREFR        */
+        ldr     r4,     [r1, #MDREFR_OFFSET]
+
+
+       /* Step 4d: write MDCNFG with MDCNFG:DEx deasserted (set to 0), to  */
+       /*          configure but not enable each SDRAM partition pair.     */
+
+       ldr     r4,     [r1, #MDCNFG_OFFSET]
+       bic     r4,     r4,     #(MDCNFG_DE0|MDCNFG_DE1)
+
+        str     r4,     [r1, #MDCNFG_OFFSET]   /* write back MDCNFG        */
+        ldr     r4,     [r1, #MDCNFG_OFFSET]
+
+
+       /* Step 4e: Wait for the clock to the SDRAMs to stabilize,          */
+       /*          100..200 µsec.                                          */
+
+       ldr r3, =OSCR                   /* reset the OS Timer Count to zero */
+       mov r2, #0
+       str r2, [r3]
+       ldr r4, =0x300                  /* really 0x2E1 is about 200usec,   */
+                                       /* so 0x300 should be plenty        */
+1:
+       ldr r2, [r3]
+       cmp r4, r2
+       bgt 1b
+
+
+       /* Step 4f: Trigger a number (usually 8) refresh cycles by          */
+       /*          attempting non-burst read or write accesses to disabled */
+       /*          SDRAM, as commonly specified in the power up sequence   */
+       /*          documented in SDRAM data sheets. The address(es) used   */
+       /*          for this purpose must not be cacheable.                 */
+
+       ldr     r3,     =CFG_DRAM_BASE
+       str     r2,     [r3]
+       str     r2,     [r3]
+       str     r2,     [r3]
+       str     r2,     [r3]
+       str     r2,     [r3]
+       str     r2,     [r3]
+       str     r2,     [r3]
+       str     r2,     [r3]
+
+
+       /* Step 4g: Write MDCNFG with enable bits asserted                  */
+       /*          (MDCNFG:DEx set to 1).                                  */
+
+       ldr     r3, [r1, #MDCNFG_OFFSET]
+       orr     r3,     r3,     #(MDCNFG_DE0|MDCNFG_DE1)
+       str     r3, [r1, #MDCNFG_OFFSET]
+
+       /* Step 4h: Write MDMRS.                                            */
+
+        ldr     r2,  =CFG_MDMRS_VAL
+        str     r2,  [r1, #MDMRS_OFFSET]
+
+
+       /* We are finished with Intel's memory controller initialisation    */
+
+
+       /* ---------------------------------------------------------------- */
+       /* Disable (mask) all interrupts at interrupt controller            */
+       /* ---------------------------------------------------------------- */
+
+initirqs:
+
+        mov     r1, #0         /* clear int. level register (IRQ, not FIQ) */
+        ldr     r2,  =ICLR
+        str     r1,  [r2]
+
+        ldr     r2,  =ICMR     /* mask all interrupts at the controller    */
+        str     r1,  [r2]
+
+
+        /* ---------------------------------------------------------------- */
+       /* Clock initialisation                                             */
+        /* ---------------------------------------------------------------- */
+
+initclks:
+
+       /* Disable the peripheral clocks, and set the core clock frequency  */
+       /* (hard-coding at 398.12MHz for now).                              */
+
+       /* Turn Off ALL on-chip peripheral clocks for re-configuration      */
+       /* Note: See label 'ENABLECLKS' for the re-enabling                 */
+        ldr     r1,  =CKEN
+        mov     r2,  #0
+        str     r2,  [r1]
+
+
+        /* default value in case no valid rotary switch setting is found    */
+        ldr     r2, =(CCCR_L27|CCCR_M2|CCCR_N10)  /* DEFAULT: {200/200/100} */
+
+        /* ... and write the core clock config register                     */
+        ldr     r1,  =CCCR
+        str     r2,  [r1]
+
+       /* enable the 32Khz oscillator for RTC and PowerManager             */
+        ldr     r1,  =OSCC
+        mov     r2,  #OSCC_OON
+        str     r2,  [r1]
+
+       /* NOTE:  spin here until OSCC.OOK get set, meaning the PLL         */
+       /* has settled.                                                     */
+60:
+        ldr     r2, [r1]
+        ands    r2, r2, #1
+        beq     60b
+
+       /* ---------------------------------------------------------------- */
+       /*                                                                  */
+        /* ---------------------------------------------------------------- */
+
+       /* Save SDRAM size                                                  */
+       ldr     r1, =DRAM_SIZE
+       str     r8, [r1]
+
+       /* Interrupt init: Mask all interrupts                              */
+       ldr     r0, =ICMR                       /* enable no sources        */
+       mov     r1, #0
+       str     r1, [r0]
+
+       /* FIXME */
+
+#define NODEBUG
+#ifdef NODEBUG
+       /*Disable software and data breakpoints */
+       mov     r0,#0
+       mcr     p15,0,r0,c14,c8,0  /* ibcr0 */
+       mcr     p15,0,r0,c14,c9,0  /* ibcr1 */
+       mcr     p15,0,r0,c14,c4,0  /* dbcon */
+
+       /*Enable all debug functionality */
+       mov     r0,#0x80000000
+       mcr     p14,0,r0,c10,c0,0  /* dcsr */
+
+#endif
+
+        /* ---------------------------------------------------------------- */
+       /* End memsetup                                                     */
+        /* ---------------------------------------------------------------- */
+
+endmemsetup:
+
+    mov     pc, lr
+
diff --git a/cpu/ppc4xx/start.S b/cpu/ppc4xx/start.S
new file mode 100644 (file)
index 0000000..baaaba4
--- /dev/null
@@ -0,0 +1,1425 @@
+/*
+ *  Copyright (C) 1998 Dan Malek <dmalek@jlc.net>
+ *  Copyright (C) 1999 Magnus Damm <kieraypc01.p.y.kie.era.ericsson.se>
+ *  Copyright (C) 2000,2001,2002 Wolfgang Denk <wd@denx.de>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+/*------------------------------------------------------------------------------+ */
+/* */
+/*      This source code has been made available to you by IBM on an AS-IS */
+/*      basis.  Anyone receiving this source is licensed under IBM */
+/*      copyrights to use it in any way he or she deems fit, including */
+/*      copying it, modifying it, compiling it, and redistributing it either */
+/*      with or without modifications.  No license under IBM patents or */
+/*      patent applications is to be implied by the copyright license. */
+/* */
+/*      Any user of this software should understand that IBM cannot provide */
+/*      technical support for this software and will not be responsible for */
+/*      any consequences resulting from the use of this software. */
+/* */
+/*      Any person who transfers this source code or any derivative work */
+/*      must include the IBM copyright notice, this paragraph, and the */
+/*      preceding two paragraphs in the transferred software. */
+/* */
+/*      COPYRIGHT   I B M   CORPORATION 1995 */
+/*      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M */
+/*------------------------------------------------------------------------------- */
+
+/*  U-Boot - Startup Code for IBM 4xx PowerPC based Embedded Boards
+ *
+ *
+ *  The processor starts at 0xfffffffc and the code is executed
+ *  from flash/rom.
+ *  in memory, but as long we don't jump around before relocating.
+ *  board_init lies at a quite high address and when the cpu has
+ *  jumped there, everything is ok.
+ *  This works because the cpu gives the FLASH (CS0) the whole
+ *  address space at startup, and board_init lies as a echo of
+ *  the flash somewhere up there in the memorymap.
+ *
+ *  board_init will change CS0 to be positioned at the correct
+ *  address and (s)dram will be positioned at address 0
+ */
+#include <config.h>
+#include <mpc8xx.h>
+#include <ppc4xx.h>
+#include <version.h>
+
+#define _LINUX_CONFIG_H 1      /* avoid reading Linux autoconf.h file  */
+
+#include <ppc_asm.tmpl>
+#include <ppc_defs.h>
+
+#include <asm/cache.h>
+#include <asm/mmu.h>
+
+#ifndef         CONFIG_IDENT_STRING
+#define         CONFIG_IDENT_STRING ""
+#endif
+
+#ifdef CFG_INIT_DCACHE_CS
+# if (CFG_INIT_DCACHE_CS == 0)
+#  define PBxAP pb0ap
+#  define PBxCR pb0cr
+# endif
+# if (CFG_INIT_DCACHE_CS == 1)
+#  define PBxAP pb1ap
+#  define PBxCR pb1cr
+# endif
+# if (CFG_INIT_DCACHE_CS == 2)
+#  define PBxAP pb2ap
+#  define PBxCR pb2cr
+# endif
+# if (CFG_INIT_DCACHE_CS == 3)
+#  define PBxAP pb3ap
+#  define PBxCR pb3cr
+# endif
+# if (CFG_INIT_DCACHE_CS == 4)
+#  define PBxAP pb4ap
+#  define PBxCR pb4cr
+# endif
+# if (CFG_INIT_DCACHE_CS == 5)
+#  define PBxAP pb5ap
+#  define PBxCR pb5cr
+# endif
+# if (CFG_INIT_DCACHE_CS == 6)
+#  define PBxAP pb6ap
+#  define PBxCR pb6cr
+# endif
+# if (CFG_INIT_DCACHE_CS == 7)
+#  define PBxAP pb7ap
+#  define PBxCR pb7cr
+# endif
+#endif /* CFG_INIT_DCACHE_CS */
+
+/* We don't want the  MMU yet.
+*/
+#undef MSR_KERNEL
+#define MSR_KERNEL ( MSR_ME  ) /* Machine Check */
+
+
+       .extern ext_bus_cntlr_init
+       .extern sdram_init
+
+/*
+ * Set up GOT: Global Offset Table
+ *
+ * Use r14 to access the GOT
+ */
+       START_GOT
+       GOT_ENTRY(_GOT2_TABLE_)
+       GOT_ENTRY(_FIXUP_TABLE_)
+
+       GOT_ENTRY(_start)
+       GOT_ENTRY(_start_of_vectors)
+       GOT_ENTRY(_end_of_vectors)
+       GOT_ENTRY(transfer_to_handler)
+
+       GOT_ENTRY(_end)
+       GOT_ENTRY(.bss)
+       END_GOT
+
+/*
+ * 440 Startup -- on reset only the top 4k of the effective
+ * address space is mapped in by an entry in the instruction
+ * and data shadow TLB. The .bootpg section is located in the
+ * top 4k & does only what's necessary to map in the the rest
+ * of the boot rom. Once the boot rom is mapped in we can
+ * proceed with normal startup.
+ *
+ * NOTE: CS0 only covers the top 2MB of the effective address
+ * space after reset.
+ */
+
+#if defined(CONFIG_440)
+    .section .bootpg,"ax"
+    .globl _start_440
+
+/**************************************************************************/
+_start_440:
+       /*----------------------------------------------------------------*/
+       /* Clear and set up some registers. */
+       /*----------------------------------------------------------------*/
+       iccci   r0,r0           /* NOTE: operands not used for 440 */
+       dccci   r0,r0           /* NOTE: operands not used for 440 */
+       sync
+       li      r0,0
+       mtspr   srr0,r0
+       mtspr   srr1,r0
+       mtspr   csrr0,r0
+       mtspr   csrr1,r0
+
+       /*----------------------------------------------------------------*/
+       /* Initialize debug */
+       /*----------------------------------------------------------------*/
+       mtspr   dbcr0,r0
+       mtspr   dbcr1,r0
+       mtspr   dbcr2,r0
+       mtspr   iac1,r0
+       mtspr   iac2,r0
+       mtspr   iac3,r0
+       mtspr   dac1,r0
+       mtspr   dac2,r0
+       mtspr   dvc1,r0
+       mtspr   dvc2,r0
+
+       mfspr   r1,dbsr
+       mtspr   dbsr,r1         /* Clear all valid bits */
+
+       /*----------------------------------------------------------------*/
+       /* CCR0 init */
+       /*----------------------------------------------------------------*/
+       /* Disable store gathering & broadcast, guarantee inst/data
+       * cache block touch, force load/store alignment
+       * (see errata 1.12: 440_33)
+       */
+       lis     r1,0x0030       /* store gathering & broadcast disable */
+       ori     r1,r1,0x6000    /* cache touch */
+       mtspr   ccr0,r1
+
+       /*----------------------------------------------------------------*/
+       /* Setup interrupt vectors */
+       /*----------------------------------------------------------------*/
+       mtspr   ivpr,r0         /* Vectors start at 0x0000_0000 */
+       li      r1,0x0100
+       mtspr   ivor0,r1        /* Critical input */
+       li      r1,0x0200
+       mtspr   ivor1,r1        /* Machine check */
+       li      r1,0x0300
+       mtspr   ivor2,r1        /* Data storage */
+       li      r1,0x0400
+       mtspr   ivor3,r1        /* Instruction storage */
+       li      r1,0x0500
+       mtspr   ivor4,r1        /* External interrupt */
+       li      r1,0x0600
+       mtspr   ivor5,r1        /* Alignment */
+       li      r1,0x0700
+       mtspr   ivor6,r1        /* Program check */
+       li      r1,0x0800
+       mtspr   ivor7,r1        /* Floating point unavailable */
+       li      r1,0x0c00
+       mtspr   ivor8,r1        /* System call */
+       li      r1,0x1000
+       mtspr   ivor10,r1       /* Decrementer (PIT for 440) */
+       li      r1,0x1400
+       mtspr   ivor13,r1       /* Data TLB error */
+       li      r1,0x1300
+       mtspr   ivor14,r1       /* Instr TLB error */
+       li      r1,0x2000
+       mtspr   ivor15,r1       /* Debug */
+
+       /*----------------------------------------------------------------*/
+       /* Configure cache regions  */
+       /*----------------------------------------------------------------*/
+       mtspr   inv0,r0
+       mtspr   inv1,r0
+       mtspr   inv2,r0
+       mtspr   inv3,r0
+       mtspr   dnv0,r0
+       mtspr   dnv1,r0
+       mtspr   dnv2,r0
+       mtspr   dnv3,r0
+       mtspr   itv0,r0
+       mtspr   itv1,r0
+       mtspr   itv2,r0
+       mtspr   itv3,r0
+       mtspr   dtv0,r0
+       mtspr   dtv1,r0
+       mtspr   dtv2,r0
+       mtspr   dtv3,r0
+
+       /*----------------------------------------------------------------*/
+       /* Cache victim limits */
+       /*----------------------------------------------------------------*/
+       /* floors 0, ceiling max to use the entire cache -- nothing locked
+       */
+       lis     r1,0x0001
+       ori     r1,r1,0xf800
+       mtspr   ivlim,r1
+       mtspr   dvlim,r1
+
+       /*----------------------------------------------------------------*/
+       /* Clear all TLB entries -- TID = 0, TS = 0 */
+       /*----------------------------------------------------------------*/
+       mtspr   mmucr,r0
+       li      r1,0x003f       /* 64 TLB entries */
+       mtctr   r1
+0:     tlbwe   r0,r1,0x0000    /* Invalidate all entries (V=0)*/
+       subi    r1,r1,0x0001
+       bdnz    0b
+
+       /*----------------------------------------------------------------*/
+       /* TLB entry setup -- step thru tlbtab */
+       /*----------------------------------------------------------------*/
+       bl      tlbtab          /* Get tlbtab pointer */
+       mr      r5,r0
+       li      r1,0x003f       /* 64 TLB entries max */
+       mtctr   r1
+       li      r4,0            /* TLB # */
+
+       addi    r5,r5,-4
+1:     lwzu    r0,4(r5)
+       cmpwi   r0,0
+       beq     2f              /* 0 marks end */
+       lwzu    r1,4(r5)
+       lwzu    r2,4(r5)
+       tlbwe   r0,r4,0         /* TLB Word 0 */
+       tlbwe   r1,r4,1         /* TLB Word 1 */
+       tlbwe   r2,r4,2         /* TLB Word 2 */
+       addi    r4,r4,1         /* Next TLB */
+       bdnz    1b
+
+       /*----------------------------------------------------------------*/
+       /* Continue from 'normal' start */
+       /*----------------------------------------------------------------*/
+2:     bl      3f
+       b       _start
+
+3:     li      r0,0
+       mtspr   srr1,r0         /* Keep things disabled for now */
+       mflr    r1
+       mtspr   srr0,r1
+       rfi
+#endif
+
+/*
+ * r3 - 1st arg to board_init(): IMMP pointer
+ * r4 - 2nd arg to board_init(): boot flag
+ */
+       .text
+       .long   0x27051956              /* U-Boot Magic Number                  */
+       .globl  version_string
+version_string:
+       .ascii U_BOOT_VERSION
+       .ascii " (", __DATE__, " - ", __TIME__, ")"
+       .ascii CONFIG_IDENT_STRING, "\0"
+
+/*
+ * Maybe this should be moved somewhere else because the current
+ * location (0x100) is where the CriticalInput Execption should be.
+ */
+       . = EXC_OFF_SYS_RESET
+       .globl  _start
+_start:
+
+/*****************************************************************************/
+#if defined(CONFIG_440)
+
+       /*----------------------------------------------------------------*/
+       /* Clear and set up some registers. */
+       /*----------------------------------------------------------------*/
+       li      r0,0x0000
+       lis     r1,0xffff
+       mtspr   dec,r0                  /* prevent dec exceptions */
+       mtspr   tbl,r0                  /* prevent fit & wdt exceptions */
+       mtspr   tbu,r0
+       mtspr   tsr,r1                  /* clear all timer exception status */
+       mtspr   tcr,r0                  /* disable all */
+       mtspr   esr,r0                  /* clear exception syndrome register */
+       mtxer   r0                      /* clear integer exception register */
+       lis     r1,0x0002               /* set CE bit (Critical Exceptions) */
+       ori     r1,r1,0x1000            /* set ME bit (Machine Exceptions) */
+       mtmsr   r1                      /* change MSR */
+
+       /*----------------------------------------------------------------*/
+       /* Debug setup -- some (not very good) ice's need an event*/
+       /* to establish control :-( Define CFG_INIT_DBCR to the dbsr */
+       /* value you need in this case 0x8cff 0000 should do the trick */
+       /*----------------------------------------------------------------*/
+#if defined(CFG_INIT_DBCR)
+       lis     r1,0xffff
+       ori     r1,r1,0xffff
+       mtspr   dbsr,r1                 /* Clear all status bits */
+       lis     r0,CFG_INIT_DBCR@h
+       ori     r0,r0,CFG_INIT_DBCR@l
+       mtspr   dbcr0,r0
+       isync
+#endif
+
+       /*----------------------------------------------------------------*/
+       /* Setup the internal SRAM */
+       /*----------------------------------------------------------------*/
+       li      r0,0
+       mtdcr   isram0_sb1cr,r0         /* Disable bank 1 */
+
+       li      r2,0x7fff
+       ori     r2,r2,0xffff
+       mfdcr   r1,isram0_dpc
+       and     r1,r1,r2                /* Disable parity check */
+       mtdcr   isram0_dpc,r1
+       mfdcr   r1,isram0_pmeg
+       andis.  r1,r1,r2                /* Disable pwr mgmt */
+       mtdcr   isram0_pmeg,r1
+
+       lis     r1,0x8000               /* BAS = 8000_0000 */
+       ori     r1,r1,0x0380            /* 8k rw */
+       mtdcr   isram0_sb0cr,r1
+
+       /*----------------------------------------------------------------*/
+       /* Setup the stack in internal SRAM */
+       /*----------------------------------------------------------------*/
+       lis     r1,CFG_INIT_RAM_ADDR@h
+       ori     r1,r1,CFG_INIT_SP_OFFSET@l
+
+       li      r0,0
+       stwu    r0,-4(r1)
+       stwu    r0,-4(r1)               /* Terminate call chain */
+
+       stwu    r1,-8(r1)               /* Save back chain and move SP */
+       lis     r0,RESET_VECTOR@h       /* Address of reset vector */
+       ori     r0,r0, RESET_VECTOR@l
+       stwu    r1,-8(r1)               /* Save back chain and move SP */
+       stw     r0,+12(r1)              /* Save return addr (underflow vect) */
+
+       GET_GOT
+       bl      board_init_f
+
+#endif /* CONFIG_440 */
+
+/*****************************************************************************/
+#ifdef CONFIG_IOP480
+       /*----------------------------------------------------------------------- */
+       /* Set up some machine state registers. */
+       /*----------------------------------------------------------------------- */
+       addi    r0,r0,0x0000            /* initialize r0 to zero */
+       mtspr   esr,r0                  /* clear Exception Syndrome Reg */
+       mttcr   r0                      /* timer control register */
+       mtexier r0                      /* disable all interrupts */
+       addi    r4,r0,0x1000            /* set ME bit (Machine Exceptions) */
+       oris    r4,r4,0x2               /* set CE bit (Critical Exceptions) */
+       mtmsr   r4                      /* change MSR */
+       addis   r4,r0,0xFFFF            /* set r4 to 0xFFFFFFFF (status in the */
+       ori     r4,r4,0xFFFF            /* dbsr is cleared by setting bits to 1) */
+       mtdbsr  r4                      /* clear/reset the dbsr */
+       mtexisr r4                      /* clear all pending interrupts */
+       addis   r4,r0,0x8000
+       mtexier r4                      /* enable critical exceptions */
+       addis   r4,r0,0x0000            /* assume 403GCX - enable core clk */
+       ori     r4,r4,0x4020            /* dbling (no harm done on GA and GC */
+       mtiocr  r4                      /* since bit not used) & DRC to latch */
+                                       /* data bus on rising edge of CAS */
+       /*----------------------------------------------------------------------- */
+       /* Clear XER. */
+       /*----------------------------------------------------------------------- */
+       mtxer   r0
+       /*----------------------------------------------------------------------- */
+       /* Invalidate i-cache and d-cache TAG arrays. */
+       /*----------------------------------------------------------------------- */
+       addi    r3,0,1024               /* 1/4 of I-cache size, half of D-cache */
+       addi    r4,0,1024               /* 1/4 of I-cache */
+..cloop:
+       iccci   0,r3
+       iccci   r4,r3
+       dccci   0,r3
+       addic.  r3,r3,-16               /* move back one cache line */
+       bne     ..cloop                 /* loop back to do rest until r3 = 0 */
+
+       /* */
+       /* initialize IOP480 so it can read 1 MB code area for SRAM spaces */
+       /* this requires enabling MA[17..0], by default only MA[12..0] are enabled. */
+       /* */
+
+       /* first copy IOP480 register base address into r3 */
+       addis   r3,0,0x5000             /* IOP480 register base address hi */
+/*     ori     r3,r3,0x0000            /  IOP480 register base address lo */
+
+#ifdef CONFIG_ADCIOP
+       /* use r4 as the working variable */
+       /* turn on CS3 (LOCCTL.7) */
+       lwz     r4,0x84(r3)             /* LOCTL is at offset 0x84 */
+       andi.   r4,r4,0xff7f            /* make bit 7 = 0 -- CS3 mode */
+       stw     r4,0x84(r3)             /* LOCTL is at offset 0x84 */
+#endif
+
+#ifdef CONFIG_DASA_SIM
+       /* use r4 as the working variable */
+       /* turn on MA17 (LOCCTL.7) */
+       lwz     r4,0x84(r3)             /* LOCTL is at offset 0x84 */
+       ori     r4,r4,0x80              /* make bit 7 = 1 -- MA17 mode */
+       stw     r4,0x84(r3)             /* LOCTL is at offset 0x84 */
+#endif
+
+       /* turn on MA16..13 (LCS0BRD.12 = 0) */
+       lwz     r4,0x100(r3)            /* LCS0BRD is at offset 0x100 */
+       andi.   r4,r4,0xefff            /* make bit 12 = 0 */
+       stw     r4,0x100(r3)            /* LCS0BRD is at offset 0x100 */
+
+       /* make sure above stores all comlete before going on */
+       sync
+
+       /* last thing, set local init status done bit (DEVINIT.31) */
+       lwz     r4,0x80(r3)             /* DEVINIT is at offset 0x80 */
+       oris    r4,r4,0x8000            /* make bit 31 = 1 */
+       stw     r4,0x80(r3)             /* DEVINIT is at offset 0x80 */
+
+       /* clear all pending interrupts and disable all interrupts */
+       li      r4,-1                   /* set p1 to 0xffffffff */
+       stw     r4,0x1b0(r3)            /* clear all pending interrupts */
+       stw     r4,0x1b8(r3)            /* clear all pending interrupts */
+       li      r4,0                    /* set r4 to 0 */
+       stw     r4,0x1b4(r3)            /* disable all interrupts */
+       stw     r4,0x1bc(r3)            /* disable all interrupts */
+
+       /* make sure above stores all comlete before going on */
+       sync
+
+       /*----------------------------------------------------------------------- */
+       /* Enable two 128MB cachable regions. */
+       /*----------------------------------------------------------------------- */
+       addis   r1,r0,0x8000
+       addi    r1,r1,0x0001
+       mticcr  r1                      /* instruction cache */
+
+       addis   r1,r0,0x0000
+       addi    r1,r1,0x0000
+       mtdccr  r1                      /* data cache */
+
+       addis   r1,r0,CFG_INIT_RAM_ADDR@h
+       ori     r1,r1,CFG_INIT_SP_OFFSET          /* set up the stack to SDRAM */
+       li      r0, 0                   /* Make room for stack frame header and */
+       stwu    r0, -4(r1)              /* clear final stack frame so that      */
+       stwu    r0, -4(r1)              /* stack backtraces terminate cleanly   */
+
+       GET_GOT                 /* initialize GOT access                        */
+
+       bl      board_init_f    /* run first part of init code (from Flash)     */
+
+#endif /* CONFIG_IOP480 */
+
+/*****************************************************************************/
+#if defined(CONFIG_405GP) || defined(CONFIG_405CR) || defined(CONFIG_405)
+       /*----------------------------------------------------------------------- */
+       /* Clear and set up some registers. */
+       /*----------------------------------------------------------------------- */
+       addi    r4,r0,0x0000
+       mtspr   sgr,r4
+       mtspr   dcwr,r4
+       mtesr   r4                      /* clear Exception Syndrome Reg */
+       mttcr   r4                      /* clear Timer Control Reg */
+       mtxer   r4                      /* clear Fixed-Point Exception Reg */
+       mtevpr  r4                      /* clear Exception Vector Prefix Reg */
+       addi    r4,r0,0x1000            /* set ME bit (Machine Exceptions) */
+       oris    r4,r4,0x0002            /* set CE bit (Critical Exceptions) */
+       mtmsr   r4                      /* change MSR */
+       addi    r4,r0,(0xFFFF-0x10000)          /* set r4 to 0xFFFFFFFF (status in the */
+                                       /* dbsr is cleared by setting bits to 1) */
+       mtdbsr  r4                      /* clear/reset the dbsr */
+
+       /*----------------------------------------------------------------------- */
+       /* Invalidate I and D caches. Enable I cache for defined memory regions */
+       /* to speed things up. Leave the D cache disabled for now. It will be */
+       /* enabled/left disabled later based on user selected menu options. */
+       /* Be aware that the I cache may be disabled later based on the menu */
+       /* options as well. See miscLib/main.c. */
+       /*----------------------------------------------------------------------- */
+       bl      invalidate_icache
+       bl      invalidate_dcache
+
+       /*----------------------------------------------------------------------- */
+       /* Enable two 128MB cachable regions. */
+       /*----------------------------------------------------------------------- */
+       addis   r4,r0,0x8000
+       addi    r4,r4,0x0001
+       mticcr  r4                      /* instruction cache */
+       isync
+
+       addis   r4,r0,0x0000
+       addi    r4,r4,0x0000
+       mtdccr  r4                      /* data cache */
+
+#if !(defined(CFG_EBC_PB0AP) && defined(CFG_EBC_PB0CR))
+       /*----------------------------------------------------------------------- */
+       /* Tune the speed and size for flash CS0  */
+       /*----------------------------------------------------------------------- */
+       bl      ext_bus_cntlr_init
+#endif
+
+#if defined(CFG_OCM_DATA_ADDR) && defined(CFG_OCM_DATA_SIZE)
+       /********************************************************************
+        * Setup OCM - On Chip Memory
+        *******************************************************************/
+       /* Setup OCM */
+       lis     r0, 0x7FFF
+       ori     r0, r0, 0xFFFF
+       mfdcr   r3, ocmiscntl           /* get instr-side IRAM config */
+       mfdcr   r4, ocmdscntl   /* get data-side IRAM config */
+       and     r3, r3, r0      /* disable data-side IRAM */
+       and     r4, r4, r0      /* disable data-side IRAM */
+       mtdcr   ocmiscntl, r3   /* set instr-side IRAM config */
+       mtdcr   ocmdscntl, r4   /* set data-side IRAM config */
+       isync
+
+       addis   r3, 0, CFG_OCM_DATA_ADDR@h /* OCM location */
+       mtdcr   ocmdsarc, r3
+       addis   r4, 0, 0xC000           /* OCM data area enabled */
+       mtdcr   ocmdscntl, r4
+       isync
+#endif
+
+       /*----------------------------------------------------------------------- */
+       /* Setup temporary stack in DCACHE or OCM if needed for SDRAM SPD. */
+       /*----------------------------------------------------------------------- */
+#ifdef CFG_INIT_DCACHE_CS
+       /*----------------------------------------------------------------------- */
+       /* Memory Bank x (nothingness) initialization 1GB+64MEG */
+       /* used as temporary stack pointer for stage0  */
+       /*----------------------------------------------------------------------- */
+       li      r4,PBxAP
+       mtdcr   ebccfga,r4
+       lis     r4,0x0380
+       ori     r4,r4,0x0480
+       mtdcr   ebccfgd,r4
+
+       addi    r4,0,PBxCR
+       mtdcr   ebccfga,r4
+       lis     r4,0x400D
+       ori     r4,r4,0xa000
+       mtdcr   ebccfgd,r4
+
+       /* turn on data chache for this region */
+       lis     r4,0x0080
+       mtdccr  r4
+
+       /* set stack pointer and clear stack to known value */
+
+       lis     r1,CFG_INIT_RAM_ADDR@h
+       ori     r1,r1,CFG_INIT_SP_OFFSET@l
+
+       li      r4,2048                 /* we store 2048 words to stack */
+       mtctr   r4
+
+       lis     r2,CFG_INIT_RAM_ADDR@h          /* we also clear data area */
+       ori     r2,r2,CFG_INIT_RAM_END@l        /* so cant copy value from r1 */
+
+       lis     r4,0xdead               /* we store 0xdeaddead in the stack */
+       ori     r4,r4,0xdead
+
+..stackloop:
+       stwu    r4,-4(r2)
+       bdnz    ..stackloop
+
+       li      r0, 0                   /* Make room for stack frame header and */
+       stwu    r0, -4(r1)              /* clear final stack frame so that      */
+       stwu    r0, -4(r1)              /* stack backtraces terminate cleanly   */
+       /*
+        * Set up a dummy frame to store reset vector as return address.
+        * this causes stack underflow to reset board.
+        */
+       stwu    r1, -8(r1)              /* Save back chain and move SP */
+       addis   r0, 0, RESET_VECTOR@h   /* Address of reset vector */
+       ori     r0, r0, RESET_VECTOR@l
+       stwu    r1, -8(r1)              /* Save back chain and move SP */
+       stw     r0, +12(r1)             /* Save return addr (underflow vect) */
+
+#elif defined(CFG_TEMP_STACK_OCM) && \
+       (defined(CFG_OCM_DATA_ADDR) && defined(CFG_OCM_DATA_SIZE))
+       /*
+        * Stack in OCM.
+        */
+
+       /* Set up Stack at top of OCM */
+       lis     r1, (CFG_INIT_RAM_ADDR + CFG_INIT_SP_OFFSET)@h
+       ori     r1, r1, (CFG_INIT_RAM_ADDR + CFG_INIT_SP_OFFSET)@l
+
+       /* Set up a zeroized stack frame so that backtrace works right */
+       li      r0, 0
+       stwu    r0, -4(r1)
+       stwu    r0, -4(r1)
+
+       /*
+        * Set up a dummy frame to store reset vector as return address.
+        * this causes stack underflow to reset board.
+        */
+       stwu    r1, -8(r1)              /* Save back chain and move SP */
+       lis     r0, RESET_VECTOR@h      /* Address of reset vector */
+       ori     r0, r0, RESET_VECTOR@l
+       stwu    r1, -8(r1)              /* Save back chain and move SP */
+       stw     r0, +12(r1)             /* Save return addr (underflow vect) */
+#endif /* CFG_INIT_DCACHE_CS */
+
+       /*----------------------------------------------------------------------- */
+       /* Initialize SDRAM Controller  */
+       /*----------------------------------------------------------------------- */
+       bl      sdram_init
+
+       /*
+        * Setup temporary stack pointer only for boards
+        * that do not use SDRAM SPD I2C stuff since it
+        * is already initialized to use DCACHE or OCM
+        * stacks.
+        */
+#if !(defined(CFG_INIT_DCACHE_CS) || defined(CFG_TEMP_STACK_OCM))
+       lis     r1, CFG_INIT_RAM_ADDR@h
+       ori     r1,r1,CFG_INIT_SP_OFFSET /* set up the stack in SDRAM */
+
+       li      r0, 0                   /* Make room for stack frame header and */
+       stwu    r0, -4(r1)              /* clear final stack frame so that      */
+       stwu    r0, -4(r1)              /* stack backtraces terminate cleanly   */
+       /*
+        * Set up a dummy frame to store reset vector as return address.
+        * this causes stack underflow to reset board.
+        */
+       stwu    r1, -8(r1)              /* Save back chain and move SP */
+       lis     r0, RESET_VECTOR@h      /* Address of reset vector */
+       ori     r0, r0, RESET_VECTOR@l
+       stwu    r1, -8(r1)              /* Save back chain and move SP */
+       stw     r0, +12(r1)             /* Save return addr (underflow vect) */
+#endif /* !(CFG_INIT_DCACHE_CS  || !CFG_TEM_STACK_OCM) */
+
+       GET_GOT                 /* initialize GOT access                        */
+
+               bl      cpu_init_f      /* run low-level CPU init code     (from Flash) */
+
+       /* NEVER RETURNS! */
+       bl      board_init_f    /* run first part of init code (from Flash)     */
+
+#endif /* CONFIG_405GP || CONFIG_405CR */
+
+
+       .globl  _start_of_vectors
+_start_of_vectors:
+
+#if 0
+/*TODO Fixup _start above so we can do this*/
+/* Critical input. */
+       CRIT_EXCEPTION(0x100, CritcalInput, CritcalInputException)
+#endif
+
+/* Machine check */
+       STD_EXCEPTION(0x200, MachineCheck, MachineCheckException)
+
+/* Data Storage exception. */
+       STD_EXCEPTION(0x300, DataStorage, UnknownException)
+
+/* Instruction Storage exception. */
+       STD_EXCEPTION(0x400, InstStorage, UnknownException)
+
+/* External Interrupt exception. */
+       STD_EXCEPTION(0x500, ExtInterrupt, external_interrupt)
+
+/* Alignment exception. */
+       . = 0x600
+Alignment:
+       EXCEPTION_PROLOG
+       mfspr   r4,DAR
+       stw     r4,_DAR(r21)
+       mfspr   r5,DSISR
+       stw     r5,_DSISR(r21)
+       addi    r3,r1,STACK_FRAME_OVERHEAD
+       li      r20,MSR_KERNEL
+       rlwimi  r20,r23,0,16,16         /* copy EE bit from saved MSR */
+       lwz     r6,GOT(transfer_to_handler)
+       mtlr    r6
+       blrl
+.L_Alignment:
+       .long   AlignmentException - _start + EXC_OFF_SYS_RESET
+       .long   int_return - _start + EXC_OFF_SYS_RESET
+
+/* Program check exception */
+       . = 0x700
+ProgramCheck:
+       EXCEPTION_PROLOG
+       addi    r3,r1,STACK_FRAME_OVERHEAD
+       li      r20,MSR_KERNEL
+       rlwimi  r20,r23,0,16,16         /* copy EE bit from saved MSR */
+       lwz     r6,GOT(transfer_to_handler)
+       mtlr    r6
+       blrl
+.L_ProgramCheck:
+       .long   ProgramCheckException - _start + EXC_OFF_SYS_RESET
+       .long   int_return - _start + EXC_OFF_SYS_RESET
+
+       /* No FPU on MPC8xx.  This exception is not supposed to happen.
+       */
+       STD_EXCEPTION(0x800, FPUnavailable, UnknownException)
+
+       /* I guess we could implement decrementer, and may have
+        * to someday for timekeeping.
+        */
+       STD_EXCEPTION(0x900, Decrementer, timer_interrupt)
+       STD_EXCEPTION(0xa00, Trap_0a, UnknownException)
+       STD_EXCEPTION(0xb00, Trap_0b, UnknownException)
+
+       . = 0xc00
+/*
+ * r0 - SYSCALL number
+ * r3-... arguments
+ */
+SystemCall:
+       addis   r11,r0,0                /* get functions table addr */
+       ori     r11,r11,0               /* Note: this code is patched in trap_init */
+       addis   r12,r0,0                /* get number of functions */
+       ori     r12,r12,0
+
+       cmplw   0, r0, r12
+       bge     1f
+
+       rlwinm  r0,r0,2,0,31            /* fn_addr = fn_tbl[r0] */
+       add     r11,r11,r0
+       lwz     r11,0(r11)
+
+       li      r12,0xd00-4*3           /* save LR & SRRx */
+       mflr    r0
+       stw     r0,0(r12)
+       mfspr   r0,SRR0
+       stw     r0,4(r12)
+       mfspr   r0,SRR1
+       stw     r0,8(r12)
+
+       li      r12,0xc00+_back-SystemCall
+       mtlr    r12
+       mtspr   SRR0,r11
+
+1:     SYNC
+       rfi
+
+_back:
+
+       mfmsr   r11                     /* Disable interrupts */
+       li      r12,0
+       ori     r12,r12,MSR_EE
+       andc    r11,r11,r12
+       SYNC                            /* Some chip revs need this... */
+       mtmsr   r11
+       SYNC
+
+       li      r12,0xd00-4*3           /* restore regs */
+       lwz     r11,0(r12)
+       mtlr    r11
+       lwz     r11,4(r12)
+       mtspr   SRR0,r11
+       lwz     r11,8(r12)
+       mtspr   SRR1,r11
+
+       SYNC
+       rfi
+
+       STD_EXCEPTION(0xd00, SingleStep, UnknownException)
+
+       STD_EXCEPTION(0xe00, Trap_0e, UnknownException)
+       STD_EXCEPTION(0xf00, Trap_0f, UnknownException)
+
+       /* On the MPC8xx, this is a software emulation interrupt.  It occurs
+        * for all unimplemented and illegal instructions.
+        */
+       STD_EXCEPTION(0x1000, PIT, PITException)
+
+       STD_EXCEPTION(0x1100, InstructionTLBMiss, UnknownException)
+       STD_EXCEPTION(0x1200, DataTLBMiss, UnknownException)
+       STD_EXCEPTION(0x1300, InstructionTLBError, UnknownException)
+       STD_EXCEPTION(0x1400, DataTLBError, UnknownException)
+
+       STD_EXCEPTION(0x1500, Reserved5, UnknownException)
+       STD_EXCEPTION(0x1600, Reserved6, UnknownException)
+       STD_EXCEPTION(0x1700, Reserved7, UnknownException)
+       STD_EXCEPTION(0x1800, Reserved8, UnknownException)
+       STD_EXCEPTION(0x1900, Reserved9, UnknownException)
+       STD_EXCEPTION(0x1a00, ReservedA, UnknownException)
+       STD_EXCEPTION(0x1b00, ReservedB, UnknownException)
+
+       STD_EXCEPTION(0x1c00, DataBreakpoint, UnknownException)
+       STD_EXCEPTION(0x1d00, InstructionBreakpoint, UnknownException)
+       STD_EXCEPTION(0x1e00, PeripheralBreakpoint, UnknownException)
+       STD_EXCEPTION(0x1f00, DevPortBreakpoint, UnknownException)
+
+       CRIT_EXCEPTION(0x2000, DebugBreakpoint, DebugException )
+
+       .globl  _end_of_vectors
+_end_of_vectors:
+
+
+       . = 0x2100
+
+/*
+ * This code finishes saving the registers to the exception frame
+ * and jumps to the appropriate handler for the exception.
+ * Register r21 is pointer into trap frame, r1 has new stack pointer.
+ */
+       .globl  transfer_to_handler
+transfer_to_handler:
+       stw     r22,_NIP(r21)
+       lis     r22,MSR_POW@h
+       andc    r23,r23,r22
+       stw     r23,_MSR(r21)
+       SAVE_GPR(7, r21)
+       SAVE_4GPRS(8, r21)
+       SAVE_8GPRS(12, r21)
+       SAVE_8GPRS(24, r21)
+#if 0
+       andi.   r23,r23,MSR_PR
+       mfspr   r23,SPRG3               /* if from user, fix up tss.regs */
+       beq     2f
+       addi    r24,r1,STACK_FRAME_OVERHEAD
+       stw     r24,PT_REGS(r23)
+2:     addi    r2,r23,-TSS             /* set r2 to current */
+       tovirt(r2,r2,r23)
+#endif
+       mflr    r23
+       andi.   r24,r23,0x3f00          /* get vector offset */
+       stw     r24,TRAP(r21)
+       li      r22,0
+       stw     r22,RESULT(r21)
+       mtspr   SPRG2,r22               /* r1 is now kernel sp */
+#if 0
+       addi    r24,r2,TASK_STRUCT_SIZE /* check for kernel stack overflow */
+       cmplw   0,r1,r2
+       cmplw   1,r1,r24
+       crand   1,1,4
+       bgt     stack_ovf               /* if r2 < r1 < r2+TASK_STRUCT_SIZE */
+#endif
+       lwz     r24,0(r23)              /* virtual address of handler */
+       lwz     r23,4(r23)              /* where to go when done */
+       mtspr   SRR0,r24
+       mtspr   SRR1,r20
+       mtlr    r23
+       SYNC
+       rfi                             /* jump to handler, enable MMU */
+
+int_return:
+       mfmsr   r28             /* Disable interrupts */
+       li      r4,0
+       ori     r4,r4,MSR_EE
+       andc    r28,r28,r4
+       SYNC                    /* Some chip revs need this... */
+       mtmsr   r28
+       SYNC
+       lwz     r2,_CTR(r1)
+       lwz     r0,_LINK(r1)
+       mtctr   r2
+       mtlr    r0
+       lwz     r2,_XER(r1)
+       lwz     r0,_CCR(r1)
+       mtspr   XER,r2
+       mtcrf   0xFF,r0
+       REST_10GPRS(3, r1)
+       REST_10GPRS(13, r1)
+       REST_8GPRS(23, r1)
+       REST_GPR(31, r1)
+       lwz     r2,_NIP(r1)     /* Restore environment */
+       lwz     r0,_MSR(r1)
+       mtspr   SRR0,r2
+       mtspr   SRR1,r0
+       lwz     r0,GPR0(r1)
+       lwz     r2,GPR2(r1)
+       lwz     r1,GPR1(r1)
+       SYNC
+       rfi
+
+crit_return:
+       mfmsr   r28             /* Disable interrupts */
+       li      r4,0
+       ori     r4,r4,MSR_EE
+       andc    r28,r28,r4
+       SYNC                    /* Some chip revs need this... */
+       mtmsr   r28
+       SYNC
+       lwz     r2,_CTR(r1)
+       lwz     r0,_LINK(r1)
+       mtctr   r2
+       mtlr    r0
+       lwz     r2,_XER(r1)
+       lwz     r0,_CCR(r1)
+       mtspr   XER,r2
+       mtcrf   0xFF,r0
+       REST_10GPRS(3, r1)
+       REST_10GPRS(13, r1)
+       REST_8GPRS(23, r1)
+       REST_GPR(31, r1)
+       lwz     r2,_NIP(r1)     /* Restore environment */
+       lwz     r0,_MSR(r1)
+       mtspr   990,r2          /* SRR2 */
+       mtspr   991,r0          /* SRR3 */
+       lwz     r0,GPR0(r1)
+       lwz     r2,GPR2(r1)
+       lwz     r1,GPR1(r1)
+       SYNC
+       rfci
+
+/* Cache functions.
+*/
+invalidate_icache:
+       iccci   r0,r0                   /* for 405, iccci invalidates the */
+       blr                             /*   entire I cache */
+
+invalidate_dcache:
+       addi    r6,0,0x0000             /* clear GPR 6 */
+       /* Do loop for # of dcache congruence classes. */
+       addi    r7,r0, (CFG_DCACHE_SIZE / CFG_CACHELINE_SIZE / 2)
+                                       /* NOTE: dccci invalidates both */
+       mtctr   r7                      /* ways in the D cache */
+..dcloop:
+       dccci   0,r6                    /* invalidate line */
+       addi    r6,r6, CFG_CACHELINE_SIZE /* bump to next line */
+       bdnz    ..dcloop
+       blr
+
+flush_dcache:
+       addis   r9,r0,0x0002            /* set mask for EE and CE msr bits */
+       ori     r9,r9,0x8000
+       mfmsr   r12                     /* save msr */
+       andc    r9,r12,r9
+       mtmsr   r9                      /* disable EE and CE */
+       addi    r10,r0,0x0001           /* enable data cache for unused memory */
+       mfdccr  r9                      /* region 0xF8000000-0xFFFFFFFF via */
+       or      r10,r10,r9              /* bit 31 in dccr */
+       mtdccr  r10
+
+       /* do loop for # of congruence classes. */
+       addi    r10,r0,(CFG_DCACHE_SIZE / CFG_CACHELINE_SIZE / 2)
+       addi    r11,r0,(CFG_DCACHE_SIZE / 2) /* D cache set size - 2 way sets */
+       mtctr   r10
+       addi    r10,r0,(0xE000-0x10000) /* start at 0xFFFFE000 */
+       add     r11,r10,r11             /* add to get to other side of cache line */
+..flush_dcache_loop:
+       lwz     r3,0(r10)               /* least recently used side */
+       lwz     r3,0(r11)               /* the other side */
+       dccci   r0,r11                  /* invalidate both sides */
+       addi    r10,r10,CFG_CACHELINE_SIZE /* bump to next line */
+       addi    r11,r11,CFG_CACHELINE_SIZE /* bump to next line */
+       bdnz    ..flush_dcache_loop
+       sync                            /* allow memory access to complete */
+       mtdccr  r9                      /* restore dccr */
+       mtmsr   r12                     /* restore msr */
+       blr
+
+       .globl  icache_enable
+icache_enable:
+       mflr    r8
+       bl      invalidate_icache
+       mtlr    r8
+       isync
+       addis   r3,r0, 0x8000         /* set bit 0 */
+       mticcr  r3
+       blr
+
+       .globl  icache_disable
+icache_disable:
+       addis   r3,r0, 0x0000         /* clear bit 0 */
+       mticcr  r3
+       isync
+       blr
+
+       .globl  icache_status
+icache_status:
+       mficcr  r3
+       srwi    r3, r3, 31      /* >>31 => select bit 0 */
+       blr
+
+       .globl  dcache_enable
+dcache_enable:
+       mflr    r8
+       bl      invalidate_dcache
+       mtlr    r8
+       isync
+       addis   r3,r0, 0x8000         /* set bit 0 */
+       mtdccr  r3
+       blr
+
+       .globl  dcache_disable
+dcache_disable:
+       mflr    r8
+       bl      flush_dcache
+       mtlr    r8
+       addis   r3,r0, 0x0000         /* clear bit 0 */
+       mtdccr  r3
+       blr
+
+       .globl  dcache_status
+dcache_status:
+       mfdccr  r3
+       srwi    r3, r3, 31      /* >>31 => select bit 0 */
+       blr
+
+       .globl get_pvr
+get_pvr:
+       mfspr   r3, PVR
+       blr
+
+#if !defined(CONFIG_440)
+       .globl wr_pit
+wr_pit:
+       mtspr   pit, r3
+       blr
+#endif
+
+       .globl wr_tcr
+wr_tcr:
+       mtspr   tcr, r3
+       blr
+
+/*------------------------------------------------------------------------------- */
+/* Function:    in8 */
+/* Description:         Input 8 bits */
+/*------------------------------------------------------------------------------- */
+       .globl  in8
+in8:
+       lbz     r3,0x0000(r3)
+       blr
+
+/*------------------------------------------------------------------------------- */
+/* Function:    out8 */
+/* Description:         Output 8 bits */
+/*------------------------------------------------------------------------------- */
+       .globl  out8
+out8:
+       stb     r4,0x0000(r3)
+       blr
+
+/*------------------------------------------------------------------------------- */
+/* Function:    out16 */
+/* Description:         Output 16 bits */
+/*------------------------------------------------------------------------------- */
+       .globl  out16
+out16:
+       sth     r4,0x0000(r3)
+       blr
+
+/*------------------------------------------------------------------------------- */
+/* Function:    out16r */
+/* Description:         Byte reverse and output 16 bits */
+/*------------------------------------------------------------------------------- */
+       .globl  out16r
+out16r:
+       sthbrx  r4,r0,r3
+       blr
+
+/*------------------------------------------------------------------------------- */
+/* Function:    out32 */
+/* Description:         Output 32 bits */
+/*------------------------------------------------------------------------------- */
+       .globl  out32
+out32:
+       stw     r4,0x0000(r3)
+       blr
+
+/*------------------------------------------------------------------------------- */
+/* Function:    out32r */
+/* Description:         Byte reverse and output 32 bits */
+/*------------------------------------------------------------------------------- */
+       .globl  out32r
+out32r:
+       stwbrx  r4,r0,r3
+       blr
+
+/*------------------------------------------------------------------------------- */
+/* Function:    in16 */
+/* Description:         Input 16 bits */
+/*------------------------------------------------------------------------------- */
+       .globl  in16
+in16:
+       lhz     r3,0x0000(r3)
+       blr
+
+/*------------------------------------------------------------------------------- */
+/* Function:    in16r */
+/* Description:         Input 16 bits and byte reverse */
+/*------------------------------------------------------------------------------- */
+       .globl  in16r
+in16r:
+       lhbrx   r3,r0,r3
+       blr
+
+/*------------------------------------------------------------------------------- */
+/* Function:    in32 */
+/* Description:         Input 32 bits */
+/*------------------------------------------------------------------------------- */
+       .globl  in32
+in32:
+       lwz     3,0x0000(3)
+       blr
+
+/*------------------------------------------------------------------------------- */
+/* Function:    in32r */
+/* Description:         Input 32 bits and byte reverse */
+/*------------------------------------------------------------------------------- */
+       .globl  in32r
+in32r:
+       lwbrx   r3,r0,r3
+       blr
+
+/*------------------------------------------------------------------------------- */
+/* Function:    ppcDcbf */
+/* Description:         Data Cache block flush */
+/* Input:       r3 = effective address */
+/* Output:      none. */
+/*------------------------------------------------------------------------------- */
+       .globl  ppcDcbf
+ppcDcbf:
+       dcbf    r0,r3
+       blr
+
+/*------------------------------------------------------------------------------- */
+/* Function:    ppcDcbi */
+/* Description:         Data Cache block Invalidate */
+/* Input:       r3 = effective address */
+/* Output:      none. */
+/*------------------------------------------------------------------------------- */
+       .globl  ppcDcbi
+ppcDcbi:
+       dcbi    r0,r3
+       blr
+
+/*------------------------------------------------------------------------------- */
+/* Function:    ppcSync */
+/* Description:         Processor Synchronize */
+/* Input:       none. */
+/* Output:      none. */
+/*------------------------------------------------------------------------------- */
+       .globl  ppcSync
+ppcSync:
+       sync
+       blr
+
+/*------------------------------------------------------------------------------*/
+
+/*
+ * void relocate_code (addr_sp, gd, addr_moni)
+ *
+ * This "function" does not return, instead it continues in RAM
+ * after relocating the monitor code.
+ *
+ * r3 = dest
+ * r4 = src
+ * r5 = length in bytes
+ * r6 = cachelinesize
+ */
+       .globl  relocate_code
+relocate_code:
+       mr      r1,  r3         /* Set new stack pointer                */
+       mr      r9,  r4         /* Save copy of Init Data pointer       */
+       mr      r10, r5         /* Save copy of Destination Address     */
+
+       mr      r3,  r5                         /* Destination Address  */
+       lis     r4, CFG_MONITOR_BASE@h          /* Source      Address  */
+       ori     r4, r4, CFG_MONITOR_BASE@l
+       lis     r5, CFG_MONITOR_LEN@h           /* Length in Bytes      */
+       ori     r5, r5, CFG_MONITOR_LEN@l
+       li      r6, CFG_CACHELINE_SIZE          /* Cache Line Size      */
+
+       /*
+        * Fix GOT pointer:
+        *
+        * New GOT-PTR = (old GOT-PTR - CFG_MONITOR_BASE) + Destination Address
+        *
+        * Offset:
+        */
+       sub     r15, r10, r4
+
+       /* First our own GOT */
+       add     r14, r14, r15
+       /* the the one used by the C code */
+       add     r30, r30, r15
+
+       /*
+        * Now relocate code
+        */
+
+       cmplw   cr1,r3,r4
+       addi    r0,r5,3
+       srwi.   r0,r0,2
+       beq     cr1,4f          /* In place copy is not necessary       */
+       beq     7f              /* Protect against 0 count              */
+       mtctr   r0
+       bge     cr1,2f
+
+       la      r8,-4(r4)
+       la      r7,-4(r3)
+1:     lwzu    r0,4(r8)
+       stwu    r0,4(r7)
+       bdnz    1b
+       b       4f
+
+2:     slwi    r0,r0,2
+       add     r8,r4,r0
+       add     r7,r3,r0
+3:     lwzu    r0,-4(r8)
+       stwu    r0,-4(r7)
+       bdnz    3b
+
+/*
+ * Now flush the cache: note that we must start from a cache aligned
+ * address. Otherwise we might miss one cache line.
+ */
+4:     cmpwi   r6,0
+       add     r5,r3,r5
+       beq     7f              /* Always flush prefetch queue in any case */
+       subi    r0,r6,1
+       andc    r3,r3,r0
+       mr      r4,r3
+5:     dcbst   0,r4
+       add     r4,r4,r6
+       cmplw   r4,r5
+       blt     5b
+       sync                    /* Wait for all dcbst to complete on bus */
+       mr      r4,r3
+6:     icbi    0,r4
+       add     r4,r4,r6
+       cmplw   r4,r5
+       blt     6b
+7:     sync                    /* Wait for all icbi to complete on bus */
+       isync
+
+/*
+ * We are done. Do not return, instead branch to second part of board
+ * initialization, now running from RAM.
+ */
+
+       addi    r0, r10, in_ram - _start + EXC_OFF_SYS_RESET
+       mtlr    r0
+       blr                             /* NEVER RETURNS! */
+
+in_ram:
+
+       /*
+        * Relocation Function, r14 point to got2+0x8000
+        *
+        * Adjust got2 pointers, no need to check for 0, this code
+        * already puts a few entries in the table.
+        */
+       li      r0,__got2_entries@sectoff@l
+       la      r3,GOT(_GOT2_TABLE_)
+       lwz     r11,GOT(_GOT2_TABLE_)
+       mtctr   r0
+       sub     r11,r3,r11
+       addi    r3,r3,-4
+1:     lwzu    r0,4(r3)
+       add     r0,r0,r11
+       stw     r0,0(r3)
+       bdnz    1b
+
+       /*
+        * Now adjust the fixups and the pointers to the fixups
+        * in case we need to move ourselves again.
+        */
+2:     li      r0,__fixup_entries@sectoff@l
+       lwz     r3,GOT(_FIXUP_TABLE_)
+       cmpwi   r0,0
+       mtctr   r0
+       addi    r3,r3,-4
+       beq     4f
+3:     lwzu    r4,4(r3)
+       lwzux   r0,r4,r11
+       add     r0,r0,r11
+       stw     r10,0(r3)
+       stw     r0,0(r4)
+       bdnz    3b
+4:
+clear_bss:
+       /*
+        * Now clear BSS segment
+        */
+       lwz     r3,GOT(.bss)
+       lwz     r4,GOT(_end)
+
+       cmplw   0, r3, r4
+       beq     6f
+
+       li      r0, 0
+5:
+       stw     r0, 0(r3)
+       addi    r3, r3, 4
+       cmplw   0, r3, r4
+       bne     5b
+6:
+
+       mr      r3, r9          /* Init Data pointer            */
+       mr      r4, r10         /* Destination Address          */
+       bl      board_init_r
+
+       /* Problems accessing "end" in C, so do it here */
+       .globl  get_endaddr
+get_endaddr:
+       lwz     r3,GOT(_end)
+       blr
+
+       /*
+        * Copy exception vector code to low memory
+        *
+        * r3: dest_addr
+        * r7: source address, r8: end address, r9: target address
+        */
+       .globl  trap_init
+trap_init:
+       lwz     r7, GOT(_start)
+       lwz     r8, GOT(_end_of_vectors)
+
+       rlwinm  r9, r7, 0, 18, 31       /* _start & 0x3FFF      */
+
+       cmplw   0, r7, r8
+       bgelr                           /* return if r7>=r8 - just in case */
+
+       mflr    r4                      /* save link register           */
+1:
+       lwz     r0, 0(r7)
+       stw     r0, 0(r9)
+       addi    r7, r7, 4
+       addi    r9, r9, 4
+       cmplw   0, r7, r8
+       bne     1b
+
+       /*
+        * relocate `hdlr' and `int_return' entries
+        */
+       li      r7, .L_MachineCheck - _start + EXC_OFF_SYS_RESET
+       li      r8, Alignment - _start + EXC_OFF_SYS_RESET
+2:
+       bl      trap_reloc
+       addi    r7, r7, 0x100           /* next exception vector        */
+       cmplw   0, r7, r8
+       blt     2b
+
+       li      r7, .L_Alignment - _start + EXC_OFF_SYS_RESET
+       bl      trap_reloc
+
+       li      r7, .L_ProgramCheck - _start + EXC_OFF_SYS_RESET
+       bl      trap_reloc
+
+       li      r7, .L_FPUnavailable - _start + EXC_OFF_SYS_RESET
+       li      r8, SystemCall - _start + EXC_OFF_SYS_RESET
+3:
+       bl      trap_reloc
+       addi    r7, r7, 0x100           /* next exception vector        */
+       cmplw   0, r7, r8
+       blt     3b
+
+       li      r7, .L_SingleStep - _start + EXC_OFF_SYS_RESET
+       li      r8, _end_of_vectors - _start + EXC_OFF_SYS_RESET
+4:
+       bl      trap_reloc
+       addi    r7, r7, 0x100           /* next exception vector        */
+       cmplw   0, r7, r8
+       blt     4b
+
+       mtlr    r4                      /* restore link register        */
+       blr
+
+       /*
+        * Function: relocate entries for one exception vector
+        */
+trap_reloc:
+       lwz     r0, 0(r7)               /* hdlr ...                     */
+       add     r0, r0, r3              /*  ... += dest_addr            */
+       stw     r0, 0(r7)
+
+       lwz     r0, 4(r7)               /* int_return ...               */
+       add     r0, r0, r3              /*  ... += dest_addr            */
+       stw     r0, 4(r7)
+
+       blr
diff --git a/include/asm-arm/arch-pxa/pxa-regs.h b/include/asm-arm/arch-pxa/pxa-regs.h
new file mode 100644 (file)
index 0000000..2975fa3
--- /dev/null
@@ -0,0 +1,1133 @@
+/*
+ *  linux/include/asm-arm/arch-pxa/pxa-regs.h
+ *
+ *  Author:    Nicolas Pitre
+ *  Created:   Jun 15, 2001
+ *  Copyright: MontaVista Software Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+
+/* FIXME hack so that SA-1111.h will work [cb] */
+
+#ifndef __ASSEMBLY__
+typedef unsigned short  Word16 ;
+typedef unsigned int    Word32 ;
+typedef Word32          Word ;
+typedef Word            Quad [4] ;
+typedef void            *Address ;
+typedef void            (*ExcpHndlr) (void) ;
+#endif
+
+#ifndef __ASSEMBLY__
+#define io_p2v(PhAdd)    (PhAdd)
+#define __REG(x) (*((volatile u32 *)io_p2v(x)))
+#else
+#define __REG(x) (x)
+#endif
+
+/*
+ * PXA Chip selects
+ */
+
+#define PXA_CS0_PHYS   0x00000000
+#define PXA_CS1_PHYS   0x04000000
+#define PXA_CS2_PHYS   0x08000000
+#define PXA_CS3_PHYS   0x0C000000
+#define PXA_CS4_PHYS   0x10000000
+#define PXA_CS5_PHYS   0x14000000
+
+
+/*
+ * Personal Computer Memory Card International Association (PCMCIA) sockets
+ */
+
+#define PCMCIAPrtSp    0x04000000      /* PCMCIA Partition Space [byte]   */
+#define PCMCIASp       (4*PCMCIAPrtSp) /* PCMCIA Space [byte]             */
+#define PCMCIAIOSp     PCMCIAPrtSp     /* PCMCIA I/O Space [byte]         */
+#define PCMCIAAttrSp   PCMCIAPrtSp     /* PCMCIA Attribute Space [byte]   */
+#define PCMCIAMemSp    PCMCIAPrtSp     /* PCMCIA Memory Space [byte]      */
+
+#define PCMCIA0Sp      PCMCIASp        /* PCMCIA 0 Space [byte]           */
+#define PCMCIA0IOSp    PCMCIAIOSp      /* PCMCIA 0 I/O Space [byte]       */
+#define PCMCIA0AttrSp  PCMCIAAttrSp    /* PCMCIA 0 Attribute Space [byte] */
+#define PCMCIA0MemSp   PCMCIAMemSp     /* PCMCIA 0 Memory Space [byte]    */
+
+#define PCMCIA1Sp      PCMCIASp        /* PCMCIA 1 Space [byte]           */
+#define PCMCIA1IOSp    PCMCIAIOSp      /* PCMCIA 1 I/O Space [byte]       */
+#define PCMCIA1AttrSp  PCMCIAAttrSp    /* PCMCIA 1 Attribute Space [byte] */
+#define PCMCIA1MemSp   PCMCIAMemSp     /* PCMCIA 1 Memory Space [byte]    */
+
+#define _PCMCIA(Nb)                    /* PCMCIA [0..1]                   */ \
+                       (0x20000000 + (Nb)*PCMCIASp)
+#define _PCMCIAIO(Nb)  _PCMCIA (Nb)    /* PCMCIA I/O [0..1]               */
+#define _PCMCIAAttr(Nb)                        /* PCMCIA Attribute [0..1]         */ \
+                       (_PCMCIA (Nb) + 2*PCMCIAPrtSp)
+#define _PCMCIAMem(Nb)                 /* PCMCIA Memory [0..1]            */ \
+                       (_PCMCIA (Nb) + 3*PCMCIAPrtSp)
+
+#define _PCMCIA0       _PCMCIA (0)     /* PCMCIA 0                        */
+#define _PCMCIA0IO     _PCMCIAIO (0)   /* PCMCIA 0 I/O                    */
+#define _PCMCIA0Attr   _PCMCIAAttr (0) /* PCMCIA 0 Attribute              */
+#define _PCMCIA0Mem    _PCMCIAMem (0)  /* PCMCIA 0 Memory                 */
+
+#define _PCMCIA1       _PCMCIA (1)     /* PCMCIA 1                        */
+#define _PCMCIA1IO     _PCMCIAIO (1)   /* PCMCIA 1 I/O                    */
+#define _PCMCIA1Attr   _PCMCIAAttr (1) /* PCMCIA 1 Attribute              */
+#define _PCMCIA1Mem    _PCMCIAMem (1)  /* PCMCIA 1 Memory                 */
+
+
+
+/*
+ * DMA Controller
+ */
+
+#define DCSR0          __REG(0x40000000)  /* DMA Control / Status Register for Channel 0 */
+#define DCSR1          __REG(0x40000004)  /* DMA Control / Status Register for Channel 1 */
+#define DCSR2          __REG(0x40000008)  /* DMA Control / Status Register for Channel 2 */
+#define DCSR3          __REG(0x4000000c)  /* DMA Control / Status Register for Channel 3 */
+#define DCSR4          __REG(0x40000010)  /* DMA Control / Status Register for Channel 4 */
+#define DCSR5          __REG(0x40000014)  /* DMA Control / Status Register for Channel 5 */
+#define DCSR6          __REG(0x40000018)  /* DMA Control / Status Register for Channel 6 */
+#define DCSR7          __REG(0x4000001c)  /* DMA Control / Status Register for Channel 7 */
+#define DCSR8          __REG(0x40000020)  /* DMA Control / Status Register for Channel 8 */
+#define DCSR9          __REG(0x40000024)  /* DMA Control / Status Register for Channel 9 */
+#define DCSR10         __REG(0x40000028)  /* DMA Control / Status Register for Channel 10 */
+#define DCSR11         __REG(0x4000002c)  /* DMA Control / Status Register for Channel 11 */
+#define DCSR12         __REG(0x40000030)  /* DMA Control / Status Register for Channel 12 */
+#define DCSR13         __REG(0x40000034)  /* DMA Control / Status Register for Channel 13 */
+#define DCSR14         __REG(0x40000038)  /* DMA Control / Status Register for Channel 14 */
+#define DCSR15         __REG(0x4000003c)  /* DMA Control / Status Register for Channel 15 */
+
+#define DCSR(x)                __REG2(0x40000000, (x) << 2)
+
+#define DCSR_RUN       (1 << 31)       /* Run Bit (read / write) */
+#define DCSR_NODESC    (1 << 30)       /* No-Descriptor Fetch (read / write) */
+#define DCSR_STOPIRQEN (1 << 29)       /* Stop Interrupt Enable (read / write) */
+#define DCSR_REQPEND   (1 << 8)        /* Request Pending (read-only) */
+#define DCSR_STOPSTATE (1 << 3)        /* Stop State (read-only) */
+#define DCSR_ENDINTR   (1 << 2)        /* End Interrupt (read / write) */
+#define DCSR_STARTINTR (1 << 1)        /* Start Interrupt (read / write) */
+#define DCSR_BUSERR    (1 << 0)        /* Bus Error Interrupt (read / write) */
+
+#define DINT           __REG(0x400000f0)  /* DMA Interrupt Register */
+
+#define DRCMR0         __REG(0x40000100)  /* Request to Channel Map Register for DREQ 0 */
+#define DRCMR1         __REG(0x40000104)  /* Request to Channel Map Register for DREQ 1 */
+#define DRCMR2         __REG(0x40000108)  /* Request to Channel Map Register for I2S receive Request */
+#define DRCMR3         __REG(0x4000010c)  /* Request to Channel Map Register for I2S transmit Request */
+#define DRCMR4         __REG(0x40000110)  /* Request to Channel Map Register for BTUART receive Request */
+#define DRCMR5         __REG(0x40000114)  /* Request to Channel Map Register for BTUART transmit Request. */
+#define DRCMR6         __REG(0x40000118)  /* Request to Channel Map Register for FFUART receive Request */
+#define DRCMR7         __REG(0x4000011c)  /* Request to Channel Map Register for FFUART transmit Request */
+#define DRCMR8         __REG(0x40000120)  /* Request to Channel Map Register for AC97 microphone Request */
+#define DRCMR9         __REG(0x40000124)  /* Request to Channel Map Register for AC97 modem receive Request */
+#define DRCMR10                __REG(0x40000128)  /* Request to Channel Map Register for AC97 modem transmit Request */
+#define DRCMR11                __REG(0x4000012c)  /* Request to Channel Map Register for AC97 audio receive Request */
+#define DRCMR12                __REG(0x40000130)  /* Request to Channel Map Register for AC97 audio transmit Request */
+#define DRCMR13                __REG(0x40000134)  /* Request to Channel Map Register for SSP receive Request */
+#define DRCMR14                __REG(0x40000138)  /* Request to Channel Map Register for SSP transmit Request */
+#define DRCMR15                __REG(0x4000013c)  /* Reserved */
+#define DRCMR16                __REG(0x40000140)  /* Reserved */
+#define DRCMR17                __REG(0x40000144)  /* Request to Channel Map Register for ICP receive Request */
+#define DRCMR18                __REG(0x40000148)  /* Request to Channel Map Register for ICP transmit Request */
+#define DRCMR19                __REG(0x4000014c)  /* Request to Channel Map Register for STUART receive Request */
+#define DRCMR20                __REG(0x40000150)  /* Request to Channel Map Register for STUART transmit Request */
+#define DRCMR21                __REG(0x40000154)  /* Request to Channel Map Register for MMC receive Request */
+#define DRCMR22                __REG(0x40000158)  /* Request to Channel Map Register for MMC transmit Request */
+#define DRCMR23                __REG(0x4000015c)  /* Reserved */
+#define DRCMR24                __REG(0x40000160)  /* Reserved */
+#define DRCMR25                __REG(0x40000164)  /* Request to Channel Map Register for USB endpoint 1 Request */
+#define DRCMR26                __REG(0x40000168)  /* Request to Channel Map Register for USB endpoint 2 Request */
+#define DRCMR27                __REG(0x4000016C)  /* Request to Channel Map Register for USB endpoint 3 Request */
+#define DRCMR28                __REG(0x40000170)  /* Request to Channel Map Register for USB endpoint 4 Request */
+#define DRCMR29                __REG(0x40000174)  /* Reserved */
+#define DRCMR30                __REG(0x40000178)  /* Request to Channel Map Register for USB endpoint 6 Request */
+#define DRCMR31                __REG(0x4000017C)  /* Request to Channel Map Register for USB endpoint 7 Request */
+#define DRCMR32                __REG(0x40000180)  /* Request to Channel Map Register for USB endpoint 8 Request */
+#define DRCMR33                __REG(0x40000184)  /* Request to Channel Map Register for USB endpoint 9 Request */
+#define DRCMR34                __REG(0x40000188)  /* Reserved */
+#define DRCMR35                __REG(0x4000018C)  /* Request to Channel Map Register for USB endpoint 11 Request */
+#define DRCMR36                __REG(0x40000190)  /* Request to Channel Map Register for USB endpoint 12 Request */
+#define DRCMR37                __REG(0x40000194)  /* Request to Channel Map Register for USB endpoint 13 Request */
+#define DRCMR38                __REG(0x40000198)  /* Request to Channel Map Register for USB endpoint 14 Request */
+#define DRCMR39                __REG(0x4000019C)  /* Reserved */
+
+#define DRCMRRXSADR    DRCMR2
+#define DRCMRTXSADR    DRCMR3
+#define DRCMRRXBTRBR   DRCMR4
+#define DRCMRTXBTTHR   DRCMR5
+#define DRCMRRXFFRBR   DRCMR6
+#define DRCMRTXFFTHR   DRCMR7
+#define DRCMRRXMCDR    DRCMR8
+#define DRCMRRXMODR    DRCMR9
+#define DRCMRTXMODR    DRCMR10
+#define DRCMRRXPCDR    DRCMR11
+#define DRCMRTXPCDR    DRCMR12
+#define DRCMRRXSSDR    DRCMR13
+#define DRCMRTXSSDR    DRCMR14
+#define DRCMRRXICDR    DRCMR17
+#define DRCMRTXICDR    DRCMR18
+#define DRCMRRXSTRBR   DRCMR19
+#define DRCMRTXSTTHR   DRCMR20
+#define DRCMRRXMMC     DRCMR21
+#define DRCMRTXMMC     DRCMR22
+
+#define DRCMR_MAPVLD   (1 << 7)        /* Map Valid (read / write) */
+#define DRCMR_CHLNUM   0x0f            /* mask for Channel Number (read / write) */
+
+#define DDADR0         __REG(0x40000200)  /* DMA Descriptor Address Register Channel 0 */
+#define DSADR0         __REG(0x40000204)  /* DMA Source Address Register Channel 0 */
+#define DTADR0         __REG(0x40000208)  /* DMA Target Address Register Channel 0 */
+#define DCMD0          __REG(0x4000020c)  /* DMA Command Address Register Channel 0 */
+#define DDADR1         __REG(0x40000210)  /* DMA Descriptor Address Register Channel 1 */
+#define DSADR1         __REG(0x40000214)  /* DMA Source Address Register Channel 1 */
+#define DTADR1         __REG(0x40000218)  /* DMA Target Address Register Channel 1 */
+#define DCMD1          __REG(0x4000021c)  /* DMA Command Address Register Channel 1 */
+#define DDADR2         __REG(0x40000220)  /* DMA Descriptor Address Register Channel 2 */
+#define DSADR2         __REG(0x40000224)  /* DMA Source Address Register Channel 2 */
+#define DTADR2         __REG(0x40000228)  /* DMA Target Address Register Channel 2 */
+#define DCMD2          __REG(0x4000022c)  /* DMA Command Address Register Channel 2 */
+#define DDADR3         __REG(0x40000230)  /* DMA Descriptor Address Register Channel 3 */
+#define DSADR3         __REG(0x40000234)  /* DMA Source Address Register Channel 3 */
+#define DTADR3         __REG(0x40000238)  /* DMA Target Address Register Channel 3 */
+#define DCMD3          __REG(0x4000023c)  /* DMA Command Address Register Channel 3 */
+#define DDADR4         __REG(0x40000240)  /* DMA Descriptor Address Register Channel 4 */
+#define DSADR4         __REG(0x40000244)  /* DMA Source Address Register Channel 4 */
+#define DTADR4         __REG(0x40000248)  /* DMA Target Address Register Channel 4 */
+#define DCMD4          __REG(0x4000024c)  /* DMA Command Address Register Channel 4 */
+#define DDADR5         __REG(0x40000250)  /* DMA Descriptor Address Register Channel 5 */
+#define DSADR5         __REG(0x40000254)  /* DMA Source Address Register Channel 5 */
+#define DTADR5         __REG(0x40000258)  /* DMA Target Address Register Channel 5 */
+#define DCMD5          __REG(0x4000025c)  /* DMA Command Address Register Channel 5 */
+#define DDADR6         __REG(0x40000260)  /* DMA Descriptor Address Register Channel 6 */
+#define DSADR6         __REG(0x40000264)  /* DMA Source Address Register Channel 6 */
+#define DTADR6         __REG(0x40000268)  /* DMA Target Address Register Channel 6 */
+#define DCMD6          __REG(0x4000026c)  /* DMA Command Address Register Channel 6 */
+#define DDADR7         __REG(0x40000270)  /* DMA Descriptor Address Register Channel 7 */
+#define DSADR7         __REG(0x40000274)  /* DMA Source Address Register Channel 7 */
+#define DTADR7         __REG(0x40000278)  /* DMA Target Address Register Channel 7 */
+#define DCMD7          __REG(0x4000027c)  /* DMA Command Address Register Channel 7 */
+#define DDADR8         __REG(0x40000280)  /* DMA Descriptor Address Register Channel 8 */
+#define DSADR8         __REG(0x40000284)  /* DMA Source Address Register Channel 8 */
+#define DTADR8         __REG(0x40000288)  /* DMA Target Address Register Channel 8 */
+#define DCMD8          __REG(0x4000028c)  /* DMA Command Address Register Channel 8 */
+#define DDADR9         __REG(0x40000290)  /* DMA Descriptor Address Register Channel 9 */
+#define DSADR9         __REG(0x40000294)  /* DMA Source Address Register Channel 9 */
+#define DTADR9         __REG(0x40000298)  /* DMA Target Address Register Channel 9 */
+#define DCMD9          __REG(0x4000029c)  /* DMA Command Address Register Channel 9 */
+#define DDADR10                __REG(0x400002a0)  /* DMA Descriptor Address Register Channel 10 */
+#define DSADR10                __REG(0x400002a4)  /* DMA Source Address Register Channel 10 */
+#define DTADR10                __REG(0x400002a8)  /* DMA Target Address Register Channel 10 */
+#define DCMD10         __REG(0x400002ac)  /* DMA Command Address Register Channel 10 */
+#define DDADR11                __REG(0x400002b0)  /* DMA Descriptor Address Register Channel 11 */
+#define DSADR11                __REG(0x400002b4)  /* DMA Source Address Register Channel 11 */
+#define DTADR11                __REG(0x400002b8)  /* DMA Target Address Register Channel 11 */
+#define DCMD11         __REG(0x400002bc)  /* DMA Command Address Register Channel 11 */
+#define DDADR12                __REG(0x400002c0)  /* DMA Descriptor Address Register Channel 12 */
+#define DSADR12                __REG(0x400002c4)  /* DMA Source Address Register Channel 12 */
+#define DTADR12                __REG(0x400002c8)  /* DMA Target Address Register Channel 12 */
+#define DCMD12         __REG(0x400002cc)  /* DMA Command Address Register Channel 12 */
+#define DDADR13                __REG(0x400002d0)  /* DMA Descriptor Address Register Channel 13 */
+#define DSADR13                __REG(0x400002d4)  /* DMA Source Address Register Channel 13 */
+#define DTADR13                __REG(0x400002d8)  /* DMA Target Address Register Channel 13 */
+#define DCMD13         __REG(0x400002dc)  /* DMA Command Address Register Channel 13 */
+#define DDADR14                __REG(0x400002e0)  /* DMA Descriptor Address Register Channel 14 */
+#define DSADR14                __REG(0x400002e4)  /* DMA Source Address Register Channel 14 */
+#define DTADR14                __REG(0x400002e8)  /* DMA Target Address Register Channel 14 */
+#define DCMD14         __REG(0x400002ec)  /* DMA Command Address Register Channel 14 */
+#define DDADR15                __REG(0x400002f0)  /* DMA Descriptor Address Register Channel 15 */
+#define DSADR15                __REG(0x400002f4)  /* DMA Source Address Register Channel 15 */
+#define DTADR15                __REG(0x400002f8)  /* DMA Target Address Register Channel 15 */
+#define DCMD15         __REG(0x400002fc)  /* DMA Command Address Register Channel 15 */
+
+#define DDADR(x)       __REG2(0x40000200, (x) << 4)
+#define DSADR(x)       __REG2(0x40000204, (x) << 4)
+#define DTADR(x)       __REG2(0x40000208, (x) << 4)
+#define DCMD(x)                __REG2(0x4000020c, (x) << 4)
+
+#define DDADR_DESCADDR 0xfffffff0      /* Address of next descriptor (mask) */
+#define DDADR_STOP     (1 << 0)        /* Stop (read / write) */
+
+#define DCMD_INCSRCADDR        (1 << 31)       /* Source Address Increment Setting. */
+#define DCMD_INCTRGADDR        (1 << 30)       /* Target Address Increment Setting. */
+#define DCMD_FLOWSRC   (1 << 29)       /* Flow Control by the source. */
+#define DCMD_FLOWTRG   (1 << 28)       /* Flow Control by the target. */
+#define DCMD_STARTIRQEN        (1 << 22)       /* Start Interrupt Enable */
+#define DCMD_ENDIRQEN  (1 << 21)       /* End Interrupt Enable */
+#define DCMD_ENDIAN    (1 << 18)       /* Device Endian-ness. */
+#define DCMD_BURST8    (1 << 16)       /* 8 byte burst */
+#define DCMD_BURST16   (2 << 16)       /* 16 byte burst */
+#define DCMD_BURST32   (3 << 16)       /* 32 byte burst */
+#define DCMD_WIDTH1    (1 << 14)       /* 1 byte width */
+#define DCMD_WIDTH2    (2 << 14)       /* 2 byte width (HalfWord) */
+#define DCMD_WIDTH4    (3 << 14)       /* 4 byte width (Word) */
+#define DCMD_LENGTH    0x01fff         /* length mask (max = 8K - 1) */
+
+/* default combinations */
+#define DCMD_RXPCDR    (DCMD_INCTRGADDR|DCMD_FLOWSRC|DCMD_BURST32|DCMD_WIDTH4)
+#define DCMD_RXMCDR    (DCMD_INCTRGADDR|DCMD_FLOWSRC|DCMD_BURST32|DCMD_WIDTH4)
+#define DCMD_TXPCDR    (DCMD_INCSRCADDR|DCMD_FLOWTRG|DCMD_BURST32|DCMD_WIDTH4)
+
+
+/*
+ * UARTs
+ */
+
+/* Full Function UART (FFUART) */
+#define FFUART         FFRBR
+#define FFRBR          __REG(0x40100000)  /* Receive Buffer Register (read only) */
+#define FFTHR          __REG(0x40100000)  /* Transmit Holding Register (write only) */
+#define FFIER          __REG(0x40100004)  /* Interrupt Enable Register (read/write) */
+#define FFIIR          __REG(0x40100008)  /* Interrupt ID Register (read only) */
+#define FFFCR          __REG(0x40100008)  /* FIFO Control Register (write only) */
+#define FFLCR          __REG(0x4010000C)  /* Line Control Register (read/write) */
+#define FFMCR          __REG(0x40100010)  /* Modem Control Register (read/write) */
+#define FFLSR          __REG(0x40100014)  /* Line Status Register (read only) */
+#define FFMSR          __REG(0x40100018)  /* Modem Status Register (read only) */
+#define FFSPR          __REG(0x4010001C)  /* Scratch Pad Register (read/write) */
+#define FFISR          __REG(0x40100020)  /* Infrared Selection Register (read/write) */
+#define FFDLL          __REG(0x40100000)  /* Divisor Latch Low Register (DLAB = 1) (read/write) */
+#define FFDLH          __REG(0x40100004)  /* Divisor Latch High Register (DLAB = 1) (read/write) */
+
+/* Bluetooth UART (BTUART) */
+#define BTUART         BTRBR
+#define BTRBR          __REG(0x40200000)  /* Receive Buffer Register (read only) */
+#define BTTHR          __REG(0x40200000)  /* Transmit Holding Register (write only) */
+#define BTIER          __REG(0x40200004)  /* Interrupt Enable Register (read/write) */
+#define BTIIR          __REG(0x40200008)  /* Interrupt ID Register (read only) */
+#define BTFCR          __REG(0x40200008)  /* FIFO Control Register (write only) */
+#define BTLCR          __REG(0x4020000C)  /* Line Control Register (read/write) */
+#define BTMCR          __REG(0x40200010)  /* Modem Control Register (read/write) */
+#define BTLSR          __REG(0x40200014)  /* Line Status Register (read only) */
+#define BTMSR          __REG(0x40200018)  /* Modem Status Register (read only) */
+#define BTSPR          __REG(0x4020001C)  /* Scratch Pad Register (read/write) */
+#define BTISR          __REG(0x40200020)  /* Infrared Selection Register (read/write) */
+#define BTDLL          __REG(0x40200000)  /* Divisor Latch Low Register (DLAB = 1) (read/write) */
+#define BTDLH          __REG(0x40200004)  /* Divisor Latch High Register (DLAB = 1) (read/write) */
+
+/* Standard UART (STUART) */
+#define STUART         STRBR
+#define STRBR          __REG(0x40700000)  /* Receive Buffer Register (read only) */
+#define STTHR          __REG(0x40700000)  /* Transmit Holding Register (write only) */
+#define STIER          __REG(0x40700004)  /* Interrupt Enable Register (read/write) */
+#define STIIR          __REG(0x40700008)  /* Interrupt ID Register (read only) */
+#define STFCR          __REG(0x40700008)  /* FIFO Control Register (write only) */
+#define STLCR          __REG(0x4070000C)  /* Line Control Register (read/write) */
+#define STMCR          __REG(0x40700010)  /* Modem Control Register (read/write) */
+#define STLSR          __REG(0x40700014)  /* Line Status Register (read only) */
+#define STMSR          __REG(0x40700018)  /* Reserved */
+#define STSPR          __REG(0x4070001C)  /* Scratch Pad Register (read/write) */
+#define STISR          __REG(0x40700020)  /* Infrared Selection Register (read/write) */
+#define STDLL          __REG(0x40700000)  /* Divisor Latch Low Register (DLAB = 1) (read/write) */
+#define STDLH          __REG(0x40700004)  /* Divisor Latch High Register (DLAB = 1) (read/write) */
+
+#define IER_DMAE       (1 << 7)        /* DMA Requests Enable */
+#define IER_UUE                (1 << 6)        /* UART Unit Enable */
+#define IER_NRZE       (1 << 5)        /* NRZ coding Enable */
+#define IER_RTIOE      (1 << 4)        /* Receiver Time Out Interrupt Enable */
+#define IER_MIE                (1 << 3)        /* Modem Interrupt Enable */
+#define IER_RLSE       (1 << 2)        /* Receiver Line Status Interrupt Enable */
+#define IER_TIE                (1 << 1)        /* Transmit Data request Interrupt Enable */
+#define IER_RAVIE      (1 << 0)        /* Receiver Data Available Interrupt Enable */
+
+#define IIR_FIFOES1    (1 << 7)        /* FIFO Mode Enable Status */
+#define IIR_FIFOES0    (1 << 6)        /* FIFO Mode Enable Status */
+#define IIR_TOD                (1 << 3)        /* Time Out Detected */
+#define IIR_IID2       (1 << 2)        /* Interrupt Source Encoded */
+#define IIR_IID1       (1 << 1)        /* Interrupt Source Encoded */
+#define IIR_IP         (1 << 0)        /* Interrupt Pending (active low) */
+
+#define FCR_ITL2       (1 << 7)        /* Interrupt Trigger Level */
+#define FCR_ITL1       (1 << 6)        /* Interrupt Trigger Level */
+#define FCR_RESETTF    (1 << 2)        /* Reset Transmitter FIFO */
+#define FCR_RESETRF    (1 << 1)        /* Reset Receiver FIFO */
+#define FCR_TRFIFOE    (1 << 0)        /* Transmit and Receive FIFO Enable */
+#define FCR_ITL_1      (0)
+#define FCR_ITL_8      (FCR_ITL1)
+#define FCR_ITL_16     (FCR_ITL2)
+#define FCR_ITL_32     (FCR_ITL2|FCR_ITL1)
+
+#define LCR_DLAB       (1 << 7)        /* Divisor Latch Access Bit */
+#define LCR_SB         (1 << 6)        /* Set Break */
+#define LCR_STKYP      (1 << 5)        /* Sticky Parity */
+#define LCR_EPS                (1 << 4)        /* Even Parity Select */
+#define LCR_PEN                (1 << 3)        /* Parity Enable */
+#define LCR_STB                (1 << 2)        /* Stop Bit */
+#define LCR_WLS1       (1 << 1)        /* Word Length Select */
+#define LCR_WLS0       (1 << 0)        /* Word Length Select */
+
+#define LSR_FIFOE      (1 << 7)        /* FIFO Error Status */
+#define LSR_TEMT       (1 << 6)        /* Transmitter Empty */
+#define LSR_TDRQ       (1 << 5)        /* Transmit Data Request */
+#define LSR_BI         (1 << 4)        /* Break Interrupt */
+#define LSR_FE         (1 << 3)        /* Framing Error */
+#define LSR_PE         (1 << 2)        /* Parity Error */
+#define LSR_OE         (1 << 1)        /* Overrun Error */
+#define LSR_DR         (1 << 0)        /* Data Ready */
+
+#define MCR_LOOP       (1 << 4)        */
+#define MCR_OUT2       (1 << 3)        /* force MSR_DCD in loopback mode */
+#define MCR_OUT1       (1 << 2)        /* force MSR_RI in loopback mode */
+#define MCR_RTS                (1 << 1)        /* Request to Send */
+#define MCR_DTR                (1 << 0)        /* Data Terminal Ready */
+
+#define MSR_DCD                (1 << 7)        /* Data Carrier Detect */
+#define MSR_RI         (1 << 6)        /* Ring Indicator */
+#define MSR_DSR                (1 << 5)        /* Data Set Ready */
+#define MSR_CTS                (1 << 4)        /* Clear To Send */
+#define MSR_DDCD       (1 << 3)        /* Delta Data Carrier Detect */
+#define MSR_TERI       (1 << 2)        /* Trailing Edge Ring Indicator */
+#define MSR_DDSR       (1 << 1)        /* Delta Data Set Ready */
+#define MSR_DCTS       (1 << 0)        /* Delta Clear To Send */
+
+/*
+ * IrSR (Infrared Selection Register)
+ */
+#define IrSR_OFFSET 0x20
+
+#define IrSR_RXPL_NEG_IS_ZERO (1<<4)
+#define IrSR_RXPL_POS_IS_ZERO 0x0
+#define IrSR_TXPL_NEG_IS_ZERO (1<<3)
+#define IrSR_TXPL_POS_IS_ZERO 0x0
+#define IrSR_XMODE_PULSE_1_6  (1<<2)
+#define IrSR_XMODE_PULSE_3_16 0x0
+#define IrSR_RCVEIR_IR_MODE   (1<<1)
+#define IrSR_RCVEIR_UART_MODE 0x0
+#define IrSR_XMITIR_IR_MODE   (1<<0)
+#define IrSR_XMITIR_UART_MODE 0x0
+
+#define IrSR_IR_RECEIVE_ON (\
+                IrSR_RXPL_NEG_IS_ZERO | \
+                IrSR_TXPL_POS_IS_ZERO | \
+                IrSR_XMODE_PULSE_3_16 | \
+                IrSR_RCVEIR_IR_MODE   | \
+                IrSR_XMITIR_UART_MODE)
+
+#define IrSR_IR_TRANSMIT_ON (\
+                IrSR_RXPL_NEG_IS_ZERO | \
+                IrSR_TXPL_POS_IS_ZERO | \
+                IrSR_XMODE_PULSE_3_16 | \
+                IrSR_RCVEIR_UART_MODE | \
+                IrSR_XMITIR_IR_MODE)
+
+
+/*
+ * I2C registers
+ */
+
+#define IBMR           __REG(0x40301680)  /* I2C Bus Monitor Register - IBMR */
+#define IDBR           __REG(0x40301688)  /* I2C Data Buffer Register - IDBR */
+#define ICR            __REG(0x40301690)  /* I2C Control Register - ICR */
+#define ISR            __REG(0x40301698)  /* I2C Status Register - ISR */
+#define ISAR           __REG(0x403016A0)  /* I2C Slave Address Register - ISAR */
+
+
+/*
+ * Serial Audio Controller
+ */
+
+
+/* FIXME the audio defines collide w/ the SA1111 defines.  I don't like these
+ * short defines because there is too much chance of namespace collision */
+
+/*#define SACR0                __REG(0x40400000)  /  Global Control Register */
+/*#define SACR1                __REG(0x40400004)  /  Serial Audio I 2 S/MSB-Justified Control Register */
+/*#define SASR0                __REG(0x4040000C)  /  Serial Audio I 2 S/MSB-Justified Interface and FIFO Status Register */
+/*#define SAIMR                __REG(0x40400014)  /  Serial Audio Interrupt Mask Register */
+/*#define SAICR                __REG(0x40400018)  /  Serial Audio Interrupt Clear Register */
+/*#define SADIV                __REG(0x40400060)  /  Audio Clock Divider Register. */
+/*#define SADR         __REG(0x40400080)  /  Serial Audio Data Register (TX and RX FIFO access Register). */
+
+
+/*
+ * AC97 Controller registers
+ */
+
+#define POCR           __REG(0x40500000)  /* PCM Out Control Register */
+#define POCR_FEIE      (1 << 3)        /* FIFO Error Interrupt Enable */
+
+#define PICR           __REG(0x40500004)  /* PCM In Control Register */
+#define PICR_FEIE      (1 << 3)        /* FIFO Error Interrupt Enable */
+
+#define MCCR           __REG(0x40500008)  /* Mic In Control Register */
+#define MCCR_FEIE      (1 << 3)        /* FIFO Error Interrupt Enable */
+
+#define GCR            __REG(0x4050000C)  /* Global Control Register */
+#define GCR_CDONE_IE   (1 << 19)       /* Command Done Interrupt Enable */
+#define GCR_SDONE_IE   (1 << 18)       /* Status Done Interrupt Enable */
+#define GCR_SECRDY_IEN (1 << 9)        /* Secondary Ready Interrupt Enable */
+#define GCR_PRIRDY_IEN (1 << 8)        /* Primary Ready Interrupt Enable */
+#define GCR_SECRES_IEN (1 << 5)        /* Secondary Resume Interrupt Enable */
+#define GCR_PRIRES_IEN (1 << 4)        /* Primary Resume Interrupt Enable */
+#define GCR_ACLINK_OFF (1 << 3)        /* AC-link Shut Off */
+#define GCR_WARM_RST   (1 << 2)        /* AC97 Warm Reset */
+#define GCR_COLD_RST   (1 << 1)        /* AC'97 Cold Reset (0 = active) */
+#define GCR_GIE                (1 << 0)        /* Codec GPI Interrupt Enable */
+
+#define POSR           __REG(0x40500010)  /* PCM Out Status Register */
+#define POSR_FIFOE     (1 << 4)        /* FIFO error */
+
+#define PISR           __REG(0x40500014)  /* PCM In Status Register */
+#define PISR_FIFOE     (1 << 4)        /* FIFO error */
+
+#define MCSR           __REG(0x40500018)  /* Mic In Status Register */
+#define MCSR_FIFOE     (1 << 4)        /* FIFO error */
+
+#define GSR            __REG(0x4050001C)  /* Global Status Register */
+#define GSR_CDONE      (1 << 19)       /* Command Done */
+#define GSR_SDONE      (1 << 18)       /* Status Done */
+#define GSR_RDCS       (1 << 15)       /* Read Completion Status */
+#define GSR_BIT3SLT12  (1 << 14)       /* Bit 3 of slot 12 */
+#define GSR_BIT2SLT12  (1 << 13)       /* Bit 2 of slot 12 */
+#define GSR_BIT1SLT12  (1 << 12)       /* Bit 1 of slot 12 */
+#define GSR_SECRES     (1 << 11)       /* Secondary Resume Interrupt */
+#define GSR_PRIRES     (1 << 10)       /* Primary Resume Interrupt */
+#define GSR_SCR                (1 << 9)        /* Secondary Codec Ready */
+#define GSR_PCR                (1 << 8)        /*  Primary Codec Ready */
+#define GSR_MINT       (1 << 7)        /* Mic In Interrupt */
+#define GSR_POINT      (1 << 6)        /* PCM Out Interrupt */
+#define GSR_PIINT      (1 << 5)        /* PCM In Interrupt */
+#define GSR_MOINT      (1 << 2)        /* Modem Out Interrupt */
+#define GSR_MIINT      (1 << 1)        /* Modem In Interrupt */
+#define GSR_GSCI       (1 << 0)        /* Codec GPI Status Change Interrupt */
+
+#define CAR            __REG(0x40500020)  /* CODEC Access Register */
+#define CAR_CAIP       (1 << 0)        /* Codec Access In Progress */
+
+#define PCDR           __REG(0x40500040)  /* PCM FIFO Data Register */
+#define MCDR           __REG(0x40500060)  /* Mic-in FIFO Data Register */
+
+#define MOCR           __REG(0x40500100)  /* Modem Out Control Register */
+#define MOCR_FEIE      (1 << 3)        /* FIFO Error */
+
+#define MICR           __REG(0x40500108)  /* Modem In Control Register */
+#define MICR_FEIE      (1 << 3)        /* FIFO Error */
+
+#define MOSR           __REG(0x40500110)  /* Modem Out Status Register */
+#define MOSR_FIFOE     (1 << 4)        /* FIFO error */
+
+#define MISR           __REG(0x40500118)  /* Modem In Status Register */
+#define MISR_FIFOE     (1 << 4)        /* FIFO error */
+
+#define MODR           __REG(0x40500140)  /* Modem FIFO Data Register */
+
+#define PAC_REG_BASE   __REG(0x40500200)  /* Primary Audio Codec */
+#define SAC_REG_BASE   __REG(0x40500300)  /* Secondary Audio Codec */
+#define PMC_REG_BASE   __REG(0x40500400)  /* Primary Modem Codec */
+#define SMC_REG_BASE   __REG(0x40500500)  /* Secondary Modem Codec */
+
+
+/*
+ * USB Device Controller
+ */
+
+#define UDCCR          __REG(0x40600000)  /* UDC Control Register */
+#define UDCCS0         __REG(0x40600010)  /* UDC Endpoint 0 Control/Status Register */
+#define UDCCS1         __REG(0x40600014)  /* UDC Endpoint 1 (IN) Control/Status Register */
+#define UDCCS2         __REG(0x40600018)  /* UDC Endpoint 2 (OUT) Control/Status Register */
+#define UDCCS3         __REG(0x4060001C)  /* UDC Endpoint 3 (IN) Control/Status Register */
+#define UDCCS4         __REG(0x40600020)  /* UDC Endpoint 4 (OUT) Control/Status Register */
+#define UDCCS5         __REG(0x40600024)  /* UDC Endpoint 5 (Interrupt) Control/Status Register */
+#define UDCCS6         __REG(0x40600028)  /* UDC Endpoint 6 (IN) Control/Status Register */
+#define UDCCS7         __REG(0x4060002C)  /* UDC Endpoint 7 (OUT) Control/Status Register */
+#define UDCCS8         __REG(0x40600030)  /* UDC Endpoint 8 (IN) Control/Status Register */
+#define UDCCS9         __REG(0x40600034)  /* UDC Endpoint 9 (OUT) Control/Status Register */
+#define UDCCS10                __REG(0x40600038)  /* UDC Endpoint 10 (Interrupt) Control/Status Register */
+#define UDCCS11                __REG(0x4060003C)  /* UDC Endpoint 11 (IN) Control/Status Register */
+#define UDCCS12                __REG(0x40600040)  /* UDC Endpoint 12 (OUT) Control/Status Register */
+#define UDCCS13                __REG(0x40600044)  /* UDC Endpoint 13 (IN) Control/Status Register */
+#define UDCCS14                __REG(0x40600048)  /* UDC Endpoint 14 (OUT) Control/Status Register */
+#define UDCCS15                __REG(0x4060004C)  /* UDC Endpoint 15 (Interrupt) Control/Status Register */
+#define UFNRH          __REG(0x40600060)  /* UDC Frame Number Register High */
+#define UFNRL          __REG(0x40600064)  /* UDC Frame Number Register Low */
+#define UBCR2          __REG(0x40600068)  /* UDC Byte Count Reg 2 */
+#define UBCR4          __REG(0x4060006c)  /* UDC Byte Count Reg 4 */
+#define UBCR7          __REG(0x40600070)  /* UDC Byte Count Reg 7 */
+#define UBCR9          __REG(0x40600074)  /* UDC Byte Count Reg 9 */
+#define UBCR12         __REG(0x40600078)  /* UDC Byte Count Reg 12 */
+#define UBCR14         __REG(0x4060007c)  /* UDC Byte Count Reg 14 */
+#define UDDR0          __REG(0x40600080)  /* UDC Endpoint 0 Data Register */
+#define UDDR1          __REG(0x40600100)  /* UDC Endpoint 1 Data Register */
+#define UDDR2          __REG(0x40600180)  /* UDC Endpoint 2 Data Register */
+#define UDDR3          __REG(0x40600200)  /* UDC Endpoint 3 Data Register */
+#define UDDR4          __REG(0x40600400)  /* UDC Endpoint 4 Data Register */
+#define UDDR5          __REG(0x406000A0)  /* UDC Endpoint 5 Data Register */
+#define UDDR6          __REG(0x40600600)  /* UDC Endpoint 6 Data Register */
+#define UDDR7          __REG(0x40600680)  /* UDC Endpoint 7 Data Register */
+#define UDDR8          __REG(0x40600700)  /* UDC Endpoint 8 Data Register */
+#define UDDR9          __REG(0x40600900)  /* UDC Endpoint 9 Data Register */
+#define UDDR10         __REG(0x406000C0)  /* UDC Endpoint 10 Data Register */
+#define UDDR11         __REG(0x40600B00)  /* UDC Endpoint 11 Data Register */
+#define UDDR12         __REG(0x40600B80)  /* UDC Endpoint 12 Data Register */
+#define UDDR13         __REG(0x40600C00)  /* UDC Endpoint 13 Data Register */
+#define UDDR14         __REG(0x40600E00)  /* UDC Endpoint 14 Data Register */
+#define UDDR15         __REG(0x406000E0)  /* UDC Endpoint 15 Data Register */
+#define UICR0          __REG(0x40600050)  /* UDC Interrupt Control Register 0 */
+#define UICR1          __REG(0x40600054)  /* UDC Interrupt Control Register 1 */
+#define USIR0          __REG(0x40600058)  /* UDC Status Interrupt Register 0 */
+#define USIR1          __REG(0x4060005C)  /* UDC Status Interrupt Register 1 */
+
+
+/*
+ * Fast Infrared Communication Port
+ */
+
+#define ICCR0          __REG(0x40800000)  /* ICP Control Register 0 */
+#define ICCR1          __REG(0x40800004)  /* ICP Control Register 1 */
+#define ICCR2          __REG(0x40800008)  /* ICP Control Register 2 */
+#define ICDR           __REG(0x4080000c)  /* ICP Data Register */
+#define ICSR0          __REG(0x40800014)  /* ICP Status Register 0 */
+#define ICSR1          __REG(0x40800018)  /* ICP Status Register 1 */
+
+
+/*
+ * Real Time Clock
+ */
+
+#define RCNR           __REG(0x40900000)  /* RTC Count Register */
+#define RTAR           __REG(0x40900004)  /* RTC Alarm Register */
+#define RTSR           __REG(0x40900008)  /* RTC Status Register */
+#define RTTR           __REG(0x4090000C)  /* RTC Timer Trim Register */
+
+#define RTSR_HZE       (1 << 3)        /* HZ interrupt enable */
+#define RTSR_ALE       (1 << 2)        /* RTC alarm interrupt enable */
+#define RTSR_HZ                (1 << 1)        /* HZ rising-edge detected */
+#define RTSR_AL                (1 << 0)        /* RTC alarm detected */
+
+
+/*
+ * OS Timer & Match Registers
+ */
+
+#define OSMR0          __REG(0x40A00000)  /* */
+#define OSMR1          __REG(0x40A00004)  /* */
+#define OSMR2          __REG(0x40A00008)  /* */
+#define OSMR3          __REG(0x40A0000C)  /* */
+#define OSCR           __REG(0x40A00010)  /* OS Timer Counter Register */
+#define OSSR           __REG(0x40A00014)  /* OS Timer Status Register */
+#define OWER           __REG(0x40A00018)  /* OS Timer Watchdog Enable Register */
+#define OIER           __REG(0x40A0001C)  /* OS Timer Interrupt Enable Register */
+
+#define OSSR_M3                (1 << 3)        /* Match status channel 3 */
+#define OSSR_M2                (1 << 2)        /* Match status channel 2 */
+#define OSSR_M1                (1 << 1)        /* Match status channel 1 */
+#define OSSR_M0                (1 << 0)        /* Match status channel 0 */
+
+#define OWER_WME       (1 << 0)        /* Watchdog Match Enable */
+
+#define OIER_E3                (1 << 3)        /* Interrupt enable channel 3 */
+#define OIER_E2                (1 << 2)        /* Interrupt enable channel 2 */
+#define OIER_E1                (1 << 1)        /* Interrupt enable channel 1 */
+#define OIER_E0                (1 << 0)        /* Interrupt enable channel 0 */
+
+
+/*
+ * Pulse Width Modulator
+ */
+
+#define PWM_CTRL0      __REG(0x40B00000)  /* PWM 0 Control Register */
+#define PWM_PWDUTY0    __REG(0x40B00004)  /* PWM 0 Duty Cycle Register */
+#define PWM_PERVAL0    __REG(0x40B00008)  /* PWM 0 Period Control Register */
+
+#define PWM_CTRL1      __REG(0x40C00000)  /* PWM 1Control Register */
+#define PWM_PWDUTY1    __REG(0x40C00004)  /* PWM 1 Duty Cycle Register */
+#define PWM_PERVAL1    __REG(0x40C00008)  /* PWM 1 Period Control Register */
+
+
+/*
+ * Interrupt Controller
+ */
+
+#define ICIP           __REG(0x40D00000)  /* Interrupt Controller IRQ Pending Register */
+#define ICMR           __REG(0x40D00004)  /* Interrupt Controller Mask Register */
+#define ICLR           __REG(0x40D00008)  /* Interrupt Controller Level Register */
+#define ICFP           __REG(0x40D0000C)  /* Interrupt Controller FIQ Pending Register */
+#define ICPR           __REG(0x40D00010)  /* Interrupt Controller Pending Register */
+#define ICCR           __REG(0x40D00014)  /* Interrupt Controller Control Register */
+
+
+/*
+ * General Purpose I/O
+ */
+
+#define GPLR0          __REG(0x40E00000)  /* GPIO Pin-Level Register GPIO<31:0> */
+#define GPLR1          __REG(0x40E00004)  /* GPIO Pin-Level Register GPIO<63:32> */
+#define GPLR2          __REG(0x40E00008)  /* GPIO Pin-Level Register GPIO<80:64> */
+
+#define GPDR0          __REG(0x40E0000C)  /* GPIO Pin Direction Register GPIO<31:0> */
+#define GPDR1          __REG(0x40E00010)  /* GPIO Pin Direction Register GPIO<63:32> */
+#define GPDR2          __REG(0x40E00014)  /* GPIO Pin Direction Register GPIO<80:64> */
+
+#define GPSR0          __REG(0x40E00018)  /* GPIO Pin Output Set Register GPIO<31:0> */
+#define GPSR1          __REG(0x40E0001C)  /* GPIO Pin Output Set Register GPIO<63:32> */
+#define GPSR2          __REG(0x40E00020)  /* GPIO Pin Output Set Register GPIO<80:64> */
+
+#define GPCR0          __REG(0x40E00024)  /* GPIO Pin Output Clear Register GPIO<31:0> */
+#define GPCR1          __REG(0x40E00028)  /* GPIO Pin Output Clear Register GPIO <63:32> */
+#define GPCR2          __REG(0x40E0002C)  /* GPIO Pin Output Clear Register GPIO <80:64> */
+
+#define GRER0          __REG(0x40E00030)  /* GPIO Rising-Edge Detect Register GPIO<31:0> */
+#define GRER1          __REG(0x40E00034)  /* GPIO Rising-Edge Detect Register GPIO<63:32> */
+#define GRER2          __REG(0x40E00038)  /* GPIO Rising-Edge Detect Register GPIO<80:64> */
+
+#define GFER0          __REG(0x40E0003C)  /* GPIO Falling-Edge Detect Register GPIO<31:0> */
+#define GFER1          __REG(0x40E00040)  /* GPIO Falling-Edge Detect Register GPIO<63:32> */
+#define GFER2          __REG(0x40E00044)  /* GPIO Falling-Edge Detect Register GPIO<80:64> */
+
+#define GEDR0          __REG(0x40E00048)  /* GPIO Edge Detect Status Register GPIO<31:0> */
+#define GEDR1          __REG(0x40E0004C)  /* GPIO Edge Detect Status Register GPIO<63:32> */
+#define GEDR2          __REG(0x40E00050)  /* GPIO Edge Detect Status Register GPIO<80:64> */
+
+#define GAFR0_L                __REG(0x40E00054)  /* GPIO Alternate Function Select Register GPIO<15:0> */
+#define GAFR0_U                __REG(0x40E00058)  /* GPIO Alternate Function Select Register GPIO<31:16> */
+#define GAFR1_L                __REG(0x40E0005C)  /* GPIO Alternate Function Select Register GPIO<47:32> */
+#define GAFR1_U                __REG(0x40E00060)  /* GPIO Alternate Function Select Register GPIO<63:48> */
+#define GAFR2_L                __REG(0x40E00064)  /* GPIO Alternate Function Select Register GPIO<79:64> */
+#define GAFR2_U                __REG(0x40E00068)  /* GPIO Alternate Function Select Register GPIO 80 */
+
+/* More handy macros.  The argument is a literal GPIO number. */
+
+#define GPIO_bit(x)    (1 << ((x) & 0x1f))
+#define GPLR(x)                __REG2(0x40E00000, ((x) & 0x60) >> 3)
+#define GPDR(x)                __REG2(0x40E0000C, ((x) & 0x60) >> 3)
+#define GPSR(x)                __REG2(0x40E00018, ((x) & 0x60) >> 3)
+#define GPCR(x)                __REG2(0x40E00024, ((x) & 0x60) >> 3)
+#define GRER(x)                __REG2(0x40E00030, ((x) & 0x60) >> 3)
+#define GFER(x)                __REG2(0x40E0003C, ((x) & 0x60) >> 3)
+#define GEDR(x)                __REG2(0x40E00048, ((x) & 0x60) >> 3)
+#define GAFR(x)                __REG2(0x40E00054, ((x) & 0x70) >> 2)
+
+/* GPIO alternate function assignments */
+
+#define GPIO1_RST              1       /* reset */
+#define GPIO6_MMCCLK           6       /* MMC Clock */
+#define GPIO8_48MHz            7       /* 48 MHz clock output */
+#define GPIO8_MMCCS0           8       /* MMC Chip Select 0 */
+#define GPIO9_MMCCS1           9       /* MMC Chip Select 1 */
+#define GPIO10_RTCCLK          10      /* real time clock (1 Hz) */
+#define GPIO11_3_6MHz          11      /* 3.6 MHz oscillator out */
+#define GPIO12_32KHz           12      /* 32 kHz out */
+#define GPIO13_MBGNT           13      /* memory controller grant */
+#define GPIO14_MBREQ           14      /* alternate bus master request */
+#define GPIO15_nCS_1           15      /* chip select 1 */
+#define GPIO16_PWM0            16      /* PWM0 output */
+#define GPIO17_PWM1            17      /* PWM1 output */
+#define GPIO18_RDY             18      /* Ext. Bus Ready */
+#define GPIO19_DREQ1           19      /* External DMA Request */
+#define GPIO20_DREQ0           20      /* External DMA Request */
+#define GPIO23_SCLK            23      /* SSP clock */
+#define GPIO24_SFRM            24      /* SSP Frame */
+#define GPIO25_STXD            25      /* SSP transmit */
+#define GPIO26_SRXD            26      /* SSP receive */
+#define GPIO27_SEXTCLK         27      /* SSP ext_clk */
+#define GPIO28_BITCLK          28      /* AC97/I2S bit_clk */
+#define GPIO29_SDATA_IN                29      /* AC97 Sdata_in0 / I2S Sdata_in */
+#define GPIO30_SDATA_OUT       30      /* AC97/I2S Sdata_out */
+#define GPIO31_SYNC            31      /* AC97/I2S sync */
+#define GPIO32_SDATA_IN1       32      /* AC97 Sdata_in1 */
+#define GPIO33_nCS_5           33      /* chip select 5 */
+#define GPIO34_FFRXD           34      /* FFUART receive */
+#define GPIO34_MMCCS0          34      /* MMC Chip Select 0 */
+#define GPIO35_FFCTS           35      /* FFUART Clear to send */
+#define GPIO36_FFDCD           36      /* FFUART Data carrier detect */
+#define GPIO37_FFDSR           37      /* FFUART data set ready */
+#define GPIO38_FFRI            38      /* FFUART Ring Indicator */
+#define GPIO39_MMCCS1          39      /* MMC Chip Select 1 */
+#define GPIO39_FFTXD           39      /* FFUART transmit data */
+#define GPIO40_FFDTR           40      /* FFUART data terminal Ready */
+#define GPIO41_FFRTS           41      /* FFUART request to send */
+#define GPIO42_BTRXD           42      /* BTUART receive data */
+#define GPIO43_BTTXD           43      /* BTUART transmit data */
+#define GPIO44_BTCTS           44      /* BTUART clear to send */
+#define GPIO45_BTRTS           45      /* BTUART request to send */
+#define GPIO46_ICPRXD          46      /* ICP receive data */
+#define GPIO46_STRXD           46      /* STD_UART receive data */
+#define GPIO47_ICPTXD          47      /* ICP transmit data */
+#define GPIO47_STTXD           47      /* STD_UART transmit data */
+#define GPIO48_nPOE            48      /* Output Enable for Card Space */
+#define GPIO49_nPWE            49      /* Write Enable for Card Space */
+#define GPIO50_nPIOR           50      /* I/O Read for Card Space */
+#define GPIO51_nPIOW           51      /* I/O Write for Card Space */
+#define GPIO52_nPCE_1          52      /* Card Enable for Card Space */
+#define GPIO53_nPCE_2          53      /* Card Enable for Card Space */
+#define GPIO53_MMCCLK          53      /* MMC Clock */
+#define GPIO54_MMCCLK          54      /* MMC Clock */
+#define GPIO54_pSKTSEL         54      /* Socket Select for Card Space */
+#define GPIO55_nPREG           55      /* Card Address bit 26 */
+#define GPIO56_nPWAIT          56      /* Wait signal for Card Space */
+#define GPIO57_nIOIS16         57      /* Bus Width select for I/O Card Space */
+#define GPIO58_LDD_0           58      /* LCD data pin 0 */
+#define GPIO59_LDD_1           59      /* LCD data pin 1 */
+#define GPIO60_LDD_2           60      /* LCD data pin 2 */
+#define GPIO61_LDD_3           61      /* LCD data pin 3 */
+#define GPIO62_LDD_4           62      /* LCD data pin 4 */
+#define GPIO63_LDD_5           63      /* LCD data pin 5 */
+#define GPIO64_LDD_6           64      /* LCD data pin 6 */
+#define GPIO65_LDD_7           65      /* LCD data pin 7 */
+#define GPIO66_LDD_8           66      /* LCD data pin 8 */
+#define GPIO66_MBREQ           66      /* alternate bus master req */
+#define GPIO67_LDD_9           67      /* LCD data pin 9 */
+#define GPIO67_MMCCS0          67      /* MMC Chip Select 0 */
+#define GPIO68_LDD_10          68      /* LCD data pin 10 */
+#define GPIO68_MMCCS1          68      /* MMC Chip Select 1 */
+#define GPIO69_LDD_11          69      /* LCD data pin 11 */
+#define GPIO69_MMCCLK          69      /* MMC_CLK */
+#define GPIO70_LDD_12          70      /* LCD data pin 12 */
+#define GPIO70_RTCCLK          70      /* Real Time clock (1 Hz) */
+#define GPIO71_LDD_13          71      /* LCD data pin 13 */
+#define GPIO71_3_6MHz          71      /* 3.6 MHz Oscillator clock */
+#define GPIO72_LDD_14          72      /* LCD data pin 14 */
+#define GPIO72_32kHz           72      /* 32 kHz clock */
+#define GPIO73_LDD_15          73      /* LCD data pin 15 */
+#define GPIO73_MBGNT           73      /* Memory controller grant */
+#define GPIO74_LCD_FCLK                74      /* LCD Frame clock */
+#define GPIO75_LCD_LCLK                75      /* LCD line clock */
+#define GPIO76_LCD_PCLK                76      /* LCD Pixel clock */
+#define GPIO77_LCD_ACBIAS      77      /* LCD AC Bias */
+#define GPIO78_nCS_2           78      /* chip select 2 */
+#define GPIO79_nCS_3           79      /* chip select 3 */
+#define GPIO80_nCS_4           80      /* chip select 4 */
+
+/* GPIO alternate function mode & direction */
+
+#define GPIO_IN                        0x000
+#define GPIO_OUT               0x080
+#define GPIO_ALT_FN_1_IN       0x100
+#define GPIO_ALT_FN_1_OUT      0x180
+#define GPIO_ALT_FN_2_IN       0x200
+#define GPIO_ALT_FN_2_OUT      0x280
+#define GPIO_ALT_FN_3_IN       0x300
+#define GPIO_ALT_FN_3_OUT      0x380
+#define GPIO_MD_MASK_NR                0x07f
+#define GPIO_MD_MASK_DIR       0x080
+#define GPIO_MD_MASK_FN                0x300
+
+#define GPIO1_RTS_MD           ( 1 | GPIO_ALT_FN_1_IN)
+#define GPIO6_MMCCLK_MD                ( 6 | GPIO_ALT_FN_1_OUT)
+#define GPIO8_48MHz_MD         ( 8 | GPIO_ALT_FN_1_OUT)
+#define GPIO8_MMCCS0_MD                ( 8 | GPIO_ALT_FN_1_OUT)
+#define GPIO9_MMCCS1_MD                ( 9 | GPIO_ALT_FN_1_OUT)
+#define GPIO10_RTCCLK_MD       (10 | GPIO_ALT_FN_1_OUT)
+#define GPIO11_3_6MHz_MD       (11 | GPIO_ALT_FN_1_OUT)
+#define GPIO12_32KHz_MD                (12 | GPIO_ALT_FN_1_OUT)
+#define GPIO13_MBGNT_MD                (13 | GPIO_ALT_FN_2_OUT)
+#define GPIO14_MBREQ_MD                (14 | GPIO_ALT_FN_1_IN)
+#define GPIO15_nCS_1_MD                (15 | GPIO_ALT_FN_2_OUT)
+#define GPIO16_PWM0_MD         (16 | GPIO_ALT_FN_2_OUT)
+#define GPIO17_PWM1_MD         (17 | GPIO_ALT_FN_2_OUT)
+#define GPIO18_RDY_MD          (18 | GPIO_ALT_FN_1_IN)
+#define GPIO19_DREQ1_MD                (19 | GPIO_ALT_FN_1_IN)
+#define GPIO20_DREQ0_MD                (20 | GPIO_ALT_FN_1_IN)
+#define GPIO23_SCLK_md         (23 | GPIO_ALT_FN_2_OUT)
+#define GPIO24_SFRM_MD         (24 | GPIO_ALT_FN_2_OUT)
+#define GPIO25_STXD_MD         (25 | GPIO_ALT_FN_2_OUT)
+#define GPIO26_SRXD_MD         (26 | GPIO_ALT_FN_1_IN)
+#define GPIO27_SEXTCLK_MD      (27 | GPIO_ALT_FN_1_IN)
+#define GPIO28_BITCLK_AC97_MD  (28 | GPIO_ALT_FN_1_IN)
+#define GPIO28_BITCLK_I2S_MD   (28 | GPIO_ALT_FN_2_IN)
+#define GPIO29_SDATA_IN_AC97_MD        (29 | GPIO_ALT_FN_1_IN)
+#define GPIO29_SDATA_IN_I2S_MD (29 | GPIO_ALT_FN_2_IN)
+#define GPIO30_SDATA_OUT_AC97_MD       (30 | GPIO_ALT_FN_2_OUT)
+#define GPIO30_SDATA_OUT_I2S_MD        (30 | GPIO_ALT_FN_1_OUT)
+#define GPIO31_SYNC_AC97_MD    (31 | GPIO_ALT_FN_2_OUT)
+#define GPIO31_SYNC_I2S_MD     (31 | GPIO_ALT_FN_1_OUT)
+#define GPIO32_SDATA_IN1_AC97_MD       (32 | GPIO_ALT_FN_1_IN)
+#define GPIO33_nCS_5_MD                (33 | GPIO_ALT_FN_2_OUT)
+#define GPIO34_FFRXD_MD                (34 | GPIO_ALT_FN_1_IN)
+#define GPIO34_MMCCS0_MD       (34 | GPIO_ALT_FN_2_OUT)
+#define GPIO35_FFCTS_MD                (35 | GPIO_ALT_FN_1_IN)
+#define GPIO36_FFDCD_MD                (36 | GPIO_ALT_FN_1_IN)
+#define GPIO37_FFDSR_MD                (37 | GPIO_ALT_FN_1_IN)
+#define GPIO38_FFRI_MD         (38 | GPIO_ALT_FN_1_IN)
+#define GPIO39_MMCCS1_MD       (39 | GPIO_ALT_FN_1_OUT)
+#define GPIO39_FFTXD_MD                (39 | GPIO_ALT_FN_2_OUT)
+#define GPIO40_FFDTR_MD                (40 | GPIO_ALT_FN_2_OUT)
+#define GPIO41_FFRTS_MD                (41 | GPIO_ALT_FN_2_OUT)
+#define GPIO42_BTRXD_MD                (42 | GPIO_ALT_FN_1_IN)
+#define GPIO43_BTTXD_MD                (43 | GPIO_ALT_FN_2_OUT)
+#define GPIO44_BTCTS_MD                (44 | GPIO_ALT_FN_1_IN)
+#define GPIO45_BTRTS_MD                (45 | GPIO_ALT_FN_2_OUT)
+#define GPIO46_ICPRXD_MD       (46 | GPIO_ALT_FN_1_IN)
+#define GPIO46_STRXD_MD                (46 | GPIO_ALT_FN_2_IN)
+#define GPIO47_ICPTXD_MD       (47 | GPIO_ALT_FN_2_OUT)
+#define GPIO47_STTXD_MD                (47 | GPIO_ALT_FN_1_OUT)
+#define GPIO48_nPOE_MD         (48 | GPIO_ALT_FN_2_OUT)
+#define GPIO49_nPWE_MD         (49 | GPIO_ALT_FN_2_OUT)
+#define GPIO50_nPIOR_MD                (50 | GPIO_ALT_FN_2_OUT)
+#define GPIO51_nPIOW_MD                (51 | GPIO_ALT_FN_2_OUT)
+#define GPIO52_nPCE_1_MD       (52 | GPIO_ALT_FN_2_OUT)
+#define GPIO53_nPCE_2_MD       (53 | GPIO_ALT_FN_2_OUT)
+#define GPIO53_MMCCLK_MD       (53 | GPIO_ALT_FN_1_OUT)
+#define GPIO54_MMCCLK_MD       (54 | GPIO_ALT_FN_1_OUT)
+#define GPIO54_pSKTSEL_MD      (54 | GPIO_ALT_FN_2_OUT)
+#define GPIO55_nPREG_MD                (55 | GPIO_ALT_FN_2_OUT)
+#define GPIO56_nPWAIT_MD       (56 | GPIO_ALT_FN_1_IN)
+#define GPIO57_nIOIS16_MD      (57 | GPIO_ALT_FN_1_IN)
+#define GPIO58_LDD_0_MD                (58 | GPIO_ALT_FN_2_OUT)
+#define GPIO59_LDD_1_MD                (59 | GPIO_ALT_FN_2_OUT)
+#define GPIO60_LDD_2_MD                (60 | GPIO_ALT_FN_2_OUT)
+#define GPIO61_LDD_3_MD                (61 | GPIO_ALT_FN_2_OUT)
+#define GPIO62_LDD_4_MD                (62 | GPIO_ALT_FN_2_OUT)
+#define GPIO63_LDD_5_MD                (63 | GPIO_ALT_FN_2_OUT)
+#define GPIO64_LDD_6_MD                (64 | GPIO_ALT_FN_2_OUT)
+#define GPIO65_LDD_7_MD                (65 | GPIO_ALT_FN_2_OUT)
+#define GPIO66_LDD_8_MD                (66 | GPIO_ALT_FN_2_OUT)
+#define GPIO66_MBREQ_MD                (66 | GPIO_ALT_FN_1_IN)
+#define GPIO67_LDD_9_MD                (67 | GPIO_ALT_FN_2_OUT)
+#define GPIO67_MMCCS0_MD       (67 | GPIO_ALT_FN_1_OUT)
+#define GPIO68_LDD_10_MD       (68 | GPIO_ALT_FN_2_OUT)
+#define GPIO68_MMCCS1_MD       (68 | GPIO_ALT_FN_1_OUT)
+#define GPIO69_LDD_11_MD       (69 | GPIO_ALT_FN_2_OUT)
+#define GPIO69_MMCCLK_MD       (69 | GPIO_ALT_FN_1_OUT)
+#define GPIO70_LDD_12_MD       (70 | GPIO_ALT_FN_2_OUT)
+#define GPIO70_RTCCLK_MD       (70 | GPIO_ALT_FN_1_OUT)
+#define GPIO71_LDD_13_MD       (71 | GPIO_ALT_FN_2_OUT)
+#define GPIO71_3_6MHz_MD       (71 | GPIO_ALT_FN_1_OUT)
+#define GPIO72_LDD_14_MD       (72 | GPIO_ALT_FN_2_OUT)
+#define GPIO72_32kHz_MD                (72 | GPIO_ALT_FN_1_OUT)
+#define GPIO73_LDD_15_MD       (73 | GPIO_ALT_FN_2_OUT)
+#define GPIO73_MBGNT_MD                (73 | GPIO_ALT_FN_1_OUT)
+#define GPIO74_LCD_FCLK_MD     (74 | GPIO_ALT_FN_2_OUT)
+#define GPIO75_LCD_LCLK_MD     (75 | GPIO_ALT_FN_2_OUT)
+#define GPIO76_LCD_PCLK_MD     (76 | GPIO_ALT_FN_2_OUT)
+#define GPIO77_LCD_ACBIAS_MD   (77 | GPIO_ALT_FN_2_OUT)
+#define GPIO78_nCS_2_MD                (78 | GPIO_ALT_FN_2_OUT)
+#define GPIO79_nCS_3_MD                (79 | GPIO_ALT_FN_2_OUT)
+#define GPIO80_nCS_4_MD                (80 | GPIO_ALT_FN_2_OUT)
+
+
+/*
+ * Power Manager
+ */
+
+#define PMCR           __REG(0x40F00000)  /* Power Manager Control Register */
+#define PSSR           __REG(0x40F00004)  /* Power Manager Sleep Status Register */
+#define PSPR           __REG(0x40F00008)  /* Power Manager Scratch Pad Register */
+#define PWER           __REG(0x40F0000C)  /* Power Manager Wake-up Enable Register */
+#define PRER           __REG(0x40F00010)  /* Power Manager GPIO Rising-Edge Detect Enable Register */
+#define PFER           __REG(0x40F00014)  /* Power Manager GPIO Falling-Edge Detect Enable Register */
+#define PEDR           __REG(0x40F00018)  /* Power Manager GPIO Edge Detect Status Register */
+#define PCFR           __REG(0x40F0001C)  /* Power Manager General Configuration Register */
+#define PGSR0          __REG(0x40F00020)  /* Power Manager GPIO Sleep State Register for GP[31-0] */
+#define PGSR1          __REG(0x40F00024)  /* Power Manager GPIO Sleep State Register for GP[63-32] */
+#define PGSR2          __REG(0x40F00028)  /* Power Manager GPIO Sleep State Register for GP[84-64] */
+#define RCSR           __REG(0x40F00030)  /* Reset Controller Status Register */
+
+
+/*
+ * SSP Serial Port Registers
+ */
+
+#define SSCR0          __REG(0x41000000)  /* SSP Control Register 0 */
+#define SSCR1          __REG(0x41000004)  /* SSP Control Register 1 */
+#define SSSR           __REG(0x41000008)  /* SSP Status Register */
+#define SSITR          __REG(0x4100000C)  /* SSP Interrupt Test Register */
+#define SSDR           __REG(0x41000010)  /* (Write / Read) SSP Data Write Register/SSP Data Read Register */
+
+
+/*
+ * MultiMediaCard (MMC) controller
+ */
+
+#define MMC_STRPCL     __REG(0x41100000)  /* Control to start and stop MMC clock */
+#define MMC_STAT       __REG(0x41100004)  /* MMC Status Register (read only) */
+#define MMC_CLKRT      __REG(0x41100008)  /* MMC clock rate */
+#define MMC_SPI                __REG(0x4110000c)  /* SPI mode control bits */
+#define MMC_CMDAT      __REG(0x41100010)  /* Command/response/data sequence control */
+#define MMC_RESTO      __REG(0x41100014)  /* Expected response time out */
+#define MMC_RDTO       __REG(0x41100018)  /* Expected data read time out */
+#define MMC_BLKLEN     __REG(0x4110001c)  /* Block length of data transaction */
+#define MMC_NOB                __REG(0x41100020)  /* Number of blocks, for block mode */
+#define MMC_PRTBUF     __REG(0x41100024)  /* Partial MMC_TXFIFO FIFO written */
+#define MMC_I_MASK     __REG(0x41100028)  /* Interrupt Mask */
+#define MMC_I_REG      __REG(0x4110002c)  /* Interrupt Register (read only) */
+#define MMC_CMD                __REG(0x41100030)  /* Index of current command */
+#define MMC_ARGH       __REG(0x41100034)  /* MSW part of the current command argument */
+#define MMC_ARGL       __REG(0x41100038)  /* LSW part of the current command argument */
+#define MMC_RES                __REG(0x4110003c)  /* Response FIFO (read only) */
+#define MMC_RXFIFO     __REG(0x41100040)  /* Receive FIFO (read only) */
+#define MMC_TXFIFO     __REG(0x41100044)  /* Transmit FIFO (write only) */
+
+
+/*
+ * Core Clock
+ */
+
+#define CCCR           __REG(0x41300000)  /* Core Clock Configuration Register */
+#define CKEN           __REG(0x41300004)  /* Clock Enable Register */
+#define OSCC           __REG(0x41300008)  /* Oscillator Configuration Register */
+
+#define CCCR_N_MASK    0x0380          /* Run Mode Frequency to Turbo Mode Frequency Multiplier */
+#define CCCR_M_MASK    0x0060          /* Memory Frequency to Run Mode Frequency Multiplier */
+#define CCCR_L_MASK    0x001f          /* Crystal Frequency to Memory Frequency Multiplier */
+
+#define CKEN16_LCD     (1 << 16)       /* LCD Unit Clock Enable */
+#define CKEN14_I2C     (1 << 14)       /* I2C Unit Clock Enable */
+#define CKEN13_FICP    (1 << 13)       /* FICP Unit Clock Enable */
+#define CKEN12_MMC     (1 << 12)       /* MMC Unit Clock Enable */
+#define CKEN11_USB     (1 << 11)       /* USB Unit Clock Enable */
+#define CKEN8_I2S      (1 << 8)        /* I2S Unit Clock Enable */
+#define CKEN7_BTUART   (1 << 7)        /* BTUART Unit Clock Enable */
+#define CKEN6_FFUART   (1 << 6)        /* FFUART Unit Clock Enable */
+#define CKEN5_STUART   (1 << 5)        /* STUART Unit Clock Enable */
+#define CKEN3_SSP      (1 << 3)        /* SSP Unit Clock Enable */
+#define CKEN2_AC97     (1 << 2)        /* AC97 Unit Clock Enable */
+#define CKEN1_PWM1     (1 << 1)        /* PWM1 Clock Enable */
+#define CKEN0_PWM0     (1 << 0)        /* PWM0 Clock Enable */
+
+#define OSCC_OON       (1 << 1)        /* 32.768kHz OON (write-once only bit) */
+#define OSCC_OOK       (1 << 0)        /* 32.768kHz OOK (read-only bit) */
+
+#define  CCCR_L09      (0x1F)
+#define  CCCR_L27      (0x1)
+#define  CCCR_L32      (0x2)
+#define  CCCR_L36      (0x3)
+#define  CCCR_L40      (0x4)
+#define  CCCR_L45      (0x5)
+
+#define  CCCR_M1       (0x1 << 5)
+#define  CCCR_M2       (0x2 << 5)
+#define  CCCR_M4       (0x3 << 5)
+
+#define  CCCR_N10      (0x2 << 7)
+#define  CCCR_N15      (0x3 << 7)
+#define  CCCR_N20      (0x4 << 7)
+#define  CCCR_N25      (0x5 << 7)
+#define  CCCR_N30      (0x6 << 7)
+
+/*
+ * LCD
+ */
+
+#define LCCR0          __REG(0x44000000)  /* LCD Controller Control Register 0 */
+#define LCCR1          __REG(0x44000004)  /* LCD Controller Control Register 1 */
+#define LCCR2          __REG(0x44000008)  /* LCD Controller Control Register 2 */
+#define LCCR3          __REG(0x4400000C)  /* LCD Controller Control Register 3 */
+#define DFBR0          __REG(0x44000020)  /* DMA Channel 0 Frame Branch Register */
+#define DFBR1          __REG(0x44000024)  /* DMA Channel 1 Frame Branch Register */
+#define LCSR           __REG(0x44000038)  /* LCD Controller Status Register */
+#define LIIDR          __REG(0x4400003C)  /* LCD Controller Interrupt ID Register */
+#define TMEDRGBR       __REG(0x44000040)  /* TMED RGB Seed Register */
+#define TMEDCR         __REG(0x44000044)  /* TMED Control Register */
+
+#define FDADR0         __REG(0x44000200)  /* DMA Channel 0 Frame Descriptor Address Register */
+#define FSADR0         __REG(0x44000204)  /* DMA Channel 0 Frame Source Address Register */
+#define FIDR0          __REG(0x44000208)  /* DMA Channel 0 Frame ID Register */
+#define LDCMD0         __REG(0x4400020C)  /* DMA Channel 0 Command Register */
+#define FDADR1         __REG(0x44000210)  /* DMA Channel 1 Frame Descriptor Address Register */
+#define FSADR1         __REG(0x44000214)  /* DMA Channel 1 Frame Source Address Register */
+#define FIDR1          __REG(0x44000218)  /* DMA Channel 1 Frame ID Register */
+#define LDCMD1         __REG(0x4400021C)  /* DMA Channel 1 Command Register */
+
+#define LCCR0_ENB      (1 << 0)        /* LCD Controller enable */
+#define LCCR0_CMS      (1 << 1)        /* Color = 0, Monochrome = 1 */
+#define LCCR0_SDS      (1 << 2)        /* Single Panel = 0, Dual Panel = 1 */
+#define LCCR0_LDM      (1 << 3)        /* LCD Disable Done Mask */
+#define LCCR0_SFM      (1 << 4)        /* Start of frame mask */
+#define LCCR0_IUM      (1 << 5)        /* Input FIFO underrun mask */
+#define LCCR0_EFM      (1 << 6)        /* End of Frame mask */
+#define LCCR0_PAS      (1 << 7)        /* Passive = 0, Active = 1 */
+#define LCCR0_BLE      (1 << 8)        /* Little Endian = 0, Big Endian = 1 */
+#define LCCR0_DPD      (1 << 9)        /* Double Pixel mode, 4 pixel value = 0, 8 pixle values = 1 */
+#define LCCR0_DIS      (1 << 10)       /* LCD Disable */
+#define LCCR0_QDM      (1 << 11)       /* LCD Quick Disable mask */
+#define LCCR0_PDD      (0xff << 12)    /* Palette DMA request delay */
+#define LCCR0_PDD_S    12
+#define LCCR0_BM       (1 << 20)       /* Branch mask */
+#define LCCR0_OUM      (1 << 21)       /* Output FIFO underrun mask */
+
+#define LCCR3_PCD      (0xff)          /* Pixel clock divisor */
+#define LCCR3_ACB      (0xff << 8)     /* AC Bias pin frequency */
+#define LCCR3_ACB_S    8
+#define LCCR3_API      (0xf << 16)     /* AC Bias pin trasitions per interrupt */
+#define LCCR3_API_S    16
+#define LCCR3_VSP      (1 << 20)       /* vertical sync polarity */
+#define LCCR3_HSP      (1 << 21)       /* horizontal sync polarity */
+#define LCCR3_PCP      (1 << 22)       /* pixel clock polarity */
+#define LCCR3_OEP      (1 << 23)       /* output enable polarity */
+#define LCCR3_BPP      (7 << 24)       /* bits per pixel */
+#define LCCR3_BPP_S    24
+#define LCCR3_DPC      (1 << 27)       /* double pixel clock mode */
+
+#define LCSR_LDD       (1 << 0)        /* LCD Disable Done */
+#define LCSR_SOF       (1 << 1)        /* Start of frame */
+#define LCSR_BER       (1 << 2)        /* Bus error */
+#define LCSR_ABC       (1 << 3)        /* AC Bias count */
+#define LCSR_IUL       (1 << 4)        /* input FIFO underrun Lower panel */
+#define LCSR_IUU       (1 << 5)        /* input FIFO underrun Upper panel */
+#define LCSR_OU                (1 << 6)        /* output FIFO underrun */
+#define LCSR_QD                (1 << 7)        /* quick disable */
+#define LCSR_EOF       (1 << 8)        /* end of frame */
+#define LCSR_BS                (1 << 9)        /* branch status */
+#define LCSR_SINT      (1 << 10)       /* subsequent interrupt */
+
+#define LDCMD_PAL      (1 << 26)       /* instructs DMA to load palette buffer */
+
+/*
+ * Memory controller
+ */
+
+#define MEMC_BASE __REG(0x48000000)  /* Base of Memoriy Controller */
+#define MDCNFG         __REG(0x48000000)  /* SDRAM Configuration Register 0 */
+#define MDREFR         __REG(0x48000004)  /* SDRAM Refresh Control Register */
+#define MSC0           __REG(0x48000008)  /* Static Memory Control Register 0 */
+#define MSC1           __REG(0x4800000C)  /* Static Memory Control Register 1 */
+#define MSC2           __REG(0x48000010)  /* Static Memory Control Register 2 */
+#define MECR           __REG(0x48000014)  /* Expansion Memory (PCMCIA/Compact Flash) Bus Configuration */
+#define SXLCR          __REG(0x48000018)  /* LCR value to be written to SDRAM-Timing Synchronous Flash */
+#define SXCNFG         __REG(0x4800001C)  /* Synchronous Static Memory Control Register */
+#define SXMRS          __REG(0x48000024)  /* MRS value to be written to Synchronous Flash or SMROM */
+#define MCMEM0         __REG(0x48000028)  /* Card interface Common Memory Space Socket 0 Timing */
+#define MCMEM1         __REG(0x4800002C)  /* Card interface Common Memory Space Socket 1 Timing */
+#define MCATT0         __REG(0x48000030)  /* Card interface Attribute Space Socket 0 Timing Configuration */
+#define MCATT1         __REG(0x48000034)  /* Card interface Attribute Space Socket 1 Timing Configuration */
+#define MCIO0          __REG(0x48000038)  /* Card interface I/O Space Socket 0 Timing Configuration */
+#define MCIO1          __REG(0x4800003C)  /* Card interface I/O Space Socket 1 Timing Configuration */
+#define MDMRS          __REG(0x48000040)  /* MRS value to be written to SDRAM */
+#define BOOT_DEF       __REG(0x48000044)  /* Read-Only Boot-Time Register. Contains BOOT_SEL and PKG_SEL */
+
+#define MDCNFG_DE0      0x00000001
+#define MDCNFG_DE1      0x00000002
+#define MDCNFG_DE2      0x00010000
+#define MDCNFG_DE3      0x00020000
+#define MDCNFG_DWID0    0x00000004
+
+#define MDREFR_E0PIN    0x00001000
+#define MDREFR_K0RUN   0x00002000
+#define MDREFR_K0DB2   0x00004000
+#define MDREFR_E1PIN    0x00008000
+#define MDREFR_K1RUN   0x00010000
+#define MDREFR_K1DB2   0x00020000
+#define MDREFR_K2RUN   0x00040000
+#define MDREFR_K2DB2   0x00080000
+#define MDREFR_APD     0x00100000
+#define MDREFR_SLFRSH  0x00400000
+#define MDREFR_K0FREE  0x00800000
+#define MDREFR_K1FREE  0x01000000
+#define MDREFR_K2FREE  0x02000000
+
+#define MDCNFG_OFFSET   0x0
+#define MDREFR_OFFSET   0x4
+#define MSC0_OFFSET     0x8
+#define MSC1_OFFSET     0xC
+#define MSC2_OFFSET     0x10
+#define MECR_OFFSET     0x14
+#define SXLCR_OFFSET    0x18
+#define SXCNFG_OFFSET   0x1C
+#define FLYCNFG_OFFSET  0x20
+#define SXMRS_OFFSET    0x24
+#define MCMEM0_OFFSET   0x28
+#define MCMEM1_OFFSET   0x2C
+#define MCATT0_OFFSET   0x30
+#define MCATT1_OFFSET   0x34
+#define MCIO0_OFFSET    0x38
+#define MCIO1_OFFSET    0x3C
+#define MDMRS_OFFSET    0x40
+
+
+
+
diff --git a/include/asm-arm/arch-xscale/pxa-regs.h b/include/asm-arm/arch-xscale/pxa-regs.h
new file mode 100644 (file)
index 0000000..2975fa3
--- /dev/null
@@ -0,0 +1,1133 @@
+/*
+ *  linux/include/asm-arm/arch-pxa/pxa-regs.h
+ *
+ *  Author:    Nicolas Pitre
+ *  Created:   Jun 15, 2001
+ *  Copyright: MontaVista Software Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+
+/* FIXME hack so that SA-1111.h will work [cb] */
+
+#ifndef __ASSEMBLY__
+typedef unsigned short  Word16 ;
+typedef unsigned int    Word32 ;
+typedef Word32          Word ;
+typedef Word            Quad [4] ;
+typedef void            *Address ;
+typedef void            (*ExcpHndlr) (void) ;
+#endif
+
+#ifndef __ASSEMBLY__
+#define io_p2v(PhAdd)    (PhAdd)
+#define __REG(x) (*((volatile u32 *)io_p2v(x)))
+#else
+#define __REG(x) (x)
+#endif
+
+/*
+ * PXA Chip selects
+ */
+
+#define PXA_CS0_PHYS   0x00000000
+#define PXA_CS1_PHYS   0x04000000
+#define PXA_CS2_PHYS   0x08000000
+#define PXA_CS3_PHYS   0x0C000000
+#define PXA_CS4_PHYS   0x10000000
+#define PXA_CS5_PHYS   0x14000000
+
+
+/*
+ * Personal Computer Memory Card International Association (PCMCIA) sockets
+ */
+
+#define PCMCIAPrtSp    0x04000000      /* PCMCIA Partition Space [byte]   */
+#define PCMCIASp       (4*PCMCIAPrtSp) /* PCMCIA Space [byte]             */
+#define PCMCIAIOSp     PCMCIAPrtSp     /* PCMCIA I/O Space [byte]         */
+#define PCMCIAAttrSp   PCMCIAPrtSp     /* PCMCIA Attribute Space [byte]   */
+#define PCMCIAMemSp    PCMCIAPrtSp     /* PCMCIA Memory Space [byte]      */
+
+#define PCMCIA0Sp      PCMCIASp        /* PCMCIA 0 Space [byte]           */
+#define PCMCIA0IOSp    PCMCIAIOSp      /* PCMCIA 0 I/O Space [byte]       */
+#define PCMCIA0AttrSp  PCMCIAAttrSp    /* PCMCIA 0 Attribute Space [byte] */
+#define PCMCIA0MemSp   PCMCIAMemSp     /* PCMCIA 0 Memory Space [byte]    */
+
+#define PCMCIA1Sp      PCMCIASp        /* PCMCIA 1 Space [byte]           */
+#define PCMCIA1IOSp    PCMCIAIOSp      /* PCMCIA 1 I/O Space [byte]       */
+#define PCMCIA1AttrSp  PCMCIAAttrSp    /* PCMCIA 1 Attribute Space [byte] */
+#define PCMCIA1MemSp   PCMCIAMemSp     /* PCMCIA 1 Memory Space [byte]    */
+
+#define _PCMCIA(Nb)                    /* PCMCIA [0..1]                   */ \
+                       (0x20000000 + (Nb)*PCMCIASp)
+#define _PCMCIAIO(Nb)  _PCMCIA (Nb)    /* PCMCIA I/O [0..1]               */
+#define _PCMCIAAttr(Nb)                        /* PCMCIA Attribute [0..1]         */ \
+                       (_PCMCIA (Nb) + 2*PCMCIAPrtSp)
+#define _PCMCIAMem(Nb)                 /* PCMCIA Memory [0..1]            */ \
+                       (_PCMCIA (Nb) + 3*PCMCIAPrtSp)
+
+#define _PCMCIA0       _PCMCIA (0)     /* PCMCIA 0                        */
+#define _PCMCIA0IO     _PCMCIAIO (0)   /* PCMCIA 0 I/O                    */
+#define _PCMCIA0Attr   _PCMCIAAttr (0) /* PCMCIA 0 Attribute              */
+#define _PCMCIA0Mem    _PCMCIAMem (0)  /* PCMCIA 0 Memory                 */
+
+#define _PCMCIA1       _PCMCIA (1)     /* PCMCIA 1                        */
+#define _PCMCIA1IO     _PCMCIAIO (1)   /* PCMCIA 1 I/O                    */
+#define _PCMCIA1Attr   _PCMCIAAttr (1) /* PCMCIA 1 Attribute              */
+#define _PCMCIA1Mem    _PCMCIAMem (1)  /* PCMCIA 1 Memory                 */
+
+
+
+/*
+ * DMA Controller
+ */
+
+#define DCSR0          __REG(0x40000000)  /* DMA Control / Status Register for Channel 0 */
+#define DCSR1          __REG(0x40000004)  /* DMA Control / Status Register for Channel 1 */
+#define DCSR2          __REG(0x40000008)  /* DMA Control / Status Register for Channel 2 */
+#define DCSR3          __REG(0x4000000c)  /* DMA Control / Status Register for Channel 3 */
+#define DCSR4          __REG(0x40000010)  /* DMA Control / Status Register for Channel 4 */
+#define DCSR5          __REG(0x40000014)  /* DMA Control / Status Register for Channel 5 */
+#define DCSR6          __REG(0x40000018)  /* DMA Control / Status Register for Channel 6 */
+#define DCSR7          __REG(0x4000001c)  /* DMA Control / Status Register for Channel 7 */
+#define DCSR8          __REG(0x40000020)  /* DMA Control / Status Register for Channel 8 */
+#define DCSR9          __REG(0x40000024)  /* DMA Control / Status Register for Channel 9 */
+#define DCSR10         __REG(0x40000028)  /* DMA Control / Status Register for Channel 10 */
+#define DCSR11         __REG(0x4000002c)  /* DMA Control / Status Register for Channel 11 */
+#define DCSR12         __REG(0x40000030)  /* DMA Control / Status Register for Channel 12 */
+#define DCSR13         __REG(0x40000034)  /* DMA Control / Status Register for Channel 13 */
+#define DCSR14         __REG(0x40000038)  /* DMA Control / Status Register for Channel 14 */
+#define DCSR15         __REG(0x4000003c)  /* DMA Control / Status Register for Channel 15 */
+
+#define DCSR(x)                __REG2(0x40000000, (x) << 2)
+
+#define DCSR_RUN       (1 << 31)       /* Run Bit (read / write) */
+#define DCSR_NODESC    (1 << 30)       /* No-Descriptor Fetch (read / write) */
+#define DCSR_STOPIRQEN (1 << 29)       /* Stop Interrupt Enable (read / write) */
+#define DCSR_REQPEND   (1 << 8)        /* Request Pending (read-only) */
+#define DCSR_STOPSTATE (1 << 3)        /* Stop State (read-only) */
+#define DCSR_ENDINTR   (1 << 2)        /* End Interrupt (read / write) */
+#define DCSR_STARTINTR (1 << 1)        /* Start Interrupt (read / write) */
+#define DCSR_BUSERR    (1 << 0)        /* Bus Error Interrupt (read / write) */
+
+#define DINT           __REG(0x400000f0)  /* DMA Interrupt Register */
+
+#define DRCMR0         __REG(0x40000100)  /* Request to Channel Map Register for DREQ 0 */
+#define DRCMR1         __REG(0x40000104)  /* Request to Channel Map Register for DREQ 1 */
+#define DRCMR2         __REG(0x40000108)  /* Request to Channel Map Register for I2S receive Request */
+#define DRCMR3         __REG(0x4000010c)  /* Request to Channel Map Register for I2S transmit Request */
+#define DRCMR4         __REG(0x40000110)  /* Request to Channel Map Register for BTUART receive Request */
+#define DRCMR5         __REG(0x40000114)  /* Request to Channel Map Register for BTUART transmit Request. */
+#define DRCMR6         __REG(0x40000118)  /* Request to Channel Map Register for FFUART receive Request */
+#define DRCMR7         __REG(0x4000011c)  /* Request to Channel Map Register for FFUART transmit Request */
+#define DRCMR8         __REG(0x40000120)  /* Request to Channel Map Register for AC97 microphone Request */
+#define DRCMR9         __REG(0x40000124)  /* Request to Channel Map Register for AC97 modem receive Request */
+#define DRCMR10                __REG(0x40000128)  /* Request to Channel Map Register for AC97 modem transmit Request */
+#define DRCMR11                __REG(0x4000012c)  /* Request to Channel Map Register for AC97 audio receive Request */
+#define DRCMR12                __REG(0x40000130)  /* Request to Channel Map Register for AC97 audio transmit Request */
+#define DRCMR13                __REG(0x40000134)  /* Request to Channel Map Register for SSP receive Request */
+#define DRCMR14                __REG(0x40000138)  /* Request to Channel Map Register for SSP transmit Request */
+#define DRCMR15                __REG(0x4000013c)  /* Reserved */
+#define DRCMR16                __REG(0x40000140)  /* Reserved */
+#define DRCMR17                __REG(0x40000144)  /* Request to Channel Map Register for ICP receive Request */
+#define DRCMR18                __REG(0x40000148)  /* Request to Channel Map Register for ICP transmit Request */
+#define DRCMR19                __REG(0x4000014c)  /* Request to Channel Map Register for STUART receive Request */
+#define DRCMR20                __REG(0x40000150)  /* Request to Channel Map Register for STUART transmit Request */
+#define DRCMR21                __REG(0x40000154)  /* Request to Channel Map Register for MMC receive Request */
+#define DRCMR22                __REG(0x40000158)  /* Request to Channel Map Register for MMC transmit Request */
+#define DRCMR23                __REG(0x4000015c)  /* Reserved */
+#define DRCMR24                __REG(0x40000160)  /* Reserved */
+#define DRCMR25                __REG(0x40000164)  /* Request to Channel Map Register for USB endpoint 1 Request */
+#define DRCMR26                __REG(0x40000168)  /* Request to Channel Map Register for USB endpoint 2 Request */
+#define DRCMR27                __REG(0x4000016C)  /* Request to Channel Map Register for USB endpoint 3 Request */
+#define DRCMR28                __REG(0x40000170)  /* Request to Channel Map Register for USB endpoint 4 Request */
+#define DRCMR29                __REG(0x40000174)  /* Reserved */
+#define DRCMR30                __REG(0x40000178)  /* Request to Channel Map Register for USB endpoint 6 Request */
+#define DRCMR31                __REG(0x4000017C)  /* Request to Channel Map Register for USB endpoint 7 Request */
+#define DRCMR32                __REG(0x40000180)  /* Request to Channel Map Register for USB endpoint 8 Request */
+#define DRCMR33                __REG(0x40000184)  /* Request to Channel Map Register for USB endpoint 9 Request */
+#define DRCMR34                __REG(0x40000188)  /* Reserved */
+#define DRCMR35                __REG(0x4000018C)  /* Request to Channel Map Register for USB endpoint 11 Request */
+#define DRCMR36                __REG(0x40000190)  /* Request to Channel Map Register for USB endpoint 12 Request */
+#define DRCMR37                __REG(0x40000194)  /* Request to Channel Map Register for USB endpoint 13 Request */
+#define DRCMR38                __REG(0x40000198)  /* Request to Channel Map Register for USB endpoint 14 Request */
+#define DRCMR39                __REG(0x4000019C)  /* Reserved */
+
+#define DRCMRRXSADR    DRCMR2
+#define DRCMRTXSADR    DRCMR3
+#define DRCMRRXBTRBR   DRCMR4
+#define DRCMRTXBTTHR   DRCMR5
+#define DRCMRRXFFRBR   DRCMR6
+#define DRCMRTXFFTHR   DRCMR7
+#define DRCMRRXMCDR    DRCMR8
+#define DRCMRRXMODR    DRCMR9
+#define DRCMRTXMODR    DRCMR10
+#define DRCMRRXPCDR    DRCMR11
+#define DRCMRTXPCDR    DRCMR12
+#define DRCMRRXSSDR    DRCMR13
+#define DRCMRTXSSDR    DRCMR14
+#define DRCMRRXICDR    DRCMR17
+#define DRCMRTXICDR    DRCMR18
+#define DRCMRRXSTRBR   DRCMR19
+#define DRCMRTXSTTHR   DRCMR20
+#define DRCMRRXMMC     DRCMR21
+#define DRCMRTXMMC     DRCMR22
+
+#define DRCMR_MAPVLD   (1 << 7)        /* Map Valid (read / write) */
+#define DRCMR_CHLNUM   0x0f            /* mask for Channel Number (read / write) */
+
+#define DDADR0         __REG(0x40000200)  /* DMA Descriptor Address Register Channel 0 */
+#define DSADR0         __REG(0x40000204)  /* DMA Source Address Register Channel 0 */
+#define DTADR0         __REG(0x40000208)  /* DMA Target Address Register Channel 0 */
+#define DCMD0          __REG(0x4000020c)  /* DMA Command Address Register Channel 0 */
+#define DDADR1         __REG(0x40000210)  /* DMA Descriptor Address Register Channel 1 */
+#define DSADR1         __REG(0x40000214)  /* DMA Source Address Register Channel 1 */
+#define DTADR1         __REG(0x40000218)  /* DMA Target Address Register Channel 1 */
+#define DCMD1          __REG(0x4000021c)  /* DMA Command Address Register Channel 1 */
+#define DDADR2         __REG(0x40000220)  /* DMA Descriptor Address Register Channel 2 */
+#define DSADR2         __REG(0x40000224)  /* DMA Source Address Register Channel 2 */
+#define DTADR2         __REG(0x40000228)  /* DMA Target Address Register Channel 2 */
+#define DCMD2          __REG(0x4000022c)  /* DMA Command Address Register Channel 2 */
+#define DDADR3         __REG(0x40000230)  /* DMA Descriptor Address Register Channel 3 */
+#define DSADR3         __REG(0x40000234)  /* DMA Source Address Register Channel 3 */
+#define DTADR3         __REG(0x40000238)  /* DMA Target Address Register Channel 3 */
+#define DCMD3          __REG(0x4000023c)  /* DMA Command Address Register Channel 3 */
+#define DDADR4         __REG(0x40000240)  /* DMA Descriptor Address Register Channel 4 */
+#define DSADR4         __REG(0x40000244)  /* DMA Source Address Register Channel 4 */
+#define DTADR4         __REG(0x40000248)  /* DMA Target Address Register Channel 4 */
+#define DCMD4          __REG(0x4000024c)  /* DMA Command Address Register Channel 4 */
+#define DDADR5         __REG(0x40000250)  /* DMA Descriptor Address Register Channel 5 */
+#define DSADR5         __REG(0x40000254)  /* DMA Source Address Register Channel 5 */
+#define DTADR5         __REG(0x40000258)  /* DMA Target Address Register Channel 5 */
+#define DCMD5          __REG(0x4000025c)  /* DMA Command Address Register Channel 5 */
+#define DDADR6         __REG(0x40000260)  /* DMA Descriptor Address Register Channel 6 */
+#define DSADR6         __REG(0x40000264)  /* DMA Source Address Register Channel 6 */
+#define DTADR6         __REG(0x40000268)  /* DMA Target Address Register Channel 6 */
+#define DCMD6          __REG(0x4000026c)  /* DMA Command Address Register Channel 6 */
+#define DDADR7         __REG(0x40000270)  /* DMA Descriptor Address Register Channel 7 */
+#define DSADR7         __REG(0x40000274)  /* DMA Source Address Register Channel 7 */
+#define DTADR7         __REG(0x40000278)  /* DMA Target Address Register Channel 7 */
+#define DCMD7          __REG(0x4000027c)  /* DMA Command Address Register Channel 7 */
+#define DDADR8         __REG(0x40000280)  /* DMA Descriptor Address Register Channel 8 */
+#define DSADR8         __REG(0x40000284)  /* DMA Source Address Register Channel 8 */
+#define DTADR8         __REG(0x40000288)  /* DMA Target Address Register Channel 8 */
+#define DCMD8          __REG(0x4000028c)  /* DMA Command Address Register Channel 8 */
+#define DDADR9         __REG(0x40000290)  /* DMA Descriptor Address Register Channel 9 */
+#define DSADR9         __REG(0x40000294)  /* DMA Source Address Register Channel 9 */
+#define DTADR9         __REG(0x40000298)  /* DMA Target Address Register Channel 9 */
+#define DCMD9          __REG(0x4000029c)  /* DMA Command Address Register Channel 9 */
+#define DDADR10                __REG(0x400002a0)  /* DMA Descriptor Address Register Channel 10 */
+#define DSADR10                __REG(0x400002a4)  /* DMA Source Address Register Channel 10 */
+#define DTADR10                __REG(0x400002a8)  /* DMA Target Address Register Channel 10 */
+#define DCMD10         __REG(0x400002ac)  /* DMA Command Address Register Channel 10 */
+#define DDADR11                __REG(0x400002b0)  /* DMA Descriptor Address Register Channel 11 */
+#define DSADR11                __REG(0x400002b4)  /* DMA Source Address Register Channel 11 */
+#define DTADR11                __REG(0x400002b8)  /* DMA Target Address Register Channel 11 */
+#define DCMD11         __REG(0x400002bc)  /* DMA Command Address Register Channel 11 */
+#define DDADR12                __REG(0x400002c0)  /* DMA Descriptor Address Register Channel 12 */
+#define DSADR12                __REG(0x400002c4)  /* DMA Source Address Register Channel 12 */
+#define DTADR12                __REG(0x400002c8)  /* DMA Target Address Register Channel 12 */
+#define DCMD12         __REG(0x400002cc)  /* DMA Command Address Register Channel 12 */
+#define DDADR13                __REG(0x400002d0)  /* DMA Descriptor Address Register Channel 13 */
+#define DSADR13                __REG(0x400002d4)  /* DMA Source Address Register Channel 13 */
+#define DTADR13                __REG(0x400002d8)  /* DMA Target Address Register Channel 13 */
+#define DCMD13         __REG(0x400002dc)  /* DMA Command Address Register Channel 13 */
+#define DDADR14                __REG(0x400002e0)  /* DMA Descriptor Address Register Channel 14 */
+#define DSADR14                __REG(0x400002e4)  /* DMA Source Address Register Channel 14 */
+#define DTADR14                __REG(0x400002e8)  /* DMA Target Address Register Channel 14 */
+#define DCMD14         __REG(0x400002ec)  /* DMA Command Address Register Channel 14 */
+#define DDADR15                __REG(0x400002f0)  /* DMA Descriptor Address Register Channel 15 */
+#define DSADR15                __REG(0x400002f4)  /* DMA Source Address Register Channel 15 */
+#define DTADR15                __REG(0x400002f8)  /* DMA Target Address Register Channel 15 */
+#define DCMD15         __REG(0x400002fc)  /* DMA Command Address Register Channel 15 */
+
+#define DDADR(x)       __REG2(0x40000200, (x) << 4)
+#define DSADR(x)       __REG2(0x40000204, (x) << 4)
+#define DTADR(x)       __REG2(0x40000208, (x) << 4)
+#define DCMD(x)                __REG2(0x4000020c, (x) << 4)
+
+#define DDADR_DESCADDR 0xfffffff0      /* Address of next descriptor (mask) */
+#define DDADR_STOP     (1 << 0)        /* Stop (read / write) */
+
+#define DCMD_INCSRCADDR        (1 << 31)       /* Source Address Increment Setting. */
+#define DCMD_INCTRGADDR        (1 << 30)       /* Target Address Increment Setting. */
+#define DCMD_FLOWSRC   (1 << 29)       /* Flow Control by the source. */
+#define DCMD_FLOWTRG   (1 << 28)       /* Flow Control by the target. */
+#define DCMD_STARTIRQEN        (1 << 22)       /* Start Interrupt Enable */
+#define DCMD_ENDIRQEN  (1 << 21)       /* End Interrupt Enable */
+#define DCMD_ENDIAN    (1 << 18)       /* Device Endian-ness. */
+#define DCMD_BURST8    (1 << 16)       /* 8 byte burst */
+#define DCMD_BURST16   (2 << 16)       /* 16 byte burst */
+#define DCMD_BURST32   (3 << 16)       /* 32 byte burst */
+#define DCMD_WIDTH1    (1 << 14)       /* 1 byte width */
+#define DCMD_WIDTH2    (2 << 14)       /* 2 byte width (HalfWord) */
+#define DCMD_WIDTH4    (3 << 14)       /* 4 byte width (Word) */
+#define DCMD_LENGTH    0x01fff         /* length mask (max = 8K - 1) */
+
+/* default combinations */
+#define DCMD_RXPCDR    (DCMD_INCTRGADDR|DCMD_FLOWSRC|DCMD_BURST32|DCMD_WIDTH4)
+#define DCMD_RXMCDR    (DCMD_INCTRGADDR|DCMD_FLOWSRC|DCMD_BURST32|DCMD_WIDTH4)
+#define DCMD_TXPCDR    (DCMD_INCSRCADDR|DCMD_FLOWTRG|DCMD_BURST32|DCMD_WIDTH4)
+
+
+/*
+ * UARTs
+ */
+
+/* Full Function UART (FFUART) */
+#define FFUART         FFRBR
+#define FFRBR          __REG(0x40100000)  /* Receive Buffer Register (read only) */
+#define FFTHR          __REG(0x40100000)  /* Transmit Holding Register (write only) */
+#define FFIER          __REG(0x40100004)  /* Interrupt Enable Register (read/write) */
+#define FFIIR          __REG(0x40100008)  /* Interrupt ID Register (read only) */
+#define FFFCR          __REG(0x40100008)  /* FIFO Control Register (write only) */
+#define FFLCR          __REG(0x4010000C)  /* Line Control Register (read/write) */
+#define FFMCR          __REG(0x40100010)  /* Modem Control Register (read/write) */
+#define FFLSR          __REG(0x40100014)  /* Line Status Register (read only) */
+#define FFMSR          __REG(0x40100018)  /* Modem Status Register (read only) */
+#define FFSPR          __REG(0x4010001C)  /* Scratch Pad Register (read/write) */
+#define FFISR          __REG(0x40100020)  /* Infrared Selection Register (read/write) */
+#define FFDLL          __REG(0x40100000)  /* Divisor Latch Low Register (DLAB = 1) (read/write) */
+#define FFDLH          __REG(0x40100004)  /* Divisor Latch High Register (DLAB = 1) (read/write) */
+
+/* Bluetooth UART (BTUART) */
+#define BTUART         BTRBR
+#define BTRBR          __REG(0x40200000)  /* Receive Buffer Register (read only) */
+#define BTTHR          __REG(0x40200000)  /* Transmit Holding Register (write only) */
+#define BTIER          __REG(0x40200004)  /* Interrupt Enable Register (read/write) */
+#define BTIIR          __REG(0x40200008)  /* Interrupt ID Register (read only) */
+#define BTFCR          __REG(0x40200008)  /* FIFO Control Register (write only) */
+#define BTLCR          __REG(0x4020000C)  /* Line Control Register (read/write) */
+#define BTMCR          __REG(0x40200010)  /* Modem Control Register (read/write) */
+#define BTLSR          __REG(0x40200014)  /* Line Status Register (read only) */
+#define BTMSR          __REG(0x40200018)  /* Modem Status Register (read only) */
+#define BTSPR          __REG(0x4020001C)  /* Scratch Pad Register (read/write) */
+#define BTISR          __REG(0x40200020)  /* Infrared Selection Register (read/write) */
+#define BTDLL          __REG(0x40200000)  /* Divisor Latch Low Register (DLAB = 1) (read/write) */
+#define BTDLH          __REG(0x40200004)  /* Divisor Latch High Register (DLAB = 1) (read/write) */
+
+/* Standard UART (STUART) */
+#define STUART         STRBR
+#define STRBR          __REG(0x40700000)  /* Receive Buffer Register (read only) */
+#define STTHR          __REG(0x40700000)  /* Transmit Holding Register (write only) */
+#define STIER          __REG(0x40700004)  /* Interrupt Enable Register (read/write) */
+#define STIIR          __REG(0x40700008)  /* Interrupt ID Register (read only) */
+#define STFCR          __REG(0x40700008)  /* FIFO Control Register (write only) */
+#define STLCR          __REG(0x4070000C)  /* Line Control Register (read/write) */
+#define STMCR          __REG(0x40700010)  /* Modem Control Register (read/write) */
+#define STLSR          __REG(0x40700014)  /* Line Status Register (read only) */
+#define STMSR          __REG(0x40700018)  /* Reserved */
+#define STSPR          __REG(0x4070001C)  /* Scratch Pad Register (read/write) */
+#define STISR          __REG(0x40700020)  /* Infrared Selection Register (read/write) */
+#define STDLL          __REG(0x40700000)  /* Divisor Latch Low Register (DLAB = 1) (read/write) */
+#define STDLH          __REG(0x40700004)  /* Divisor Latch High Register (DLAB = 1) (read/write) */
+
+#define IER_DMAE       (1 << 7)        /* DMA Requests Enable */
+#define IER_UUE                (1 << 6)        /* UART Unit Enable */
+#define IER_NRZE       (1 << 5)        /* NRZ coding Enable */
+#define IER_RTIOE      (1 << 4)        /* Receiver Time Out Interrupt Enable */
+#define IER_MIE                (1 << 3)        /* Modem Interrupt Enable */
+#define IER_RLSE       (1 << 2)        /* Receiver Line Status Interrupt Enable */
+#define IER_TIE                (1 << 1)        /* Transmit Data request Interrupt Enable */
+#define IER_RAVIE      (1 << 0)        /* Receiver Data Available Interrupt Enable */
+
+#define IIR_FIFOES1    (1 << 7)        /* FIFO Mode Enable Status */
+#define IIR_FIFOES0    (1 << 6)        /* FIFO Mode Enable Status */
+#define IIR_TOD                (1 << 3)        /* Time Out Detected */
+#define IIR_IID2       (1 << 2)        /* Interrupt Source Encoded */
+#define IIR_IID1       (1 << 1)        /* Interrupt Source Encoded */
+#define IIR_IP         (1 << 0)        /* Interrupt Pending (active low) */
+
+#define FCR_ITL2       (1 << 7)        /* Interrupt Trigger Level */
+#define FCR_ITL1       (1 << 6)        /* Interrupt Trigger Level */
+#define FCR_RESETTF    (1 << 2)        /* Reset Transmitter FIFO */
+#define FCR_RESETRF    (1 << 1)        /* Reset Receiver FIFO */
+#define FCR_TRFIFOE    (1 << 0)        /* Transmit and Receive FIFO Enable */
+#define FCR_ITL_1      (0)
+#define FCR_ITL_8      (FCR_ITL1)
+#define FCR_ITL_16     (FCR_ITL2)
+#define FCR_ITL_32     (FCR_ITL2|FCR_ITL1)
+
+#define LCR_DLAB       (1 << 7)        /* Divisor Latch Access Bit */
+#define LCR_SB         (1 << 6)        /* Set Break */
+#define LCR_STKYP      (1 << 5)        /* Sticky Parity */
+#define LCR_EPS                (1 << 4)        /* Even Parity Select */
+#define LCR_PEN                (1 << 3)        /* Parity Enable */
+#define LCR_STB                (1 << 2)        /* Stop Bit */
+#define LCR_WLS1       (1 << 1)        /* Word Length Select */
+#define LCR_WLS0       (1 << 0)        /* Word Length Select */
+
+#define LSR_FIFOE      (1 << 7)        /* FIFO Error Status */
+#define LSR_TEMT       (1 << 6)        /* Transmitter Empty */
+#define LSR_TDRQ       (1 << 5)        /* Transmit Data Request */
+#define LSR_BI         (1 << 4)        /* Break Interrupt */
+#define LSR_FE         (1 << 3)        /* Framing Error */
+#define LSR_PE         (1 << 2)        /* Parity Error */
+#define LSR_OE         (1 << 1)        /* Overrun Error */
+#define LSR_DR         (1 << 0)        /* Data Ready */
+
+#define MCR_LOOP       (1 << 4)        */
+#define MCR_OUT2       (1 << 3)        /* force MSR_DCD in loopback mode */
+#define MCR_OUT1       (1 << 2)        /* force MSR_RI in loopback mode */
+#define MCR_RTS                (1 << 1)        /* Request to Send */
+#define MCR_DTR                (1 << 0)        /* Data Terminal Ready */
+
+#define MSR_DCD                (1 << 7)        /* Data Carrier Detect */
+#define MSR_RI         (1 << 6)        /* Ring Indicator */
+#define MSR_DSR                (1 << 5)        /* Data Set Ready */
+#define MSR_CTS                (1 << 4)        /* Clear To Send */
+#define MSR_DDCD       (1 << 3)        /* Delta Data Carrier Detect */
+#define MSR_TERI       (1 << 2)        /* Trailing Edge Ring Indicator */
+#define MSR_DDSR       (1 << 1)        /* Delta Data Set Ready */
+#define MSR_DCTS       (1 << 0)        /* Delta Clear To Send */
+
+/*
+ * IrSR (Infrared Selection Register)
+ */
+#define IrSR_OFFSET 0x20
+
+#define IrSR_RXPL_NEG_IS_ZERO (1<<4)
+#define IrSR_RXPL_POS_IS_ZERO 0x0
+#define IrSR_TXPL_NEG_IS_ZERO (1<<3)
+#define IrSR_TXPL_POS_IS_ZERO 0x0
+#define IrSR_XMODE_PULSE_1_6  (1<<2)
+#define IrSR_XMODE_PULSE_3_16 0x0
+#define IrSR_RCVEIR_IR_MODE   (1<<1)
+#define IrSR_RCVEIR_UART_MODE 0x0
+#define IrSR_XMITIR_IR_MODE   (1<<0)
+#define IrSR_XMITIR_UART_MODE 0x0
+
+#define IrSR_IR_RECEIVE_ON (\
+                IrSR_RXPL_NEG_IS_ZERO | \
+                IrSR_TXPL_POS_IS_ZERO | \
+                IrSR_XMODE_PULSE_3_16 | \
+                IrSR_RCVEIR_IR_MODE   | \
+                IrSR_XMITIR_UART_MODE)
+
+#define IrSR_IR_TRANSMIT_ON (\
+                IrSR_RXPL_NEG_IS_ZERO | \
+                IrSR_TXPL_POS_IS_ZERO | \
+                IrSR_XMODE_PULSE_3_16 | \
+                IrSR_RCVEIR_UART_MODE | \
+                IrSR_XMITIR_IR_MODE)
+
+
+/*
+ * I2C registers
+ */
+
+#define IBMR           __REG(0x40301680)  /* I2C Bus Monitor Register - IBMR */
+#define IDBR           __REG(0x40301688)  /* I2C Data Buffer Register - IDBR */
+#define ICR            __REG(0x40301690)  /* I2C Control Register - ICR */
+#define ISR            __REG(0x40301698)  /* I2C Status Register - ISR */
+#define ISAR           __REG(0x403016A0)  /* I2C Slave Address Register - ISAR */
+
+
+/*
+ * Serial Audio Controller
+ */
+
+
+/* FIXME the audio defines collide w/ the SA1111 defines.  I don't like these
+ * short defines because there is too much chance of namespace collision */
+
+/*#define SACR0                __REG(0x40400000)  /  Global Control Register */
+/*#define SACR1                __REG(0x40400004)  /  Serial Audio I 2 S/MSB-Justified Control Register */
+/*#define SASR0                __REG(0x4040000C)  /  Serial Audio I 2 S/MSB-Justified Interface and FIFO Status Register */
+/*#define SAIMR                __REG(0x40400014)  /  Serial Audio Interrupt Mask Register */
+/*#define SAICR                __REG(0x40400018)  /  Serial Audio Interrupt Clear Register */
+/*#define SADIV                __REG(0x40400060)  /  Audio Clock Divider Register. */
+/*#define SADR         __REG(0x40400080)  /  Serial Audio Data Register (TX and RX FIFO access Register). */
+
+
+/*
+ * AC97 Controller registers
+ */
+
+#define POCR           __REG(0x40500000)  /* PCM Out Control Register */
+#define POCR_FEIE      (1 << 3)        /* FIFO Error Interrupt Enable */
+
+#define PICR           __REG(0x40500004)  /* PCM In Control Register */
+#define PICR_FEIE      (1 << 3)        /* FIFO Error Interrupt Enable */
+
+#define MCCR           __REG(0x40500008)  /* Mic In Control Register */
+#define MCCR_FEIE      (1 << 3)        /* FIFO Error Interrupt Enable */
+
+#define GCR            __REG(0x4050000C)  /* Global Control Register */
+#define GCR_CDONE_IE   (1 << 19)       /* Command Done Interrupt Enable */
+#define GCR_SDONE_IE   (1 << 18)       /* Status Done Interrupt Enable */
+#define GCR_SECRDY_IEN (1 << 9)        /* Secondary Ready Interrupt Enable */
+#define GCR_PRIRDY_IEN (1 << 8)        /* Primary Ready Interrupt Enable */
+#define GCR_SECRES_IEN (1 << 5)        /* Secondary Resume Interrupt Enable */
+#define GCR_PRIRES_IEN (1 << 4)        /* Primary Resume Interrupt Enable */
+#define GCR_ACLINK_OFF (1 << 3)        /* AC-link Shut Off */
+#define GCR_WARM_RST   (1 << 2)        /* AC97 Warm Reset */
+#define GCR_COLD_RST   (1 << 1)        /* AC'97 Cold Reset (0 = active) */
+#define GCR_GIE                (1 << 0)        /* Codec GPI Interrupt Enable */
+
+#define POSR           __REG(0x40500010)  /* PCM Out Status Register */
+#define POSR_FIFOE     (1 << 4)        /* FIFO error */
+
+#define PISR           __REG(0x40500014)  /* PCM In Status Register */
+#define PISR_FIFOE     (1 << 4)        /* FIFO error */
+
+#define MCSR           __REG(0x40500018)  /* Mic In Status Register */
+#define MCSR_FIFOE     (1 << 4)        /* FIFO error */
+
+#define GSR            __REG(0x4050001C)  /* Global Status Register */
+#define GSR_CDONE      (1 << 19)       /* Command Done */
+#define GSR_SDONE      (1 << 18)       /* Status Done */
+#define GSR_RDCS       (1 << 15)       /* Read Completion Status */
+#define GSR_BIT3SLT12  (1 << 14)       /* Bit 3 of slot 12 */
+#define GSR_BIT2SLT12  (1 << 13)       /* Bit 2 of slot 12 */
+#define GSR_BIT1SLT12  (1 << 12)       /* Bit 1 of slot 12 */
+#define GSR_SECRES     (1 << 11)       /* Secondary Resume Interrupt */
+#define GSR_PRIRES     (1 << 10)       /* Primary Resume Interrupt */
+#define GSR_SCR                (1 << 9)        /* Secondary Codec Ready */
+#define GSR_PCR                (1 << 8)        /*  Primary Codec Ready */
+#define GSR_MINT       (1 << 7)        /* Mic In Interrupt */
+#define GSR_POINT      (1 << 6)        /* PCM Out Interrupt */
+#define GSR_PIINT      (1 << 5)        /* PCM In Interrupt */
+#define GSR_MOINT      (1 << 2)        /* Modem Out Interrupt */
+#define GSR_MIINT      (1 << 1)        /* Modem In Interrupt */
+#define GSR_GSCI       (1 << 0)        /* Codec GPI Status Change Interrupt */
+
+#define CAR            __REG(0x40500020)  /* CODEC Access Register */
+#define CAR_CAIP       (1 << 0)        /* Codec Access In Progress */
+
+#define PCDR           __REG(0x40500040)  /* PCM FIFO Data Register */
+#define MCDR           __REG(0x40500060)  /* Mic-in FIFO Data Register */
+
+#define MOCR           __REG(0x40500100)  /* Modem Out Control Register */
+#define MOCR_FEIE      (1 << 3)        /* FIFO Error */
+
+#define MICR           __REG(0x40500108)  /* Modem In Control Register */
+#define MICR_FEIE      (1 << 3)        /* FIFO Error */
+
+#define MOSR           __REG(0x40500110)  /* Modem Out Status Register */
+#define MOSR_FIFOE     (1 << 4)        /* FIFO error */
+
+#define MISR           __REG(0x40500118)  /* Modem In Status Register */
+#define MISR_FIFOE     (1 << 4)        /* FIFO error */
+
+#define MODR           __REG(0x40500140)  /* Modem FIFO Data Register */
+
+#define PAC_REG_BASE   __REG(0x40500200)  /* Primary Audio Codec */
+#define SAC_REG_BASE   __REG(0x40500300)  /* Secondary Audio Codec */
+#define PMC_REG_BASE   __REG(0x40500400)  /* Primary Modem Codec */
+#define SMC_REG_BASE   __REG(0x40500500)  /* Secondary Modem Codec */
+
+
+/*
+ * USB Device Controller
+ */
+
+#define UDCCR          __REG(0x40600000)  /* UDC Control Register */
+#define UDCCS0         __REG(0x40600010)  /* UDC Endpoint 0 Control/Status Register */
+#define UDCCS1         __REG(0x40600014)  /* UDC Endpoint 1 (IN) Control/Status Register */
+#define UDCCS2         __REG(0x40600018)  /* UDC Endpoint 2 (OUT) Control/Status Register */
+#define UDCCS3         __REG(0x4060001C)  /* UDC Endpoint 3 (IN) Control/Status Register */
+#define UDCCS4         __REG(0x40600020)  /* UDC Endpoint 4 (OUT) Control/Status Register */
+#define UDCCS5         __REG(0x40600024)  /* UDC Endpoint 5 (Interrupt) Control/Status Register */
+#define UDCCS6         __REG(0x40600028)  /* UDC Endpoint 6 (IN) Control/Status Register */
+#define UDCCS7         __REG(0x4060002C)  /* UDC Endpoint 7 (OUT) Control/Status Register */
+#define UDCCS8         __REG(0x40600030)  /* UDC Endpoint 8 (IN) Control/Status Register */
+#define UDCCS9         __REG(0x40600034)  /* UDC Endpoint 9 (OUT) Control/Status Register */
+#define UDCCS10                __REG(0x40600038)  /* UDC Endpoint 10 (Interrupt) Control/Status Register */
+#define UDCCS11                __REG(0x4060003C)  /* UDC Endpoint 11 (IN) Control/Status Register */
+#define UDCCS12                __REG(0x40600040)  /* UDC Endpoint 12 (OUT) Control/Status Register */
+#define UDCCS13                __REG(0x40600044)  /* UDC Endpoint 13 (IN) Control/Status Register */
+#define UDCCS14                __REG(0x40600048)  /* UDC Endpoint 14 (OUT) Control/Status Register */
+#define UDCCS15                __REG(0x4060004C)  /* UDC Endpoint 15 (Interrupt) Control/Status Register */
+#define UFNRH          __REG(0x40600060)  /* UDC Frame Number Register High */
+#define UFNRL          __REG(0x40600064)  /* UDC Frame Number Register Low */
+#define UBCR2          __REG(0x40600068)  /* UDC Byte Count Reg 2 */
+#define UBCR4          __REG(0x4060006c)  /* UDC Byte Count Reg 4 */
+#define UBCR7          __REG(0x40600070)  /* UDC Byte Count Reg 7 */
+#define UBCR9          __REG(0x40600074)  /* UDC Byte Count Reg 9 */
+#define UBCR12         __REG(0x40600078)  /* UDC Byte Count Reg 12 */
+#define UBCR14         __REG(0x4060007c)  /* UDC Byte Count Reg 14 */
+#define UDDR0          __REG(0x40600080)  /* UDC Endpoint 0 Data Register */
+#define UDDR1          __REG(0x40600100)  /* UDC Endpoint 1 Data Register */
+#define UDDR2          __REG(0x40600180)  /* UDC Endpoint 2 Data Register */
+#define UDDR3          __REG(0x40600200)  /* UDC Endpoint 3 Data Register */
+#define UDDR4          __REG(0x40600400)  /* UDC Endpoint 4 Data Register */
+#define UDDR5          __REG(0x406000A0)  /* UDC Endpoint 5 Data Register */
+#define UDDR6          __REG(0x40600600)  /* UDC Endpoint 6 Data Register */
+#define UDDR7          __REG(0x40600680)  /* UDC Endpoint 7 Data Register */
+#define UDDR8          __REG(0x40600700)  /* UDC Endpoint 8 Data Register */
+#define UDDR9          __REG(0x40600900)  /* UDC Endpoint 9 Data Register */
+#define UDDR10         __REG(0x406000C0)  /* UDC Endpoint 10 Data Register */
+#define UDDR11         __REG(0x40600B00)  /* UDC Endpoint 11 Data Register */
+#define UDDR12         __REG(0x40600B80)  /* UDC Endpoint 12 Data Register */
+#define UDDR13         __REG(0x40600C00)  /* UDC Endpoint 13 Data Register */
+#define UDDR14         __REG(0x40600E00)  /* UDC Endpoint 14 Data Register */
+#define UDDR15         __REG(0x406000E0)  /* UDC Endpoint 15 Data Register */
+#define UICR0          __REG(0x40600050)  /* UDC Interrupt Control Register 0 */
+#define UICR1          __REG(0x40600054)  /* UDC Interrupt Control Register 1 */
+#define USIR0          __REG(0x40600058)  /* UDC Status Interrupt Register 0 */
+#define USIR1          __REG(0x4060005C)  /* UDC Status Interrupt Register 1 */
+
+
+/*
+ * Fast Infrared Communication Port
+ */
+
+#define ICCR0          __REG(0x40800000)  /* ICP Control Register 0 */
+#define ICCR1          __REG(0x40800004)  /* ICP Control Register 1 */
+#define ICCR2          __REG(0x40800008)  /* ICP Control Register 2 */
+#define ICDR           __REG(0x4080000c)  /* ICP Data Register */
+#define ICSR0          __REG(0x40800014)  /* ICP Status Register 0 */
+#define ICSR1          __REG(0x40800018)  /* ICP Status Register 1 */
+
+
+/*
+ * Real Time Clock
+ */
+
+#define RCNR           __REG(0x40900000)  /* RTC Count Register */
+#define RTAR           __REG(0x40900004)  /* RTC Alarm Register */
+#define RTSR           __REG(0x40900008)  /* RTC Status Register */
+#define RTTR           __REG(0x4090000C)  /* RTC Timer Trim Register */
+
+#define RTSR_HZE       (1 << 3)        /* HZ interrupt enable */
+#define RTSR_ALE       (1 << 2)        /* RTC alarm interrupt enable */
+#define RTSR_HZ                (1 << 1)        /* HZ rising-edge detected */
+#define RTSR_AL                (1 << 0)        /* RTC alarm detected */
+
+
+/*
+ * OS Timer & Match Registers
+ */
+
+#define OSMR0          __REG(0x40A00000)  /* */
+#define OSMR1          __REG(0x40A00004)  /* */
+#define OSMR2          __REG(0x40A00008)  /* */
+#define OSMR3          __REG(0x40A0000C)  /* */
+#define OSCR           __REG(0x40A00010)  /* OS Timer Counter Register */
+#define OSSR           __REG(0x40A00014)  /* OS Timer Status Register */
+#define OWER           __REG(0x40A00018)  /* OS Timer Watchdog Enable Register */
+#define OIER           __REG(0x40A0001C)  /* OS Timer Interrupt Enable Register */
+
+#define OSSR_M3                (1 << 3)        /* Match status channel 3 */
+#define OSSR_M2                (1 << 2)        /* Match status channel 2 */
+#define OSSR_M1                (1 << 1)        /* Match status channel 1 */
+#define OSSR_M0                (1 << 0)        /* Match status channel 0 */
+
+#define OWER_WME       (1 << 0)        /* Watchdog Match Enable */
+
+#define OIER_E3                (1 << 3)        /* Interrupt enable channel 3 */
+#define OIER_E2                (1 << 2)        /* Interrupt enable channel 2 */
+#define OIER_E1                (1 << 1)        /* Interrupt enable channel 1 */
+#define OIER_E0                (1 << 0)        /* Interrupt enable channel 0 */
+
+
+/*
+ * Pulse Width Modulator
+ */
+
+#define PWM_CTRL0      __REG(0x40B00000)  /* PWM 0 Control Register */
+#define PWM_PWDUTY0    __REG(0x40B00004)  /* PWM 0 Duty Cycle Register */
+#define PWM_PERVAL0    __REG(0x40B00008)  /* PWM 0 Period Control Register */
+
+#define PWM_CTRL1      __REG(0x40C00000)  /* PWM 1Control Register */
+#define PWM_PWDUTY1    __REG(0x40C00004)  /* PWM 1 Duty Cycle Register */
+#define PWM_PERVAL1    __REG(0x40C00008)  /* PWM 1 Period Control Register */
+
+
+/*
+ * Interrupt Controller
+ */
+
+#define ICIP           __REG(0x40D00000)  /* Interrupt Controller IRQ Pending Register */
+#define ICMR           __REG(0x40D00004)  /* Interrupt Controller Mask Register */
+#define ICLR           __REG(0x40D00008)  /* Interrupt Controller Level Register */
+#define ICFP           __REG(0x40D0000C)  /* Interrupt Controller FIQ Pending Register */
+#define ICPR           __REG(0x40D00010)  /* Interrupt Controller Pending Register */
+#define ICCR           __REG(0x40D00014)  /* Interrupt Controller Control Register */
+
+
+/*
+ * General Purpose I/O
+ */
+
+#define GPLR0          __REG(0x40E00000)  /* GPIO Pin-Level Register GPIO<31:0> */
+#define GPLR1          __REG(0x40E00004)  /* GPIO Pin-Level Register GPIO<63:32> */
+#define GPLR2          __REG(0x40E00008)  /* GPIO Pin-Level Register GPIO<80:64> */
+
+#define GPDR0          __REG(0x40E0000C)  /* GPIO Pin Direction Register GPIO<31:0> */
+#define GPDR1          __REG(0x40E00010)  /* GPIO Pin Direction Register GPIO<63:32> */
+#define GPDR2          __REG(0x40E00014)  /* GPIO Pin Direction Register GPIO<80:64> */
+
+#define GPSR0          __REG(0x40E00018)  /* GPIO Pin Output Set Register GPIO<31:0> */
+#define GPSR1          __REG(0x40E0001C)  /* GPIO Pin Output Set Register GPIO<63:32> */
+#define GPSR2          __REG(0x40E00020)  /* GPIO Pin Output Set Register GPIO<80:64> */
+
+#define GPCR0          __REG(0x40E00024)  /* GPIO Pin Output Clear Register GPIO<31:0> */
+#define GPCR1          __REG(0x40E00028)  /* GPIO Pin Output Clear Register GPIO <63:32> */
+#define GPCR2          __REG(0x40E0002C)  /* GPIO Pin Output Clear Register GPIO <80:64> */
+
+#define GRER0          __REG(0x40E00030)  /* GPIO Rising-Edge Detect Register GPIO<31:0> */
+#define GRER1          __REG(0x40E00034)  /* GPIO Rising-Edge Detect Register GPIO<63:32> */
+#define GRER2          __REG(0x40E00038)  /* GPIO Rising-Edge Detect Register GPIO<80:64> */
+
+#define GFER0          __REG(0x40E0003C)  /* GPIO Falling-Edge Detect Register GPIO<31:0> */
+#define GFER1          __REG(0x40E00040)  /* GPIO Falling-Edge Detect Register GPIO<63:32> */
+#define GFER2          __REG(0x40E00044)  /* GPIO Falling-Edge Detect Register GPIO<80:64> */
+
+#define GEDR0          __REG(0x40E00048)  /* GPIO Edge Detect Status Register GPIO<31:0> */
+#define GEDR1          __REG(0x40E0004C)  /* GPIO Edge Detect Status Register GPIO<63:32> */
+#define GEDR2          __REG(0x40E00050)  /* GPIO Edge Detect Status Register GPIO<80:64> */
+
+#define GAFR0_L                __REG(0x40E00054)  /* GPIO Alternate Function Select Register GPIO<15:0> */
+#define GAFR0_U                __REG(0x40E00058)  /* GPIO Alternate Function Select Register GPIO<31:16> */
+#define GAFR1_L                __REG(0x40E0005C)  /* GPIO Alternate Function Select Register GPIO<47:32> */
+#define GAFR1_U                __REG(0x40E00060)  /* GPIO Alternate Function Select Register GPIO<63:48> */
+#define GAFR2_L                __REG(0x40E00064)  /* GPIO Alternate Function Select Register GPIO<79:64> */
+#define GAFR2_U                __REG(0x40E00068)  /* GPIO Alternate Function Select Register GPIO 80 */
+
+/* More handy macros.  The argument is a literal GPIO number. */
+
+#define GPIO_bit(x)    (1 << ((x) & 0x1f))
+#define GPLR(x)                __REG2(0x40E00000, ((x) & 0x60) >> 3)
+#define GPDR(x)                __REG2(0x40E0000C, ((x) & 0x60) >> 3)
+#define GPSR(x)                __REG2(0x40E00018, ((x) & 0x60) >> 3)
+#define GPCR(x)                __REG2(0x40E00024, ((x) & 0x60) >> 3)
+#define GRER(x)                __REG2(0x40E00030, ((x) & 0x60) >> 3)
+#define GFER(x)                __REG2(0x40E0003C, ((x) & 0x60) >> 3)
+#define GEDR(x)                __REG2(0x40E00048, ((x) & 0x60) >> 3)
+#define GAFR(x)                __REG2(0x40E00054, ((x) & 0x70) >> 2)
+
+/* GPIO alternate function assignments */
+
+#define GPIO1_RST              1       /* reset */
+#define GPIO6_MMCCLK           6       /* MMC Clock */
+#define GPIO8_48MHz            7       /* 48 MHz clock output */
+#define GPIO8_MMCCS0           8       /* MMC Chip Select 0 */
+#define GPIO9_MMCCS1           9       /* MMC Chip Select 1 */
+#define GPIO10_RTCCLK          10      /* real time clock (1 Hz) */
+#define GPIO11_3_6MHz          11      /* 3.6 MHz oscillator out */
+#define GPIO12_32KHz           12      /* 32 kHz out */
+#define GPIO13_MBGNT           13      /* memory controller grant */
+#define GPIO14_MBREQ           14      /* alternate bus master request */
+#define GPIO15_nCS_1           15      /* chip select 1 */
+#define GPIO16_PWM0            16      /* PWM0 output */
+#define GPIO17_PWM1            17      /* PWM1 output */
+#define GPIO18_RDY             18      /* Ext. Bus Ready */
+#define GPIO19_DREQ1           19      /* External DMA Request */
+#define GPIO20_DREQ0           20      /* External DMA Request */
+#define GPIO23_SCLK            23      /* SSP clock */
+#define GPIO24_SFRM            24      /* SSP Frame */
+#define GPIO25_STXD            25      /* SSP transmit */
+#define GPIO26_SRXD            26      /* SSP receive */
+#define GPIO27_SEXTCLK         27      /* SSP ext_clk */
+#define GPIO28_BITCLK          28      /* AC97/I2S bit_clk */
+#define GPIO29_SDATA_IN                29      /* AC97 Sdata_in0 / I2S Sdata_in */
+#define GPIO30_SDATA_OUT       30      /* AC97/I2S Sdata_out */
+#define GPIO31_SYNC            31      /* AC97/I2S sync */
+#define GPIO32_SDATA_IN1       32      /* AC97 Sdata_in1 */
+#define GPIO33_nCS_5           33      /* chip select 5 */
+#define GPIO34_FFRXD           34      /* FFUART receive */
+#define GPIO34_MMCCS0          34      /* MMC Chip Select 0 */
+#define GPIO35_FFCTS           35      /* FFUART Clear to send */
+#define GPIO36_FFDCD           36      /* FFUART Data carrier detect */
+#define GPIO37_FFDSR           37      /* FFUART data set ready */
+#define GPIO38_FFRI            38      /* FFUART Ring Indicator */
+#define GPIO39_MMCCS1          39      /* MMC Chip Select 1 */
+#define GPIO39_FFTXD           39      /* FFUART transmit data */
+#define GPIO40_FFDTR           40      /* FFUART data terminal Ready */
+#define GPIO41_FFRTS           41      /* FFUART request to send */
+#define GPIO42_BTRXD           42      /* BTUART receive data */
+#define GPIO43_BTTXD           43      /* BTUART transmit data */
+#define GPIO44_BTCTS           44      /* BTUART clear to send */
+#define GPIO45_BTRTS           45      /* BTUART request to send */
+#define GPIO46_ICPRXD          46      /* ICP receive data */
+#define GPIO46_STRXD           46      /* STD_UART receive data */
+#define GPIO47_ICPTXD          47      /* ICP transmit data */
+#define GPIO47_STTXD           47      /* STD_UART transmit data */
+#define GPIO48_nPOE            48      /* Output Enable for Card Space */
+#define GPIO49_nPWE            49      /* Write Enable for Card Space */
+#define GPIO50_nPIOR           50      /* I/O Read for Card Space */
+#define GPIO51_nPIOW           51      /* I/O Write for Card Space */
+#define GPIO52_nPCE_1          52      /* Card Enable for Card Space */
+#define GPIO53_nPCE_2          53      /* Card Enable for Card Space */
+#define GPIO53_MMCCLK          53      /* MMC Clock */
+#define GPIO54_MMCCLK          54      /* MMC Clock */
+#define GPIO54_pSKTSEL         54      /* Socket Select for Card Space */
+#define GPIO55_nPREG           55      /* Card Address bit 26 */
+#define GPIO56_nPWAIT          56      /* Wait signal for Card Space */
+#define GPIO57_nIOIS16         57      /* Bus Width select for I/O Card Space */
+#define GPIO58_LDD_0           58      /* LCD data pin 0 */
+#define GPIO59_LDD_1           59      /* LCD data pin 1 */
+#define GPIO60_LDD_2           60      /* LCD data pin 2 */
+#define GPIO61_LDD_3           61      /* LCD data pin 3 */
+#define GPIO62_LDD_4           62      /* LCD data pin 4 */
+#define GPIO63_LDD_5           63      /* LCD data pin 5 */
+#define GPIO64_LDD_6           64      /* LCD data pin 6 */
+#define GPIO65_LDD_7           65      /* LCD data pin 7 */
+#define GPIO66_LDD_8           66      /* LCD data pin 8 */
+#define GPIO66_MBREQ           66      /* alternate bus master req */
+#define GPIO67_LDD_9           67      /* LCD data pin 9 */
+#define GPIO67_MMCCS0          67      /* MMC Chip Select 0 */
+#define GPIO68_LDD_10          68      /* LCD data pin 10 */
+#define GPIO68_MMCCS1          68      /* MMC Chip Select 1 */
+#define GPIO69_LDD_11          69      /* LCD data pin 11 */
+#define GPIO69_MMCCLK          69      /* MMC_CLK */
+#define GPIO70_LDD_12          70      /* LCD data pin 12 */
+#define GPIO70_RTCCLK          70      /* Real Time clock (1 Hz) */
+#define GPIO71_LDD_13          71      /* LCD data pin 13 */
+#define GPIO71_3_6MHz          71      /* 3.6 MHz Oscillator clock */
+#define GPIO72_LDD_14          72      /* LCD data pin 14 */
+#define GPIO72_32kHz           72      /* 32 kHz clock */
+#define GPIO73_LDD_15          73      /* LCD data pin 15 */
+#define GPIO73_MBGNT           73      /* Memory controller grant */
+#define GPIO74_LCD_FCLK                74      /* LCD Frame clock */
+#define GPIO75_LCD_LCLK                75      /* LCD line clock */
+#define GPIO76_LCD_PCLK                76      /* LCD Pixel clock */
+#define GPIO77_LCD_ACBIAS      77      /* LCD AC Bias */
+#define GPIO78_nCS_2           78      /* chip select 2 */
+#define GPIO79_nCS_3           79      /* chip select 3 */
+#define GPIO80_nCS_4           80      /* chip select 4 */
+
+/* GPIO alternate function mode & direction */
+
+#define GPIO_IN                        0x000
+#define GPIO_OUT               0x080
+#define GPIO_ALT_FN_1_IN       0x100
+#define GPIO_ALT_FN_1_OUT      0x180
+#define GPIO_ALT_FN_2_IN       0x200
+#define GPIO_ALT_FN_2_OUT      0x280
+#define GPIO_ALT_FN_3_IN       0x300
+#define GPIO_ALT_FN_3_OUT      0x380
+#define GPIO_MD_MASK_NR                0x07f
+#define GPIO_MD_MASK_DIR       0x080
+#define GPIO_MD_MASK_FN                0x300
+
+#define GPIO1_RTS_MD           ( 1 | GPIO_ALT_FN_1_IN)
+#define GPIO6_MMCCLK_MD                ( 6 | GPIO_ALT_FN_1_OUT)
+#define GPIO8_48MHz_MD         ( 8 | GPIO_ALT_FN_1_OUT)
+#define GPIO8_MMCCS0_MD                ( 8 | GPIO_ALT_FN_1_OUT)
+#define GPIO9_MMCCS1_MD                ( 9 | GPIO_ALT_FN_1_OUT)
+#define GPIO10_RTCCLK_MD       (10 | GPIO_ALT_FN_1_OUT)
+#define GPIO11_3_6MHz_MD       (11 | GPIO_ALT_FN_1_OUT)
+#define GPIO12_32KHz_MD                (12 | GPIO_ALT_FN_1_OUT)
+#define GPIO13_MBGNT_MD                (13 | GPIO_ALT_FN_2_OUT)
+#define GPIO14_MBREQ_MD                (14 | GPIO_ALT_FN_1_IN)
+#define GPIO15_nCS_1_MD                (15 | GPIO_ALT_FN_2_OUT)
+#define GPIO16_PWM0_MD         (16 | GPIO_ALT_FN_2_OUT)
+#define GPIO17_PWM1_MD         (17 | GPIO_ALT_FN_2_OUT)
+#define GPIO18_RDY_MD          (18 | GPIO_ALT_FN_1_IN)
+#define GPIO19_DREQ1_MD                (19 | GPIO_ALT_FN_1_IN)
+#define GPIO20_DREQ0_MD                (20 | GPIO_ALT_FN_1_IN)
+#define GPIO23_SCLK_md         (23 | GPIO_ALT_FN_2_OUT)
+#define GPIO24_SFRM_MD         (24 | GPIO_ALT_FN_2_OUT)
+#define GPIO25_STXD_MD         (25 | GPIO_ALT_FN_2_OUT)
+#define GPIO26_SRXD_MD         (26 | GPIO_ALT_FN_1_IN)
+#define GPIO27_SEXTCLK_MD      (27 | GPIO_ALT_FN_1_IN)
+#define GPIO28_BITCLK_AC97_MD  (28 | GPIO_ALT_FN_1_IN)
+#define GPIO28_BITCLK_I2S_MD   (28 | GPIO_ALT_FN_2_IN)
+#define GPIO29_SDATA_IN_AC97_MD        (29 | GPIO_ALT_FN_1_IN)
+#define GPIO29_SDATA_IN_I2S_MD (29 | GPIO_ALT_FN_2_IN)
+#define GPIO30_SDATA_OUT_AC97_MD       (30 | GPIO_ALT_FN_2_OUT)
+#define GPIO30_SDATA_OUT_I2S_MD        (30 | GPIO_ALT_FN_1_OUT)
+#define GPIO31_SYNC_AC97_MD    (31 | GPIO_ALT_FN_2_OUT)
+#define GPIO31_SYNC_I2S_MD     (31 | GPIO_ALT_FN_1_OUT)
+#define GPIO32_SDATA_IN1_AC97_MD       (32 | GPIO_ALT_FN_1_IN)
+#define GPIO33_nCS_5_MD                (33 | GPIO_ALT_FN_2_OUT)
+#define GPIO34_FFRXD_MD                (34 | GPIO_ALT_FN_1_IN)
+#define GPIO34_MMCCS0_MD       (34 | GPIO_ALT_FN_2_OUT)
+#define GPIO35_FFCTS_MD                (35 | GPIO_ALT_FN_1_IN)
+#define GPIO36_FFDCD_MD                (36 | GPIO_ALT_FN_1_IN)
+#define GPIO37_FFDSR_MD                (37 | GPIO_ALT_FN_1_IN)
+#define GPIO38_FFRI_MD         (38 | GPIO_ALT_FN_1_IN)
+#define GPIO39_MMCCS1_MD       (39 | GPIO_ALT_FN_1_OUT)
+#define GPIO39_FFTXD_MD                (39 | GPIO_ALT_FN_2_OUT)
+#define GPIO40_FFDTR_MD                (40 | GPIO_ALT_FN_2_OUT)
+#define GPIO41_FFRTS_MD                (41 | GPIO_ALT_FN_2_OUT)
+#define GPIO42_BTRXD_MD                (42 | GPIO_ALT_FN_1_IN)
+#define GPIO43_BTTXD_MD                (43 | GPIO_ALT_FN_2_OUT)
+#define GPIO44_BTCTS_MD                (44 | GPIO_ALT_FN_1_IN)
+#define GPIO45_BTRTS_MD                (45 | GPIO_ALT_FN_2_OUT)
+#define GPIO46_ICPRXD_MD       (46 | GPIO_ALT_FN_1_IN)
+#define GPIO46_STRXD_MD                (46 | GPIO_ALT_FN_2_IN)
+#define GPIO47_ICPTXD_MD       (47 | GPIO_ALT_FN_2_OUT)
+#define GPIO47_STTXD_MD                (47 | GPIO_ALT_FN_1_OUT)
+#define GPIO48_nPOE_MD         (48 | GPIO_ALT_FN_2_OUT)
+#define GPIO49_nPWE_MD         (49 | GPIO_ALT_FN_2_OUT)
+#define GPIO50_nPIOR_MD                (50 | GPIO_ALT_FN_2_OUT)
+#define GPIO51_nPIOW_MD                (51 | GPIO_ALT_FN_2_OUT)
+#define GPIO52_nPCE_1_MD       (52 | GPIO_ALT_FN_2_OUT)
+#define GPIO53_nPCE_2_MD       (53 | GPIO_ALT_FN_2_OUT)
+#define GPIO53_MMCCLK_MD       (53 | GPIO_ALT_FN_1_OUT)
+#define GPIO54_MMCCLK_MD       (54 | GPIO_ALT_FN_1_OUT)
+#define GPIO54_pSKTSEL_MD      (54 | GPIO_ALT_FN_2_OUT)
+#define GPIO55_nPREG_MD                (55 | GPIO_ALT_FN_2_OUT)
+#define GPIO56_nPWAIT_MD       (56 | GPIO_ALT_FN_1_IN)
+#define GPIO57_nIOIS16_MD      (57 | GPIO_ALT_FN_1_IN)
+#define GPIO58_LDD_0_MD                (58 | GPIO_ALT_FN_2_OUT)
+#define GPIO59_LDD_1_MD                (59 | GPIO_ALT_FN_2_OUT)
+#define GPIO60_LDD_2_MD                (60 | GPIO_ALT_FN_2_OUT)
+#define GPIO61_LDD_3_MD                (61 | GPIO_ALT_FN_2_OUT)
+#define GPIO62_LDD_4_MD                (62 | GPIO_ALT_FN_2_OUT)
+#define GPIO63_LDD_5_MD                (63 | GPIO_ALT_FN_2_OUT)
+#define GPIO64_LDD_6_MD                (64 | GPIO_ALT_FN_2_OUT)
+#define GPIO65_LDD_7_MD                (65 | GPIO_ALT_FN_2_OUT)
+#define GPIO66_LDD_8_MD                (66 | GPIO_ALT_FN_2_OUT)
+#define GPIO66_MBREQ_MD                (66 | GPIO_ALT_FN_1_IN)
+#define GPIO67_LDD_9_MD                (67 | GPIO_ALT_FN_2_OUT)
+#define GPIO67_MMCCS0_MD       (67 | GPIO_ALT_FN_1_OUT)
+#define GPIO68_LDD_10_MD       (68 | GPIO_ALT_FN_2_OUT)
+#define GPIO68_MMCCS1_MD       (68 | GPIO_ALT_FN_1_OUT)
+#define GPIO69_LDD_11_MD       (69 | GPIO_ALT_FN_2_OUT)
+#define GPIO69_MMCCLK_MD       (69 | GPIO_ALT_FN_1_OUT)
+#define GPIO70_LDD_12_MD       (70 | GPIO_ALT_FN_2_OUT)
+#define GPIO70_RTCCLK_MD       (70 | GPIO_ALT_FN_1_OUT)
+#define GPIO71_LDD_13_MD       (71 | GPIO_ALT_FN_2_OUT)
+#define GPIO71_3_6MHz_MD       (71 | GPIO_ALT_FN_1_OUT)
+#define GPIO72_LDD_14_MD       (72 | GPIO_ALT_FN_2_OUT)
+#define GPIO72_32kHz_MD                (72 | GPIO_ALT_FN_1_OUT)
+#define GPIO73_LDD_15_MD       (73 | GPIO_ALT_FN_2_OUT)
+#define GPIO73_MBGNT_MD                (73 | GPIO_ALT_FN_1_OUT)
+#define GPIO74_LCD_FCLK_MD     (74 | GPIO_ALT_FN_2_OUT)
+#define GPIO75_LCD_LCLK_MD     (75 | GPIO_ALT_FN_2_OUT)
+#define GPIO76_LCD_PCLK_MD     (76 | GPIO_ALT_FN_2_OUT)
+#define GPIO77_LCD_ACBIAS_MD   (77 | GPIO_ALT_FN_2_OUT)
+#define GPIO78_nCS_2_MD                (78 | GPIO_ALT_FN_2_OUT)
+#define GPIO79_nCS_3_MD                (79 | GPIO_ALT_FN_2_OUT)
+#define GPIO80_nCS_4_MD                (80 | GPIO_ALT_FN_2_OUT)
+
+
+/*
+ * Power Manager
+ */
+
+#define PMCR           __REG(0x40F00000)  /* Power Manager Control Register */
+#define PSSR           __REG(0x40F00004)  /* Power Manager Sleep Status Register */
+#define PSPR           __REG(0x40F00008)  /* Power Manager Scratch Pad Register */
+#define PWER           __REG(0x40F0000C)  /* Power Manager Wake-up Enable Register */
+#define PRER           __REG(0x40F00010)  /* Power Manager GPIO Rising-Edge Detect Enable Register */
+#define PFER           __REG(0x40F00014)  /* Power Manager GPIO Falling-Edge Detect Enable Register */
+#define PEDR           __REG(0x40F00018)  /* Power Manager GPIO Edge Detect Status Register */
+#define PCFR           __REG(0x40F0001C)  /* Power Manager General Configuration Register */
+#define PGSR0          __REG(0x40F00020)  /* Power Manager GPIO Sleep State Register for GP[31-0] */
+#define PGSR1          __REG(0x40F00024)  /* Power Manager GPIO Sleep State Register for GP[63-32] */
+#define PGSR2          __REG(0x40F00028)  /* Power Manager GPIO Sleep State Register for GP[84-64] */
+#define RCSR           __REG(0x40F00030)  /* Reset Controller Status Register */
+
+
+/*
+ * SSP Serial Port Registers
+ */
+
+#define SSCR0          __REG(0x41000000)  /* SSP Control Register 0 */
+#define SSCR1          __REG(0x41000004)  /* SSP Control Register 1 */
+#define SSSR           __REG(0x41000008)  /* SSP Status Register */
+#define SSITR          __REG(0x4100000C)  /* SSP Interrupt Test Register */
+#define SSDR           __REG(0x41000010)  /* (Write / Read) SSP Data Write Register/SSP Data Read Register */
+
+
+/*
+ * MultiMediaCard (MMC) controller
+ */
+
+#define MMC_STRPCL     __REG(0x41100000)  /* Control to start and stop MMC clock */
+#define MMC_STAT       __REG(0x41100004)  /* MMC Status Register (read only) */
+#define MMC_CLKRT      __REG(0x41100008)  /* MMC clock rate */
+#define MMC_SPI                __REG(0x4110000c)  /* SPI mode control bits */
+#define MMC_CMDAT      __REG(0x41100010)  /* Command/response/data sequence control */
+#define MMC_RESTO      __REG(0x41100014)  /* Expected response time out */
+#define MMC_RDTO       __REG(0x41100018)  /* Expected data read time out */
+#define MMC_BLKLEN     __REG(0x4110001c)  /* Block length of data transaction */
+#define MMC_NOB                __REG(0x41100020)  /* Number of blocks, for block mode */
+#define MMC_PRTBUF     __REG(0x41100024)  /* Partial MMC_TXFIFO FIFO written */
+#define MMC_I_MASK     __REG(0x41100028)  /* Interrupt Mask */
+#define MMC_I_REG      __REG(0x4110002c)  /* Interrupt Register (read only) */
+#define MMC_CMD                __REG(0x41100030)  /* Index of current command */
+#define MMC_ARGH       __REG(0x41100034)  /* MSW part of the current command argument */
+#define MMC_ARGL       __REG(0x41100038)  /* LSW part of the current command argument */
+#define MMC_RES                __REG(0x4110003c)  /* Response FIFO (read only) */
+#define MMC_RXFIFO     __REG(0x41100040)  /* Receive FIFO (read only) */
+#define MMC_TXFIFO     __REG(0x41100044)  /* Transmit FIFO (write only) */
+
+
+/*
+ * Core Clock
+ */
+
+#define CCCR           __REG(0x41300000)  /* Core Clock Configuration Register */
+#define CKEN           __REG(0x41300004)  /* Clock Enable Register */
+#define OSCC           __REG(0x41300008)  /* Oscillator Configuration Register */
+
+#define CCCR_N_MASK    0x0380          /* Run Mode Frequency to Turbo Mode Frequency Multiplier */
+#define CCCR_M_MASK    0x0060          /* Memory Frequency to Run Mode Frequency Multiplier */
+#define CCCR_L_MASK    0x001f          /* Crystal Frequency to Memory Frequency Multiplier */
+
+#define CKEN16_LCD     (1 << 16)       /* LCD Unit Clock Enable */
+#define CKEN14_I2C     (1 << 14)       /* I2C Unit Clock Enable */
+#define CKEN13_FICP    (1 << 13)       /* FICP Unit Clock Enable */
+#define CKEN12_MMC     (1 << 12)       /* MMC Unit Clock Enable */
+#define CKEN11_USB     (1 << 11)       /* USB Unit Clock Enable */
+#define CKEN8_I2S      (1 << 8)        /* I2S Unit Clock Enable */
+#define CKEN7_BTUART   (1 << 7)        /* BTUART Unit Clock Enable */
+#define CKEN6_FFUART   (1 << 6)        /* FFUART Unit Clock Enable */
+#define CKEN5_STUART   (1 << 5)        /* STUART Unit Clock Enable */
+#define CKEN3_SSP      (1 << 3)        /* SSP Unit Clock Enable */
+#define CKEN2_AC97     (1 << 2)        /* AC97 Unit Clock Enable */
+#define CKEN1_PWM1     (1 << 1)        /* PWM1 Clock Enable */
+#define CKEN0_PWM0     (1 << 0)        /* PWM0 Clock Enable */
+
+#define OSCC_OON       (1 << 1)        /* 32.768kHz OON (write-once only bit) */
+#define OSCC_OOK       (1 << 0)        /* 32.768kHz OOK (read-only bit) */
+
+#define  CCCR_L09      (0x1F)
+#define  CCCR_L27      (0x1)
+#define  CCCR_L32      (0x2)
+#define  CCCR_L36      (0x3)
+#define  CCCR_L40      (0x4)
+#define  CCCR_L45      (0x5)
+
+#define  CCCR_M1       (0x1 << 5)
+#define  CCCR_M2       (0x2 << 5)
+#define  CCCR_M4       (0x3 << 5)
+
+#define  CCCR_N10      (0x2 << 7)
+#define  CCCR_N15      (0x3 << 7)
+#define  CCCR_N20      (0x4 << 7)
+#define  CCCR_N25      (0x5 << 7)
+#define  CCCR_N30      (0x6 << 7)
+
+/*
+ * LCD
+ */
+
+#define LCCR0          __REG(0x44000000)  /* LCD Controller Control Register 0 */
+#define LCCR1          __REG(0x44000004)  /* LCD Controller Control Register 1 */
+#define LCCR2          __REG(0x44000008)  /* LCD Controller Control Register 2 */
+#define LCCR3          __REG(0x4400000C)  /* LCD Controller Control Register 3 */
+#define DFBR0          __REG(0x44000020)  /* DMA Channel 0 Frame Branch Register */
+#define DFBR1          __REG(0x44000024)  /* DMA Channel 1 Frame Branch Register */
+#define LCSR           __REG(0x44000038)  /* LCD Controller Status Register */
+#define LIIDR          __REG(0x4400003C)  /* LCD Controller Interrupt ID Register */
+#define TMEDRGBR       __REG(0x44000040)  /* TMED RGB Seed Register */
+#define TMEDCR         __REG(0x44000044)  /* TMED Control Register */
+
+#define FDADR0         __REG(0x44000200)  /* DMA Channel 0 Frame Descriptor Address Register */
+#define FSADR0         __REG(0x44000204)  /* DMA Channel 0 Frame Source Address Register */
+#define FIDR0          __REG(0x44000208)  /* DMA Channel 0 Frame ID Register */
+#define LDCMD0         __REG(0x4400020C)  /* DMA Channel 0 Command Register */
+#define FDADR1         __REG(0x44000210)  /* DMA Channel 1 Frame Descriptor Address Register */
+#define FSADR1         __REG(0x44000214)  /* DMA Channel 1 Frame Source Address Register */
+#define FIDR1          __REG(0x44000218)  /* DMA Channel 1 Frame ID Register */
+#define LDCMD1         __REG(0x4400021C)  /* DMA Channel 1 Command Register */
+
+#define LCCR0_ENB      (1 << 0)        /* LCD Controller enable */
+#define LCCR0_CMS      (1 << 1)        /* Color = 0, Monochrome = 1 */
+#define LCCR0_SDS      (1 << 2)        /* Single Panel = 0, Dual Panel = 1 */
+#define LCCR0_LDM      (1 << 3)        /* LCD Disable Done Mask */
+#define LCCR0_SFM      (1 << 4)        /* Start of frame mask */
+#define LCCR0_IUM      (1 << 5)        /* Input FIFO underrun mask */
+#define LCCR0_EFM      (1 << 6)        /* End of Frame mask */
+#define LCCR0_PAS      (1 << 7)        /* Passive = 0, Active = 1 */
+#define LCCR0_BLE      (1 << 8)        /* Little Endian = 0, Big Endian = 1 */
+#define LCCR0_DPD      (1 << 9)        /* Double Pixel mode, 4 pixel value = 0, 8 pixle values = 1 */
+#define LCCR0_DIS      (1 << 10)       /* LCD Disable */
+#define LCCR0_QDM      (1 << 11)       /* LCD Quick Disable mask */
+#define LCCR0_PDD      (0xff << 12)    /* Palette DMA request delay */
+#define LCCR0_PDD_S    12
+#define LCCR0_BM       (1 << 20)       /* Branch mask */
+#define LCCR0_OUM      (1 << 21)       /* Output FIFO underrun mask */
+
+#define LCCR3_PCD      (0xff)          /* Pixel clock divisor */
+#define LCCR3_ACB      (0xff << 8)     /* AC Bias pin frequency */
+#define LCCR3_ACB_S    8
+#define LCCR3_API      (0xf << 16)     /* AC Bias pin trasitions per interrupt */
+#define LCCR3_API_S    16
+#define LCCR3_VSP      (1 << 20)       /* vertical sync polarity */
+#define LCCR3_HSP      (1 << 21)       /* horizontal sync polarity */
+#define LCCR3_PCP      (1 << 22)       /* pixel clock polarity */
+#define LCCR3_OEP      (1 << 23)       /* output enable polarity */
+#define LCCR3_BPP      (7 << 24)       /* bits per pixel */
+#define LCCR3_BPP_S    24
+#define LCCR3_DPC      (1 << 27)       /* double pixel clock mode */
+
+#define LCSR_LDD       (1 << 0)        /* LCD Disable Done */
+#define LCSR_SOF       (1 << 1)        /* Start of frame */
+#define LCSR_BER       (1 << 2)        /* Bus error */
+#define LCSR_ABC       (1 << 3)        /* AC Bias count */
+#define LCSR_IUL       (1 << 4)        /* input FIFO underrun Lower panel */
+#define LCSR_IUU       (1 << 5)        /* input FIFO underrun Upper panel */
+#define LCSR_OU                (1 << 6)        /* output FIFO underrun */
+#define LCSR_QD                (1 << 7)        /* quick disable */
+#define LCSR_EOF       (1 << 8)        /* end of frame */
+#define LCSR_BS                (1 << 9)        /* branch status */
+#define LCSR_SINT      (1 << 10)       /* subsequent interrupt */
+
+#define LDCMD_PAL      (1 << 26)       /* instructs DMA to load palette buffer */
+
+/*
+ * Memory controller
+ */
+
+#define MEMC_BASE __REG(0x48000000)  /* Base of Memoriy Controller */
+#define MDCNFG         __REG(0x48000000)  /* SDRAM Configuration Register 0 */
+#define MDREFR         __REG(0x48000004)  /* SDRAM Refresh Control Register */
+#define MSC0           __REG(0x48000008)  /* Static Memory Control Register 0 */
+#define MSC1           __REG(0x4800000C)  /* Static Memory Control Register 1 */
+#define MSC2           __REG(0x48000010)  /* Static Memory Control Register 2 */
+#define MECR           __REG(0x48000014)  /* Expansion Memory (PCMCIA/Compact Flash) Bus Configuration */
+#define SXLCR          __REG(0x48000018)  /* LCR value to be written to SDRAM-Timing Synchronous Flash */
+#define SXCNFG         __REG(0x4800001C)  /* Synchronous Static Memory Control Register */
+#define SXMRS          __REG(0x48000024)  /* MRS value to be written to Synchronous Flash or SMROM */
+#define MCMEM0         __REG(0x48000028)  /* Card interface Common Memory Space Socket 0 Timing */
+#define MCMEM1         __REG(0x4800002C)  /* Card interface Common Memory Space Socket 1 Timing */
+#define MCATT0         __REG(0x48000030)  /* Card interface Attribute Space Socket 0 Timing Configuration */
+#define MCATT1         __REG(0x48000034)  /* Card interface Attribute Space Socket 1 Timing Configuration */
+#define MCIO0          __REG(0x48000038)  /* Card interface I/O Space Socket 0 Timing Configuration */
+#define MCIO1          __REG(0x4800003C)  /* Card interface I/O Space Socket 1 Timing Configuration */
+#define MDMRS          __REG(0x48000040)  /* MRS value to be written to SDRAM */
+#define BOOT_DEF       __REG(0x48000044)  /* Read-Only Boot-Time Register. Contains BOOT_SEL and PKG_SEL */
+
+#define MDCNFG_DE0      0x00000001
+#define MDCNFG_DE1      0x00000002
+#define MDCNFG_DE2      0x00010000
+#define MDCNFG_DE3      0x00020000
+#define MDCNFG_DWID0    0x00000004
+
+#define MDREFR_E0PIN    0x00001000
+#define MDREFR_K0RUN   0x00002000
+#define MDREFR_K0DB2   0x00004000
+#define MDREFR_E1PIN    0x00008000
+#define MDREFR_K1RUN   0x00010000
+#define MDREFR_K1DB2   0x00020000
+#define MDREFR_K2RUN   0x00040000
+#define MDREFR_K2DB2   0x00080000
+#define MDREFR_APD     0x00100000
+#define MDREFR_SLFRSH  0x00400000
+#define MDREFR_K0FREE  0x00800000
+#define MDREFR_K1FREE  0x01000000
+#define MDREFR_K2FREE  0x02000000
+
+#define MDCNFG_OFFSET   0x0
+#define MDREFR_OFFSET   0x4
+#define MSC0_OFFSET     0x8
+#define MSC1_OFFSET     0xC
+#define MSC2_OFFSET     0x10
+#define MECR_OFFSET     0x14
+#define SXLCR_OFFSET    0x18
+#define SXCNFG_OFFSET   0x1C
+#define FLYCNFG_OFFSET  0x20
+#define SXMRS_OFFSET    0x24
+#define MCMEM0_OFFSET   0x28
+#define MCMEM1_OFFSET   0x2C
+#define MCATT0_OFFSET   0x30
+#define MCATT1_OFFSET   0x34
+#define MCIO0_OFFSET    0x38
+#define MCIO1_OFFSET    0x3C
+#define MDMRS_OFFSET    0x40
+
+
+
+
diff --git a/include/ppc405.h b/include/ppc405.h
new file mode 100644 (file)
index 0000000..e09e9f8
--- /dev/null
@@ -0,0 +1,400 @@
+/*----------------------------------------------------------------------------+
+|
+|       This source code has been made available to you by IBM on an AS-IS
+|       basis.  Anyone receiving this source is licensed under IBM
+|       copyrights to use it in any way he or she deems fit, including
+|       copying it, modifying it, compiling it, and redistributing it either
+|       with or without modifications.  No license under IBM patents or
+|       patent applications is to be implied by the copyright license.
+|
+|       Any user of this software should understand that IBM cannot provide
+|       technical support for this software and will not be responsible for
+|       any consequences resulting from the use of this software.
+|
+|       Any person who transfers this source code or any derivative work
+|       must include the IBM copyright notice, this paragraph, and the
+|       preceding two paragraphs in the transferred software.
+|
+|       COPYRIGHT   I B M   CORPORATION 1999
+|       LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
++----------------------------------------------------------------------------*/
+
+#ifndef        __PPC405_H__
+#define __PPC405_H__
+
+/*--------------------------------------------------------------------- */
+/* Special Purpose Registers                                           */
+/*--------------------------------------------------------------------- */
+        #define  srr2  0x3de      /* save/restore register 2 */
+        #define  srr3  0x3df      /* save/restore register 3 */
+       #define  dbsr  0x3f0      /* debug status register */
+       #define  dbcr0 0x3f2      /* debug control register 0 */
+       #define  dbcr1 0x3bd      /* debug control register 1 */
+       #define  iac1  0x3f4      /* instruction address comparator 1 */
+       #define  iac2  0x3f5      /* instruction address comparator 2 */
+       #define  iac3  0x3b4      /* instruction address comparator 3 */
+       #define  iac4  0x3b5      /* instruction address comparator 4 */
+       #define  dac1  0x3f6      /* data address comparator 1 */
+       #define  dac2  0x3f7      /* data address comparator 2 */
+       #define  dccr  0x3fa      /* data cache control register */
+       #define  iccr  0x3fb      /* instruction cache control register */
+       #define  esr   0x3d4      /* execption syndrome register */
+       #define  dear  0x3d5      /* data exeption address register */
+       #define  evpr  0x3d6      /* exeption vector prefix register */
+       #define  tsr   0x3d8      /* timer status register */
+       #define  tcr   0x3da      /* timer control register */
+       #define  pit   0x3db      /* programmable interval timer */
+        #define  sgr   0x3b9      /* storage guarded reg      */
+        #define  dcwr  0x3ba      /* data cache write-thru reg*/
+        #define  sler  0x3bb      /* storage little-endian reg */
+       #define  cdbcr 0x3d7      /* cache debug cntrl reg    */
+       #define  icdbdr 0x3d3     /* instr cache dbug data reg*/
+       #define  ccr0  0x3b3      /* core configuration register */
+       #define  dvc1  0x3b6      /* data value compare register 1 */
+       #define  dvc2  0x3b7      /* data value compare register 2 */
+       #define  pid   0x3b1      /* process ID */
+       #define  su0r  0x3bc      /* storage user-defined register 0 */
+       #define  zpr   0x3b0      /* zone protection regsiter */
+
+        #define  tbl   0x11c      /* time base lower - privileged write */
+       #define  tbu   0x11d      /* time base upper - privileged write */
+
+       #define  sprg4r 0x104     /* Special purpose general 4 - read only */
+       #define  sprg5r 0x105     /* Special purpose general 5 - read only */
+       #define  sprg6r 0x106     /* Special purpose general 6 - read only */
+       #define  sprg7r 0x107     /* Special purpose general 7 - read only */
+       #define  sprg4w 0x114     /* Special purpose general 4 - write only */
+       #define  sprg5w 0x115     /* Special purpose general 5 - write only */
+       #define  sprg6w 0x116     /* Special purpose general 6 - write only */
+       #define  sprg7w 0x117     /* Special purpose general 7 - write only */
+
+/******************************************************************************
+ * Special for PPC405GP
+ ******************************************************************************/
+
+/******************************************************************************
+ * DMA
+ ******************************************************************************/
+#define DMA_DCR_BASE 0x100
+#define dmacr0  (DMA_DCR_BASE+0x00)  /* DMA channel control register 0       */
+#define dmact0  (DMA_DCR_BASE+0x01)  /* DMA count register 0                 */
+#define dmada0  (DMA_DCR_BASE+0x02)  /* DMA destination address register 0   */
+#define dmasa0  (DMA_DCR_BASE+0x03)  /* DMA source address register 0        */
+#define dmasb0  (DMA_DCR_BASE+0x04)  /* DMA scatter/gather descriptor addr 0 */
+#define dmacr1  (DMA_DCR_BASE+0x08)  /* DMA channel control register 1       */
+#define dmact1  (DMA_DCR_BASE+0x09)  /* DMA count register 1                 */
+#define dmada1  (DMA_DCR_BASE+0x0a)  /* DMA destination address register 1   */
+#define dmasa1  (DMA_DCR_BASE+0x0b)  /* DMA source address register 1        */
+#define dmasb1  (DMA_DCR_BASE+0x0c)  /* DMA scatter/gather descriptor addr 1 */
+#define dmacr2  (DMA_DCR_BASE+0x10)  /* DMA channel control register 2       */
+#define dmact2  (DMA_DCR_BASE+0x11)  /* DMA count register 2                 */
+#define dmada2  (DMA_DCR_BASE+0x12)  /* DMA destination address register 2   */
+#define dmasa2  (DMA_DCR_BASE+0x13)  /* DMA source address register 2        */
+#define dmasb2  (DMA_DCR_BASE+0x14)  /* DMA scatter/gather descriptor addr 2 */
+#define dmacr3  (DMA_DCR_BASE+0x18)  /* DMA channel control register 3       */
+#define dmact3  (DMA_DCR_BASE+0x19)  /* DMA count register 3                 */
+#define dmada3  (DMA_DCR_BASE+0x1a)  /* DMA destination address register 3   */
+#define dmasa3  (DMA_DCR_BASE+0x1b)  /* DMA source address register 3        */
+#define dmasb3  (DMA_DCR_BASE+0x1c)  /* DMA scatter/gather descriptor addr 3 */
+#define dmasr   (DMA_DCR_BASE+0x20)  /* DMA status register                  */
+#define dmasgc  (DMA_DCR_BASE+0x23)  /* DMA scatter/gather command register  */
+#define dmaadr  (DMA_DCR_BASE+0x24)  /* DMA address decode register          */
+
+/******************************************************************************
+ * Universal interrupt controller
+ ******************************************************************************/
+#define UIC_DCR_BASE 0xc0
+#define uicsr        (UIC_DCR_BASE+0x0)  /* UIC status                       */
+#define uicsrs       (UIC_DCR_BASE+0x1)  /* UIC status set                   */
+#define uicer        (UIC_DCR_BASE+0x2)  /* UIC enable                       */
+#define uiccr        (UIC_DCR_BASE+0x3)  /* UIC critical                     */
+#define uicpr        (UIC_DCR_BASE+0x4)  /* UIC polarity                     */
+#define uictr        (UIC_DCR_BASE+0x5)  /* UIC triggering                   */
+#define uicmsr       (UIC_DCR_BASE+0x6)  /* UIC masked status                */
+#define uicvr        (UIC_DCR_BASE+0x7)  /* UIC vector                       */
+#define uicvcr       (UIC_DCR_BASE+0x8)  /* UIC vector configuration         */
+
+/*-----------------------------------------------------------------------------+
+|  Universal interrupt controller interrupts
++-----------------------------------------------------------------------------*/
+#define UIC_UART0     0x80000000      /* UART 0                             */
+#define UIC_UART1     0x40000000      /* UART 1                             */
+#define UIC_IIC       0x20000000      /* IIC                                */
+#define UIC_EXT_MAST  0x10000000      /* External Master                    */
+#define UIC_PCI       0x08000000      /* PCI write to command reg           */
+#define UIC_DMA0      0x04000000      /* DMA chan. 0                        */
+#define UIC_DMA1      0x02000000      /* DMA chan. 1                        */
+#define UIC_DMA2      0x01000000      /* DMA chan. 2                        */
+#define UIC_DMA3      0x00800000      /* DMA chan. 3                        */
+#define UIC_EMAC_WAKE 0x00400000      /* EMAC wake up                       */
+#define UIC_MAL_SERR  0x00200000      /* MAL SERR                           */
+#define UIC_MAL_TXEOB 0x00100000      /* MAL TXEOB                          */
+#define UIC_MAL_RXEOB 0x00080000      /* MAL RXEOB                          */
+#define UIC_MAL_TXDE  0x00040000      /* MAL TXDE                           */
+#define UIC_MAL_RXDE  0x00020000      /* MAL RXDE                           */
+#define UIC_ENET      0x00010000      /* Ethernet                           */
+#define UIC_EXT_PCI_SERR 0x00008000   /* External PCI SERR#                 */
+#define UIC_ECC_CE    0x00004000      /* ECC Correctable Error              */
+#define UIC_PCI_PM    0x00002000      /* PCI Power Management               */
+#define UIC_EXT0      0x00000040      /* External  interrupt 0              */
+#define UIC_EXT1      0x00000020      /* External  interrupt 1              */
+#define UIC_EXT2      0x00000010      /* External  interrupt 2              */
+#define UIC_EXT3      0x00000008      /* External  interrupt 3              */
+#define UIC_EXT4      0x00000004      /* External  interrupt 4              */
+#define UIC_EXT5      0x00000002      /* External  interrupt 5              */
+#define UIC_EXT6      0x00000001      /* External  interrupt 6              */
+
+/******************************************************************************
+ * SDRAM Controller
+ ******************************************************************************/
+#define SDRAM_DCR_BASE 0x10
+#define memcfga  (SDRAM_DCR_BASE+0x0)   /* Memory configuration address reg  */
+#define memcfgd  (SDRAM_DCR_BASE+0x1)   /* Memory configuration data    reg  */
+  /* values for memcfga register - indirect addressing of these regs */
+  #define mem_besra   0x00    /* bus error syndrome reg a           */
+  #define mem_besrsa  0x04    /* bus error syndrome reg set a       */
+  #define mem_besrb   0x08    /* bus error syndrome reg b           */
+  #define mem_besrsb  0x0c    /* bus error syndrome reg set b       */
+  #define mem_bear    0x10    /* bus error address reg              */
+  #define mem_mcopt1  0x20    /* memory controller options 1        */
+  #define mem_rtr     0x30    /* refresh timer reg                  */
+  #define mem_pmit    0x34    /* power management idle timer        */
+  #define mem_mb0cf   0x40    /* memory bank 0 configuration        */
+  #define mem_mb1cf   0x44    /* memory bank 1 configuration        */
+  #define mem_mb2cf   0x48    /* memory bank 2 configuration        */
+  #define mem_mb3cf   0x4c    /* memory bank 3 configuration        */
+  #define mem_sdtr1   0x80    /* timing reg 1                       */
+  #define mem_ecccf   0x94    /* ECC configuration                  */
+  #define mem_eccerr  0x98    /* ECC error status                   */
+
+/******************************************************************************
+ * Decompression Controller
+ ******************************************************************************/
+#define DECOMP_DCR_BASE 0x14
+#define kiar  (DECOMP_DCR_BASE+0x0)  /* Decompression controller addr reg    */
+#define kidr  (DECOMP_DCR_BASE+0x1)  /* Decompression controller data reg    */
+  /* values for kiar register - indirect addressing of these regs */
+  #define kitor0      0x00    /* index table origin register 0       */
+  #define kitor1      0x01    /* index table origin register 1       */
+  #define kitor2      0x02    /* index table origin register 2       */
+  #define kitor3      0x03    /* index table origin register 3       */
+  #define kaddr0      0x04    /* address decode definition regsiter 0 */
+  #define kaddr1      0x05    /* address decode definition regsiter 1 */
+  #define kconf       0x40    /* decompression core config register   */
+  #define kid         0x41    /* decompression core ID     register   */
+  #define kver        0x42    /* decompression core version # reg     */
+  #define kpear       0x50    /* bus error addr reg (PLB addr)        */
+  #define kbear       0x51    /* bus error addr reg (DCP to EBIU addr)*/
+  #define kesr0       0x52    /* bus error status reg 0  (R/clear)    */
+  #define kesr0s      0x53    /* bus error status reg 0  (set)        */
+  /* There are 0x400 of the following registers, from krom0 to krom3ff*/
+  /* Only the first one is given here.                                */
+  #define krom0      0x400    /* SRAM/ROM read/write                  */
+
+/******************************************************************************
+ * Power Management
+ ******************************************************************************/
+#define POWERMAN_DCR_BASE 0xb8
+#define cpmsr (POWERMAN_DCR_BASE+0x0) /* Power management status             */
+#define cpmer (POWERMAN_DCR_BASE+0x1) /* Power management enable             */
+#define cpmfr (POWERMAN_DCR_BASE+0x2) /* Power management force              */
+
+/******************************************************************************
+ * Extrnal Bus Controller
+ ******************************************************************************/
+#define EBC_DCR_BASE 0x12
+#define ebccfga (EBC_DCR_BASE+0x0)   /* External bus controller addr reg     */
+#define ebccfgd (EBC_DCR_BASE+0x1)   /* External bus controller data reg     */
+  /* values for ebccfga register - indirect addressing of these regs */
+  #define pb0cr       0x00    /* periph bank 0 config reg            */
+  #define pb1cr       0x01    /* periph bank 1 config reg            */
+  #define pb2cr       0x02    /* periph bank 2 config reg            */
+  #define pb3cr       0x03    /* periph bank 3 config reg            */
+  #define pb4cr       0x04    /* periph bank 4 config reg            */
+  #define pb5cr       0x05    /* periph bank 5 config reg            */
+  #define pb6cr       0x06    /* periph bank 6 config reg            */
+  #define pb7cr       0x07    /* periph bank 7 config reg            */
+  #define pb0ap       0x10    /* periph bank 0 access parameters     */
+  #define pb1ap       0x11    /* periph bank 1 access parameters     */
+  #define pb2ap       0x12    /* periph bank 2 access parameters     */
+  #define pb3ap       0x13    /* periph bank 3 access parameters     */
+  #define pb4ap       0x14    /* periph bank 4 access parameters     */
+  #define pb5ap       0x15    /* periph bank 5 access parameters     */
+  #define pb6ap       0x16    /* periph bank 6 access parameters     */
+  #define pb7ap       0x17    /* periph bank 7 access parameters     */
+  #define pbear       0x20    /* periph bus error addr reg           */
+  #define pbesr0      0x21    /* periph bus error status reg 0       */
+  #define pbesr1      0x22    /* periph bus error status reg 1       */
+  #define epcr        0x23    /* external periph control reg         */
+
+/******************************************************************************
+ * Control
+ ******************************************************************************/
+#define CNTRL_DCR_BASE 0x0b0
+#define pllmd   (CNTRL_DCR_BASE+0x0)  /* PLL mode  register                  */
+#define cntrl0  (CNTRL_DCR_BASE+0x1)  /* Control 0 register                  */
+#define cntrl1  (CNTRL_DCR_BASE+0x2)  /* Control 1 register                 */
+#define reset   (CNTRL_DCR_BASE+0x3)  /* reset register                             */
+#define strap   (CNTRL_DCR_BASE+0x4)  /* strap register                             */
+
+/* Bit definitions */
+#define PLLMR_FWD_DIV_MASK      0xE0000000     /* Forward Divisor */
+#define PLLMR_FWD_DIV_BYPASS    0xE0000000
+#define PLLMR_FWD_DIV_3         0xA0000000
+#define PLLMR_FWD_DIV_4         0x80000000
+#define PLLMR_FWD_DIV_6         0x40000000
+
+#define PLLMR_FB_DIV_MASK       0x1E000000     /* Feedback Divisor */
+#define PLLMR_FB_DIV_1          0x02000000
+#define PLLMR_FB_DIV_2          0x04000000
+#define PLLMR_FB_DIV_3          0x06000000
+#define PLLMR_FB_DIV_4          0x08000000
+
+#define PLLMR_TUNING_MASK       0x01F80000
+
+#define PLLMR_CPU_TO_PLB_MASK   0x00060000     /* CPU:PLB Frequency Divisor */
+#define PLLMR_CPU_PLB_DIV_1     0x00000000
+#define PLLMR_CPU_PLB_DIV_2     0x00020000
+#define PLLMR_CPU_PLB_DIV_3     0x00040000
+#define PLLMR_CPU_PLB_DIV_4     0x00060000
+
+#define PLLMR_OPB_TO_PLB_MASK   0x00018000     /* OPB:PLB Frequency Divisor */
+#define PLLMR_OPB_PLB_DIV_1     0x00000000
+#define PLLMR_OPB_PLB_DIV_2     0x00008000
+#define PLLMR_OPB_PLB_DIV_3     0x00010000
+#define PLLMR_OPB_PLB_DIV_4     0x00018000
+
+#define PLLMR_PCI_TO_PLB_MASK   0x00006000     /* PCI:PLB Frequency Divisor */
+#define PLLMR_PCI_PLB_DIV_1     0x00000000
+#define PLLMR_PCI_PLB_DIV_2     0x00002000
+#define PLLMR_PCI_PLB_DIV_3     0x00004000
+#define PLLMR_PCI_PLB_DIV_4     0x00006000
+
+#define PLLMR_EXB_TO_PLB_MASK   0x00001800     /* External Bus:PLB Divisor  */
+#define PLLMR_EXB_PLB_DIV_2     0x00000000
+#define PLLMR_EXB_PLB_DIV_3     0x00000800
+#define PLLMR_EXB_PLB_DIV_4     0x00001000
+#define PLLMR_EXB_PLB_DIV_5     0x00001800
+
+/* definitions for PPC405GPr (new mode strapping) */
+#define PLLMR_FWDB_DIV_MASK     0x00000007     /* Forward Divisor B */
+
+#define PSR_PLL_FWD_MASK        0xC0000000
+#define PSR_PLL_FDBACK_MASK     0x30000000
+#define PSR_PLL_TUNING_MASK     0x0E000000
+#define PSR_PLB_CPU_MASK        0x01800000
+#define PSR_OPB_PLB_MASK        0x00600000
+#define PSR_PCI_PLB_MASK        0x00180000
+#define PSR_EB_PLB_MASK         0x00060000
+#define PSR_ROM_WIDTH_MASK      0x00018000
+#define PSR_ROM_LOC             0x00004000
+#define PSR_PCI_ASYNC_EN        0x00001000
+#define PSR_PERCLK_SYNC_MODE_EN 0x00000800     /* PPC405GPr only */
+#define PSR_PCI_ARBIT_EN        0x00000400
+#define PSR_NEW_MODE_EN         0x00000020     /* PPC405GPr only */
+
+/*
+ * PLL Voltage Controlled Oscillator (VCO) definitions
+ * Maximum and minimum values (in MHz) for correct PLL operation.
+ */
+#define VCO_MIN     400
+#define VCO_MAX     800
+
+/******************************************************************************
+ * Memory Access Layer
+ ******************************************************************************/
+#define MAL_DCR_BASE 0x180
+#define malmcr  (MAL_DCR_BASE+0x00)  /* MAL Config reg                       */
+#define malesr  (MAL_DCR_BASE+0x01)  /* Error Status reg (Read/Clear)        */
+#define malier  (MAL_DCR_BASE+0x02)  /* Interrupt enable reg                 */
+#define maldbr  (MAL_DCR_BASE+0x03)  /* Mal Debug reg (Read only)            */
+#define maltxcasr  (MAL_DCR_BASE+0x04)  /* TX Channel active reg (set)       */
+#define maltxcarr  (MAL_DCR_BASE+0x05)  /* TX Channel active reg (Reset)     */
+#define maltxeobisr (MAL_DCR_BASE+0x06) /* TX End of buffer int status reg   */
+#define maltxdeir  (MAL_DCR_BASE+0x07)  /* TX Descr. Error Int reg           */
+#define malrxcasr  (MAL_DCR_BASE+0x10)  /* RX Channel active reg (set)       */
+#define malrxcarr  (MAL_DCR_BASE+0x11)  /* RX Channel active reg (Reset)     */
+#define malrxeobisr (MAL_DCR_BASE+0x12) /* RX End of buffer int status reg   */
+#define malrxdeir  (MAL_DCR_BASE+0x13)  /* RX Descr. Error Int reg           */
+#define maltxctp0r (MAL_DCR_BASE+0x20)  /* TX 0 Channel table pointer reg    */
+#define maltxctp1r (MAL_DCR_BASE+0x21)  /* TX 1 Channel table pointer reg    */
+#define malrxctp0r (MAL_DCR_BASE+0x40)  /* RX 0 Channel table pointer reg    */
+#define malrcbs0   (MAL_DCR_BASE+0x60)  /* RX 0 Channel buffer size reg      */
+
+/*-----------------------------------------------------------------------------
+| IIC Register Offsets
+'----------------------------------------------------------------------------*/
+#define    IICMDBUF         0x00
+#define    IICSDBUF         0x02
+#define    IICLMADR         0x04
+#define    IICHMADR         0x05
+#define    IICCNTL          0x06
+#define    IICMDCNTL        0x07
+#define    IICSTS           0x08
+#define    IICEXTSTS        0x09
+#define    IICLSADR         0x0A
+#define    IICHSADR         0x0B
+#define    IICCLKDIV        0x0C
+#define    IICINTRMSK       0x0D
+#define    IICXFRCNT        0x0E
+#define    IICXTCNTLSS      0x0F
+#define    IICDIRECTCNTL    0x10
+
+/*-----------------------------------------------------------------------------
+| UART Register Offsets
+'----------------------------------------------------------------------------*/
+#define                DATA_REG        0x00
+#define                DL_LSB          0x00
+#define                DL_MSB          0x01
+#define                INT_ENABLE      0x01
+#define                FIFO_CONTROL    0x02
+#define                LINE_CONTROL    0x03
+#define                MODEM_CONTROL   0x04
+#define                LINE_STATUS     0x05
+#define                MODEM_STATUS    0x06
+#define                SCRATCH         0x07
+
+/******************************************************************************
+ * On Chip Memory
+ ******************************************************************************/
+#define OCM_DCR_BASE 0x018
+#define ocmisarc   (OCM_DCR_BASE+0x00)  /* OCM I-side address compare reg    */
+#define ocmiscntl  (OCM_DCR_BASE+0x01)  /* OCM I-side control reg            */
+#define ocmdsarc   (OCM_DCR_BASE+0x02)  /* OCM D-side address compare reg    */
+#define ocmdscntl  (OCM_DCR_BASE+0x03)  /* OCM D-side control reg            */
+
+
+/*
+ * Macro for accessing the indirect EBC register
+ */
+#define mtebc(reg, data)  mtdcr(ebccfga,reg);mtdcr(ebccfgd,data)
+#define mfebc(reg, data)  mtdcr(ebccfga,reg);data = mfdcr(ebccfgd)
+
+
+#ifndef __ASSEMBLY__
+
+typedef struct
+{
+  unsigned long pllFwdDiv;
+  unsigned long pllFwdDivB;
+  unsigned long pllFbkDiv;
+  unsigned long pllPlbDiv;
+  unsigned long pllPciDiv;
+  unsigned long pllExtBusDiv;
+  unsigned long pllOpbDiv;
+  unsigned long freqVCOMhz;             /* in MHz                          */
+  unsigned long freqProcessor;
+  unsigned long freqPLB;
+  unsigned long freqPCI;
+  unsigned long pciIntArbEn;            /* Internal PCI arbiter is enabled */
+  unsigned long pciClkSync;             /* PCI clock is synchronous        */
+} PPC405_SYS_INFO;
+
+#endif  /* _ASMLANGUAGE */
+
+#define RESET_VECTOR   0xfffffffc
+#define CACHELINE_MASK (CFG_CACHELINE_SIZE - 1) /* Address mask for cache
+                                                    line aligned data. */
+
+#endif /* __PPC405_H__ */
+