Binary files u-boot-0.4.6/.README.swp and u-boot-0.4.6-1/.README.swp differ
diff -purN u-boot-0.4.6/common/cmd_console.c u-boot-0.4.6-1/common/cmd_console.c
--- u-boot-0.4.6/common/cmd_console.c	Tue Jul  1 16:07:07 2003
+++ u-boot-0.4.6-1/common/cmd_console.c	Fri Aug 22 18:38:19 2003
@@ -33,7 +33,7 @@
 extern void _do_coninfo (void);
 int do_coninfo (cmd_tbl_t * cmd, int flag, int argc, char *argv[])
 {
-	int i, l;
+	int i, j, l;
 
 	/* Scan for valid output and input devices */
 
@@ -50,9 +50,18 @@ int do_coninfo (cmd_tbl_t * cmd, int fla
 			(dev->flags & DEV_FLAGS_OUTPUT) ? 'O' : '.');
 
 		for (l = 0; l < MAX_FILES; l++) {
-			if (stdio_devices[l] == dev) {
-				printf ("%s ", stdio_names[l]);
-			}
+
+		  for( j = 1; j <= ListNumItems(stdio_devices[l]); j++ ) {
+		    device_t* stdio;
+		    ListGetItem(stdio_devices[l], &stdio, j);
+
+		    //if (stdio_devices[l] == dev) {
+		    if( stdio == dev ) {
+		      printf ("%s ", stdio_names[l]);
+		      break;
+		    }
+		  }
+
 		}
 		putc ('\n');
 	}
diff -purN u-boot-0.4.6/common/cmd_nand.c u-boot-0.4.6-1/common/cmd_nand.c
--- u-boot-0.4.6/common/cmd_nand.c	Sat Jul 26 19:21:15 2003
+++ u-boot-0.4.6-1/common/cmd_nand.c	Mon Aug 18 09:26:15 2003
@@ -1212,6 +1212,9 @@ static int nand_write_oob(struct nand_ch
 	       buf[8], buf[9], buf[14],buf[15]);
 #endif
 
+#ifdef CONFIG_OMAP1510
+	archflashwp(0,0);
+#endif
 	NAND_ENABLE_CE(nand);  /* set pin low to enable chip */
 
 	/* Reset the chip */
@@ -1255,6 +1258,9 @@ static int nand_write_oob(struct nand_ch
 			puts ("Error programming oob data\n");
 			/* There was an error */
 			NAND_DISABLE_CE(nand);  /* set pin high */
+#ifdef CONFIG_OMAP1510
+			archflashwp(0,1);
+#endif
 			*retlen = 0;
 			return -1;
 		}
@@ -1278,11 +1284,17 @@ static int nand_write_oob(struct nand_ch
 		puts ("Error programming oob data\n");
 		/* There was an error */
 		NAND_DISABLE_CE(nand);  /* set pin high */
+#ifdef CONFIG_OMAP1510
+		archflashwp(0,1);
+#endif
 		*retlen = 0;
 		return -1;
 	}
 
 	NAND_DISABLE_CE(nand);  /* set pin high */
+#ifdef CONFIG_OMAP1510
+	archflashwp(0,1)
+#endif
 	*retlen = len;
 	return 0;
 
diff -purN u-boot-0.4.6/common/console.c u-boot-0.4.6-1/common/console.c
--- u-boot-0.4.6/common/console.c	Thu Jul 24 18:39:07 2003
+++ u-boot-0.4.6-1/common/console.c	Fri Aug 22 18:40:29 2003
@@ -26,6 +26,7 @@
 #include <malloc.h>
 #include <console.h>
 #include <exports.h>
+#include <lists.h>
 
 #ifdef CONFIG_AMIGAONEG3SE
 int console_changed = 0;
@@ -48,6 +49,7 @@ int overwrite_console (void)
 
 #endif /* CFG_CONSOLE_IS_IN_ENV */
 
+
 static int console_setfile (int file, device_t * dev)
 {
 	DECLARE_GLOBAL_DATA_PTR;
@@ -69,7 +71,8 @@ static int console_setfile (int file, de
 		}
 
 		/* Assign the new device (leaving the existing one started) */
-		stdio_devices[file] = dev;
+		//stdio_devices[file] = dev;
+		ListInsertItem(stdio_devices[file], &dev, LIST_END);
 
 		/*
 		 * Update monitor functions
@@ -115,30 +118,72 @@ void serial_printf (const char *fmt, ...
 
 int fgetc (int file)
 {
+        // This probably isn't the best way to do this, but it's simple...
 	if (file < MAX_FILES)
-		return stdio_devices[file]->getc ();
+	  {
+	    while(1) // block while waiting for valid key (tstc)
+	      {
+		int i;
+		for( i = 1; i <= ListNumItems(stdio_devices[file]); i++ )
+		  {
+		    device_t* dev;
+		    ListGetItem(stdio_devices[file], &dev, i);
+		
+		    if( dev->tstc() )
+		      return dev->getc();
+		  }
+	      }
+	  }
 
 	return -1;
 }
 
 int ftstc (int file)
 {
+  int tst = 0;
+
 	if (file < MAX_FILES)
-		return stdio_devices[file]->tstc ();
+	  {
+	    int i;
+	    for( i = 1; i <= ListNumItems(stdio_devices[file]); i++ )
+	      {
+		device_t* dev;
+		ListGetItem(stdio_devices[file], &dev, i);
+		tst |= dev->tstc();
+	      }		
+	  }
 
-	return -1;
+	return tst;
 }
 
 void fputc (int file, const char c)
 {
 	if (file < MAX_FILES)
-		stdio_devices[file]->putc (c);
+	  {
+	    int i;
+	    for( i = 1; i <= ListNumItems(stdio_devices[file]); i++ )
+	      {
+		device_t* dev;
+		ListGetItem(stdio_devices[file], &dev, i);
+
+		dev->putc(c);
+	      }
+	  }
 }
 
 void fputs (int file, const char *s)
 {
 	if (file < MAX_FILES)
-		stdio_devices[file]->puts (s);
+	  {
+	    int i;
+	    for( i = 1; i <= ListNumItems(stdio_devices[file]); i++ )
+	      {
+		device_t* dev;
+		ListGetItem(stdio_devices[file], &dev, i);
+
+		dev->puts(s);
+	      }
+	  }
 }
 
 void fprintf (int file, const char *fmt, ...)
@@ -442,28 +487,52 @@ int console_init_r (void)
 	if (stdio_devices[stdin] == NULL) {
 		printf ("No input devices available!\n");
 	} else {
-		printf ("%s\n", stdio_devices[stdin]->name);
+	  for( i = 1; i <= ListNumItems(stdio_devices[stdin]); i++ ) {
+	    ListGetItem(stdio_devices[stdin], &dev, i);
+	    printf ("%s ", dev->name);
+	  }
+	  printf("\n");
 	}
 
 	printf ("Out:   ");
 	if (stdio_devices[stdout] == NULL) {
 		printf ("No output devices available!\n");
 	} else {
-		printf ("%s\n", stdio_devices[stdout]->name);
+	  for( i = 1; i <= ListNumItems(stdio_devices[stdout]); i++ ) {
+	    ListGetItem(stdio_devices[stdout], &dev, i);
+	    printf ("%s ", dev->name);
+	  }
+	  printf("\n");
 	}
 
 	printf ("Err:   ");
 	if (stdio_devices[stderr] == NULL) {
 		printf ("No error devices available!\n");
 	} else {
-		printf ("%s\n", stdio_devices[stderr]->name);
+	  for( i = 1; i <= ListNumItems(stdio_devices[stderr]); i++ ) {
+	    ListGetItem(stdio_devices[stderr], &dev, i);
+	    printf ("%s ", dev->name);
+	  }
+	  printf("\n");
 	}
 #endif /* CFG_CONSOLE_INFO_QUIET */
 
 #ifdef CFG_CONSOLE_ENV_OVERWRITE
 	/* set the environment variables (will overwrite previous env settings) */
+	char      names[256];
 	for (i = 0; i < 3; i++) {
-		setenv (stdio_names[i], stdio_devices[i]->name);
+	  
+	  int j;
+	  names[0] = '\0';
+	  for( j = 1; j <= ListNumItems(stdio_devices[i]); j++ ) {
+	    ListGetItem(stdio_devices[i], &dev, j);
+	    if( (strlen(names) + strlen(dev->name)) < sizeof(names) ) {
+	      strcat(names, dev->name);
+	      strcat(names, " ");
+	    }
+	  }
+
+	  setenv (stdio_names[i], names);
 	}
 #endif /*  CFG_CONSOLE_ENV_OVERWRITE */
 
@@ -477,42 +546,36 @@ int console_init_r (void)
 
 #else /* CFG_CONSOLE_IS_IN_ENV */
 
+
 /* Called after the relocation - use desired console functions */
 int console_init_r (void)
 {
-	device_t *inputdev = NULL, *outputdev = NULL;
-	int i, items = ListNumItems (devlist);
+  device_t *dev = NULL;
+  int i, items = ListNumItems (devlist);
+
 
 #ifdef CONFIG_SPLASH_SCREEN
 	/* suppress all output if splash screen is enabled */
-	outputdev = search_device (DEV_FLAGS_OUTPUT, "nulldev");
+	dev = search_device (DEV_FLAGS_OUTPUT, "nulldev");
+	if (dev != NULL) {
+		console_setfile (stdout, dev);
+		console_setfile (stderr, dev);
+	}
 #endif
 
 	/* Scan devices looking for input and output devices */
-	for (i = 1;
-	     (i <= items) && ((inputdev == NULL) || (outputdev == NULL));
-	     i++
-	    ) {
-		device_t *dev = ListGetPtrToItem (devlist, i);
+	for (i = 1; i <= items; i++ ) {	  
+		dev = ListGetPtrToItem (devlist, i);
 
-		if ((dev->flags & DEV_FLAGS_INPUT) && (inputdev == NULL)) {
-			inputdev = dev;
+		if ((dev->flags & DEV_FLAGS_INPUT) ) {
+			console_setfile(stdin, dev);
 		}
-		if ((dev->flags & DEV_FLAGS_OUTPUT) && (outputdev == NULL)) {
-			outputdev = dev;
+		if ((dev->flags & DEV_FLAGS_OUTPUT) ) {
+			console_setfile(stdout,dev);
+			console_setfile(stderr,dev);
 		}
-	}
+	}	
 
-	/* Initializes output console first */
-	if (outputdev != NULL) {
-		console_setfile (stdout, outputdev);
-		console_setfile (stderr, outputdev);
-	}
-
-	/* Initializes input console */
-	if (inputdev != NULL) {
-		console_setfile (stdin, inputdev);
-	}
 
 #ifndef CFG_CONSOLE_INFO_QUIET
 	/* Print information */
@@ -520,29 +583,52 @@ int console_init_r (void)
 	if (stdio_devices[stdin] == NULL) {
 		printf ("No input devices available!\n");
 	} else {
-		printf ("%s\n", stdio_devices[stdin]->name);
+	  for( i = 1; i <= ListNumItems(stdio_devices[stdin]); i++ ) {
+	    ListGetItem(stdio_devices[stdin], &dev, i);
+	    printf ("%s ", dev->name);
+	  }
+	  printf("\n");
 	}
 
 	printf ("Out:   ");
 	if (stdio_devices[stdout] == NULL) {
 		printf ("No output devices available!\n");
 	} else {
-		printf ("%s\n", stdio_devices[stdout]->name);
+	  for( i = 1; i <= ListNumItems(stdio_devices[stdout]); i++ ) {
+	    ListGetItem(stdio_devices[stdout], &dev, i);
+	    printf ("%s ", dev->name);
+	  }
+	  printf("\n");
 	}
 
 	printf ("Err:   ");
 	if (stdio_devices[stderr] == NULL) {
 		printf ("No error devices available!\n");
 	} else {
-		printf ("%s\n", stdio_devices[stderr]->name);
+	  for( i = 1; i <= ListNumItems(stdio_devices[stderr]); i++ ) {
+	    ListGetItem(stdio_devices[stderr], &dev, i);
+	    printf ("%s ", dev->name);
+	  }
+	  printf("\n");
 	}
 #endif /* CFG_CONSOLE_INFO_QUIET */
 
-	/* Setting environment variables */
+	/* set the environment variables (will overwrite previous env settings) */
+	char      names[256];
 	for (i = 0; i < 3; i++) {
-		setenv (stdio_names[i], stdio_devices[i]->name);
-	}
+	  
+	  int j;
+	  names[0] = '\0';
+	  for( j = 1; j <= ListNumItems(stdio_devices[i]); j++ ) {
+	    ListGetItem(stdio_devices[i], &dev, j);
+	    if( (strlen(names) + strlen(dev->name)) < sizeof(names) ) {
+	      strcat(names, dev->name);
+	      strcat(names, " ");
+	    }
+	  }
 
+	  setenv (stdio_names[i], names);
+	}
 #if 0
 	/* If nothing usable installed, use only the initial console */
 	if ((stdio_devices[stdin] == NULL) && (stdio_devices[stdout] == NULL))
diff -purN u-boot-0.4.6/common/devices.c u-boot-0.4.6-1/common/devices.c
--- u-boot-0.4.6/common/devices.c	Sun Jun 22 12:18:42 2003
+++ u-boot-0.4.6-1/common/devices.c	Fri Aug 22 18:40:49 2003
@@ -34,7 +34,8 @@
 #endif
 
 list_t devlist = 0;
-device_t *stdio_devices[] = { NULL, NULL, NULL };
+//device_t *stdio_devices[] = { NULL, NULL, NULL };
+list_t stdio_devices[] = {NULL, NULL, NULL};
 char *stdio_names[MAX_FILES] = { "stdin", "stdout", "stderr" };
 
 #if defined(CONFIG_SPLASH_SCREEN) && !defined(CFG_DEVICE_NULLDEV)
@@ -131,27 +132,52 @@ int device_deregister(char *devname)
 		}
 	}
 	if(dev_index<0) /* device not found */
-		return 0;
+	  return -1;
+
 	/* get stdio devices (ListRemoveItem changes the dev list) */
 	for (l=0 ; l< MAX_FILES; l++) {
-		if (stdio_devices[l] == dev) {
-			/* Device is assigned -> report error */
-			return -1;
-		}
-		memcpy (&temp_names[l][0],
-			stdio_devices[l]->name,
-			sizeof(stdio_devices[l]->name));
+
+	  for( i = 1; i <= ListNumItems(stdio_devices[l]); i++ ) {
+
+	    device_t* stdio = ListGetItem(stdio_devices[l], i);
+
+	    //if (stdio_devices[l] == dev) {
+	    if( stdio == dev ) { 	    
+	      /* Device is assigned -> report error */
+	      return -1;
+	    }
+	    memcpy (&temp_names[l][0],
+		    //stdio_devices[l]->name,
+		    stdio->name,
+		    //sizeof(stdio_devices[l]->name));
+		    sizeof(stdio->name));
+	  }
 	}
 	ListRemoveItem(devlist,NULL,dev_index);
+
+
 	/* reassign Device list */
+
+	ListClear(stdio_devices[stdin]);  // addresses of devices have changed, re-fill lists
+	ListClear(stdio_devices[stdout]);
+	ListClear(stdio_devices[stdout]);
+
 	for (i=1; i<=ListNumItems(devlist); i++) {
 		dev = ListGetPtrToItem (devlist, i);
-		for (l=0 ; l< MAX_FILES; l++) {
-			if(strcmp(dev->name,temp_names[l])==0) {
-				stdio_devices[l] = dev;
-			}
+		//for (l=0 ; l< MAX_FILES; l++) {
+		//	if(strcmp(dev->name,temp_names[l])==0) {
+		//		stdio_devices[l] = dev;
+		//	}
+		//}
+		if ((dev->flags & DEV_FLAGS_INPUT) && (inputdev == NULL)) {
+			ListInsertItem(stdio_devices[stdin], &dev, LIST_END);
+		}
+		if ((dev->flags & DEV_FLAGS_OUTPUT) && (outputdev == NULL)) {
+			ListInsertItem(stdio_devices[stdout], &dev, LIST_END);
+			ListInsertItem(stdio_devices[stderr], &dev, LIST_END);
 		}
 	}
+
 	return 0;
 }
 #endif	/* CFG_DEVICE_DEREGISTER */
@@ -173,6 +199,10 @@ int devices_init (void)
 
 	/* Initialize the list */
 	devlist = ListCreate (sizeof (device_t));
+	/* support multiple input/output devices at one time */
+	stdio_devices[stdin]  = ListCreate (sizeof (device_t*));
+	stdio_devices[stdout] = ListCreate (sizeof (device_t*));
+	stdio_devices[stderr] = ListCreate (sizeof (device_t*));
 
 	if (devlist == NULL) {
 		eputs ("Cannot initialize the list of devices!\n");
@@ -193,7 +223,7 @@ int devices_init (void)
 #ifdef CONFIG_LOGBUFFER
 	drv_logbuff_init ();
 #endif
-	drv_system_init ();
+	drv_system_init ();	
 
 	gd-> flags |= GD_FLG_DEVINIT;	/* device initialization done */
 
diff -purN u-boot-0.4.6/common/lists.c u-boot-0.4.6-1/common/lists.c
--- u-boot-0.4.6/common/lists.c	Sat Aug 17 04:36:03 2002
+++ u-boot-0.4.6-1/common/lists.c	Fri Aug 22 18:41:51 2003
@@ -454,6 +454,8 @@ void ListReplaceItems ( list_t list, voi
 			 (*list)->itemSize * numItemsToReplace);
 }
 
+#endif	/* CFG_ALL_LIST_FUNCTIONS */
+
 /*******************************/
 
 void ListGetItem (list_t list, void *itemDestination, int itemPosition)
@@ -461,7 +463,21 @@ void ListGetItem (list_t list, void *ite
 	ListGetItems (list, itemDestination, itemPosition, 1);
 }
 
-#endif	/* CFG_ALL_LIST_FUNCTIONS */
+/*******************************/
+
+void ListGetItems (list_t list, void *itemsDestination,
+		   int firstItemPosition, int numItemsToGet)
+{
+
+	if (firstItemPosition == LIST_START)
+		firstItemPosition = 1;
+	else if (firstItemPosition == LIST_END)
+		firstItemPosition = (*list)->numItems;
+
+	memcpy (itemsDestination,
+		ITEMPTR (list, firstItemPosition - 1),
+		(*list)->itemSize * numItemsToGet);
+}
 
 /*******************************/
 
@@ -506,22 +522,6 @@ void ListRemoveItems (list_t list, void 
 
 /*******************************/
 
-void ListGetItems (list_t list, void *itemsDestination,
-		   int firstItemPosition, int numItemsToGet)
-{
-
-	if (firstItemPosition == LIST_START)
-		firstItemPosition = 1;
-	else if (firstItemPosition == LIST_END)
-		firstItemPosition = (*list)->numItems;
-
-	memcpy (itemsDestination,
-		ITEMPTR (list, firstItemPosition - 1),
-		(*list)->itemSize * numItemsToGet);
-}
-
-/*******************************/
-
 /*
  * Returns a pointer to the item at itemPosition. returns null if an
  * errors occurred.
diff -purN u-boot-0.4.6/config.mk u-boot-0.4.6-1/config.mk
--- u-boot-0.4.6/config.mk	Thu Jul 24 18:38:38 2003
+++ u-boot-0.4.6-1/config.mk	Fri Aug 22 18:36:38 2003
@@ -98,6 +98,13 @@ OBJCOPY = $(CROSS_COMPILE)objcopy
 OBJDUMP = $(CROSS_COMPILE)objdump
 RANLIB	= $(CROSS_COMPILE)RANLIB
 
+#
+# Use ccache if avail
+#
+CCACHE=$(shell which ccache 2>/dev/null >&2 && echo "ccache ")
+HOSTCC:=$(CCACHE)$(HOSTCC)
+CC:=$(CCACHE)$(CC)
+
 RELFLAGS= $(PLATFORM_RELFLAGS)
 DBGFLAGS= -g #-DDEBUG
 OPTFLAGS= -Os #-fomit-frame-pointer
diff -purN u-boot-0.4.6/cpu/arm925t/omap925.c u-boot-0.4.6-1/cpu/arm925t/omap925.c
--- u-boot-0.4.6/cpu/arm925t/omap925.c	Wed Jul 16 16:53:03 2003
+++ u-boot-0.4.6-1/cpu/arm925t/omap925.c	Fri Aug 22 18:42:26 2003
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2003
- * Texas Instruments <www.ti.com>
+ * Richard Woodruff,Texas Instruments <www.ti.com>
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -71,3 +71,35 @@ void archflashwp (void *archdata, int wp
 	else
 		*fgc |= FLASH_GLOBAL_CTRL_NWP;
 }
+
+/* Put the C55 which comes with the core to sleep. This saves power and puts it into 
+ * a know state.
+ */
+void idle_dsp(void)
+{  
+  *ARM_CKCTL |= BIT13;                /* enable DSP clock. */
+  udelay(10);
+  *ARM_IDLECT2 |= BIT6;               /* Enable MPUI clock */
+  udelay(10);		
+  *MPUI_CTRL_REG = 0xFF2F;            /* setup api, mainly /2+defaults */
+  *MPUI_DSP_BOOT_CONFIG = 0x2;	      /* Setup mpui -- DSP to boot into sleep */
+  *MPUI_DSP_API_CONFIG  = 0;          /* Set API reg to 0 */
+  *ARM_RSTCT1 |= BIT2;                /* Release DSP from reset. */
+  udelay(10);
+  *DSP_IDLECT1 = 0xffff;              /* all dsp clocks off in sleep */
+  *DSP_IDLECT2 = 0x0;                 /* shut down any clocks */
+  udelay(10);
+  *ARM_RSTCT1 |= BIT1;                /* Enable DSP -- DSP should boot into idle. */
+  udelay(300);                        /* allow time for it to finish with mpui (no isr handshake) */
+  { __u32 zz=0;
+      while(1){                       /* Report back when the DSP is actully idled. */
+	    if(*ARM_SYSST && BIT6){
+		if(zz > 0x10000)
+       		    printf("dsp idle in %x\n",zz);
+	     ++zz;
+	     break;
+	    }
+      }
+  }   
+}
+
diff -purN u-boot-0.4.6/cpu/arm925t/start.S u-boot-0.4.6-1/cpu/arm925t/start.S
--- u-boot-0.4.6/cpu/arm925t/start.S	Sat Jul 26 19:21:15 2003
+++ u-boot-0.4.6-1/cpu/arm925t/start.S	Fri Aug 22 18:42:36 2003
@@ -177,9 +177,9 @@ relocate:
 	/*
 	 * relocate armboot to RAM
 	 */
-	adr	r0, _start		/* r0 <- current position of code */
-	ldr	r2, _armboot_start
-	ldr	r3, _armboot_end
+	adr	r0, _start		/* r0, find addr of start (0 for 1510) */
+	ldr	r2, _armboot_start	/* get value of armboot start (text_base, sdram addr, ex 11f00000)*/
+	ldr	r3, _armboot_end	/* get end of text image */
 	sub	r2, r3, r2		/* r2 <- size of armboot */
 	ldr	r1, _TEXT_BASE		/* r1 <- destination address */
 	add	r2, r0, r2		/* r2 <- source end address */
@@ -408,6 +408,17 @@ fiq:
 	bl 	do_fiq
 
 #endif
+	.align 5
+.global arm925_cache_flush
+arm925_cache_flush:
+		bic	r1, pc, #15             @ get current rounded address into r1
+		add	r2, r1, #16384		@ 2x the largest dcache size
+1:		ldr	r3, [r1], #16		@ s/w flush D cache
+		teq	r1, r2			@ are we done
+		bne	1b			@ loop if not done
+		mcr	p15, 0, r1, c7, c7, 0	@ flush I cache
+		mcr	p15, 0, r1, c7, c10, 4	@ drain WB
+		mov	pc, lr			@ back to caller
 
 	.align	5
 .globl reset_cpu
diff -purN u-boot-0.4.6/drivers/smc91111.c u-boot-0.4.6-1/drivers/smc91111.c
--- u-boot-0.4.6/drivers/smc91111.c	Fri Jun 27 16:32:37 2003
+++ u-boot-0.4.6-1/drivers/smc91111.c	Fri Aug 22 18:43:42 2003
@@ -52,7 +52,7 @@
  .    o   skeleton.c by Donald Becker ( becker@cesdis.gsfc.nasa.gov )
  .
  . History:
- .      06/19/03  Richard Woodruff Made u-boot environment aware and added mac addr checks.
+ .  06/19/03  Richard Woodruff Made u-boot environment aware and added mac addr checks. 
  .	10/17/01  Marco Hasewinkel Modify for DNP/1110
  .	07/25/01  Woojung Huh      Modify for ADS Bitsy
  .	04/25/01  Daris A Nevil    Initial public release through SMSC
@@ -1340,7 +1340,7 @@ static void smc_phy_configure()
 	SMC_outw( RPC_DEFAULT, RPC_REG );
 
   smc_phy_configure_exit:
-
+	;
 }
 #endif /* !CONFIG_SMC91111_EXT_PHY */
 
diff -purN u-boot-0.4.6/include/arm925t.h u-boot-0.4.6-1/include/arm925t.h
--- u-boot-0.4.6/include/arm925t.h	Tue Jul 15 15:04:06 2003
+++ u-boot-0.4.6-1/include/arm925t.h	Fri Aug 22 18:44:27 2003
@@ -6,10 +6,13 @@
 #ifndef __ARM925T_H__
 #define __ARM925T_H__
 
+#include <asm/arch/bits.h>
+
 void gpioreserve(ushort mask);
 void gpiosetdir(ushort mask, ushort in);
 void gpiosetout(ushort mask, ushort out);
 void gpioinit(void);
 void archflashwp(void *archdata, int wp);
+void idle_dsp(void);
 
 #endif /*__ARM925T_H__*/
diff -purN u-boot-0.4.6/include/asm-arm/arch-arm925t/bits.h u-boot-0.4.6-1/include/asm-arm/arch-arm925t/bits.h
--- u-boot-0.4.6/include/asm-arm/arch-arm925t/bits.h	Wed Dec 31 18:00:00 1969
+++ u-boot-0.4.6-1/include/asm-arm/arch-arm925t/bits.h	Fri Aug 22 18:51:27 2003
@@ -0,0 +1,33 @@
+#define BIT0  (1<<0)
+#define BIT1  (1<<1)
+#define BIT2  (1<<2)
+#define BIT3  (1<<3)
+#define BIT4  (1<<4)
+#define BIT5  (1<<5)
+#define BIT6  (1<<6)
+#define BIT7  (1<<7)
+#define BIT8  (1<<8)
+#define BIT9  (1<<9)
+#define BIT10 (1<<10)
+#define BIT11 (1<<11)
+#define BIT12 (1<<12)
+#define BIT13 (1<<13)
+#define BIT14 (1<<14)
+#define BIT15 (1<<15)
+#define BIT16 (1<<16)
+#define BIT17 (1<<17)
+#define BIT18 (1<<18)
+#define BIT19 (1<<19)
+#define BIT20 (1<<20)
+#define BIT21 (1<<21)
+#define BIT22 (1<<22)
+#define BIT23 (1<<23)
+#define BIT24 (1<<24)
+#define BIT25 (1<<25)
+#define BIT26 (1<<26)
+#define BIT27 (1<<27)
+#define BIT28 (1<<28)
+#define BIT29 (1<<29)
+#define BIT30 (1<<30)
+#define BIT31 (1<<31)
+
diff -purN u-boot-0.4.6/include/config.h u-boot-0.4.6-1/include/config.h
--- u-boot-0.4.6/include/config.h	Wed Dec 31 18:00:00 1969
+++ u-boot-0.4.6-1/include/config.h	Fri Aug 22 19:14:59 2003
@@ -0,0 +1,2 @@
+/* Automatically generated - do not edit */
+#include <configs/omap1510inn.h>
diff -purN u-boot-0.4.6/include/config.mk u-boot-0.4.6-1/include/config.mk
--- u-boot-0.4.6/include/config.mk	Wed Dec 31 18:00:00 1969
+++ u-boot-0.4.6-1/include/config.mk	Fri Aug 22 19:14:59 2003
@@ -0,0 +1,3 @@
+ARCH  = arm
+CPU   = arm925t
+BOARD = omap1510inn
diff -purN u-boot-0.4.6/include/configs/omap1510.h u-boot-0.4.6-1/include/configs/omap1510.h
--- u-boot-0.4.6/include/configs/omap1510.h	Wed Jul 16 16:53:04 2003
+++ u-boot-0.4.6-1/include/configs/omap1510.h	Fri Aug 22 19:13:45 2003
@@ -67,6 +67,27 @@
 #define OMAP1510_MCBSP3_SIZE	 SZ_4K
 #define OMAP1510_MCBSP3_START	 0xE1017000
 
+#define OMAP1510_MCBSP2_PCR0	(OMAP1510_MCBSP2_BASE + 0x24)
+#define OMAP1510_MCBSP2_SRGR1	(OMAP1510_MCBSP2_BASE + 0x16)
+#define OMAP1510_MCBSP2_SRGR2	(OMAP1510_MCBSP2_BASE + 0x14)
+#define OMAP1510_MCBSP2_XCR1	(OMAP1510_MCBSP2_BASE + 0x12)
+#define OMAP1510_MCBSP2_XCR2	(OMAP1510_MCBSP2_BASE + 0x10)
+#define OMAP1510_MCBSP2_RCR1	(OMAP1510_MCBSP2_BASE + 0xE)
+#define OMAP1510_MCBSP2_RCR2	(OMAP1510_MCBSP2_BASE + 0xC)
+#define OMAP1510_MCBSP2_SPCR1	(OMAP1510_MCBSP2_BASE + 0xA)
+#define OMAP1510_MCBSP2_SPCR1_RRESET	(1 << 0)
+#define OMAP1510_MCBSP2_SPCR1_RRDY	(1 << 1)
+#define OMAP1510_MCBSP2_SPCR1_RFULL	(1 << 2)
+#define OMAP1510_MCBSP2_SPCR2	(OMAP1510_MCBSP2_BASE + 0x8)
+#define OMAP1510_MCBSP2_SPCR2_XRESET	(1 << 0)
+#define OMAP1510_MCBSP2_SPCR2_XRDY	(1 << 1)
+#define OMAP1510_MCBSP2_SPCR2_XEMPTY	(1 << 2)
+#define OMAP1510_MCBSP2_DXR1	(OMAP1510_MCBSP2_BASE + 0x6)
+#define OMAP1510_MCBSP2_DXR2	(OMAP1510_MCBSP2_BASE + 0x4)
+#define OMAP1510_MCBSP2_DRR1	(OMAP1510_MCBSP2_BASE + 0x2)
+#define OMAP1510_MCBSP2_DRR1_MASK	(0x7FF8)
+#define OMAP1510_MCBSP2_DRR2	(OMAP1510_MCBSP2_BASE + 0x0)
+
 /*
  * Where's the flush address (for flushing D and I cache?)
  */
@@ -209,6 +230,30 @@
 
 #define OMAP_LCD_CONTROL	TI925_LCD_CONTROL
 
+#define LCD_FRAME_BASE          0x10400000
+#define LCD_FRAME_DRAW_BASE     (LCD_FRAME_BASE + 0x20)
+#define LCD_FRAME_END           (LCD_FRAME_BASE + 0x4B01F)
+
+
+/* MPU registers */
+
+/* 
+ * Keypad regs 
+ */
+#define KBR_LATCH		(OMAP1510_MPUIO_BASE + 0x10)	/* R  16 bits */
+#define KBC_REG			(OMAP1510_MPUIO_BASE + 0x14)	/* RW 16 bits */
+#define KBD_INT			(OMAP1510_MPUIO_BASE + 0x20)	/* R  16 bits */
+#define KBD_MASKIT		(OMAP1510_MPUIO_BASE + 0x28)	/* RW 16 bits */
+
+/* Keypad matrix rows and columns */
+#define KBC_COUNT	(2)
+#define KBR_COUNT	(5)
+
+#define KBC_ALL		((1<<KBC_COUNT)-1)
+#define KBR_ALL		((1<<KBR_COUNT)-1)
+
+
+
 /*
  * MMC/SD Host Controller Registers
  */
@@ -301,6 +346,14 @@
 #define OMAP1510_DMA_BASE 0xFFFED800
 #define OMAP_DMA_BASE	  OMAP1510_DMA_BASE
 
+#define DMA_GCR           (OMAP_DMA_BASE + 0x0)
+#define DMA_LCD_CTRL	  0xFFFEDB00
+#define DMA_LCD_TOP_F1_L  0xFFFEDB02
+#define DMA_LCD_TOP_F1_U  0xFFFEDB04
+#define DMA_LCD_BOT_F1_L  0xFFFEDB06
+#define DMA_LCD_BOT_F1_U  0xFFFEDB08
+
+
 /* Global Register selection */
 #define NO_GLOBAL_DMA_ACCESS 0
 
@@ -309,13 +362,6 @@
  */
 #define LCD_CHANNEL 0xc
 
-/* Register Select Field (LCD) */
-#define DMA_LCD_CTRL		0
-#define DMA_LCD_TOP_F1_L	1
-#define DMA_LCD_TOP_F1_U	2
-#define DMA_LCD_BOT_F1_L	3
-#define DMA_LCD_BOT_F1_U	4
-
 #define LCD_FRAME_MODE		(1<<0)
 #define LCD_FRAME_IT_IE		(1<<1)
 #define LCD_BUS_ERROR_IT_IE	(1<<2)
@@ -324,6 +370,15 @@
 #define LCD_BUS_ERROR_IT_COND	(1<<5)
 #define LCD_SOURCE_IMIF		(1<<6)
 
+
+/*
+ * PWL
+ */
+#define PWL_BASE  0xFFFB5800
+#define PWL_LEVEL (PWL_BASE + 0x0)
+#define PWL_CTRL  (PWL_BASE + 0x4)
+
+
 /*
  * Real-Time Clock
  */
@@ -414,6 +469,8 @@
 #define MPUIO_DATA_INPUT_REG	(OMAP1510_MPUIO_BASE + 0x0)
 #define MPUIO_DATA_OUTPUT_REG	(OMAP1510_MPUIO_BASE + 0x4)
 #define MPUIO_DIR_CONTROL_REG	(OMAP1510_MPUIO_BASE + 0x8)
+#define MPUIO_DEBOUNCING_REG	(OMAP1510_MPUIO_BASE + 0x30)
+#define MPUIO_GPIO_LATCH_REG	(OMAP1510_MPUIO_BASE + 0x34)
 
 /* ---------------------------------------------------------------------------
  *  OMAP1510 TIPB (only)
@@ -562,6 +619,11 @@ int cpu_type(void);
 #define ARM_RSTCT2	(volatile __u16 *)(CLKGEN_RESET_BASE + 0x14)
 #define ARM_SYSST	(volatile __u16 *)(CLKGEN_RESET_BASE + 0x18)
 
+#define DSP_CLKGEN_RESET_BASE (0xE1008000)
+#define DSP_IDLECT1     (volatile __u16 *)(DSP_CLKGEN_RESET_BASE + 0x04)
+#define DSP_IDLECT2     (volatile __u16 *)(DSP_CLKGEN_RESET_BASE + 0x08)
+#define DSP_RSTCT2      (volatile __u16 *)(DSP_CLKGEN_RESET_BASE + 0x14)
+
 
 #define CK_CLKIN	12 /* MHz */
 #define CK_RATEF	1
@@ -684,3 +746,45 @@ int cpu_type(void);
 
 #define IRQ_LEVEL_INT		1
 #define IRQ_EDGE_INT		0
+
+/* GPIO regs */
+#define GPIO_BASE          0xFFFCE000
+#define GPIO_INPUT_LATCH   (GPIO_BASE + 0x00)
+#define GPIO_OUTPUT_LATCH  (GPIO_BASE + 0x04)
+#define GPIO_DIR_CTRL      (GPIO_BASE + 0x08)
+
+#define GPIO_0 (1<<0)
+#define GPIO_1 (1<<1)
+#define GPIO_2 (1<<2)
+#define GPIO_3 (1<<3)
+#define GPIO_4 (1<<4)
+#define GPIO_5 (1<<5)
+#define GPIO_6 (1<<6)
+#define GPIO_7 (1<<7)
+#define GPIO_8 (1<<8)
+#define GPIO_9 (1<<9)
+#define GPIO_10 (1<<10)
+#define GPIO_11 (1<<11)
+#define GPIO_12 (1<<12)
+#define GPIO_13 (1<<13)
+#define GPIO_14 (1<<14)
+#define GPIO_15 (1<<15)
+
+/* ARMIO regs */
+#define ARMIO_BASE          0xFFFB5000
+#define ARMIO_INPUT_LATCH   (ARMIO_BASE + 0x00)
+#define ARMIO_OUTPUT_LATCH  (ARMIO_BASE + 0x04)
+#define ARMIO_IO_CTRL       (ARMIO_BASE + 0x08)
+
+#define ARMIO_0 (1<<0)
+#define ARMIO_1 (1<<1)
+#define ARMIO_2 (1<<2)
+#define ARMIO_3 (1<<3)
+#define ARMIO_4 (1<<4)
+#define ARMIO_5 (1<<5)
+#define ARMIO_6 (1<<6)
+#define ARMIO_7 (1<<7)
+#define ARMIO_11 (1<<11)
+#define ARMIO_12 (1<<12)
+
+
diff -purN u-boot-0.4.6/include/console.h u-boot-0.4.6-1/include/console.h
--- u-boot-0.4.6/include/console.h	Sun Nov 12 17:38:42 2000
+++ u-boot-0.4.6-1/include/console.h	Fri Aug 22 18:44:42 2003
@@ -30,7 +30,7 @@
 ** VARIABLES
 */
 
-extern device_t	*stdio_devices[] ;
+extern list_t stdio_devices[];
 extern char *stdio_names[MAX_FILES] ;
 
 int console_realloc(int top);
diff -purN u-boot-0.4.6/include/devices.h u-boot-0.4.6-1/include/devices.h
--- u-boot-0.4.6/include/devices.h	Tue Jun  3 18:54:43 2003
+++ u-boot-0.4.6-1/include/devices.h	Fri Aug 22 18:44:50 2003
@@ -83,7 +83,8 @@ typedef struct {
  * VARIABLES
  */
 extern list_t devlist;
-extern device_t *stdio_devices[];
+//extern device_t *stdio_devices[];
+extern list_t stdio_devices[];
 extern char *stdio_names[MAX_FILES];
 
 /*
diff -purN u-boot-0.4.6/include/lists.h u-boot-0.4.6-1/include/lists.h
--- u-boot-0.4.6/include/lists.h	Fri Jun 27 16:32:40 2003
+++ u-boot-0.4.6-1/include/lists.h	Fri Aug 22 18:45:24 2003
@@ -39,17 +39,18 @@ void    *ListGetPtrToItem(list_t list, i
 void    ListRemoveItem(list_t list, void *itemDestination, int itemPosition);
 void    ListRemoveItems(list_t list, void *itemsDestination, int firstItemPosition, int numItemsToRemove);
 
+void    ListGetItem(list_t list, void *itemDestination, int itemPosition);
+void    ListGetItems(list_t list, void *itemsDestination, int firstItemPosition, int numItemsToGet);
+void    ListClear(list_t list);
+
 #if 0	/* rarely ever used; kept here for reference just in case ... */
 void    ListDisposePtrList(list_t list);
-void    ListGetItem(list_t list, void *itemDestination, int itemPosition);
 void    ListReplaceItem(list_t list, void *ptrToItem, int itemPosition);
 void    ListRemoveItem(list_t list, void *itemDestination, int itemPosition);
-void    ListGetItems(list_t list, void *itemsDestination, int firstItemPosition, int numItemsToGet);
 void    ListReplaceItems(list_t list, void *ptrToItems, int firstItemPosition, int numItemsToReplace);
 void    ListRemoveItems(list_t list, void *itemsDestination, int firstItemPosition, int numItemsToRemove);
 list_t  ListCopy(list_t originalList);
 int     ListAppend(list_t list1, list_t list2);
-void    ListClear(list_t list);
 int     ListEqual(list_t list1, list_t list2);
 int     ListInsertInOrder(list_t list, void *ptrToItem, CompareFunction compareFunction);
 void    *ListGetDataPtr(list_t list);
diff -purN u-boot-0.4.6/lib_arm/cache.c u-boot-0.4.6-1/lib_arm/cache.c
--- u-boot-0.4.6/lib_arm/cache.c	Sun Sep  8 12:56:50 2002
+++ u-boot-0.4.6-1/lib_arm/cache.c	Fri Aug 22 18:46:47 2003
@@ -21,9 +21,10 @@
  * MA 02111-1307 USA
  */
 
-/* for now: just dummy functions to satisfy the linker */
-
 void  flush_cache (unsigned long dummy1, unsigned long dummy2)
 {
+#ifdef CONFIG_OMAP1510
+	arm925_cache_flush();
+#endif
 	return;
 }
