* Patch by Imre Deak, 26 May 2004:
  On OMAP1610 platforms check if booting from RAM(CS0) or flash(CS3).
  Set flash base accordingly, and decide whether to do or skip board
  specific setup steps.

* Patch by Josef Baumgartner, 26 May 2004:
  Add missing define in include/asm-m68k/global_data.h
diff --git a/CHANGELOG b/CHANGELOG
index 7922cde..21dddf1 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,14 @@
 Changes since U-Boot 1.1.1:
 ======================================================================
 
+* Patch by Imre Deak, 26 May 2004:
+  On OMAP1610 platforms check if booting from RAM(CS0) or flash(CS3).
+  Set flash base accordingly, and decide whether to do or skip board
+  specific setup steps.
+
+* Patch by Josef Baumgartner, 26 May 2004:
+  Add missing define in include/asm-m68k/global_data.h
+
 * Patch by Josef Baumgartner, 25 May 2004:
   Add missing functions get_ticks() and get_tbclk() in lib_m68k/time.c
 
diff --git a/Makefile b/Makefile
index ee66787..4b9596d 100644
--- a/Makefile
+++ b/Makefile
@@ -1020,7 +1020,7 @@
 
 xtract_trab = $(subst _bigram,,$(subst _bigflash,,$(subst _old,,$(subst _config,,$1))))
 
-xtract_omap1610xxx = $(subst _cs0boot,,$(subst _cs3boot,, $(subst _config,,$1)))
+xtract_omap1610xxx = $(subst _cs0boot,,$(subst _cs3boot,,$(subst _cs_autoboot,,$(subst _config,,$1))))
 
 xtract_omap730p2 = $(subst _cs0boot,,$(subst _cs3boot,, $(subst _config,,$1)))
 
@@ -1045,12 +1045,17 @@
 omap1610inn_config \
 omap1610inn_cs0boot_config \
 omap1610inn_cs3boot_config \
+omap1610inn_cs_autoboot_config \
 omap1610h2_config \
 omap1610h2_cs0boot_config \
-omap1610h2_cs3boot_config :	unconfig
+omap1610h2_cs3boot_config \
+omap1610h2_cs_autoboot_config:	unconfig
 	@if [ "$(findstring _cs0boot_, $@)" ] ; then \
 		echo "#define CONFIG_CS0_BOOT" >> ./include/config.h ; \
 		echo "... configured for CS0 boot"; \
+	elif [ "$(findstring _cs_autoboot_, $@)" ] ; then \
+		echo "#define CONFIG_CS_AUTOBOOT" >> ./include/config.h ; \
+		echo "... configured for CS_AUTO boot"; \
 	else \
 		echo "#define CONFIG_CS3_BOOT" >> ./include/config.h ; \
 		echo "... configured for CS3 boot"; \
diff --git a/board/omap1610inn/flash.c b/board/omap1610inn/flash.c
index 9b7e4ad..c8e4c9e 100644
--- a/board/omap1610inn/flash.c
+++ b/board/omap1610inn/flash.c
@@ -89,11 +89,12 @@
 {
 	int i;
 	ulong size = 0;
+
 	for (i = 0; i < CFG_MAX_FLASH_BANKS; i++) {
 		switch (i) {
 		case 0:
-			flash_get_size ((FPW *) PHYS_FLASH_1, &flash_info[i]);
-			flash_get_offsets (PHYS_FLASH_1, &flash_info[i]);
+			flash_get_size ((FPW *) CFG_FLASH_BASE, &flash_info[i]);
+			flash_get_offsets (CFG_FLASH_BASE, &flash_info[i]);
 			/* to reset the lock bit */
 			flash_unlock(&flash_info[i]);
 			break;
diff --git a/board/omap1610inn/omap1610innovator.c b/board/omap1610inn/omap1610innovator.c
index 521eee3..ab1dabe 100644
--- a/board/omap1610inn/omap1610innovator.c
+++ b/board/omap1610inn/omap1610innovator.c
@@ -36,6 +36,10 @@
 #include <./configs/omap1510.h>
 #endif
 
+#ifdef CONFIG_CS_AUTOBOOT
+unsigned long omap_flash_base;
+#endif
+
 void flash__init (void);
 void ether__init (void);
 void set_muxconf_regs (void);
@@ -95,6 +99,12 @@
 {
 #define EMIFS_GlB_Config_REG 0xfffecc0c
 	unsigned int regval;
+
+#ifdef CONFIG_CS_AUTOBOOT
+	 /* Check swapping of CS0 and CS3, set flash base accordingly */
+        omap_flash_base = ((*((u32 *)OMAP_EMIFS_CONFIG_REG) & 0x02) == 0) ?
+			                PHYS_FLASH_1_BM0 : PHYS_FLASH_1_BM1;
+#endif
 	regval = *((volatile unsigned int *) EMIFS_GlB_Config_REG);
 	/* Turn off write protection for flash devices. */
 	regval = regval | 0x0001;
diff --git a/board/omap1610inn/platform.S b/board/omap1610inn/platform.S
index 441edc2..d694f94 100644
--- a/board/omap1610inn/platform.S
+++ b/board/omap1610inn/platform.S
@@ -71,6 +71,12 @@
 	ldr	r1,	VAL_ARM_IDLECT3
 	str	r1,	[r0]
 
+#ifdef CONFIG_CS_AUTOBOOT		/* do the setup depending on boot mode */
+	ldr	r0, CONF_STATUS
+	ldr	r1, [r0]
+	tst	r1, #0x02
+	beq	disable_wd		/* booting from RAM, skip setup */
+#endif
 
 	mov	r1,	#0x01		/* PER_EN bit */
 	ldr	r0,	REG_ARM_RSTCT2
@@ -118,6 +124,7 @@
 	/*------------------------------------------------------*
 	 * Turn off the watchdog during init...			*
  	 *------------------------------------------------------*/
+disable_wd:
 	ldr	r0,	REG_WATCHDOG
 	ldr	r1,	WATCHDOG_VAL1
 	str	r1,	[r0]
@@ -281,6 +288,10 @@
 	/* the literal pools origin */
 	.ltorg
 
+#ifdef CONFIG_CS_AUTOBOOT
+CONF_STATUS:
+	.word 0xfffe1130	/* 32 bits */
+#endif
 
 REG_TC_EMIFS_CONFIG:		/* 32 bits */
 	.word 0xfffecc0c
diff --git a/include/asm-m68k/global_data.h b/include/asm-m68k/global_data.h
index f8a3d88..f68352f 100644
--- a/include/asm-m68k/global_data.h
+++ b/include/asm-m68k/global_data.h
@@ -56,6 +56,7 @@
  */
 #define	GD_FLG_RELOC	0x00001		/* Code was relocated to RAM		*/
 #define	GD_FLG_DEVINIT	0x00002		/* Devices have been initialized	*/
+#define	GD_FLG_SILENT	0x00004		/* Silent mode				*/
 
 #if 0
 extern gd_t *global_data;
diff --git a/include/configs/omap1610h2.h b/include/configs/omap1610h2.h
index e512f91..b2b0fe7 100644
--- a/include/configs/omap1610h2.h
+++ b/include/configs/omap1610h2.h
@@ -142,18 +142,29 @@
 /*-----------------------------------------------------------------------
  * Physical Memory Map
  */
-#define CONFIG_NR_DRAM_BANKS	1	/* we have 1 bank of DRAM */
-#define PHYS_SDRAM_1	0x10000000	/* SDRAM Bank #1 */
+#define CONFIG_NR_DRAM_BANKS	1		/* we have 1 bank of DRAM */
+#define PHYS_SDRAM_1		0x10000000	/* SDRAM Bank #1 */
 #define PHYS_SDRAM_1_SIZE	0x02000000	/* 32 MB */
 
-#ifdef CONFIG_CS0_BOOT
-#define PHYS_FLASH_1	0x0C000000
-#endif
-#ifdef CONFIG_CS3_BOOT
-#define PHYS_FLASH_1	0x00000000
-#endif
+#define PHYS_FLASH_1_BM1	0x00000000	/* Flash Bank #1 if booting from flash */
+#define PHYS_FLASH_1_BM0	0x0C000000	/* Flash Bank #1 if booting from RAM */
 
-#define CFG_FLASH_BASE	PHYS_FLASH_1
+#ifdef CONFIG_CS_AUTOBOOT			/* Determine CS assignment in runtime */
+				
+#ifndef __ASSEMBLY__
+extern unsigned long omap_flash_base;		/* set in flash__init */
+#endif
+#define CFG_FLASH_BASE		omap_flash_base
+
+#elif defined(CONFIG_CS0_BOOT)
+
+#define CFG_FLASH_BASE		PHYS_FLASH_1_BM0
+
+#else
+
+#define CFG_FLASH_BASE		PHYS_FLASH_1_BM1
+
+#endif
 
 /*-----------------------------------------------------------------------
  * FLASH and environment organization
diff --git a/include/configs/omap1610inn.h b/include/configs/omap1610inn.h
index da8043d..cbf828c 100644
--- a/include/configs/omap1610inn.h
+++ b/include/configs/omap1610inn.h
@@ -147,18 +147,29 @@
 /*-----------------------------------------------------------------------
  * Physical Memory Map
  */
-#define CONFIG_NR_DRAM_BANKS	1	/* we have 1 bank of DRAM */
-#define PHYS_SDRAM_1	0x10000000	/* SDRAM Bank #1 */
+#define CONFIG_NR_DRAM_BANKS	1		/* we have 1 bank of DRAM */
+#define PHYS_SDRAM_1		0x10000000	/* SDRAM Bank #1 */
 #define PHYS_SDRAM_1_SIZE	0x02000000	/* 32 MB */
 
-#ifdef CONFIG_CS0_BOOT
-#define PHYS_FLASH_1	0x0C000000
-#endif
-#ifdef CONFIG_CS3_BOOT
-#define PHYS_FLASH_1	0x00000000
-#endif
+#define PHYS_FLASH_1_BM1	0x00000000	/* Flash Bank #1 if booting from flash */
+#define PHYS_FLASH_1_BM0	0x0C000000	/* Flash Bank #1 if booting from RAM */
 
-#define CFG_FLASH_BASE	PHYS_FLASH_1
+#ifdef CONFIG_CS_AUTOBOOT			/* Determine CS assignment in runtime */
+				
+#ifndef __ASSEMBLY__
+extern unsigned long omap_flash_base;		/* set in flash__init */
+#endif
+#define CFG_FLASH_BASE		omap_flash_base
+
+#elif defined(CONFIG_CS0_BOOT)
+
+#define CFG_FLASH_BASE		PHYS_FLASH_1_BM0
+
+#else
+
+#define CFG_FLASH_BASE		PHYS_FLASH_1_BM1
+
+#endif
 
 /*-----------------------------------------------------------------------
  * FLASH and environment organization