[U-Boot] [PATCH 1/2] LPC2468 support

Remco Poelstra
2009-03-19T15:06:29Z

Wolfgang Denk schreef:
>> +/* Vectored Interrupt Controller (VIC) */
>> +#define VIC_BASE_ADDR 0xFFFFF000
>> +#define VICIRQStatus (*(volatile unsigned long *)(VIC_BASE_ADDR + 0x000))
>> +#define VICFIQStatus (*(volatile unsigned long *)(VIC_BASE_ADDR + 0x004))
>> +#define VICRawIntr (*(volatile unsigned long *)(VIC_BASE_ADDR + 0x008))
>> +#define VICIntSelect (*(volatile unsigned long *)(VIC_BASE_ADDR + 0x00C))
>> +#define VICIntEnable (*(volatile unsigned long *)(VIC_BASE_ADDR + 0x010))
>> +#define VICIntEnClr (*(volatile unsigned long *)(VIC_BASE_ADDR + 0x014))
>> +#define VICSoftInt (*(volatile unsigned long *)(VIC_BASE_ADDR + 0x018))
>> +#define VICSoftIntClr (*(volatile unsigned long *)(VIC_BASE_ADDR + 0x01C))
>> +#define VICProtection (*(volatile unsigned long *)(VIC_BASE_ADDR + 0x020))
>> +#define VICSWPrioMask (*(volatile unsigned long *)(VIC_BASE_ADDR + 0x024))
>
> Please do not use offset lists, but define a proper C data structure
> instead. And never ever access device regiters through simple
> volatile pointers. Use proper accessor functions. Here and elsewhere.

Hi,

All examples I checked use the same syntax for defining registers, so I left it
in the code. If that is a problem, can you indicate an example which does The Right Thing (tm)?

>
>
> The whole code needs a *major* cleanup before resubmitting.

I think the patch now matches the other criteria. The patch is a bit bigger, since
other code did not follow the Coding Styles either. I used indent to fix my code and it fixed the other code as well.

The second patch will follow when this patch is OK.

Regards,

Remco Poelstra

----
--- u-boot-orig/cpu/arm720t/cpu.c 2009-03-18 00:42:12.000000000 +0100
+++ u-boot/cpu/arm720t/cpu.c 2009-03-19 16:00:04.000000000 +0100
@@ -41,7 +41,9 @@ int cpu_init (void)
* setup up stacks if necessary
*/
#ifdef CONFIG_USE_IRQ
- IRQ_STACK_START = _armboot_start - CONFIG_SYS_MALLOC_LEN - CONFIG_SYS_GBL_DATA_SIZE - 4;
+ IRQ_STACK_START =
+ _armboot_start - CONFIG_SYS_MALLOC_LEN - CONFIG_SYS_GBL_DATA_SIZE -
+ 4;
FIQ_STACK_START = IRQ_STACK_START - CONFIG_STACKSIZE_IRQ;
#endif
return 0;
@@ -63,17 +65,17 @@ int cleanup_before_linux (void)
disable_interrupts ();

/* turn off I-cache */
- asm ("mrc p15, 0, %0, c1, c0, 0":"=r" (i));
+ asm ("mrc p15, 0, %0, c1, c0, 0":"=r" (i));
i &= ~0x1000;
- asm ("mcr p15, 0, %0, c1, c0, 0": :"r" (i));
+ asm ("mcr p15, 0, %0, c1, c0, 0": :"r" (i));

/* flush I-cache */
- asm ("mcr p15, 0, %0, c7, c5, 0": :"r" (i));
+ asm ("mcr p15, 0, %0, c7, c5, 0": :"r" (i));
#ifdef CONFIG_ARM7_REVD
/* go to high speed */
IO_SYSCON3 = (IO_SYSCON3 & ~CLKCTL) | CLKCTL_73;
#endif
-#elif defined(CONFIG_NETARM) || defined(CONFIG_S3C4510B) || defined(CONFIG_LPC2292)
+#elif defined(CONFIG_NETARM) || defined(CONFIG_S3C4510B) || defined(CONFIG_LPC2292)|| defined(CONFIG_LPC2468)
disable_interrupts ();
/* Nothing more needed */
#elif defined(CONFIG_INTEGRATOR) && defined(CONFIG_ARCH_INTEGRATOR)
@@ -84,12 +86,11 @@ int cleanup_before_linux (void)
return 0;
}

-int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+int do_reset (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
{
disable_interrupts ();
reset_cpu (0);
- /*NOTREACHED*/
- return (0);
+ /*NOTREACHED*/ return (0);
}

/*
@@ -99,30 +100,26 @@ int do_reset (cmd_tbl_t *cmdtp, int flag

#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312) || defined(CONFIG_NETARM) || defined(CONFIG_ARMADILLO)
/* read co-processor 15, register #1 (control register) */
-static unsigned long read_p15_c1(void)
+static unsigned long read_p15_c1 (void)
{
unsigned long value;

- __asm__ __volatile__(
- "mrc p15, 0, %0, c1, c0, 0 @ read control reg\n"
- : "=r" (value)
- :
- : "memory");
+ __asm__ __volatile__ ("mrc p15, 0, %0, c1, c0, 0 @ read control reg\n":"=r" (value)
+ ::"memory");
/* printf("p15/c1 is = %08lx\n", value); */
return value;
}

/* write to co-processor 15, register #1 (control register) */
-static void write_p15_c1(unsigned long value)
+static void write_p15_c1 (unsigned long value)
{
/* printf("write %08lx to p15/c1\n", value); */
- __asm__ __volatile__(
- "mcr p15, 0, %0, c1, c0, 0 @ write it back\n"
- :
- : "r" (value)
- : "memory");
+ __asm__
+ __volatile__
+ ("mcr p15, 0, %0, c1, c0, 0 @ write it back\n"::"r" (value)
+ : "memory");

- read_p15_c1();
+ read_p15_c1 ();
}

static void cp_delay (void)
@@ -130,7 +127,7 @@ static void cp_delay (void)
volatile int i;

/* copro seems to need some delay between reading and writing */
- for (i = 0; i < 100; i++);
+ for (i = 0; i < 100; i++) ;
}

/* See also ARM Ref. Man. */
@@ -196,63 +193,63 @@ void icache_enable (void)
s32 i;

/* disable all cache bits */
- CLR_REG( REG_SYSCFG, 0x3F);
+ CLR_REG (REG_SYSCFG, 0x3F);

/* 8KB cache, write enable */
- SET_REG( REG_SYSCFG, CACHE_WRITE_BUFF | CACHE_MODE_01);
+ SET_REG (REG_SYSCFG, CACHE_WRITE_BUFF | CACHE_MODE_01);

/* clear TAG RAM bits */
- for ( i = 0; i < 256; i++)
- PUT_REG( CACHE_TAG_RAM + 4*i, 0x00000000);
+ for (i = 0; i < 256; i++)
+ PUT_REG (CACHE_TAG_RAM + 4 * i, 0x00000000);

/* clear SET0 RAM */
- for(i=0; i < 1024; i++)
- PUT_REG( CACHE_SET0_RAM + 4*i, 0x00000000);
+ for (i = 0; i < 1024; i++)
+ PUT_REG (CACHE_SET0_RAM + 4 * i, 0x00000000);

/* clear SET1 RAM */
- for(i=0; i < 1024; i++)
- PUT_REG( CACHE_SET1_RAM + 4*i, 0x00000000);
+ for (i = 0; i < 1024; i++)
+ PUT_REG (CACHE_SET1_RAM + 4 * i, 0x00000000);

/* enable cache */
- SET_REG( REG_SYSCFG, CACHE_ENABLE);
+ SET_REG (REG_SYSCFG, CACHE_ENABLE);

}

void icache_disable (void)
{
/* disable all cache bits */
- CLR_REG( REG_SYSCFG, 0x3F);
+ CLR_REG (REG_SYSCFG, 0x3F);
}

int icache_status (void)
{
- return GET_REG( REG_SYSCFG) & CACHE_ENABLE;
+ return GET_REG (REG_SYSCFG) & CACHE_ENABLE;
}

void dcache_enable (void)
{
/* we don't have seperate instruction/data caches */
- icache_enable();
+ icache_enable ();
}

void dcache_disable (void)
{
/* we don't have seperate instruction/data caches */
- icache_disable();
+ icache_disable ();
}

int dcache_status (void)
{
/* we don't have seperate instruction/data caches */
- return icache_status();
+ return icache_status ();
}

#elif defined(CONFIG_INTEGRATOR) && defined(CONFIG_ARCH_INTEGRATOR)
/* No specific cache setup for IntegratorAP/CM720T as yet */
- void icache_enable (void)
- {
- }
-#elif defined(CONFIG_LPC2292) /* just to satisfy the compiler */
+void icache_enable (void)
+{
+}
+#elif defined(CONFIG_LPC2292) || defined(CONFIG_LPC2468) /* just to satisfy the compiler */
#else
#error No icache/dcache enable/disable functions defined for this CPU type
#endif
diff -upNr u-boot-orig/cpu/arm720t/interrupts.c u-boot/cpu/arm720t/interrupts.c
--- u-boot-orig/cpu/arm720t/interrupts.c 2009-03-18 00:42:12.000000000 +0100
+++ u-boot/cpu/arm720t/interrupts.c 2009-03-19 15:11:29.000000000 +0100
@@ -40,6 +40,11 @@
#ifdef CONFIG_LPC2292
#undef READ_TIMER
#define READ_TIMER (0xFFFFFFFF - GET32(T0TC))
+#elif defined(CONFIG_LPC2468)
+#undef TIMER_LOAD_VAL
+#define TIMER_LOAD_VAL 0
+#undef READ_TIMER
+#define READ_TIMER (0xFFFFFFFF - T0TC)
#endif

#else
@@ -57,7 +62,7 @@
# else
static struct _irq_handler IRQ_HANDLER[N_IRQS];
# endif
-#endif /* CONFIG_S3C4510B */
+#endif /* CONFIG_S3C4510B */

#ifdef CONFIG_USE_IRQ
void do_irq (struct pt_regs *pt_regs)
@@ -65,21 +70,22 @@ void do_irq (struct pt_regs *pt_regs)
#if defined(CONFIG_S3C4510B)
unsigned int pending;

- while ( (pending = GET_REG( REG_INTOFFSET)) != 0x54) { /* sentinal value for no pending interrutps */
- IRQ_HANDLER[pending>>2].m_func( IRQ_HANDLER[pending>>2].m_data);
+ while ((pending = GET_REG (REG_INTOFFSET)) != 0x54) { /* sentinal value for no pending interrutps */
+ IRQ_HANDLER[pending >> 2].m_func (IRQ_HANDLER[pending >> 2].
+ m_data);

/* clear pending interrupt */
- PUT_REG( REG_INTPEND, (1<<(pending>>2)));
+ PUT_REG (REG_INTPEND, (1 << (pending >> 2)));
}
#elif defined(CONFIG_INTEGRATOR) && defined(CONFIG_ARCH_INTEGRATOR)
/* No do_irq() for IntegratorAP/CM720T as yet */
-#elif defined(CONFIG_LPC2292)
+#elif defined(CONFIG_LPC2292) || defined(CONFIG_LPC2468)

- void (*pfnct)(void);
+ void (*pfnct) (void);

- pfnct = (void (*)(void))VICVectAddr;
+ pfnct = (void (*)(void))VICVectAddr;

- (*pfnct)();
+ (*pfnct) ();
#else
#error do_irq() not defined for this CPU type
#endif
@@ -87,17 +93,19 @@ void do_irq (struct pt_regs *pt_regs)
#endif

#ifdef CONFIG_S3C4510B
-static void default_isr( void *data) {
+static void default_isr (void *data)
+{
printf ("default_isr(): called for IRQ %d\n", (int)data);
}

-static void timer_isr( void *data) {
+static void timer_isr (void *data)
+{
unsigned int *pTime = (unsigned int *)data;

(*pTime)++;
- if ( !(*pTime % (CONFIG_SYS_HZ/4))) {
+ if (!(*pTime % (CONFIG_SYS_HZ / 4))) {
/* toggle LED 0 */
- PUT_REG( REG_IOPDATA, GET_REG(REG_IOPDATA) ^ 0x1);
+ PUT_REG (REG_IOPDATA, GET_REG (REG_IOPDATA) ^ 0x1);
}

}
@@ -118,9 +126,9 @@ int interrupt_init (void)
IRQEN = 0;

/* operate timer 2 in non-prescale mode */
- TM2CTRL = ( NETARM_GEN_TIMER_SET_HZ(CONFIG_SYS_HZ) |
- NETARM_GEN_TCTL_ENABLE |
- NETARM_GEN_TCTL_INIT_COUNT(TIMER_LOAD_VAL));
+ TM2CTRL = (NETARM_GEN_TIMER_SET_HZ (CONFIG_SYS_HZ) |
+ NETARM_GEN_TCTL_ENABLE |
+ NETARM_GEN_TCTL_INIT_COUNT (TIMER_LOAD_VAL));

/* set timer 2 counter */
lastdec = TIMER_LOAD_VAL;
@@ -140,15 +148,15 @@ int interrupt_init (void)
int i;

/* install default interrupt handlers */
- for ( i = 0; i < N_IRQS; i++) {
+ for (i = 0; i < N_IRQS; i++) {
IRQ_HANDLER[i].m_data = (void *)i;
IRQ_HANDLER[i].m_func = default_isr;
}

/* configure interrupts for IRQ mode */
- PUT_REG( REG_INTMODE, 0x0);
+ PUT_REG (REG_INTMODE, 0x0);
/* clear any pending interrupts */
- PUT_REG( REG_INTPEND, 0x1FFFFF);
+ PUT_REG (REG_INTPEND, 0x1FFFFF);

lastdec = 0;

@@ -157,35 +165,41 @@ int interrupt_init (void)
IRQ_HANDLER[INT_TIMER0].m_func = timer_isr;

/* configure free running timer 0 */
- PUT_REG( REG_TMOD, 0x0);
+ PUT_REG (REG_TMOD, 0x0);
/* Stop timer 0 */
- CLR_REG( REG_TMOD, TM0_RUN);
+ CLR_REG (REG_TMOD, TM0_RUN);

/* Configure for interval mode */
- CLR_REG( REG_TMOD, TM1_TOGGLE);
+ CLR_REG (REG_TMOD, TM1_TOGGLE);

/*
* Load Timer data register with count down value.
* count_down_val = CONFIG_SYS_SYS_CLK_FREQ/CONFIG_SYS_HZ
*/
- PUT_REG( REG_TDATA0, (CONFIG_SYS_SYS_CLK_FREQ / CONFIG_SYS_HZ));
+ PUT_REG (REG_TDATA0, (CONFIG_SYS_SYS_CLK_FREQ / CONFIG_SYS_HZ));

/*
* Enable global interrupt
* Enable timer0 interrupt
*/
- CLR_REG( REG_INTMASK, ((1<<INT_GLOBAL) | (1<<INT_TIMER0)));
+ CLR_REG (REG_INTMASK, ((1 << INT_GLOBAL) | (1 << INT_TIMER0)));

/* Start timer */
- SET_REG( REG_TMOD, TM0_RUN);
+ SET_REG (REG_TMOD, TM0_RUN);
#elif defined(CONFIG_LPC2292)
- PUT32(T0IR, 0); /* disable all timer0 interrupts */
- PUT32(T0TCR, 0); /* disable timer0 */
- PUT32(T0PR, CONFIG_SYS_SYS_CLK_FREQ / CONFIG_SYS_HZ);
- PUT32(T0MCR, 0);
- PUT32(T0TC, 0);
- PUT32(T0TCR, 1); /* enable timer0 */
-
+ PUT32 (T0IR, 0); /* disable all timer0 interrupts */
+ PUT32 (T0TCR, 0); /* disable timer0 */
+ PUT32 (T0PR, CONFIG_SYS_SYS_CLK_FREQ / CONFIG_SYS_HZ);
+ PUT32 (T0MCR, 0);
+ PUT32 (T0TC, 0);
+ PUT32 (T0TCR, 1); /* enable timer0 */
+#elif defined(CONFIG_LPC2468)
+ PUT32 (T0IR, 0); /*disable all timer0 interupts */
+ PUT32 (T0TCR, 0); /*disable timer0 */
+ PUT32 (T0PR, CFG_SYS_CLK_FREQ / CONFIG_SYS_HZ - 1);
+ PUT32 (T0MCR, 0);
+ PUT32 (T0TC, 0);
+ PUT32 (T0TCR, 1);
#else
#error No interrupt_init() defined for this CPU type
#endif
@@ -200,8 +214,7 @@ int interrupt_init (void)
* timer without interrupts
*/

-
-#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312) || defined(CONFIG_NETARM) || defined(CONFIG_ARMADILLO) || defined(CONFIG_LPC2292)
+#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312) || defined(CONFIG_NETARM) || defined(CONFIG_ARMADILLO) || defined(CONFIG_LPC2292) || defined(CONFIG_LPC2468)

void reset_timer (void)
{
@@ -229,11 +242,11 @@ void udelay (unsigned long usec)
tmo += get_timer (0);

while (get_timer_masked () < tmo)
-#ifdef CONFIG_LPC2292
+#if defined(CONFIG_LPC2292) || defined(CONFIG_LPC2468)
/* GJ - not sure whether this is really needed or a misunderstanding */
- __asm__ __volatile__(" nop");
+ __asm__ __volatile__ (" nop");
#else
- /*NOP*/;
+ /*NOP*/;
#endif
}

@@ -272,7 +285,7 @@ void udelay_masked (unsigned long usec)
tmo /= 1000;
} else {
tmo = usec * CONFIG_SYS_HZ;
- tmo /= (1000*1000);
+ tmo /= (1000 * 1000);
}

endtime = get_timer_masked () + tmo;
diff -upNr u-boot-orig/cpu/arm720t/lpc24xx/flash.c u-boot/cpu/arm720t/lpc24xx/flash.c
--- u-boot-orig/cpu/arm720t/lpc24xx/flash.c 1970-01-01 01:00:00.000000000 +0100
+++ u-boot/cpu/arm720t/lpc24xx/flash.c 2009-03-19 15:16:57.000000000 +0100
@@ -0,0 +1,232 @@
+/*
+ * (C) Copyright 2006 Embedded Artists AB <www.embeddedartists.com>
+ *
+ * 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 <common.h>
+#include <asm/arch/hardware.h>
+
+/* IAP commands use 32 bytes at the top of CPU internal sram, we
+ use 512 bytes below that */
+#define COPY_BUFFER_LOCATION 0x4000fde0
+
+#define IAP_LOCATION 0x7ffffff1
+#define IAP_CMD_PREPARE 50
+#define IAP_CMD_COPY 51
+#define IAP_CMD_ERASE 52
+#define IAP_CMD_CHECK 53
+#define IAP_CMD_ID 54
+#define IAP_CMD_VERSION 55
+#define IAP_CMD_COMPARE 56
+
+#define IAP_RET_CMD_SUCCESS 0
+
+static unsigned long command[5];
+static unsigned long result[2];
+
+extern void iap_entry (unsigned long *command, unsigned long *result);
+
+/*-----------------------------------------------------------------------
+ *
+ */
+int get_flash_sector (flash_info_t * info, ulong flash_addr)
+{
+ int i;
+
+ for (i = 1; i < (info->sector_count); i++) {
+ if (flash_addr < (info->start[i]))
+ break;
+ }
+
+ return (i - 1);
+}
+
+/*-----------------------------------------------------------------------
+ * This function assumes that flash_addr is aligned on 512 bytes boundary
+ * in flash. This function also assumes that prepare have been called
+ * for the sector in question.
+ */
+int lpc24xx_copy_buffer_to_flash (flash_info_t * info, ulong flash_addr)
+{
+ int first_sector;
+ int last_sector;
+
+ first_sector = get_flash_sector (info, flash_addr);
+ last_sector = get_flash_sector (info, flash_addr + 512 - 1);
+
+ /* prepare sectors for write */
+ command[0] = IAP_CMD_PREPARE;
+ command[1] = first_sector;
+ command[2] = last_sector;
+ iap_entry (command, result);
+ if (result[0] != IAP_RET_CMD_SUCCESS) {
+ printf ("IAP prepare failed\n");
+ return ERR_PROG_ERROR;
+ }
+
+ command[0] = IAP_CMD_COPY;
+ command[1] = flash_addr;
+ command[2] = COPY_BUFFER_LOCATION;
+ command[3] = 512;
+ command[4] = CFG_SYS_CLK_FREQ >> 10;
+ iap_entry (command, result);
+ if (result[0] != IAP_RET_CMD_SUCCESS) {
+ printf ("IAP copy failed\n");
+ return 1;
+ }
+
+ return 0;
+}
+
+int lpc24xx_flash_erase (flash_info_t * info, int s_first, int s_last)
+{
+ int flag;
+ int prot;
+ int sect;
+
+ prot = 0;
+ for (sect = s_first; sect <= s_last; ++sect) {
+ if (info->protect[sect]) {
+ prot++;
+ }
+ }
+ if (prot)
+ return ERR_PROTECTED;
+
+ flag = disable_interrupts ();
+
+ printf ("Erasing %d sectors starting at sector %2d.\n"
+ "This make take some time ... ", s_last - s_first + 1, s_first);
+
+ command[0] = IAP_CMD_PREPARE;
+ command[1] = s_first;
+ command[2] = s_last;
+ iap_entry (command, result);
+ if (result[0] != IAP_RET_CMD_SUCCESS) {
+ printf ("IAP prepare failed\n");
+ return ERR_PROTECTED;
+ }
+
+ command[0] = IAP_CMD_ERASE;
+ command[1] = s_first;
+ command[2] = s_last;
+ command[3] = CFG_SYS_CLK_FREQ >> 10;
+ iap_entry (command, result);
+ if (result[0] != IAP_RET_CMD_SUCCESS) {
+ printf ("IAP erase failed\n");
+ return ERR_PROTECTED;
+ }
+
+ if (flag)
+ enable_interrupts ();
+
+ return ERR_OK;
+}
+
+int lpc24xx_write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
+{
+ int first_copy_size;
+ int last_copy_size;
+ int first_block;
+ int last_block;
+ int nbr_mid_blocks;
+ uchar memmap_value;
+ ulong i;
+ uchar *src_org;
+ uchar *dst_org;
+ int ret = ERR_OK;
+
+ src_org = src;
+ dst_org = (uchar *) addr;
+
+ first_block = addr / 512;
+ last_block = (addr + cnt) / 512;
+ nbr_mid_blocks = last_block - first_block - 1;
+
+ first_copy_size = 512 - (addr % 512);
+ last_copy_size = (addr + cnt) % 512;
+
+ debug ("\ncopy first block: (1) %lX -> %lX 0x200 bytes, "
+ "(2) %lX -> %lX 0x%X bytes, (3) %lX -> %lX 0x200 bytes\n",
+ (ulong) (first_block * 512),
+ (ulong) COPY_BUFFER_LOCATION,
+ (ulong) src,
+ (ulong) (COPY_BUFFER_LOCATION + 512 - first_copy_size),
+ first_copy_size,
+ (ulong) COPY_BUFFER_LOCATION, (ulong) (first_block * 512));
+
+ /* copy first block */
+ memcpy ((void *)COPY_BUFFER_LOCATION, (void *)(first_block * 512), 512);
+ memcpy ((void *)(COPY_BUFFER_LOCATION + 512 - first_copy_size),
+ src, first_copy_size);
+ lpc24xx_copy_buffer_to_flash (info, first_block * 512);
+ src += first_copy_size;
+ addr += first_copy_size;
+
+ /* copy middle blocks */
+ for (i = 0; i < nbr_mid_blocks; i++) {
+ debug ("copy middle block: %lX -> %lX 512 bytes, "
+ "%lX -> %lX 512 bytes\n",
+ (ulong) src,
+ (ulong) COPY_BUFFER_LOCATION,
+ (ulong) COPY_BUFFER_LOCATION, (ulong) addr);
+ memcpy ((void *)COPY_BUFFER_LOCATION, src, 512);
+ lpc24xx_copy_buffer_to_flash (info, addr);
+ src += 512;
+ addr += 512;
+ }
+
+ if (last_copy_size > 0) {
+ debug ("copy last block: (1) %lX -> %lX 0x200 bytes, "
+ "(2) %lX -> %lX 0x%X bytes, (3) %lX -> %lX x200 bytes\n",
+ (ulong) (last_block * 512),
+ (ulong) COPY_BUFFER_LOCATION,
+ (ulong) src,
+ (ulong) (COPY_BUFFER_LOCATION),
+ last_copy_size,
+ (ulong) COPY_BUFFER_LOCATION, (ulong) addr);
+ /* copy last block */
+ memcpy ((void *)COPY_BUFFER_LOCATION,
+ (void *)(last_block * 512), 512);
+ memcpy ((void *)COPY_BUFFER_LOCATION, src, last_copy_size);
+ lpc24xx_copy_buffer_to_flash (info, addr);
+ }
+
+ /* verify write */
+ memmap_value = GET32(MEMMAP);
+
+ disable_interrupts ();
+
+ PUT32(MEMMAP, 01); /* we must make sure that initial 64
+ bytes are taken from flash when we
+ do the compare */
+
+ for (i = 0; i < cnt; i++) {
+ if (*dst_org != *src_org) {
+ printf ("Write failed. Byte %lX differs\n", i);
+ ret = ERR_PROG_ERROR;
+ break;
+ }
+ dst_org++;
+ src_org++;
+ }
+
+ PUT32(MEMMAP, memmap_value);
+ enable_interrupts ();
+
+ return ret;
+}
diff -upNr u-boot-orig/cpu/arm720t/lpc24xx/iap_entry.S u-boot/cpu/arm720t/lpc24xx/iap_entry.S
--- u-boot-orig/cpu/arm720t/lpc24xx/iap_entry.S 1970-01-01 01:00:00.000000000 +0100
+++ u-boot/cpu/arm720t/lpc24xx/iap_entry.S 2009-03-19 10:56:19.000000000 +0100
@@ -0,0 +1,7 @@
+IAP_ADDRESS: .word 0x7FFFFFF1
+
+.globl iap_entry
+iap_entry:
+ ldr r2, IAP_ADDRESS
+ bx r2
+ mov pc, lr
diff -upNr u-boot-orig/cpu/arm720t/lpc24xx/Makefile u-boot/cpu/arm720t/lpc24xx/Makefile
--- u-boot-orig/cpu/arm720t/lpc24xx/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ u-boot/cpu/arm720t/lpc24xx/Makefile 2009-03-19 10:56:53.000000000 +0100
@@ -0,0 +1,50 @@
+#
+# (C) Copyright 2000-2007
+# Wolfgang Denk, DENX Software Engineering, 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
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(SOC).a
+
+COBJS = flash.o
+SOBJS = $(obj)iap_entry.o
+
+SRCS := $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+
+all: $(obj).depend $(LIB)
+
+$(LIB): $(OBJS) $(SOBJS)
+ $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
+
+# this MUST be compiled as thumb code!
+$(SOBJS):
+ $(CC) $(AFLAGS) -march=armv4t -c -o $(SOBJS) iap_entry.S
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff -upNr u-boot-orig/cpu/arm720t/serial.c u-boot/cpu/arm720t/serial.c
--- u-boot-orig/cpu/arm720t/serial.c 2009-03-18 00:42:12.000000000 +0100
+++ u-boot/cpu/arm720t/serial.c 2009-03-19 15:10:03.000000000 +0100
@@ -41,13 +41,27 @@ void serial_setbrg (void)
unsigned int reg = 0;

switch (gd->baudrate) {
- case 1200: reg = 191; break;
- case 9600: reg = 23; break;
- case 19200: reg = 11; break;
- case 38400: reg = 5; break;
- case 57600: reg = 3; break;
- case 115200: reg = 1; break;
- default: hang (); break;
+ case 1200:
+ reg = 191;
+ break;
+ case 9600:
+ reg = 23;
+ break;
+ case 19200:
+ reg = 11;
+ break;
+ case 38400:
+ reg = 5;
+ break;
+ case 57600:
+ reg = 3;
+ break;
+ case 115200:
+ reg = 1;
+ break;
+ default:
+ hang ();
+ break;
}

/* init serial serial 1,2 */
@@ -60,7 +74,6 @@ void serial_setbrg (void)
IO_UBRLCR2 = reg;
}

-
/*
* Initialise the serial port with the given baudrate. The settings
* are always 8 data bits, no parity, 1 stop bit, no start bits.
@@ -73,7 +86,6 @@ int serial_init (void)
return (0);
}

-
/*
* Output a single byte to the serial port.
*/
@@ -110,47 +122,92 @@ int serial_tstc (void)
*/
int serial_getc (void)
{
- while (IO_SYSFLG1 & SYSFLG1_URXFE);
+ while (IO_SYSFLG1 & SYSFLG1_URXFE) ;

return IO_UARTDR1 & 0xff;
}

-void
-serial_puts (const char *s)
+void serial_puts (const char *s)
{
while (*s) {
serial_putc (*s++);
}
}

-#elif defined(CONFIG_LPC2292)
+#elif defined(CONFIG_LPC2292) || defined(CONFIG_LPC2468)

DECLARE_GLOBAL_DATA_PTR;

#include <asm/arch/hardware.h>

+void serial_putc (const char c)
+{
+ if (c == '\n') {
+ while ((GET8 (U0LSR) & (1 << 5)) == 0) ; /* Wait for empty U0THR */
+ PUT8 (U0THR, '\r');
+ }
+
+ while ((GET8 (U0LSR) & (1 << 5)) == 0) ; /* Wait for empty U0THR */
+ PUT8 (U0THR, c);
+}
+
+int serial_getc (void)
+{
+ while ((GET8 (U0LSR) & 1) == 0) ;
+ return GET8 (U0RBR);
+}
+
+void serial_puts (const char *s)
+{
+ while (*s) {
+ serial_putc (*s++);
+ }
+}
+
+/* Test if there is a byte to read */
+int serial_tstc (void)
+{
+ return (GET8 (U0LSR) & 1);
+}
+
+#if defined(CONFIG_LPC2292)
+
void serial_setbrg (void)
{
unsigned short divisor = 0;

switch (gd->baudrate) {
- case 1200: divisor = 3072; break;
- case 9600: divisor = 384; break;
- case 19200: divisor = 192; break;
- case 38400: divisor = 96; break;
- case 57600: divisor = 64; break;
- case 115200: divisor = 32; break;
- default: hang (); break;
+ case 1200:
+ divisor = 3072;
+ break;
+ case 9600:
+ divisor = 384;
+ break;
+ case 19200:
+ divisor = 192;
+ break;
+ case 38400:
+ divisor = 96;
+ break;
+ case 57600:
+ divisor = 64;
+ break;
+ case 115200:
+ divisor = 32;
+ break;
+ default:
+ hang ();
+ break;
}

/* init serial UART0 */
- PUT8(U0LCR, 0);
- PUT8(U0IER, 0);
- PUT8(U0LCR, 0x80); /* DLAB=1 */
- PUT8(U0DLL, (unsigned char)(divisor & 0x00FF));
- PUT8(U0DLM, (unsigned char)(divisor >> 8));
- PUT8(U0LCR, 0x03); /* 8N1, DLAB=0 */
- PUT8(U0FCR, 1); /* Enable RX and TX FIFOs */
+ PUT8 (U0LCR, 0);
+ PUT8 (U0IER, 0);
+ PUT8 (U0LCR, 0x80); /* DLAB=1 */
+ PUT8 (U0DLL, (unsigned char)(divisor & 0x00FF));
+ PUT8 (U0DLM, (unsigned char)(divisor >> 8));
+ PUT8 (U0LCR, 0x03); /* 8N1, DLAB=0 */
+ PUT8 (U0FCR, 1); /* Enable RX and TX FIFOs */
}

int serial_init (void)
@@ -159,44 +216,59 @@ int serial_init (void)

serial_setbrg ();

- pinsel0 = GET32(PINSEL0);
+ pinsel0 = GET32 (PINSEL0);
pinsel0 &= ~(0x00000003);
pinsel0 |= 5;
- PUT32(PINSEL0, pinsel0);
+ PUT32 (PINSEL0, pinsel0);

return (0);
}

-void serial_putc (const char c)
-{
- if (c == '\n')
- {
- while((GET8(U0LSR) & (1<<5)) == 0); /* Wait for empty U0THR */
- PUT8(U0THR, '\r');
- }
-
- while((GET8(U0LSR) & (1<<5)) == 0); /* Wait for empty U0THR */
- PUT8(U0THR, c);
-}
+#else

-int serial_getc (void)
+void serial_setbrg (void)
{
- while((GET8(U0LSR) & 1) == 0);
- return GET8(U0RBR);
-}
+ unsigned short divisor;

-void
-serial_puts (const char *s)
-{
- while (*s) {
- serial_putc (*s++);
+ switch (gd->baudrate) {
+ case 1200:
+ case 9600:
+ case 19200:
+ case 38400:
+ case 57600:
+ case 115200:
+ divisor = CFG_SYS_CLK_FREQ / (gd->baudrate * 16);
+ break;
+ default:
+ hang ();
+ break;
}
+
+ /* init serial UART0 */
+ PUT8 (U0FCR, 0); /* Disable RX and TX FIFOs */
+ PUT8 (U0LCR, 0);
+ PUT8 (U0IER, 0);
+ PUT8 (U0LCR, 0x80); /* DLAB=1 */
+ PUT8 (U0DLL, (unsigned char)(divisor & 0x00FF));
+ PUT8 (U0DLM, (unsigned char)(divisor >> 8));
+ PUT8 (U0LCR, 0x03); /* 8N1, DLAB=0 */
+ PUT8 (U0FCR, 0x7); /* Enable RX and TX FIFOs */
}

-/* Test if there is a byte to read */
-int serial_tstc (void)
+int serial_init (void)
{
- return (GET8(U0LSR) & 1);
+ unsigned long pinsel0;
+
+ /*enable uart #0 pins in GPIO (P0.2 = TxD0, P0.3 = RxD0) */
+ pinsel0 = GET32 (PINSEL0);
+ pinsel0 &= ~(0x000000f0);
+ pinsel0 |= 0x00000050;
+ PUT32 (PINSEL0, pinsel0);
+
+ serial_setbrg ();
+
+ return (0);
}

#endif
+#endif /*defined(CONFIG_LPC2292) || defined(CONFIG_LPC2468) */
diff -upNr u-boot-orig/cpu/arm720t/start.S u-boot/cpu/arm720t/start.S
--- u-boot-orig/cpu/arm720t/start.S 2009-03-18 00:42:12.000000000 +0100
+++ u-boot/cpu/arm720t/start.S 2009-03-19 11:21:20.000000000 +0100
@@ -127,7 +127,7 @@ reset:
bl cpu_init_crit
#endif

-#ifdef CONFIG_LPC2292
+#if defined(CONFIG_LPC2292) || defined(CONFIG_LPC2468)
bl lowlevel_init
#endif

@@ -368,6 +368,10 @@ lock_loop:
ldr r0, VPBDIV_ADR
mov r1, #0x01 /* VPB clock is same as process clock */
str r1, [r0]
+#elif defined(CONFIG_LPC2468)
+ ldr r0, =0x40008000 /*0x40000000 is internal SRAM, 0x4000FFFF is end of SRAM*/
+ mov sp,r0
+ sub sl,sp,#0x2000
#else
#error No cpu_init_crit() defined for current CPU type
#endif
@@ -383,7 +387,7 @@ lock_loop:
str r1, [r0]
#endif

-#ifndef CONFIG_LPC2292
+#if !defined(CONFIG_LPC2292) && !defined(CONFIG_LPC2468)
mov ip, lr
/*
* before relocating, we have to setup RAM timing
@@ -601,7 +605,7 @@ reset_cpu:
* on external peripherals such as watchdog timers, etc. */
#elif defined(CONFIG_INTEGRATOR) && defined(CONFIG_ARCH_INTEGRATOR)
/* No specific reset actions for IntegratorAP/CM720T as yet */
-#elif defined(CONFIG_LPC2292)
+#elif defined(CONFIG_LPC2292) || defined(CONFIG_LPC2468)
.align 5
.globl reset_cpu
reset_cpu:
diff -upNr u-boot-orig/include/asm-arm/arch-lpc24xx/hardware.h u-boot/include/asm-arm/arch-lpc24xx/hardware.h
--- u-boot-orig/include/asm-arm/arch-lpc24xx/hardware.h 1970-01-01 01:00:00.000000000 +0100
+++ u-boot/include/asm-arm/arch-lpc24xx/hardware.h 2009-03-18 09:31:46.000000000 +0100
@@ -0,0 +1,33 @@
+#ifndef __ASM_ARCH_HARDWARE_H
+#define __ASM_ARCH_HARDWARE_H
+
+/*
+ * Copyright (c) 2004 Cucy Systems (http://www.cucy.com)
+ * Curt Brune <curt@cucy.com>
+ *
+ * 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
+ */
+
+#if defined(CONFIG_LPC2468)
+#include <asm-arm/arch-lpc24xx/lpc24xx_registers.h>
+#else
+#error No hardware file defined for this configuration
+#endif
+
+#endif /* __ASM_ARCH_HARDWARE_H */
diff -upNr u-boot-orig/include/asm-arm/arch-lpc24xx/lpc24xx_registers.h u-boot/include/asm-arm/arch-lpc24xx/lpc24xx_registers.h
--- u-boot-orig/include/asm-arm/arch-lpc24xx/lpc24xx_registers.h 1970-01-01 01:00:00.000000000 +0100
+++ u-boot/include/asm-arm/arch-lpc24xx/lpc24xx_registers.h 2009-03-19 14:19:36.000000000 +0100
@@ -0,0 +1,1101 @@
+#ifndef __LPC24XX_REGISTERS_H
+#define __LPC24XX_REGISTERS_H
+
+#include <config.h>
+
+/* Macros for reading/writing registers */
+#define PUT8(reg, value) (*(volatile unsigned char*)(reg) = (value))
+#define PUT16(reg, value) (*(volatile unsigned short*)(reg) = (value))
+#define PUT32(reg, value) (*(volatile unsigned int*)(reg) = (value))
+#define GET8(reg) (*(volatile unsigned char*)(reg))
+#define GET16(reg) (*(volatile unsigned short*)(reg))
+#define GET32(reg) (*(volatile unsigned int*)(reg))
+
+#define BFS32(reg,value) (*(volatile unsigned int*)(reg) |= (value))
+#define BFC32(reg, value) (*(volatile unsigned int*)(reg) &= (~value))
+
+/* Vectored Interrupt Controller (VIC) */
+#define VIC_BASE_ADDR 0xFFFFF000
+#define VICIRQStatus VIC_BASE_ADDR + 0x000
+#define VICFIQStatus VIC_BASE_ADDR + 0x004
+#define VICRawIntr VIC_BASE_ADDR + 0x008
+#define VICIntSelect VIC_BASE_ADDR + 0x00C
+#define VICIntEnable VIC_BASE_ADDR + 0x010
+#define VICIntEnClr VIC_BASE_ADDR + 0x014
+#define VICSoftInt VIC_BASE_ADDR + 0x018
+#define VICSoftIntClr VIC_BASE_ADDR + 0x01C
+#define VICProtection VIC_BASE_ADDR + 0x020
+#define VICSWPrioMask VIC_BASE_ADDR + 0x024
+
+#define VICVectAddr0 VIC_BASE_ADDR + 0x100
+#define VICVectAddr1 VIC_BASE_ADDR + 0x104
+#define VICVectAddr2 VIC_BASE_ADDR + 0x108
+#define VICVectAddr3 VIC_BASE_ADDR + 0x10C
+#define VICVectAddr4 VIC_BASE_ADDR + 0x110
+#define VICVectAddr5 VIC_BASE_ADDR + 0x114
+#define VICVectAddr6 VIC_BASE_ADDR + 0x118
+#define VICVectAddr7 VIC_BASE_ADDR + 0x11C
+#define VICVectAddr8 VIC_BASE_ADDR + 0x120
+#define VICVectAddr9 VIC_BASE_ADDR + 0x124
+#define VICVectAddr10 VIC_BASE_ADDR + 0x128
+#define VICVectAddr11 VIC_BASE_ADDR + 0x12C
+#define VICVectAddr12 VIC_BASE_ADDR + 0x130
+#define VICVectAddr13 VIC_BASE_ADDR + 0x134
+#define VICVectAddr14 VIC_BASE_ADDR + 0x138
+#define VICVectAddr15 VIC_BASE_ADDR + 0x13C
+#define VICVectAddr16 VIC_BASE_ADDR + 0x140
+#define VICVectAddr17 VIC_BASE_ADDR + 0x144
+#define VICVectAddr18 VIC_BASE_ADDR + 0x148
+#define VICVectAddr19 VIC_BASE_ADDR + 0x14C
+#define VICVectAddr20 VIC_BASE_ADDR + 0x150
+#define VICVectAddr21 VIC_BASE_ADDR + 0x154
+#define VICVectAddr22 VIC_BASE_ADDR + 0x158
+#define VICVectAddr23 VIC_BASE_ADDR + 0x15C
+#define VICVectAddr24 VIC_BASE_ADDR + 0x160
+#define VICVectAddr25 VIC_BASE_ADDR + 0x164
+#define VICVectAddr26 VIC_BASE_ADDR + 0x168
+#define VICVectAddr27 VIC_BASE_ADDR + 0x16C
+#define VICVectAddr28 VIC_BASE_ADDR + 0x170
+#define VICVectAddr29 VIC_BASE_ADDR + 0x174
+#define VICVectAddr30 VIC_BASE_ADDR + 0x178
+#define VICVectAddr31 VIC_BASE_ADDR + 0x17C
+
+/* The name convention below is from previous LPC2000 family MCUs, in LPC230x,
+these registers are known as "VICVectPriority(x)". */
+#define VICVectCntl0 VIC_BASE_ADDR + 0x200
+#define VICVectCntl1 VIC_BASE_ADDR + 0x204
+#define VICVectCntl2 VIC_BASE_ADDR + 0x208
+#define VICVectCntl3 VIC_BASE_ADDR + 0x20C
+#define VICVectCntl4 VIC_BASE_ADDR + 0x210
+#define VICVectCntl5 VIC_BASE_ADDR + 0x214
+#define VICVectCntl6 VIC_BASE_ADDR + 0x218
+#define VICVectCntl7 VIC_BASE_ADDR + 0x21C
+#define VICVectCntl8 VIC_BASE_ADDR + 0x220
+#define VICVectCntl9 VIC_BASE_ADDR + 0x224
+#define VICVectCntl10 VIC_BASE_ADDR + 0x228
+#define VICVectCntl11 VIC_BASE_ADDR + 0x22C
+#define VICVectCntl12 VIC_BASE_ADDR + 0x230
+#define VICVectCntl13 VIC_BASE_ADDR + 0x234
+#define VICVectCntl14 VIC_BASE_ADDR + 0x238
+#define VICVectCntl15 VIC_BASE_ADDR + 0x23C
+#define VICVectCntl16 VIC_BASE_ADDR + 0x240
+#define VICVectCntl17 VIC_BASE_ADDR + 0x244
+#define VICVectCntl18 VIC_BASE_ADDR + 0x248
+#define VICVectCntl19 VIC_BASE_ADDR + 0x24C
+#define VICVectCntl20 VIC_BASE_ADDR + 0x250
+#define VICVectCntl21 VIC_BASE_ADDR + 0x254
+#define VICVectCntl22 VIC_BASE_ADDR + 0x258
+#define VICVectCntl23 VIC_BASE_ADDR + 0x25C
+#define VICVectCntl24 VIC_BASE_ADDR + 0x260
+#define VICVectCntl25 VIC_BASE_ADDR + 0x264
+#define VICVectCntl26 VIC_BASE_ADDR + 0x268
+#define VICVectCntl27 VIC_BASE_ADDR + 0x26C
+#define VICVectCntl28 VIC_BASE_ADDR + 0x270
+#define VICVectCntl29 VIC_BASE_ADDR + 0x274
+#define VICVectCntl30 VIC_BASE_ADDR + 0x278
+#define VICVectCntl31 VIC_BASE_ADDR + 0x27C
+
+#define VICVectAddr VIC_BASE_ADDR + 0xF00
+
+/* Pin Connect Block */
+#define PINSEL_BASE_ADDR 0xE002C000
+#define PINSEL0 PINSEL_BASE_ADDR + 0x00
+#define PINSEL1 PINSEL_BASE_ADDR + 0x04
+#define PINSEL2 PINSEL_BASE_ADDR + 0x08
+#define PINSEL3 PINSEL_BASE_ADDR + 0x0C
+#define PINSEL4 PINSEL_BASE_ADDR + 0x10
+#define PINSEL5 PINSEL_BASE_ADDR + 0x14
+#define PINSEL6 PINSEL_BASE_ADDR + 0x18
+#define PINSEL7 PINSEL_BASE_ADDR + 0x1C
+#define PINSEL8 PINSEL_BASE_ADDR + 0x20
+#define PINSEL9 PINSEL_BASE_ADDR + 0x24
+#define PINSEL10 PINSEL_BASE_ADDR + 0x28
+
+#define PINMODE0 PINSEL_BASE_ADDR + 0x40
+#define PINMODE1 PINSEL_BASE_ADDR + 0x44
+#define PINMODE2 PINSEL_BASE_ADDR + 0x48
+#define PINMODE3 PINSEL_BASE_ADDR + 0x4C
+#define PINMODE4 PINSEL_BASE_ADDR + 0x50
+#define PINMODE5 PINSEL_BASE_ADDR + 0x54
+#define PINMODE6 PINSEL_BASE_ADDR + 0x58
+#define PINMODE7 PINSEL_BASE_ADDR + 0x5C
+#define PINMODE8 PINSEL_BASE_ADDR + 0x60
+#define PINMODE9 PINSEL_BASE_ADDR + 0x64
+
+/* General Purpose Input/Output (GPIO) */
+#define GPIO_BASE_ADDR 0xE0028000
+#define IOPIN0 GPIO_BASE_ADDR + 0x00
+#define IOSET0 GPIO_BASE_ADDR + 0x04
+#define IODIR0 GPIO_BASE_ADDR + 0x08
+#define IOCLR0 GPIO_BASE_ADDR + 0x0C
+#define IOPIN1 GPIO_BASE_ADDR + 0x10
+#define IOSET1 GPIO_BASE_ADDR + 0x14
+#define IODIR1 GPIO_BASE_ADDR + 0x18
+#define IOCLR1 GPIO_BASE_ADDR + 0x1C
+
+/* GPIO Interrupt Registers */
+#define IO0_INT_EN_R GPIO_BASE_ADDR + 0x90
+#define IO0_INT_EN_F GPIO_BASE_ADDR + 0x94
+#define IO0_INT_STAT_R GPIO_BASE_ADDR + 0x84
+#define IO0_INT_STAT_F GPIO_BASE_ADDR + 0x88
+#define IO0_INT_CLR GPIO_BASE_ADDR + 0x8C
+
+#define IO2_INT_EN_R GPIO_BASE_ADDR + 0xB0
+#define IO2_INT_EN_F GPIO_BASE_ADDR + 0xB4
+#define IO2_INT_STAT_R GPIO_BASE_ADDR + 0xA4
+#define IO2_INT_STAT_F GPIO_BASE_ADDR + 0xA8
+#define IO2_INT_CLR GPIO_BASE_ADDR + 0xAC
+
+#define IO_INT_STAT GPIO_BASE_ADDR + 0x80
+
+#define PARTCFG_BASE_ADDR 0x3FFF8000
+#define PARTCFG PARTCFG_BASE_ADDR + 0x00
+
+/* Fast I/O setup */
+#define FIO_BASE_ADDR 0x3FFFC000
+#define FIO0DIR FIO_BASE_ADDR + 0x00
+#define FIO0MASK FIO_BASE_ADDR + 0x10
+#define FIO0PIN FIO_BASE_ADDR + 0x14
+#define FIO0SET FIO_BASE_ADDR + 0x18
+#define FIO0CLR FIO_BASE_ADDR + 0x1C
+
+#define FIO1DIR FIO_BASE_ADDR + 0x20
+#define FIO1MASK FIO_BASE_ADDR + 0x30
+#define FIO1PIN FIO_BASE_ADDR + 0x34
+#define FIO1SET FIO_BASE_ADDR + 0x38
+#define FIO1CLR FIO_BASE_ADDR + 0x3C
+
+#define FIO2DIR FIO_BASE_ADDR + 0x40
+#define FIO2MASK FIO_BASE_ADDR + 0x50
+#define FIO2PIN FIO_BASE_ADDR + 0x54
+#define FIO2SET FIO_BASE_ADDR + 0x58
+#define FIO2CLR FIO_BASE_ADDR + 0x5C
+
+#define FIO3DIR FIO_BASE_ADDR + 0x60
+#define FIO3MASK FIO_BASE_ADDR + 0x70
+#define FIO3PIN FIO_BASE_ADDR + 0x74
+#define FIO3SET FIO_BASE_ADDR + 0x78
+#define FIO3CLR FIO_BASE_ADDR + 0x7C
+
+#define FIO4DIR FIO_BASE_ADDR + 0x80
+#define FIO4MASK FIO_BASE_ADDR + 0x90
+#define FIO4PIN FIO_BASE_ADDR + 0x94
+#define FIO4SET FIO_BASE_ADDR + 0x98
+#define FIO4CLR FIO_BASE_ADDR + 0x9C
+
+/* FIOs can be accessed through WORD, HALF-WORD or BYTE. */
+#define FIO0DIR0 FIO_BASE_ADDR + 0x01
+#define FIO1DIR0 FIO_BASE_ADDR + 0x21
+#define FIO2DIR0 FIO_BASE_ADDR + 0x41
+#define FIO3DIR0 FIO_BASE_ADDR + 0x61
+#define FIO4DIR0 FIO_BASE_ADDR + 0x81
+
+#define FIO0DIR1 FIO_BASE_ADDR + 0x02
+#define FIO1DIR1 FIO_BASE_ADDR + 0x22
+#define FIO2DIR1 FIO_BASE_ADDR + 0x42
+#define FIO3DIR1 FIO_BASE_ADDR + 0x62
+#define FIO4DIR1 FIO_BASE_ADDR + 0x82
+
+#define FIO0DIR2 FIO_BASE_ADDR + 0x03
+#define FIO1DIR2 FIO_BASE_ADDR + 0x23
+#define FIO2DIR2 FIO_BASE_ADDR + 0x43
+#define FIO3DIR2 FIO_BASE_ADDR + 0x63
+#define FIO4DIR2 FIO_BASE_ADDR + 0x83
+
+#define FIO0DIR3 FIO_BASE_ADDR + 0x04
+#define FIO1DIR3 FIO_BASE_ADDR + 0x24
+#define FIO2DIR3 FIO_BASE_ADDR + 0x44
+#define FIO3DIR3 FIO_BASE_ADDR + 0x64
+#define FIO4DIR3 FIO_BASE_ADDR + 0x84
+
+#define FIO0DIRL FIO_BASE_ADDR + 0x00
+#define FIO1DIRL FIO_BASE_ADDR + 0x20
+#define FIO2DIRL FIO_BASE_ADDR + 0x40
+#define FIO3DIRL FIO_BASE_ADDR + 0x60
+#define FIO4DIRL FIO_BASE_ADDR + 0x80
+
+#define FIO0DIRU FIO_BASE_ADDR + 0x02
+#define FIO1DIRU FIO_BASE_ADDR + 0x22
+#define FIO2DIRU FIO_BASE_ADDR + 0x42
+#define FIO3DIRU FIO_BASE_ADDR + 0x62
+#define FIO4DIRU FIO_BASE_ADDR + 0x82
+
+#define FIO0MASK0 FIO_BASE_ADDR + 0x10
+#define FIO1MASK0 FIO_BASE_ADDR + 0x30
+#define FIO2MASK0 FIO_BASE_ADDR + 0x50
+#define FIO3MASK0 FIO_BASE_ADDR + 0x70
+#define FIO4MASK0 FIO_BASE_ADDR + 0x90
+
+#define FIO0MASK1 FIO_BASE_ADDR + 0x11
+#define FIO1MASK1 FIO_BASE_ADDR + 0x21
+#define FIO2MASK1 FIO_BASE_ADDR + 0x51
+#define FIO3MASK1 FIO_BASE_ADDR + 0x71
+#define FIO4MASK1 FIO_BASE_ADDR + 0x91
+
+#define FIO0MASK2 FIO_BASE_ADDR + 0x12
+#define FIO1MASK2 FIO_BASE_ADDR + 0x32
+#define FIO2MASK2 FIO_BASE_ADDR + 0x52
+#define FIO3MASK2 FIO_BASE_ADDR + 0x72
+#define FIO4MASK2 FIO_BASE_ADDR + 0x92
+
+#define FIO0MASK3 FIO_BASE_ADDR + 0x13
+#define FIO1MASK3 FIO_BASE_ADDR + 0x33
+#define FIO2MASK3 FIO_BASE_ADDR + 0x53
+#define FIO3MASK3 FIO_BASE_ADDR + 0x73
+#define FIO4MASK3 FIO_BASE_ADDR + 0x93
+
+#define FIO0MASKL FIO_BASE_ADDR + 0x10
+#define FIO1MASKL FIO_BASE_ADDR + 0x30
+#define FIO2MASKL FIO_BASE_ADDR + 0x50
+#define FIO3MASKL FIO_BASE_ADDR + 0x70
+#define FIO4MASKL FIO_BASE_ADDR + 0x90
+
+#define FIO0MASKU FIO_BASE_ADDR + 0x12
+#define FIO1MASKU FIO_BASE_ADDR + 0x32
+#define FIO2MASKU FIO_BASE_ADDR + 0x52
+#define FIO3MASKU FIO_BASE_ADDR + 0x72
+#define FIO4MASKU FIO_BASE_ADDR + 0x92
+
+#define FIO0PIN0 FIO_BASE_ADDR + 0x14
+#define FIO1PIN0 FIO_BASE_ADDR + 0x34
+#define FIO2PIN0 FIO_BASE_ADDR + 0x54
+#define FIO3PIN0 FIO_BASE_ADDR + 0x74
+#define FIO4PIN0 FIO_BASE_ADDR + 0x94
+
+#define FIO0PIN1 FIO_BASE_ADDR + 0x15
+#define FIO1PIN1 FIO_BASE_ADDR + 0x25
+#define FIO2PIN1 FIO_BASE_ADDR + 0x55
+#define FIO3PIN1 FIO_BASE_ADDR + 0x75
+#define FIO4PIN1 FIO_BASE_ADDR + 0x95
+
+#define FIO0PIN2 FIO_BASE_ADDR + 0x16
+#define FIO1PIN2 FIO_BASE_ADDR + 0x36
+#define FIO2PIN2 FIO_BASE_ADDR + 0x56
+#define FIO3PIN2 FIO_BASE_ADDR + 0x76
+#define FIO4PIN2 FIO_BASE_ADDR + 0x96
+
+#define FIO0PIN3 FIO_BASE_ADDR + 0x17
+#define FIO1PIN3 FIO_BASE_ADDR + 0x37
+#define FIO2PIN3 FIO_BASE_ADDR + 0x57
+#define FIO3PIN3 FIO_BASE_ADDR + 0x77
+#define FIO4PIN3 FIO_BASE_ADDR + 0x97
+
+#define FIO0PINL FIO_BASE_ADDR + 0x14
+#define FIO1PINL FIO_BASE_ADDR + 0x34
+#define FIO2PINL FIO_BASE_ADDR + 0x54
+#define FIO3PINL FIO_BASE_ADDR + 0x74
+#define FIO4PINL FIO_BASE_ADDR + 0x94
+
+#define FIO0PINU FIO_BASE_ADDR + 0x16
+#define FIO1PINU FIO_BASE_ADDR + 0x36
+#define FIO2PINU FIO_BASE_ADDR + 0x56
+#define FIO3PINU FIO_BASE_ADDR + 0x76
+#define FIO4PINU FIO_BASE_ADDR + 0x96
+
+#define FIO0SET0 FIO_BASE_ADDR + 0x18
+#define FIO1SET0 FIO_BASE_ADDR + 0x38
+#define FIO2SET0 FIO_BASE_ADDR + 0x58
+#define FIO3SET0 FIO_BASE_ADDR + 0x78
+#define FIO4SET0 FIO_BASE_ADDR + 0x98
+
+#define FIO0SET1 FIO_BASE_ADDR + 0x19
+#define FIO1SET1 FIO_BASE_ADDR + 0x29
+#define FIO2SET1 FIO_BASE_ADDR + 0x59
+#define FIO3SET1 FIO_BASE_ADDR + 0x79
+#define FIO4SET1 FIO_BASE_ADDR + 0x99
+
+#define FIO0SET2 FIO_BASE_ADDR + 0x1A
+#define FIO1SET2 FIO_BASE_ADDR + 0x3A
+#define FIO2SET2 FIO_BASE_ADDR + 0x5A
+#define FIO3SET2 FIO_BASE_ADDR + 0x7A
+#define FIO4SET2 FIO_BASE_ADDR + 0x9A
+
+#define FIO0SET3 FIO_BASE_ADDR + 0x1B
+#define FIO1SET3 FIO_BASE_ADDR + 0x3B
+#define FIO2SET3 FIO_BASE_ADDR + 0x5B
+#define FIO3SET3 FIO_BASE_ADDR + 0x7B
+#define FIO4SET3 FIO_BASE_ADDR + 0x9B
+
+#define FIO0SETL FIO_BASE_ADDR + 0x18
+#define FIO1SETL FIO_BASE_ADDR + 0x38
+#define FIO2SETL FIO_BASE_ADDR + 0x58
+#define FIO3SETL FIO_BASE_ADDR + 0x78
+#define FIO4SETL FIO_BASE_ADDR + 0x98
+
+#define FIO0SETU FIO_BASE_ADDR + 0x1A
+#define FIO1SETU FIO_BASE_ADDR + 0x3A
+#define FIO2SETU FIO_BASE_ADDR + 0x5A
+#define FIO3SETU FIO_BASE_ADDR + 0x7A
+#define FIO4SETU FIO_BASE_ADDR + 0x9A
+
+#define FIO0CLR0 FIO_BASE_ADDR + 0x1C
+#define FIO1CLR0 FIO_BASE_ADDR + 0x3C
+#define FIO2CLR0 FIO_BASE_ADDR + 0x5C
+#define FIO3CLR0 FIO_BASE_ADDR + 0x7C
+#define FIO4CLR0 FIO_BASE_ADDR + 0x9C
+
+#define FIO0CLR1 FIO_BASE_ADDR + 0x1D
+#define FIO1CLR1 FIO_BASE_ADDR + 0x2D
+#define FIO2CLR1 FIO_BASE_ADDR + 0x5D
+#define FIO3CLR1 FIO_BASE_ADDR + 0x7D
+#define FIO4CLR1 FIO_BASE_ADDR + 0x9D
+
+#define FIO0CLR2 FIO_BASE_ADDR + 0x1E
+#define FIO1CLR2 FIO_BASE_ADDR + 0x3E
+#define FIO2CLR2 FIO_BASE_ADDR + 0x5E
+#define FIO3CLR2 FIO_BASE_ADDR + 0x7E
+#define FIO4CLR2 FIO_BASE_ADDR + 0x9E
+
+#define FIO0CLR3 FIO_BASE_ADDR + 0x1F
+#define FIO1CLR3 FIO_BASE_ADDR + 0x3F
+#define FIO2CLR3 FIO_BASE_ADDR + 0x5F
+#define FIO3CLR3 FIO_BASE_ADDR + 0x7F
+#define FIO4CLR3 FIO_BASE_ADDR + 0x9F
+
+#define FIO0CLRL FIO_BASE_ADDR + 0x1C
+#define FIO1CLRL FIO_BASE_ADDR + 0x3C
+#define FIO2CLRL FIO_BASE_ADDR + 0x5C
+#define FIO3CLRL FIO_BASE_ADDR + 0x7C
+#define FIO4CLRL FIO_BASE_ADDR + 0x9C
+
+#define FIO0CLRU FIO_BASE_ADDR + 0x1E
+#define FIO1CLRU FIO_BASE_ADDR + 0x3E
+#define FIO2CLRU FIO_BASE_ADDR + 0x5E
+#define FIO3CLRU FIO_BASE_ADDR + 0x7E
+#define FIO4CLRU FIO_BASE_ADDR + 0x9E
+
+/* System Control Block(SCB) modules include Memory Accelerator Module,
+Phase Locked Loop, VPB divider, Power Control, External Interrupt,
+Reset, and Code Security/Debugging */
+#define SCB_BASE_ADDR 0xE01FC000
+
+/* Memory Accelerator Module (MAM) */
+#define MAMCR SCB_BASE_ADDR + 0x000
+#define MAMTIM SCB_BASE_ADDR + 0x004
+#define MEMMAP SCB_BASE_ADDR + 0x040
+
+/* Phase Locked Loop (PLL) */
+#define PLLCON SCB_BASE_ADDR + 0x080
+#define PLLCFG SCB_BASE_ADDR + 0x084
+#define PLLSTAT SCB_BASE_ADDR + 0x088
+#define PLLFEED SCB_BASE_ADDR + 0x08C
+
+/* Power Control */
+#define PCON SCB_BASE_ADDR + 0x0C0
+#define PCONP SCB_BASE_ADDR + 0x0C4
+
+/* Clock Divider */
+// #define APBDIV SCB_BASE_ADDR + 0x100
+#define CCLKCFG SCB_BASE_ADDR + 0x104
+#define USBCLKCFG SCB_BASE_ADDR + 0x108
+#define CLKSRCSEL SCB_BASE_ADDR + 0x10C
+#define PCLKSEL0 SCB_BASE_ADDR + 0x1A8
+#define PCLKSEL1 SCB_BASE_ADDR + 0x1AC
+
+/* External Interrupts */
+#define EXTINT SCB_BASE_ADDR + 0x140
+#define INTWAKE SCB_BASE_ADDR + 0x144
+#define EXTMODE SCB_BASE_ADDR + 0x148
+#define EXTPOLAR SCB_BASE_ADDR + 0x14C
+
+/* Reset, reset source identification */
+#define RSIR SCB_BASE_ADDR + 0x180
+
+/* RSID, code security protection */
+#define CSPR SCB_BASE_ADDR + 0x184
+
+/* AHB configuration */
+#define AHBCFG1 SCB_BASE_ADDR + 0x188
+#define AHBCFG2 SCB_BASE_ADDR + 0x18C
+
+/* System Controls and Status */
+#define SCS SCB_BASE_ADDR + 0x1A0
+
+/* External Memory Controller (EMC) */
+#define EMC_BASE_ADDR 0xFFE08000
+#define EMC_CTRL EMC_BASE_ADDR + 0x000
+#define EMC_STAT EMC_BASE_ADDR + 0x004
+#define EMC_CONFIG EMC_BASE_ADDR + 0x008
+
+/* Dynamic RAM access registers */
+#define EMC_DYN_CTRL EMC_BASE_ADDR + 0x020
+#define EMC_DYN_RFSH EMC_BASE_ADDR + 0x024
+#define EMC_DYN_RD_CFG EMC_BASE_ADDR + 0x028
+#define EMC_DYN_RP EMC_BASE_ADDR + 0x030
+#define EMC_DYN_RAS EMC_BASE_ADDR + 0x034
+#define EMC_DYN_SREX EMC_BASE_ADDR + 0x038
+#define EMC_DYN_APR EMC_BASE_ADDR + 0x03C
+#define EMC_DYN_DAL EMC_BASE_ADDR + 0x040
+#define EMC_DYN_WR EMC_BASE_ADDR + 0x044
+#define EMC_DYN_RC EMC_BASE_ADDR + 0x048
+#define EMC_DYN_RFC EMC_BASE_ADDR + 0x04C
+#define EMC_DYN_XSR EMC_BASE_ADDR + 0x050
+#define EMC_DYN_RRD EMC_BASE_ADDR + 0x054
+#define EMC_DYN_MRD EMC_BASE_ADDR + 0x058
+
+#define EMC_DYN_CFG0 EMC_BASE_ADDR + 0x100
+#define EMC_DYN_RASCAS0 EMC_BASE_ADDR + 0x104
+#define EMC_DYN_CFG1 EMC_BASE_ADDR + 0x140
+#define EMC_DYN_RASCAS1 EMC_BASE_ADDR + 0x144
+#define EMC_DYN_CFG2 EMC_BASE_ADDR + 0x160
+#define EMC_DYN_RASCAS2 EMC_BASE_ADDR + 0x164
+#define EMC_DYN_CFG3 EMC_BASE_ADDR + 0x180
+#define EMC_DYN_RASCAS3 EMC_BASE_ADDR + 0x184
+
+/* static RAM access registers */
+#define EMC_STA_CFG0 EMC_BASE_ADDR + 0x200
+#define EMC_STA_WAITWEN0 EMC_BASE_ADDR + 0x204
+#define EMC_STA_WAITOEN0 EMC_BASE_ADDR + 0x208
+#define EMC_STA_WAITRD0 EMC_BASE_ADDR + 0x20C
+#define EMC_STA_WAITPAGE0 EMC_BASE_ADDR + 0x210
+#define EMC_STA_WAITWR0 EMC_BASE_ADDR + 0x214
+#define EMC_STA_WAITTURN0 EMC_BASE_ADDR + 0x218
+
+#define EMC_STA_CFG1 EMC_BASE_ADDR + 0x220
+#define EMC_STA_WAITWEN1 EMC_BASE_ADDR + 0x224
+#define EMC_STA_WAITOEN1 EMC_BASE_ADDR + 0x228
+#define EMC_STA_WAITRD1 EMC_BASE_ADDR + 0x22C
+#define EMC_STA_WAITPAGE1 EMC_BASE_ADDR + 0x230
+#define EMC_STA_WAITWR1 EMC_BASE_ADDR + 0x234
+#define EMC_STA_WAITTURN1 EMC_BASE_ADDR + 0x238
+
+#define EMC_STA_CFG2 EMC_BASE_ADDR + 0x240
+#define EMC_STA_WAITWEN2 EMC_BASE_ADDR + 0x244
+#define EMC_STA_WAITOEN2 EMC_BASE_ADDR + 0x248
+#define EMC_STA_WAITRD2 EMC_BASE_ADDR + 0x24C
+#define EMC_STA_WAITPAGE2 EMC_BASE_ADDR + 0x250
+#define EMC_STA_WAITWR2 EMC_BASE_ADDR + 0x254
+#define EMC_STA_WAITTURN2 EMC_BASE_ADDR + 0x258
+
+#define EMC_STA_CFG3 EMC_BASE_ADDR + 0x260
+#define EMC_STA_WAITWEN3 EMC_BASE_ADDR + 0x264
+#define EMC_STA_WAITOEN3 EMC_BASE_ADDR + 0x268
+#define EMC_STA_WAITRD3 EMC_BASE_ADDR + 0x26C
+#define EMC_STA_WAITPAGE3 EMC_BASE_ADDR + 0x270
+#define EMC_STA_WAITWR3 EMC_BASE_ADDR + 0x274
+#define EMC_STA_WAITTURN3 EMC_BASE_ADDR + 0x278
+
+#define EMC_STA_EXT_WAIT EMC_BASE_ADDR + 0x880
+
+/* Timer 0 */
+#define TMR0_BASE_ADDR 0xE0004000
+#define T0IR TMR0_BASE_ADDR + 0x00
+#define T0TCR TMR0_BASE_ADDR + 0x04
+#define T0TC TMR0_BASE_ADDR + 0x08
+#define T0PR TMR0_BASE_ADDR + 0x0C
+#define T0PC TMR0_BASE_ADDR + 0x10
+#define T0MCR TMR0_BASE_ADDR + 0x14
+#define T0MR0 TMR0_BASE_ADDR + 0x18
+#define T0MR1 TMR0_BASE_ADDR + 0x1C
+#define T0MR2 TMR0_BASE_ADDR + 0x20
+#define T0MR3 TMR0_BASE_ADDR + 0x24
+#define T0CCR TMR0_BASE_ADDR + 0x28
+#define T0CR0 TMR0_BASE_ADDR + 0x2C
+#define T0CR1 TMR0_BASE_ADDR + 0x30
+#define T0CR2 TMR0_BASE_ADDR + 0x34
+#define T0CR3 TMR0_BASE_ADDR + 0x38
+#define T0EMR TMR0_BASE_ADDR + 0x3C
+#define T0CTCR TMR0_BASE_ADDR + 0x70
+
+/* Timer 1 */
+#define TMR1_BASE_ADDR 0xE0008000
+#define T1IR TMR1_BASE_ADDR + 0x00
+#define T1TCR TMR1_BASE_ADDR + 0x04
+#define T1TC TMR1_BASE_ADDR + 0x08
+#define T1PR TMR1_BASE_ADDR + 0x0C
+#define T1PC TMR1_BASE_ADDR + 0x10
+#define T1MCR TMR1_BASE_ADDR + 0x14
+#define T1MR0 TMR1_BASE_ADDR + 0x18
+#define T1MR1 TMR1_BASE_ADDR + 0x1C
+#define T1MR2 TMR1_BASE_ADDR + 0x20
+#define T1MR3 TMR1_BASE_ADDR + 0x24
+#define T1CCR TMR1_BASE_ADDR + 0x28
+#define T1CR0 TMR1_BASE_ADDR + 0x2C
+#define T1CR1 TMR1_BASE_ADDR + 0x30
+#define T1CR2 TMR1_BASE_ADDR + 0x34
+#define T1CR3 TMR1_BASE_ADDR + 0x38
+#define T1EMR TMR1_BASE_ADDR + 0x3C
+#define T1CTCR TMR1_BASE_ADDR + 0x70
+
+/* Timer 2 */
+#define TMR2_BASE_ADDR 0xE0070000
+#define T2IR TMR2_BASE_ADDR + 0x00
+#define T2TCR TMR2_BASE_ADDR + 0x04
+#define T2TC TMR2_BASE_ADDR + 0x08
+#define T2PR TMR2_BASE_ADDR + 0x0C
+#define T2PC TMR2_BASE_ADDR + 0x10
+#define T2MCR TMR2_BASE_ADDR + 0x14
+#define T2MR0 TMR2_BASE_ADDR + 0x18
+#define T2MR1 TMR2_BASE_ADDR + 0x1C
+#define T2MR2 TMR2_BASE_ADDR + 0x20
+#define T2MR3 TMR2_BASE_ADDR + 0x24
+#define T2CCR TMR2_BASE_ADDR + 0x28
+#define T2CR0 TMR2_BASE_ADDR + 0x2C
+#define T2CR1 TMR2_BASE_ADDR + 0x30
+#define T2CR2 TMR2_BASE_ADDR + 0x34
+#define T2CR3 TMR2_BASE_ADDR + 0x38
+#define T2EMR TMR2_BASE_ADDR + 0x3C
+#define T2CTCR TMR2_BASE_ADDR + 0x70
+
+/* Timer 3 */
+#define TMR3_BASE_ADDR 0xE0074000
+#define T3IR TMR3_BASE_ADDR + 0x00
+#define T3TCR TMR3_BASE_ADDR + 0x04
+#define T3TC TMR3_BASE_ADDR + 0x08
+#define T3PR TMR3_BASE_ADDR + 0x0C
+#define T3PC TMR3_BASE_ADDR + 0x10
+#define T3MCR TMR3_BASE_ADDR + 0x14
+#define T3MR0 TMR3_BASE_ADDR + 0x18
+#define T3MR1 TMR3_BASE_ADDR + 0x1C
+#define T3MR2 TMR3_BASE_ADDR + 0x20
+#define T3MR3 TMR3_BASE_ADDR + 0x24
+#define T3CCR TMR3_BASE_ADDR + 0x28
+#define T3CR0 TMR3_BASE_ADDR + 0x2C
+#define T3CR1 TMR3_BASE_ADDR + 0x30
+#define T3CR2 TMR3_BASE_ADDR + 0x34
+#define T3CR3 TMR3_BASE_ADDR + 0x38
+#define T3EMR TMR3_BASE_ADDR + 0x3C
+#define T3CTCR TMR3_BASE_ADDR + 0x70
+
+/* Pulse Width Modulator (PWM) */
+#define PWM0_BASE_ADDR 0xE0014000
+#define PWM0IR PWM0_BASE_ADDR + 0x00
+#define PWM0TCR PWM0_BASE_ADDR + 0x04
+#define PWM0TC PWM0_BASE_ADDR + 0x08
+#define PWM0PR PWM0_BASE_ADDR + 0x0C
+#define PWM0PC PWM0_BASE_ADDR + 0x10
+#define PWM0MCR PWM0_BASE_ADDR + 0x14
+#define PWM0MR0 PWM0_BASE_ADDR + 0x18
+#define PWM0MR1 PWM0_BASE_ADDR + 0x1C
+#define PWM0MR2 PWM0_BASE_ADDR + 0x20
+#define PWM0MR3 PWM0_BASE_ADDR + 0x24
+#define PWM0CCR PWM0_BASE_ADDR + 0x28
+#define PWM0CR0 PWM0_BASE_ADDR + 0x2C
+#define PWM0CR1 PWM0_BASE_ADDR + 0x30
+#define PWM0CR2 PWM0_BASE_ADDR + 0x34
+#define PWM0CR3 PWM0_BASE_ADDR + 0x38
+#define PWM0EMR PWM0_BASE_ADDR + 0x3C
+#define PWM0MR4 PWM0_BASE_ADDR + 0x40
+#define PWM0MR5 PWM0_BASE_ADDR + 0x44
+#define PWM0MR6 PWM0_BASE_ADDR + 0x48
+#define PWM0PCR PWM0_BASE_ADDR + 0x4C
+#define PWM0LER PWM0_BASE_ADDR + 0x50
+#define PWM0CTCR PWM0_BASE_ADDR + 0x70
+
+#define PWM1_BASE_ADDR 0xE0018000
+#define PWM1IR PWM1_BASE_ADDR + 0x00
+#define PWM1TCR PWM1_BASE_ADDR + 0x04
+#define PWM1TC PWM1_BASE_ADDR + 0x08
+#define PWM1PR PWM1_BASE_ADDR + 0x0C
+#define PWM1PC PWM1_BASE_ADDR + 0x10
+#define PWM1MCR PWM1_BASE_ADDR + 0x14
+#define PWM1MR0 PWM1_BASE_ADDR + 0x18
+#define PWM1MR1 PWM1_BASE_ADDR + 0x1C
+#define PWM1MR2 PWM1_BASE_ADDR + 0x20
+#define PWM1MR3 PWM1_BASE_ADDR + 0x24
+#define PWM1CCR PWM1_BASE_ADDR + 0x28
+#define PWM1CR0 PWM1_BASE_ADDR + 0x2C
+#define PWM1CR1 PWM1_BASE_ADDR + 0x30
+#define PWM1CR2 PWM1_BASE_ADDR + 0x34
+#define PWM1CR3 PWM1_BASE_ADDR + 0x38
+#define PWM1EMR PWM1_BASE_ADDR + 0x3C
+#define PWM1MR4 PWM1_BASE_ADDR + 0x40
+#define PWM1MR5 PWM1_BASE_ADDR + 0x44
+#define PWM1MR6 PWM1_BASE_ADDR + 0x48
+#define PWM1PCR PWM1_BASE_ADDR + 0x4C
+#define PWM1LER PWM1_BASE_ADDR + 0x50
+#define PWM1CTCR PWM1_BASE_ADDR + 0x70
+
+/* Universal Asynchronous Receiver Transmitter 0 (UART0) */
+#define UART0_BASE_ADDR 0xE000C000
+#define U0RBR UART0_BASE_ADDR + 0x00
+#define U0THR UART0_BASE_ADDR + 0x00
+#define U0DLL UART0_BASE_ADDR + 0x00
+#define U0DLM UART0_BASE_ADDR + 0x04
+#define U0IER UART0_BASE_ADDR + 0x04
+#define U0IIR UART0_BASE_ADDR + 0x08
+#define U0FCR UART0_BASE_ADDR + 0x08
+#define U0LCR UART0_BASE_ADDR + 0x0C
+#define U0LSR UART0_BASE_ADDR + 0x14
+#define U0SCR UART0_BASE_ADDR + 0x1C
+#define U0ACR UART0_BASE_ADDR + 0x20
+#define U0FDR UART0_BASE_ADDR + 0x28
+#define U0TER UART0_BASE_ADDR + 0x30
+
+/* Universal Asynchronous Receiver Transmitter 1 (UART1) */
+#define UART1_BASE_ADDR 0xE0010000
+#define U1RBR UART1_BASE_ADDR + 0x00
+#define U1THR UART1_BASE_ADDR + 0x00
+#define U1DLL UART1_BASE_ADDR + 0x00
+#define U1DLM UART1_BASE_ADDR + 0x04
+#define U1IER UART1_BASE_ADDR + 0x04
+#define U1IIR UART1_BASE_ADDR + 0x08
+#define U1FCR UART1_BASE_ADDR + 0x08
+#define U1LCR UART1_BASE_ADDR + 0x0C
+#define U1MCR UART1_BASE_ADDR + 0x10
+#define U1LSR UART1_BASE_ADDR + 0x14
+#define U1MSR UART1_BASE_ADDR + 0x18
+#define U1SCR UART1_BASE_ADDR + 0x1C
+#define U1ACR UART1_BASE_ADDR + 0x20
+#define U1FDR UART1_BASE_ADDR + 0x28
+#define U1TER UART1_BASE_ADDR + 0x30
+
+/* Universal Asynchronous Receiver Transmitter 2 (UART2) */
+#define UART2_BASE_ADDR 0xE0078000
+#define U2RBR UART2_BASE_ADDR + 0x00
+#define U2THR UART2_BASE_ADDR + 0x00
+#define U2DLL UART2_BASE_ADDR + 0x00
+#define U2DLM UART2_BASE_ADDR + 0x04
+#define U2IER UART2_BASE_ADDR + 0x04
+#define U2IIR UART2_BASE_ADDR + 0x08
+#define U2FCR UART2_BASE_ADDR + 0x08
+#define U2LCR UART2_BASE_ADDR + 0x0C
+#define U2LSR UART2_BASE_ADDR + 0x14
+#define U2SCR UART2_BASE_ADDR + 0x1C
+#define U2ACR UART2_BASE_ADDR + 0x20
+#define U2ICR UART2_BASE_ADDR + 0x24
+#define U2FDR UART2_BASE_ADDR + 0x28
+#define U2TER UART2_BASE_ADDR + 0x30
+
+/* Universal Asynchronous Receiver Transmitter 3 (UART3) */
+#define UART3_BASE_ADDR 0xE007C000
+#define U3RBR UART3_BASE_ADDR + 0x00
+#define U3THR UART3_BASE_ADDR + 0x00
+#define U3DLL UART3_BASE_ADDR + 0x00
+#define U3DLM UART3_BASE_ADDR + 0x04
+#define U3IER UART3_BASE_ADDR + 0x04
+#define U3IIR UART3_BASE_ADDR + 0x08
+#define U3FCR UART3_BASE_ADDR + 0x08
+#define U3LCR UART3_BASE_ADDR + 0x0C
+#define U3LSR UART3_BASE_ADDR + 0x14
+#define U3SCR UART3_BASE_ADDR + 0x1C
+#define U3ACR UART3_BASE_ADDR + 0x20
+#define U3ICR UART3_BASE_ADDR + 0x24
+#define U3FDR UART3_BASE_ADDR + 0x28
+#define U3TER UART3_BASE_ADDR + 0x30
+
+/* I2C Interface 0 */
+#define I2C0_BASE_ADDR 0xE001C000
+#define I20CONSET I2C0_BASE_ADDR + 0x00
+#define I20STAT I2C0_BASE_ADDR + 0x04
+#define I20DAT I2C0_BASE_ADDR + 0x08
+#define I20ADR I2C0_BASE_ADDR + 0x0C
+#define I20SCLH I2C0_BASE_ADDR + 0x10
+#define I20SCLL I2C0_BASE_ADDR + 0x14
+#define I20CONCLR I2C0_BASE_ADDR + 0x18
+
+/* I2C Interface 1 */
+#define I2C1_BASE_ADDR 0xE005C000
+#define I21CONSET I2C1_BASE_ADDR + 0x00
+#define I21STAT I2C1_BASE_ADDR + 0x04
+#define I21DAT I2C1_BASE_ADDR + 0x08
+#define I21ADR I2C1_BASE_ADDR + 0x0C
+#define I21SCLH I2C1_BASE_ADDR + 0x10
+#define I21SCLL I2C1_BASE_ADDR + 0x14
+#define I21CONCLR I2C1_BASE_ADDR + 0x18
+
+/* I2C Interface 2 */
+#define I2C2_BASE_ADDR 0xE0080000
+#define I22CONSET I2C2_BASE_ADDR + 0x00
+#define I22STAT I2C2_BASE_ADDR + 0x04
+#define I22DAT I2C2_BASE_ADDR + 0x08
+#define I22ADR I2C2_BASE_ADDR + 0x0C
+#define I22SCLH I2C2_BASE_ADDR + 0x10
+#define I22SCLL I2C2_BASE_ADDR + 0x14
+#define I22CONCLR I2C2_BASE_ADDR + 0x18
+
+/* SPI0 (Serial Peripheral Interface 0) */
+#define SPI0_BASE_ADDR 0xE0020000
+#define S0SPCR SPI0_BASE_ADDR + 0x00
+#define S0SPSR SPI0_BASE_ADDR + 0x04
+#define S0SPDR SPI0_BASE_ADDR + 0x08
+#define S0SPCCR SPI0_BASE_ADDR + 0x0C
+#define S0SPINT SPI0_BASE_ADDR + 0x1C
+
+/* SSP0 Controller */
+#define SSP0_BASE_ADDR 0xE0068000
+#define SSP0CR0 SSP0_BASE_ADDR + 0x00
+#define SSP0CR1 SSP0_BASE_ADDR + 0x04
+#define SSP0DR SSP0_BASE_ADDR + 0x08
+#define SSP0SR SSP0_BASE_ADDR + 0x0C
+#define SSP0CPSR SSP0_BASE_ADDR + 0x10
+#define SSP0IMSC SSP0_BASE_ADDR + 0x14
+#define SSP0RIS SSP0_BASE_ADDR + 0x18
+#define SSP0MIS SSP0_BASE_ADDR + 0x1C
+#define SSP0ICR SSP0_BASE_ADDR + 0x20
+#define SSP0DMACR SSP0_BASE_ADDR + 0x24
+
+/* SSP1 Controller */
+#define SSP1_BASE_ADDR 0xE0030000
+#define SSP1CR0 SSP1_BASE_ADDR + 0x00
+#define SSP1CR1 SSP1_BASE_ADDR + 0x04
+#define SSP1DR SSP1_BASE_ADDR + 0x08
+#define SSP1SR SSP1_BASE_ADDR + 0x0C
+#define SSP1CPSR SSP1_BASE_ADDR + 0x10
+#define SSP1IMSC SSP1_BASE_ADDR + 0x14
+#define SSP1RIS SSP1_BASE_ADDR + 0x18
+#define SSP1MIS SSP1_BASE_ADDR + 0x1C
+#define SSP1ICR SSP1_BASE_ADDR + 0x20
+#define SSP1DMACR SSP1_BASE_ADDR + 0x24
+
+/* Real Time Clock */
+#define RTC_BASE_ADDR 0xE0024000
+#define RTC_ILR RTC_BASE_ADDR + 0x00
+#define RTC_CTC RTC_BASE_ADDR + 0x04
+#define RTC_CCR RTC_BASE_ADDR + 0x08
+#define RTC_CIIR RTC_BASE_ADDR + 0x0C
+#define RTC_AMR RTC_BASE_ADDR + 0x10
+#define RTC_CTIME0 RTC_BASE_ADDR + 0x14
+#define RTC_CTIME1 RTC_BASE_ADDR + 0x18
+#define RTC_CTIME2 RTC_BASE_ADDR + 0x1C
+#define RTC_SEC RTC_BASE_ADDR + 0x20
+#define RTC_MIN RTC_BASE_ADDR + 0x24
+#define RTC_HOUR RTC_BASE_ADDR + 0x28
+#define RTC_DOM RTC_BASE_ADDR + 0x2C
+#define RTC_DOW RTC_BASE_ADDR + 0x30
+#define RTC_DOY RTC_BASE_ADDR + 0x34
+#define RTC_MONTH RTC_BASE_ADDR + 0x38
+#define RTC_YEAR RTC_BASE_ADDR + 0x3C
+#define RTC_CISS RTC_BASE_ADDR + 0x40
+#define RTC_ALSEC RTC_BASE_ADDR + 0x60
+#define RTC_ALMIN RTC_BASE_ADDR + 0x64
+#define RTC_ALHOUR RTC_BASE_ADDR + 0x68
+#define RTC_ALDOM RTC_BASE_ADDR + 0x6C
+#define RTC_ALDOW RTC_BASE_ADDR + 0x70
+#define RTC_ALDOY RTC_BASE_ADDR + 0x74
+#define RTC_ALMON RTC_BASE_ADDR + 0x78
+#define RTC_ALYEAR RTC_BASE_ADDR + 0x7C
+#define RTC_PREINT RTC_BASE_ADDR + 0x80
+#define RTC_PREFRAC RTC_BASE_ADDR + 0x84
+
+/* A/D Converter 0 (AD0) */
+#define AD0_BASE_ADDR 0xE0034000
+#define AD0CR AD0_BASE_ADDR + 0x00
+#define AD0GDR AD0_BASE_ADDR + 0x04
+#define AD0INTEN AD0_BASE_ADDR + 0x0C
+#define AD0DR0 AD0_BASE_ADDR + 0x10
+#define AD0DR1 AD0_BASE_ADDR + 0x14
+#define AD0DR2 AD0_BASE_ADDR + 0x18
+#define AD0DR3 AD0_BASE_ADDR + 0x1C
+#define AD0DR4 AD0_BASE_ADDR + 0x20
+#define AD0DR5 AD0_BASE_ADDR + 0x24
+#define AD0DR6 AD0_BASE_ADDR + 0x28
+#define AD0DR7 AD0_BASE_ADDR + 0x2C
+#define AD0STAT AD0_BASE_ADDR + 0x30
+
+/* D/A Converter */
+#define DAC_BASE_ADDR 0xE006C000
+#define DACR DAC_BASE_ADDR + 0x00
+
+/* Watchdog */
+#define WDG_BASE_ADDR 0xE0000000
+#define WDMOD WDG_BASE_ADDR + 0x00
+#define WDTC WDG_BASE_ADDR + 0x04
+#define WDFEED WDG_BASE_ADDR + 0x08
+#define WDTV WDG_BASE_ADDR + 0x0C
+#define WDCLKSEL WDG_BASE_ADDR + 0x10
+
+/* CAN CONTROLLERS AND ACCEPTANCE FILTER */
+#define CAN_ACCEPT_BASE_ADDR 0xE003C000
+#define CAN_AFMR CAN_ACCEPT_BASE_ADDR + 0x00
+#define CAN_SFF_SA CAN_ACCEPT_BASE_ADDR + 0x04
+#define CAN_SFF_GRP_SA CAN_ACCEPT_BASE_ADDR + 0x08
+#define CAN_EFF_SA CAN_ACCEPT_BASE_ADDR + 0x0C
+#define CAN_EFF_GRP_SA CAN_ACCEPT_BASE_ADDR + 0x10
+#define CAN_EOT CAN_ACCEPT_BASE_ADDR + 0x14
+#define CAN_LUT_ERR_ADR CAN_ACCEPT_BASE_ADDR + 0x18
+#define CAN_LUT_ERR CAN_ACCEPT_BASE_ADDR + 0x1C
+
+#define CAN_CENTRAL_BASE_ADDR 0xE0040000
+#define CAN_TX_SR CAN_CENTRAL_BASE_ADDR + 0x00
+#define CAN_RX_SR CAN_CENTRAL_BASE_ADDR + 0x04
+#define CAN_MSR CAN_CENTRAL_BASE_ADDR + 0x08
+
+#define CAN1_BASE_ADDR 0xE0044000
+#define CAN1MOD CAN1_BASE_ADDR + 0x00
+#define CAN1CMR CAN1_BASE_ADDR + 0x04
+#define CAN1GSR CAN1_BASE_ADDR + 0x08
+#define CAN1ICR CAN1_BASE_ADDR + 0x0C
+#define CAN1IER CAN1_BASE_ADDR + 0x10
+#define CAN1BTR CAN1_BASE_ADDR + 0x14
+#define CAN1EWL CAN1_BASE_ADDR + 0x18
+#define CAN1SR CAN1_BASE_ADDR + 0x1C
+#define CAN1RFS CAN1_BASE_ADDR + 0x20
+#define CAN1RID CAN1_BASE_ADDR + 0x24
+#define CAN1RDA CAN1_BASE_ADDR + 0x28
+#define CAN1RDB CAN1_BASE_ADDR + 0x2C
+
+#define CAN1TFI1 CAN1_BASE_ADDR + 0x30
+#define CAN1TID1 CAN1_BASE_ADDR + 0x34
+#define CAN1TDA1 CAN1_BASE_ADDR + 0x38
+#define CAN1TDB1 CAN1_BASE_ADDR + 0x3C
+#define CAN1TFI2 CAN1_BASE_ADDR + 0x40
+#define CAN1TID2 CAN1_BASE_ADDR + 0x44
+#define CAN1TDA2 CAN1_BASE_ADDR + 0x48
+#define CAN1TDB2 CAN1_BASE_ADDR + 0x4C
+#define CAN1TFI3 CAN1_BASE_ADDR + 0x50
+#define CAN1TID3 CAN1_BASE_ADDR + 0x54
+#define CAN1TDA3 CAN1_BASE_ADDR + 0x58
+#define CAN1TDB3 CAN1_BASE_ADDR + 0x5C
+
+#define CAN2_BASE_ADDR 0xE0048000
+#define CAN2MOD CAN2_BASE_ADDR + 0x00
+#define CAN2CMR CAN2_BASE_ADDR + 0x04
+#define CAN2GSR CAN2_BASE_ADDR + 0x08
+#define CAN2ICR CAN2_BASE_ADDR + 0x0C
+#define CAN2IER CAN2_BASE_ADDR + 0x10
+#define CAN2BTR CAN2_BASE_ADDR + 0x14
+#define CAN2EWL CAN2_BASE_ADDR + 0x18
+#define CAN2SR CAN2_BASE_ADDR + 0x1C
+#define CAN2RFS CAN2_BASE_ADDR + 0x20
+#define CAN2RID CAN2_BASE_ADDR + 0x24
+#define CAN2RDA CAN2_BASE_ADDR + 0x28
+#define CAN2RDB CAN2_BASE_ADDR + 0x2C
+
+#define CAN2TFI1 CAN2_BASE_ADDR + 0x30
+#define CAN2TID1 CAN2_BASE_ADDR + 0x34
+#define CAN2TDA1 CAN2_BASE_ADDR + 0x38
+#define CAN2TDB1 CAN2_BASE_ADDR + 0x3C
+#define CAN2TFI2 CAN2_BASE_ADDR + 0x40
+#define CAN2TID2 CAN2_BASE_ADDR + 0x44
+#define CAN2TDA2 CAN2_BASE_ADDR + 0x48
+#define CAN2TDB2 CAN2_BASE_ADDR + 0x4C
+#define CAN2TFI3 CAN2_BASE_ADDR + 0x50
+#define CAN2TID3 CAN2_BASE_ADDR + 0x54
+#define CAN2TDA3 CAN2_BASE_ADDR + 0x58
+#define CAN2TDB3 CAN2_BASE_ADDR + 0x5C
+
+/* MultiMedia Card Interface(MCI) Controller */
+#define MCI_BASE_ADDR 0xE008C000
+#define MCI_POWER MCI_BASE_ADDR + 0x00
+#define MCI_CLOCK MCI_BASE_ADDR + 0x04
+#define MCI_ARGUMENT MCI_BASE_ADDR + 0x08
+#define MCI_COMMAND MCI_BASE_ADDR + 0x0C
+#define MCI_RESP_CMD MCI_BASE_ADDR + 0x10
+#define MCI_RESP0 MCI_BASE_ADDR + 0x14
+#define MCI_RESP1 MCI_BASE_ADDR + 0x18
+#define MCI_RESP2 MCI_BASE_ADDR + 0x1C
+#define MCI_RESP3 MCI_BASE_ADDR + 0x20
+#define MCI_DATA_TMR MCI_BASE_ADDR + 0x24
+#define MCI_DATA_LEN MCI_BASE_ADDR + 0x28
+#define MCI_DATA_CTRL MCI_BASE_ADDR + 0x2C
+#define MCI_DATA_CNT MCI_BASE_ADDR + 0x30
+#define MCI_STATUS MCI_BASE_ADDR + 0x34
+#define MCI_CLEAR MCI_BASE_ADDR + 0x38
+#define MCI_MASK0 MCI_BASE_ADDR + 0x3C
+#define MCI_MASK1 MCI_BASE_ADDR + 0x40
+#define MCI_FIFO_CNT MCI_BASE_ADDR + 0x48
+#define MCI_FIFO MCI_BASE_ADDR + 0x80
+
+/* I2S Interface Controller (I2S) */
+#define I2S_BASE_ADDR 0xE0088000
+#define I2S_DAO I2S_BASE_ADDR + 0x00
+#define I2S_DAI I2S_BASE_ADDR + 0x04
+#define I2S_TX_FIFO I2S_BASE_ADDR + 0x08
+#define I2S_RX_FIFO I2S_BASE_ADDR + 0x0C
+#define I2S_STATE I2S_BASE_ADDR + 0x10
+#define I2S_DMA1 I2S_BASE_ADDR + 0x14
+#define I2S_DMA2 I2S_BASE_ADDR + 0x18
+#define I2S_IRQ I2S_BASE_ADDR + 0x1C
+#define I2S_TXRATE I2S_BASE_ADDR + 0x20
+#define I2S_RXRATE I2S_BASE_ADDR + 0x24
+
+/* General-purpose DMA Controller */
+#define DMA_BASE_ADDR 0xFFE04000
+#define GPDMA_INT_STAT DMA_BASE_ADDR + 0x000
+#define GPDMA_INT_TCSTAT DMA_BASE_ADDR + 0x004
+#define GPDMA_INT_TCCLR DMA_BASE_ADDR + 0x008
+#define GPDMA_INT_ERR_STAT DMA_BASE_ADDR + 0x00C
+#define GPDMA_INT_ERR_CLR DMA_BASE_ADDR + 0x010
+#define GPDMA_RAW_INT_TCSTAT DMA_BASE_ADDR + 0x014
+#define GPDMA_RAW_INT_ERR_STAT DMA_BASE_ADDR + 0x018
+#define GPDMA_ENABLED_CHNS DMA_BASE_ADDR + 0x01C
+#define GPDMA_SOFT_BREQ DMA_BASE_ADDR + 0x020
+#define GPDMA_SOFT_SREQ DMA_BASE_ADDR + 0x024
+#define GPDMA_SOFT_LBREQ DMA_BASE_ADDR + 0x028
+#define GPDMA_SOFT_LSREQ DMA_BASE_ADDR + 0x02C
+#define GPDMA_CONFIG DMA_BASE_ADDR + 0x030
+#define GPDMA_SYNC DMA_BASE_ADDR + 0x034
+
+/* DMA channel 0 registers */
+#define GPDMA_CH0_SRC DMA_BASE_ADDR + 0x100
+#define GPDMA_CH0_DEST DMA_BASE_ADDR + 0x104
+#define GPDMA_CH0_LLI DMA_BASE_ADDR + 0x108
+#define GPDMA_CH0_CTRL DMA_BASE_ADDR + 0x10C
+#define GPDMA_CH0_CFG DMA_BASE_ADDR + 0x110
+
+/* DMA channel 1 registers */
+#define GPDMA_CH1_SRC DMA_BASE_ADDR + 0x120
+#define GPDMA_CH1_DEST DMA_BASE_ADDR + 0x124
+#define GPDMA_CH1_LLI DMA_BASE_ADDR + 0x128
+#define GPDMA_CH1_CTRL DMA_BASE_ADDR + 0x12C
+#define GPDMA_CH1_CFG DMA_BASE_ADDR + 0x130
+
+/* USB Controller */
+#define USB_INT_BASE_ADDR 0xE01FC1C0
+#define USB_BASE_ADDR 0xFFE0C200 /* USB Base Address */
+
+#define USB_INT_STAT USB_INT_BASE_ADDR + 0x00
+
+/* USB Device Interrupt Registers */
+#define DEV_INT_STAT USB_BASE_ADDR + 0x00
+#define DEV_INT_EN USB_BASE_ADDR + 0x04
+#define DEV_INT_CLR USB_BASE_ADDR + 0x08
+#define DEV_INT_SET USB_BASE_ADDR + 0x0C
+#define DEV_INT_PRIO USB_BASE_ADDR + 0x2C
+
+/* USB Device Endpoint Interrupt Registers */
+#define EP_INT_STAT USB_BASE_ADDR + 0x30
+#define EP_INT_EN USB_BASE_ADDR + 0x34
+#define EP_INT_CLR USB_BASE_ADDR + 0x38
+#define EP_INT_SET USB_BASE_ADDR + 0x3C
+#define EP_INT_PRIO USB_BASE_ADDR + 0x40
+
+/* USB Device Endpoint Realization Registers */
+#define REALIZE_EP USB_BASE_ADDR + 0x44
+#define EP_INDEX USB_BASE_ADDR + 0x48
+#define MAXPACKET_SIZE USB_BASE_ADDR + 0x4C
+
+/* USB Device Command Reagisters */
+#define CMD_CODE USB_BASE_ADDR + 0x10
+#define CMD_DATA USB_BASE_ADDR + 0x14
+
+/* USB Device Data Transfer Registers */
+#define RX_DATA USB_BASE_ADDR + 0x18
+#define TX_DATA USB_BASE_ADDR + 0x1C
+#define RX_PLENGTH USB_BASE_ADDR + 0x20
+#define TX_PLENGTH USB_BASE_ADDR + 0x24
+#define USB_CTRL USB_BASE_ADDR + 0x28
+
+/* USB Device DMA Registers */
+#define DMA_REQ_STAT USB_BASE_ADDR + 0x50
+#define DMA_REQ_CLR USB_BASE_ADDR + 0x54
+#define DMA_REQ_SET USB_BASE_ADDR + 0x58
+#define UDCA_HEAD USB_BASE_ADDR + 0x80
+#define EP_DMA_STAT USB_BASE_ADDR + 0x84
+#define EP_DMA_EN USB_BASE_ADDR + 0x88
+#define EP_DMA_DIS USB_BASE_ADDR + 0x8C
+#define DMA_INT_STAT USB_BASE_ADDR + 0x90
+#define DMA_INT_EN USB_BASE_ADDR + 0x94
+#define EOT_INT_STAT USB_BASE_ADDR + 0xA0
+#define EOT_INT_CLR USB_BASE_ADDR + 0xA4
+#define EOT_INT_SET USB_BASE_ADDR + 0xA8
+#define NDD_REQ_INT_STAT USB_BASE_ADDR + 0xAC
+#define NDD_REQ_INT_CLR USB_BASE_ADDR + 0xB0
+#define NDD_REQ_INT_SET USB_BASE_ADDR + 0xB4
+#define SYS_ERR_INT_STAT USB_BASE_ADDR + 0xB8
+#define SYS_ERR_INT_CLR USB_BASE_ADDR + 0xBC
+#define SYS_ERR_INT_SET USB_BASE_ADDR + 0xC0
+
+/* USB Host Controller */
+#define USBHC_BASE_ADDR 0xFFE0C000
+#define HC_REVISION USBHC_BASE_ADDR + 0x00
+#define HC_CONTROL USBHC_BASE_ADDR + 0x04
+#define HC_CMD_STAT USBHC_BASE_ADDR + 0x08
+#define HC_INT_STAT USBHC_BASE_ADDR + 0x0C
+#define HC_INT_EN USBHC_BASE_ADDR + 0x10
+#define HC_INT_DIS USBHC_BASE_ADDR + 0x14
+#define HC_HCCA USBHC_BASE_ADDR + 0x18
+#define HC_PERIOD_CUR_ED USBHC_BASE_ADDR + 0x1C
+#define HC_CTRL_HEAD_ED USBHC_BASE_ADDR + 0x20
+#define HC_CTRL_CUR_ED USBHC_BASE_ADDR + 0x24
+#define HC_BULK_HEAD_ED USBHC_BASE_ADDR + 0x28
+#define HC_BULK_CUR_ED USBHC_BASE_ADDR + 0x2C
+#define HC_DONE_HEAD USBHC_BASE_ADDR + 0x30
+#define HC_FM_INTERVAL USBHC_BASE_ADDR + 0x34
+#define HC_FM_REMAINING USBHC_BASE_ADDR + 0x38
+#define HC_FM_NUMBER USBHC_BASE_ADDR + 0x3C
+#define HC_PERIOD_START USBHC_BASE_ADDR + 0x40
+#define HC_LS_THRHLD USBHC_BASE_ADDR + 0x44
+#define HC_RH_DESCA USBHC_BASE_ADDR + 0x48
+#define HC_RH_DESCB USBHC_BASE_ADDR + 0x4C
+#define HC_RH_STAT USBHC_BASE_ADDR + 0x50
+#define HC_RH_PORT_STAT1 USBHC_BASE_ADDR + 0x54
+#define HC_RH_PORT_STAT2 USBHC_BASE_ADDR + 0x58
+
+/* USB OTG Controller */
+#define USBOTG_BASE_ADDR 0xFFE0C100
+#define OTG_INT_STAT USBOTG_BASE_ADDR + 0x00
+#define OTG_INT_EN USBOTG_BASE_ADDR + 0x04
+#define OTG_INT_SET USBOTG_BASE_ADDR + 0x08
+#define OTG_INT_CLR USBOTG_BASE_ADDR + 0x0C
+#define OTG_STAT_CTRL USBOTG_BASE_ADDR + 0x10
+#define OTG_TIMER USBOTG_BASE_ADDR + 0x14
+
+#define USBOTG_I2C_BASE_ADDR 0xFFE0C300
+#define OTG_I2C_RX USBOTG_I2C_BASE_ADDR + 0x00
+#define OTG_I2C_TX USBOTG_I2C_BASE_ADDR + 0x00
+#define OTG_I2C_STS USBOTG_I2C_BASE_ADDR + 0x04
+#define OTG_I2C_CTL USBOTG_I2C_BASE_ADDR + 0x08
+#define OTG_I2C_CLKHI USBOTG_I2C_BASE_ADDR + 0x0C
+#define OTG_I2C_CLKLO USBOTG_I2C_BASE_ADDR + 0x10
+
+#define USBOTG_CLK_BASE_ADDR 0xFFE0CFF0
+#define OTG_CLK_CTRL USBOTG_CLK_BASE_ADDR + 0x04
+#define OTG_CLK_STAT USBOTG_CLK_BASE_ADDR + 0x08
+
+/* Ethernet MAC (32 bit data bus) -- all registers are RW unless indicated in parentheses */
+#define MAC_BASE_ADDR 0xFFE00000 /* AHB Peripheral # 0 */
+#define MAC_MAC1 MAC_BASE_ADDR + 0x000 /* MAC config reg 1 */
+#define MAC_MAC2 MAC_BASE_ADDR + 0x004 /* MAC config reg 2 */
+#define MAC_IPGT MAC_BASE_ADDR + 0x008 /* b2b InterPacketGap reg */
+#define MAC_IPGR MAC_BASE_ADDR + 0x00C /* non b2b InterPacketGap reg */
+#define MAC_CLRT MAC_BASE_ADDR + 0x010 /* CoLlision window/ReTry reg */
+#define MAC_MAXF MAC_BASE_ADDR + 0x014 /* MAXimum Frame reg */
+#define MAC_SUPP MAC_BASE_ADDR + 0x018 /* PHY SUPPort reg */
+#define MAC_TEST MAC_BASE_ADDR + 0x01C /* TEST reg */
+#define MAC_MCFG MAC_BASE_ADDR + 0x020 /* MII Mgmt ConFiG reg */
+#define MAC_MCMD MAC_BASE_ADDR + 0x024 /* MII Mgmt CoMmanD reg */
+#define MAC_MADR MAC_BASE_ADDR + 0x028 /* MII Mgmt ADdRess reg */
+#define MAC_MWTD MAC_BASE_ADDR + 0x02C /* MII Mgmt WriTe Data reg (WO) */
+#define MAC_MRDD MAC_BASE_ADDR + 0x030 /* MII Mgmt ReaD Data reg (RO) */
+#define MAC_MIND MAC_BASE_ADDR + 0x034 /* MII Mgmt INDicators reg (RO) */
+
+#define MAC_SA0 MAC_BASE_ADDR + 0x040 /* Station Address 0 reg */
+#define MAC_SA1 MAC_BASE_ADDR + 0x044 /* Station Address 1 reg */
+#define MAC_SA2 MAC_BASE_ADDR + 0x048 /* Station Address 2 reg */
+
+#define MAC_COMMAND MAC_BASE_ADDR + 0x100 /* Command reg */
+#define MAC_STATUS MAC_BASE_ADDR + 0x104 /* Status reg (RO) */
+#define MAC_RXDESCRIPTOR MAC_BASE_ADDR + 0x108 /* Rx descriptor base address reg */
+#define MAC_RXSTATUS MAC_BASE_ADDR + 0x10C /* Rx status base address reg */
+#define MAC_RXDESCRIPTORNUM MAC_BASE_ADDR + 0x110 /* Rx number of descriptors reg */
+#define MAC_RXPRODUCEINDEX MAC_BASE_ADDR + 0x114 /* Rx produce index reg (RO) */
+#define MAC_RXCONSUMEINDEX MAC_BASE_ADDR + 0x118 /* Rx consume index reg */
+#define MAC_TXDESCRIPTOR MAC_BASE_ADDR + 0x11C /* Tx descriptor base address reg */
+#define MAC_TXSTATUS MAC_BASE_ADDR + 0x120 /* Tx status base address reg */
+#define MAC_TXDESCRIPTORNUM MAC_BASE_ADDR + 0x124 /* Tx number of descriptors reg */
+#define MAC_TXPRODUCEINDEX MAC_BASE_ADDR + 0x128 /* Tx produce index reg */
+#define MAC_TXCONSUMEINDEX MAC_BASE_ADDR + 0x12C /* Tx consume index reg (RO) */
+
+#define MAC_TSV0 MAC_BASE_ADDR + 0x158 /* Tx status vector 0 reg (RO) */
+#define MAC_TSV1 MAC_BASE_ADDR + 0x15C /* Tx status vector 1 reg (RO) */
+#define MAC_RSV MAC_BASE_ADDR + 0x160 /* Rx status vector reg (RO) */
+
+#define MAC_FLOWCONTROLCNT MAC_BASE_ADDR + 0x170 /* Flow control counter reg */
+#define MAC_FLOWCONTROLSTS MAC_BASE_ADDR + 0x174 /* Flow control status reg */
+
+#define MAC_RXFILTERCTRL MAC_BASE_ADDR + 0x200 /* Rx filter ctrl reg */
+#define MAC_RXFILTERWOLSTS MAC_BASE_ADDR + 0x204 /* Rx filter WoL status reg (RO) */
+#define MAC_RXFILTERWOLCLR MAC_BASE_ADDR + 0x208 /* Rx filter WoL clear reg (WO) */
+
+#define MAC_HASHFILTERL MAC_BASE_ADDR + 0x210 /* Hash filter LSBs reg */
+#define MAC_HASHFILTERH MAC_BASE_ADDR + 0x214 /* Hash filter MSBs reg */
+
+#define MAC_INTSTATUS MAC_BASE_ADDR + 0xFE0 /* Interrupt status reg (RO) */
+#define MAC_INTENABLE MAC_BASE_ADDR + 0xFE4 /* Interrupt enable reg */
+#define MAC_INTCLEAR MAC_BASE_ADDR + 0xFE8 /* Interrupt clear reg (WO) */
+#define MAC_INTSET MAC_BASE_ADDR + 0xFEC /* Interrupt set reg (WO) */
+
+#define MAC_POWERDOWN MAC_BASE_ADDR + 0xFF4 /* Power-down reg */
+#define MAC_MODULEID MAC_BASE_ADDR + 0xFFC /* Module ID reg (RO) */
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#endif
diff -upNr u-boot-orig/include/flash.h u-boot/include/flash.h
--- u-boot-orig/include/flash.h 2009-03-18 00:42:12.000000000 +0100
+++ u-boot/include/flash.h 2009-03-19 11:24:32.000000000 +0100
@@ -327,154 +329,153 @@ extern flash_info_t *flash_get_info(ulon
#define INTEL_ID_28F256P30T 0x88198819 /* 256M = 128K x 255 + 32k x 4 */
#define INTEL_ID_28F256P30B 0x881C881C /* 256M = 128K x 255 + 32k x 4 */

-#define INTEL_ID_28F160S3 0x00D000D0 /* 16M = 512K x 32 (64kB x 32) */
-#define INTEL_ID_28F320S3 0x00D400D4 /* 32M = 512K x 64 (64kB x 64) */
+#define INTEL_ID_28F160S3 0x00D000D0 /* 16M = 512K x 32 (64kB x 32) */
+#define INTEL_ID_28F320S3 0x00D400D4 /* 32M = 512K x 64 (64kB x 64) */

/* Note that the Sharp 28F016SC is compatible with the Intel E28F016SC */
-#define SHARP_ID_28F016SCL 0xAAAAAAAA /* LH28F016SCT-L95 2Mx8, 32 64k blocks */
-#define SHARP_ID_28F016SCZ 0xA0A0A0A0 /* LH28F016SCT-Z4 2Mx8, 32 64k blocks */
-#define SHARP_ID_28F008SC 0xA6A6A6A6 /* LH28F008SCT-L12 1Mx8, 16 64k blocks */
- /* LH28F008SCR-L85 1Mx8, 16 64k blocks */
-
-#define TOSH_ID_FVT160 0xC2 /* TC58FVT160 ID (16 M, top ) */
-#define TOSH_ID_FVB160 0x43 /* TC58FVT160 ID (16 M, bottom ) */
-#define PHILIPS_LPC2292 0x0401FF13 /* LPC2292 internal FLASH */
-
+#define SHARP_ID_28F016SCL 0xAAAAAAAA /* LH28F016SCT-L95 2Mx8, 32 64k blocks */
+#define SHARP_ID_28F016SCZ 0xA0A0A0A0 /* LH28F016SCT-Z4 2Mx8, 32 64k blocks */
+#define SHARP_ID_28F008SC 0xA6A6A6A6 /* LH28F008SCT-L12 1Mx8, 16 64k blocks */
+ /* LH28F008SCR-L85 1Mx8, 16 64k blocks */
+
+#define TOSH_ID_FVT160 0xC2 /* TC58FVT160 ID (16 M, top ) */
+#define TOSH_ID_FVB160 0x43 /* TC58FVT160 ID (16 M, bottom ) */
+#define PHILIPS_LPC2292 0x0401FF13 /* LPC2292 internal FLASH */
+#define PHILIPS_LPC2468 0x0603FF35 /* LPC2468 internal FLASH */
/*-----------------------------------------------------------------------
* Internal FLASH identification codes
*
* Be careful when adding new type! Odd numbers are "bottom boot sector" types!
*/

-#define FLASH_AM040 0x0001 /* AMD Am29F040B, Am29LV040B */
- /* Bright Micro BM29F040 */
- /* Fujitsu MBM29F040A */
- /* STM M29W040B */
- /* SGS Thomson M29F040B */
- /* 8 64K x 8 uniform sectors */
-#define FLASH_AM400T 0x0002 /* AMD AM29LV400 */
+#define FLASH_AM040 0x0001 /* AMD Am29F040B, Am29LV040B */
+ /* Bright Micro BM29F040 */
+ /* Fujitsu MBM29F040A */
+ /* STM M29W040B */
+ /* SGS Thomson M29F040B */
+ /* 8 64K x 8 uniform sectors */
+#define FLASH_AM400T 0x0002 /* AMD AM29LV400 */
#define FLASH_AM400B 0x0003
-#define FLASH_AM800T 0x0004 /* AMD AM29LV800 */
+#define FLASH_AM800T 0x0004 /* AMD AM29LV800 */
#define FLASH_AM800B 0x0005
-#define FLASH_AM116DT 0x0026 /* AMD AM29LV116DT (2Mx8bit) */
-#define FLASH_AM116DB 0x0027 /* AMD AM29LV116DB (2Mx8bit) */
-#define FLASH_AM160T 0x0006 /* AMD AM29LV160 */
-#define FLASH_AM160LV 0x0046 /* AMD29LV160DB (2M = 2Mx8bit ) */
+#define FLASH_AM116DT 0x0026 /* AMD AM29LV116DT (2Mx8bit) */
+#define FLASH_AM116DB 0x0027 /* AMD AM29LV116DB (2Mx8bit) */
+#define FLASH_AM160T 0x0006 /* AMD AM29LV160 */
+#define FLASH_AM160LV 0x0046 /* AMD29LV160DB (2M = 2Mx8bit ) */
#define FLASH_AM160B 0x0007
-#define FLASH_AM320T 0x0008 /* AMD AM29LV320 */
+#define FLASH_AM320T 0x0008 /* AMD AM29LV320 */
#define FLASH_AM320B 0x0009

-#define FLASH_AM080 0x000A /* AMD Am29F080B */
- /* 16 64K x 8 uniform sectors */
+#define FLASH_AM080 0x000A /* AMD Am29F080B */
+ /* 16 64K x 8 uniform sectors */

-#define FLASH_AMDL322T 0x0010 /* AMD AM29DL322 */
+#define FLASH_AMDL322T 0x0010 /* AMD AM29DL322 */
#define FLASH_AMDL322B 0x0011
-#define FLASH_AMDL323T 0x0012 /* AMD AM29DL323 */
+#define FLASH_AMDL323T 0x0012 /* AMD AM29DL323 */
#define FLASH_AMDL323B 0x0013
-#define FLASH_AMDL324T 0x0014 /* AMD AM29DL324 */
+#define FLASH_AMDL324T 0x0014 /* AMD AM29DL324 */
#define FLASH_AMDL324B 0x0015

#define FLASH_AMDLV033C 0x0018
#define FLASH_AMDLV065D 0x001A

-#define FLASH_AMDL640 0x0016 /* AMD AM29DL640D */
-#define FLASH_AMD016 0x0018 /* AMD AM29F016D */
-#define FLASH_AMDL640MB 0x0019 /* AMD AM29LV640MB (64M, bottom boot sect)*/
-#define FLASH_AMDL640MT 0x001A /* AMD AM29LV640MT (64M, top boot sect) */
-
-#define FLASH_SST200A 0x0040 /* SST 39xF200A ID ( 2M = 128K x 16 ) */
-#define FLASH_SST400A 0x0042 /* SST 39xF400A ID ( 4M = 256K x 16 ) */
-#define FLASH_SST800A 0x0044 /* SST 39xF800A ID ( 8M = 512K x 16 ) */
-#define FLASH_SST160A 0x0046 /* SST 39xF160A ID ( 16M = 1M x 16 ) */
-#define FLASH_SST320 0x0048 /* SST 39xF160A ID ( 16M = 1M x 16 ) */
-#define FLASH_SST640 0x004A /* SST 39xF160A ID ( 16M = 1M x 16 ) */
-#define FLASH_SST020 0x0024 /* SST 39xF020 ID (256KB = 2Mbit x 8 ) */
-#define FLASH_SST040 0x000E /* SST 39xF040 ID (512KB = 4Mbit x 8 ) */
-
-#define FLASH_STM800AB 0x0051 /* STM M29WF800AB ( 8M = 512K x 16 ) */
-#define FLASH_STMW320DT 0x0052 /* STM M29W320DT (32 M, top boot sector) */
-#define FLASH_STMW320DB 0x0053 /* STM M29W320DB (32 M, bottom boot sect)*/
-#define FLASH_STM320DB 0x00CB /* STM M29W320DB (4M = 64K x 64, bottom)*/
-#define FLASH_STM800DT 0x00D7 /* STM M29W800DT (1M = 64K x 16, top) */
-#define FLASH_STM800DB 0x005B /* STM M29W800DB (1M = 64K x 16, bottom)*/
-
-#define FLASH_28F400_T 0x0062 /* MT 28F400B3 ID ( 4M = 256K x 16 ) */
-#define FLASH_28F400_B 0x0063 /* MT 28F400B3 ID ( 4M = 256K x 16 ) */
-
-#define FLASH_INTEL800T 0x0074 /* INTEL 28F800B3T ( 8M = 512K x 16 ) */
-#define FLASH_INTEL800B 0x0075 /* INTEL 28F800B3B ( 8M = 512K x 16 ) */
-#define FLASH_INTEL160T 0x0076 /* INTEL 28F160B3T ( 16M = 1 M x 16 ) */
-#define FLASH_INTEL160B 0x0077 /* INTEL 28F160B3B ( 16M = 1 M x 16 ) */
-#define FLASH_INTEL320T 0x0078 /* INTEL 28F320B3T ( 32M = 2 M x 16 ) */
-#define FLASH_INTEL320B 0x0079 /* INTEL 28F320B3B ( 32M = 2 M x 16 ) */
-#define FLASH_INTEL640T 0x007A /* INTEL 28F320B3T ( 64M = 4 M x 16 ) */
-#define FLASH_INTEL640B 0x007B /* INTEL 28F320B3B ( 64M = 4 M x 16 ) */
-
-#define FLASH_28F008S5 0x0080 /* Intel 28F008S5 ( 1M = 64K x 16 ) */
-#define FLASH_28F016SV 0x0081 /* Intel 28F016SV ( 16M = 512k x 32 ) */
-#define FLASH_28F800_B 0x0083 /* Intel E28F800B ( 1M = ? ) */
-#define FLASH_AM29F800B 0x0084 /* AMD Am29F800BB ( 1M = ? ) */
-#define FLASH_28F320J5 0x0085 /* Intel 28F320J5 ( 4M = 128K x 32 ) */
-#define FLASH_28F160S3 0x0086 /* Intel 28F160S3 ( 16M = 512K x 32 ) */
-#define FLASH_28F320S3 0x0088 /* Intel 28F320S3 ( 32M = 512K x 64 ) */
-#define FLASH_AM640U 0x0090 /* AMD Am29LV640U ( 64M = 4M x 16 ) */
-#define FLASH_AM033C 0x0091 /* AMD AM29LV033 ( 32M = 4M x 8 ) */
+#define FLASH_AMDL640 0x0016 /* AMD AM29DL640D */
+#define FLASH_AMD016 0x0018 /* AMD AM29F016D */
+#define FLASH_AMDL640MB 0x0019 /* AMD AM29LV640MB (64M, bottom boot sect) */
+#define FLASH_AMDL640MT 0x001A /* AMD AM29LV640MT (64M, top boot sect) */
+
+#define FLASH_SST200A 0x0040 /* SST 39xF200A ID ( 2M = 128K x 16 ) */
+#define FLASH_SST400A 0x0042 /* SST 39xF400A ID ( 4M = 256K x 16 ) */
+#define FLASH_SST800A 0x0044 /* SST 39xF800A ID ( 8M = 512K x 16 ) */
+#define FLASH_SST160A 0x0046 /* SST 39xF160A ID ( 16M = 1M x 16 ) */
+#define FLASH_SST320 0x0048 /* SST 39xF160A ID ( 16M = 1M x 16 ) */
+#define FLASH_SST640 0x004A /* SST 39xF160A ID ( 16M = 1M x 16 ) */
+#define FLASH_SST020 0x0024 /* SST 39xF020 ID (256KB = 2Mbit x 8 ) */
+#define FLASH_SST040 0x000E /* SST 39xF040 ID (512KB = 4Mbit x 8 ) */
+
+#define FLASH_STM800AB 0x0051 /* STM M29WF800AB ( 8M = 512K x 16 ) */
+#define FLASH_STMW320DT 0x0052 /* STM M29W320DT (32 M, top boot sector) */
+#define FLASH_STMW320DB 0x0053 /* STM M29W320DB (32 M, bottom boot sect) */
+#define FLASH_STM320DB 0x00CB /* STM M29W320DB (4M = 64K x 64, bottom) */
+#define FLASH_STM800DT 0x00D7 /* STM M29W800DT (1M = 64K x 16, top) */
+#define FLASH_STM800DB 0x005B /* STM M29W800DB (1M = 64K x 16, bottom) */
+
+#define FLASH_28F400_T 0x0062 /* MT 28F400B3 ID ( 4M = 256K x 16 ) */
+#define FLASH_28F400_B 0x0063 /* MT 28F400B3 ID ( 4M = 256K x 16 ) */
+
+#define FLASH_INTEL800T 0x0074 /* INTEL 28F800B3T ( 8M = 512K x 16 ) */
+#define FLASH_INTEL800B 0x0075 /* INTEL 28F800B3B ( 8M = 512K x 16 ) */
+#define FLASH_INTEL160T 0x0076 /* INTEL 28F160B3T ( 16M = 1 M x 16 ) */
+#define FLASH_INTEL160B 0x0077 /* INTEL 28F160B3B ( 16M = 1 M x 16 ) */
+#define FLASH_INTEL320T 0x0078 /* INTEL 28F320B3T ( 32M = 2 M x 16 ) */
+#define FLASH_INTEL320B 0x0079 /* INTEL 28F320B3B ( 32M = 2 M x 16 ) */
+#define FLASH_INTEL640T 0x007A /* INTEL 28F320B3T ( 64M = 4 M x 16 ) */
+#define FLASH_INTEL640B 0x007B /* INTEL 28F320B3B ( 64M = 4 M x 16 ) */
+
+#define FLASH_28F008S5 0x0080 /* Intel 28F008S5 ( 1M = 64K x 16 ) */
+#define FLASH_28F016SV 0x0081 /* Intel 28F016SV ( 16M = 512k x 32 ) */
+#define FLASH_28F800_B 0x0083 /* Intel E28F800B ( 1M = ? ) */
+#define FLASH_AM29F800B 0x0084 /* AMD Am29F800BB ( 1M = ? ) */
+#define FLASH_28F320J5 0x0085 /* Intel 28F320J5 ( 4M = 128K x 32 ) */
+#define FLASH_28F160S3 0x0086 /* Intel 28F160S3 ( 16M = 512K x 32 ) */
+#define FLASH_28F320S3 0x0088 /* Intel 28F320S3 ( 32M = 512K x 64 ) */
+#define FLASH_AM640U 0x0090 /* AMD Am29LV640U ( 64M = 4M x 16 ) */
+#define FLASH_AM033C 0x0091 /* AMD AM29LV033 ( 32M = 4M x 8 ) */
#define FLASH_LH28F016SCT 0x0092 /* Sharp 28F016SCT ( 8 Meg Flash SIMM ) */
-#define FLASH_28F160F3B 0x0093 /* Intel 28F160F3B ( 16M = 1M x 16 ) */
+#define FLASH_28F160F3B 0x0093 /* Intel 28F160F3B ( 16M = 1M x 16 ) */
#define FLASH_AM065D 0x0093

-#define FLASH_28F640J5 0x0099 /* INTEL 28F640J5 ( 64M = 128K x 64) */
+#define FLASH_28F640J5 0x0099 /* INTEL 28F640J5 ( 64M = 128K x 64) */

-#define FLASH_28F800C3T 0x009A /* Intel 28F800C3T ( 8M = 512K x 16 ) */
-#define FLASH_28F800C3B 0x009B /* Intel 28F800C3B ( 8M = 512K x 16 ) */
-#define FLASH_28F160C3T 0x009C /* Intel 28F160C3T ( 16M = 1M x 16 ) */
-#define FLASH_28F160C3B 0x009D /* Intel 28F160C3B ( 16M = 1M x 16 ) */
-#define FLASH_28F320C3T 0x009E /* Intel 28F320C3T ( 32M = 2M x 16 ) */
-#define FLASH_28F320C3B 0x009F /* Intel 28F320C3B ( 32M = 2M x 16 ) */
-#define FLASH_28F640C3T 0x00A0 /* Intel 28F640C3T ( 64M = 4M x 16 ) */
-#define FLASH_28F640C3B 0x00A1 /* Intel 28F640C3B ( 64M = 4M x 16 ) */
-#define FLASH_AMLV320U 0x00A2 /* AMD 29LV320M ( 32M = 2M x 16 ) */
-
-#define FLASH_AM033 0x00A3 /* AMD AmL033C90V1 (32M = 4M x 8) */
-#define FLASH_AM065 0x0093 /* AMD AmL065DU12RI (64M = 8M x 8) */
-#define FLASH_AT040 0x00A5 /* Amtel AT49LV040 (4M = 512K x 8) */
-
-#define FLASH_AMLV640U 0x00A4 /* AMD 29LV640M ( 64M = 4M x 16 ) */
-#define FLASH_AMLV128U 0x00A6 /* AMD 29LV128M ( 128M = 8M x 16 ) */
-#define FLASH_AMLV320B 0x00A7 /* AMD 29LV320MB ( 32M = 2M x 16 ) */
-#define FLASH_AMLV320T 0x00A8 /* AMD 29LV320MT ( 32M = 2M x 16 ) */
-#define FLASH_AMLV256U 0x00AA /* AMD 29LV256M ( 256M = 16M x 16 ) */
-#define FLASH_MXLV320B 0x00AB /* MX 29LV320MB ( 32M = 2M x 16 ) */
-#define FLASH_MXLV320T 0x00AC /* MX 29LV320MT ( 32M = 2M x 16 ) */
-#define FLASH_28F256L18T 0x00B0 /* Intel 28F256L18T 256M = 128K x 255 + 32k x 4 */
-#define FLASH_AMDL163T 0x00B2 /* AMD AM29DL163T (2M x 16 ) */
+#define FLASH_28F800C3T 0x009A /* Intel 28F800C3T ( 8M = 512K x 16 ) */
+#define FLASH_28F800C3B 0x009B /* Intel 28F800C3B ( 8M = 512K x 16 ) */
+#define FLASH_28F160C3T 0x009C /* Intel 28F160C3T ( 16M = 1M x 16 ) */
+#define FLASH_28F160C3B 0x009D /* Intel 28F160C3B ( 16M = 1M x 16 ) */
+#define FLASH_28F320C3T 0x009E /* Intel 28F320C3T ( 32M = 2M x 16 ) */
+#define FLASH_28F320C3B 0x009F /* Intel 28F320C3B ( 32M = 2M x 16 ) */
+#define FLASH_28F640C3T 0x00A0 /* Intel 28F640C3T ( 64M = 4M x 16 ) */
+#define FLASH_28F640C3B 0x00A1 /* Intel 28F640C3B ( 64M = 4M x 16 ) */
+#define FLASH_AMLV320U 0x00A2 /* AMD 29LV320M ( 32M = 2M x 16 ) */
+
+#define FLASH_AM033 0x00A3 /* AMD AmL033C90V1 (32M = 4M x 8) */
+#define FLASH_AM065 0x0093 /* AMD AmL065DU12RI (64M = 8M x 8) */
+#define FLASH_AT040 0x00A5 /* Amtel AT49LV040 (4M = 512K x 8) */
+
+#define FLASH_AMLV640U 0x00A4 /* AMD 29LV640M ( 64M = 4M x 16 ) */
+#define FLASH_AMLV128U 0x00A6 /* AMD 29LV128M ( 128M = 8M x 16 ) */
+#define FLASH_AMLV320B 0x00A7 /* AMD 29LV320MB ( 32M = 2M x 16 ) */
+#define FLASH_AMLV320T 0x00A8 /* AMD 29LV320MT ( 32M = 2M x 16 ) */
+#define FLASH_AMLV256U 0x00AA /* AMD 29LV256M ( 256M = 16M x 16 ) */
+#define FLASH_MXLV320B 0x00AB /* MX 29LV320MB ( 32M = 2M x 16 ) */
+#define FLASH_MXLV320T 0x00AC /* MX 29LV320MT ( 32M = 2M x 16 ) */
+#define FLASH_28F256L18T 0x00B0 /* Intel 28F256L18T 256M = 128K x 255 + 32k x 4 */
+#define FLASH_AMDL163T 0x00B2 /* AMD AM29DL163T (2M x 16 ) */
#define FLASH_AMDL163B 0x00B3
-#define FLASH_28F64K3 0x00B4 /* Intel 28F64K3 ( 64M) */
-#define FLASH_28F128K3 0x00B6 /* Intel 28F128K3 ( 128M = 8M x 16 ) */
-#define FLASH_28F256K3 0x00B8 /* Intel 28F256K3 ( 256M = 16M x 16 ) */
-
-#define FLASH_28F320J3A 0x00C0 /* INTEL 28F320J3A ( 32M = 128K x 32) */
-#define FLASH_28F640J3A 0x00C2 /* INTEL 28F640J3A ( 64M = 128K x 64) */
-#define FLASH_28F128J3A 0x00C4 /* INTEL 28F128J3A (128M = 128K x 128) */
-#define FLASH_28F256J3A 0x00C6 /* INTEL 28F256J3A (256M = 128K x 256) */
-
-#define FLASH_FUJLV650 0x00D0 /* Fujitsu MBM 29LV650UE/651UE */
-#define FLASH_MT28S4M16LC 0x00E1 /* Micron MT28S4M16LC */
-#define FLASH_S29GL064M 0x00F0 /* Spansion S29GL064M-R6 */
-#define FLASH_S29GL128N 0x00F1 /* Spansion S29GL128N */
-
-#define FLASH_UNKNOWN 0xFFFF /* unknown flash type */
+#define FLASH_28F64K3 0x00B4 /* Intel 28F64K3 ( 64M) */
+#define FLASH_28F128K3 0x00B6 /* Intel 28F128K3 ( 128M = 8M x 16 ) */
+#define FLASH_28F256K3 0x00B8 /* Intel 28F256K3 ( 256M = 16M x 16 ) */
+
+#define FLASH_28F320J3A 0x00C0 /* INTEL 28F320J3A ( 32M = 128K x 32) */
+#define FLASH_28F640J3A 0x00C2 /* INTEL 28F640J3A ( 64M = 128K x 64) */
+#define FLASH_28F128J3A 0x00C4 /* INTEL 28F128J3A (128M = 128K x 128) */
+#define FLASH_28F256J3A 0x00C6 /* INTEL 28F256J3A (256M = 128K x 256) */
+
+#define FLASH_FUJLV650 0x00D0 /* Fujitsu MBM 29LV650UE/651UE */
+#define FLASH_MT28S4M16LC 0x00E1 /* Micron MT28S4M16LC */
+#define FLASH_S29GL064M 0x00F0 /* Spansion S29GL064M-R6 */
+#define FLASH_S29GL128N 0x00F1 /* Spansion S29GL128N */

+#define FLASH_UNKNOWN 0xFFFF /* unknown flash type */

/* manufacturer offsets
*/
-#define FLASH_MAN_AMD 0x00000000 /* AMD */
-#define FLASH_MAN_FUJ 0x00010000 /* Fujitsu */
-#define FLASH_MAN_BM 0x00020000 /* Bright Microelectronics */
-#define FLASH_MAN_MX 0x00030000 /* MXIC */
+#define FLASH_MAN_AMD 0x00000000 /* AMD */
+#define FLASH_MAN_FUJ 0x00010000 /* Fujitsu */
+#define FLASH_MAN_BM 0x00020000 /* Bright Microelectronics */
+#define FLASH_MAN_MX 0x00030000 /* MXIC */
#define FLASH_MAN_STM 0x00040000
-#define FLASH_MAN_TOSH 0x00050000 /* Toshiba */
-#define FLASH_MAN_EXCEL 0x00060000 /* Excel Semiconductor */
+#define FLASH_MAN_TOSH 0x00050000 /* Toshiba */
+#define FLASH_MAN_EXCEL 0x00060000 /* Excel Semiconductor */
#define FLASH_MAN_SST 0x00100000
#define FLASH_MAN_INTEL 0x00300000
#define FLASH_MAN_MT 0x00400000
@@ -482,15 +483,14 @@ extern flash_info_t *flash_get_info(ulon
#define FLASH_MAN_ATM 0x00600000
#define FLASH_MAN_CFI 0x01000000

+#define FLASH_TYPEMASK 0x0000FFFF /* extract FLASH type information */
+#define FLASH_VENDMASK 0xFFFF0000 /* extract FLASH vendor information */

-#define FLASH_TYPEMASK 0x0000FFFF /* extract FLASH type information */
-#define FLASH_VENDMASK 0xFFFF0000 /* extract FLASH vendor information */
-
-#define FLASH_AMD_COMP 0x000FFFFF /* Up to this ID, FLASH is compatible */
- /* with AMD, Fujitsu and SST */
- /* (JEDEC standard commands ?) */
+#define FLASH_AMD_COMP 0x000FFFFF /* Up to this ID, FLASH is compatible */
+ /* with AMD, Fujitsu and SST */
+ /* (JEDEC standard commands ?) */

-#define FLASH_BTYPE 0x0001 /* mask for bottom boot sector type */
+#define FLASH_BTYPE 0x0001 /* mask for bottom boot sector type */

/*-----------------------------------------------------------------------
* Timeout constants:
@@ -498,8 +498,8 @@ extern flash_info_t *flash_get_info(ulon
* We can't find any specifications for maximum chip erase times,
* so these values are guestimates.
*/
-#define FLASH_ERASE_TIMEOUT 120000 /* timeout for erasing in ms */
-#define FLASH_WRITE_TIMEOUT 500 /* timeout for writes in ms */
+#define FLASH_ERASE_TIMEOUT 120000 /* timeout for erasing in ms */
+#define FLASH_WRITE_TIMEOUT 500 /* timeout for writes in ms */

#endif /* !CONFIG_SYS_NO_FLASH */