All of lore.kernel.org
 help / color / mirror / Atom feed
From: Remco Poelstra <remco.poelstra@duran-audio.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 1/2] LPC2468 support
Date: Thu, 19 Mar 2009 16:06:29 +0100	[thread overview]
Message-ID: <49C25F75.3080906@duran-audio.com> (raw)
In-Reply-To: <20090318164606.7B26D832E8B7@gemini.denx.de>

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 */

  reply	other threads:[~2009-03-19 15:06 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-18 13:13 [U-Boot] [PATCH 1/1] LPC2468 support Remco Poelstra
2009-03-18 13:58 ` Wolfgang Denk
2009-03-18 14:54   ` [U-Boot] [PATCH 1/2] " Remco Poelstra
2009-03-18 16:46     ` Wolfgang Denk
2009-03-19 15:06       ` Remco Poelstra [this message]
2009-03-19 21:22         ` Wolfgang Denk
2009-03-24 11:05           ` Remco Poelstra
2009-03-24 22:33             ` Wolfgang Denk
2009-03-25  8:29               ` Remco Poelstra
2009-03-25  9:47                 ` Wolfgang Denk
2009-03-25 10:06                   ` Remco Poelstra
2009-03-25 21:51                     ` Jean-Christophe PLAGNIOL-VILLARD
2009-03-26  9:03                       ` Remco Poelstra
2009-04-24 11:57                         ` Remco Poelstra
2009-04-24 12:55                           ` Wolfgang Denk
2009-04-28  9:14                             ` Remco Poelstra
2009-04-28 16:43                               ` Ben Warren
2009-04-24 21:58                           ` Jean-Christophe PLAGNIOL-VILLARD
2009-04-24 22:14                             ` Wolfgang Denk
2009-04-25 12:47                               ` Jean-Christophe PLAGNIOL-VILLARD
2009-04-27  7:27                                 ` Stefan Roese
2009-04-27 23:20                                   ` Wolfgang Denk
2009-04-28  6:27                                     ` Stefan Roese
2009-04-28  6:46                                       ` Wolfgang Denk
2009-04-28  7:08                                         ` Stefan Roese
2009-03-25 21:43                 ` Jean-Christophe PLAGNIOL-VILLARD
2009-03-26  9:10                   ` Remco Poelstra
2009-03-26  9:27                     ` Remco Poelstra
2009-03-18 14:56   ` [U-Boot] [PATCH 2/2] LPC2468 example board Remco Poelstra
2009-03-25 22:01     ` Jean-Christophe PLAGNIOL-VILLARD
2009-03-26  9:11       ` Remco Poelstra
2009-04-28 13:54         ` Remco Poelstra
2009-07-17 22:18           ` Wolfgang Denk
2009-07-18 16:16           ` Jean-Christophe PLAGNIOL-VILLARD

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=49C25F75.3080906@duran-audio.com \
    --to=remco.poelstra@duran-audio.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.