diff -urN a/board/omap3/evm/config.mk b/board/omap3/evm/config.mk
--- a/board/omap3/evm/config.mk	2009-06-22 11:18:33.000000000 -0700
+++ b/board/omap3/evm/config.mk	2009-06-22 11:15:16.000000000 -0700
@@ -30,4 +30,4 @@
 # (mem base + reserved)
 
 # For use with external or internal boots.
-TEXT_BASE = 0x80e80000
+TEXT_BASE = 0x40200000
diff -urN a/common/cmd_bootm.c b/common/cmd_bootm.c
--- a/common/cmd_bootm.c	2009-06-22 11:18:24.000000000 -0700
+++ b/common/cmd_bootm.c	2009-06-22 11:15:06.000000000 -0700
@@ -104,8 +104,10 @@
 			bootm_headers_t *images); /* pointers to os/initrd/fdt */
 
 #define CONFIG_BOOTM_LINUX 1
+#ifndef CONFIG_BOOTM_LINUX_ONLY
 #define CONFIG_BOOTM_NETBSD 1
 #define CONFIG_BOOTM_RTEMS 1
+#endif
 
 #ifdef CONFIG_BOOTM_LINUX
 extern boot_os_fn do_bootm_linux;
@@ -348,6 +350,7 @@
 		*load_end = load + image_len;
 		puts("OK\n");
 		break;
+#ifndef CONFIG_NO_GZIP
 	case IH_COMP_GZIP:
 		printf ("   Uncompressing %s ... ", type_name);
 		if (gunzip ((void *)load, unc_len,
@@ -361,6 +364,7 @@
 
 		*load_end = load + image_len;
 		break;
+#endif
 #ifdef CONFIG_BZIP2
 	case IH_COMP_BZIP2:
 		printf ("   Uncompressing %s ... ", type_name);
diff -urN a/common/cmd_load.c b/common/cmd_load.c
--- a/common/cmd_load.c	2009-06-22 11:18:24.000000000 -0700
+++ b/common/cmd_load.c	2009-06-22 11:15:06.000000000 -0700
@@ -983,6 +983,7 @@
 }
 static ulong load_serial_ymodem (ulong offset)
 {
+#ifndef CONFIG_CMD_LOADB_XMODEM_ONLY
 	int size;
 	char buf[32];
 	int err;
@@ -1034,6 +1035,7 @@
 	sprintf (buf, "%X", size);
 	setenv ("filesize", buf);
 
+#endif
 	return offset;
 }
 
diff -urN a/common/cmd_nvedit.c b/common/cmd_nvedit.c
--- a/common/cmd_nvedit.c	2009-06-22 11:18:24.000000000 -0700
+++ b/common/cmd_nvedit.c	2009-06-22 11:15:06.000000000 -0700
@@ -71,6 +71,7 @@
 /************************************************************************
 ************************************************************************/
 
+#ifndef CONFIG_NO_SETENV
 /*
  * Table with supported baudrates (defined in config_xyz.h)
  */
@@ -485,6 +486,12 @@
 	return _do_setenv (flag, len, local_args);
 }
 #endif
+#else
+int setenv (char *varname, char *varvalue)
+{
+    return 0;
+}
+#endif
 
 /************************************************************************
  * Look up variable from environment,
@@ -581,6 +588,7 @@
 
 /**************************************************/
 
+#ifndef CONFIG_NO_SETENV
 U_BOOT_CMD(
 	printenv, CONFIG_SYS_MAXARGS, 1,	do_printenv,
 	"print environment variables",
@@ -597,6 +605,7 @@
 	"setenv name\n"
 	"    - delete environment variable 'name'\n"
 );
+#endif
 
 #if defined(CONFIG_CMD_ASKENV)
 
diff -urN a/common/image.c b/common/image.c
--- a/common/image.c	2009-06-22 11:18:24.000000000 -0700
+++ b/common/image.c	2009-06-22 11:15:06.000000000 -0700
@@ -74,6 +74,7 @@
 #include <image.h>
 #endif /* !USE_HOSTCC*/
 
+#ifndef CONFIG_ASSUME_IMAGE_TYPES
 typedef struct table_entry {
 	int	id;		/* as defined in image.h	*/
 	char	*sname;		/* short (input) name		*/
@@ -155,6 +156,7 @@
 	{	IH_COMP_LZMA,	"lzma",		"lzma compressed",	},
 	{	-1,		"",		"",			},
 };
+#endif
 
 uint32_t crc32 (uint32_t, const unsigned char *, uint);
 uint32_t crc32_wd (uint32_t, const unsigned char *, uint, uint);
@@ -500,6 +502,16 @@
 }
 #endif /* CONFIG_TIMESTAMP || CONFIG_CMD_DATE || USE_HOSTCC */
 
+#ifdef CONFIG_ASSUME_IMAGE_TYPES
+const char *genimg_get_os_name (uint8_t os)     { return CONFIG_IMAGE_NAME_OS; }
+const char *genimg_get_arch_name (uint8_t arch) { return CONFIG_IMAGE_NAME_ARCH; }
+const char *genimg_get_type_name (uint8_t type) { return CONFIG_IMAGE_NAME_TYPE; }
+const char *genimg_get_comp_name (uint8_t comp) { return CONFIG_IMAGE_NAME_COMP; }
+int genimg_get_os_id (const char *name)         { return CONFIG_IMAGE_ID_OS; }
+int genimg_get_arch_id (const char *name)       { return CONFIG_IMAGE_ID_ARCH; }
+int genimg_get_type_id (const char *name)       { return CONFIG_IMAGE_ID_TYPE; }
+int genimg_get_comp_id (const char *name)       { return CONFIG_IMAGE_ID_COMP; }
+#else
 /**
  * get_table_entry_name - translate entry id to long name
  * @table: pointer to a translation table for entries of a specific type
@@ -610,6 +622,7 @@
 {
 	return (get_table_entry_id (uimage_comp, "Compression", name));
 }
+#endif
 
 #ifndef USE_HOSTCC
 /**
diff -urN a/cpu/arm_cortexa8/start.S b/cpu/arm_cortexa8/start.S
--- a/cpu/arm_cortexa8/start.S	2009-06-22 11:18:24.000000000 -0700
+++ b/cpu/arm_cortexa8/start.S	2009-06-22 11:15:06.000000000 -0700
@@ -32,6 +32,18 @@
 #include <config.h>
 #include <version.h>
 
+#ifdef CONFIG_FITS_IN_INTERNAL_RAM_WITH_USB
+/*
+ * If fitting in internal RAM, we reserve stack space up front.  First
+ * instruction still has to be reset vector, which we use to jump to the "old"
+ * start.
+ */
+_faux_start: 
+	ldr	pc, _real_start
+_real_start: .word _start
+	.fill CONFIG_STACKSIZE-8,1,0x55
+#endif
+
 .globl _start
 _start: b	reset
 	ldr	pc, _undefined_instruction
@@ -66,7 +78,11 @@
  *************************************************************************/
 
 _TEXT_BASE:
+#ifdef CONFIG_FITS_IN_INTERNAL_RAM_WITH_USB
+	.word	TEXT_BASE+CONFIG_STACKSIZE
+#else
 	.word	TEXT_BASE
+#endif
 
 .globl _armboot_start
 _armboot_start:
diff -urN a/include/configs/omap3_evm.h b/include/configs/omap3_evm.h
--- a/include/configs/omap3_evm.h	2009-06-22 11:18:31.000000000 -0700
+++ b/include/configs/omap3_evm.h	2009-06-22 11:15:08.000000000 -0700
@@ -34,6 +34,8 @@
 #define __CONFIG_H
 #include <asm/sizes.h>
 
+#define CONFIG_FITS_IN_INTERNAL_RAM_WITH_USB
+
 /*
  * High Level Configuration Options
  */
@@ -69,7 +71,20 @@
  */
 #define CONFIG_ENV_SIZE			SZ_128K	/* Total Size Environment */
 						/* Sector */
+#ifdef CONFIG_FITS_IN_INTERNAL_RAM_WITH_USB
+/*
+ * Hack to get heap in external RAM (while text/data/bss is in internal RAM).
+ * The "normal" way things work, is the heap is put just before the text.  
+ * So we define that section to 0.  Then we add a new malloc section at the
+ * *_START/*_LEN defined below, and if those are defined, the malloc init code
+ * will use them.
+ */
+#define CONFIG_SYS_MALLOC_LEN		(0)
+#define CONFIG_SYS_MALLOC_EXTERNAL_MEM_START	(0x84000000)
+#define CONFIG_SYS_MALLOC_EXTERNAL_MEM_LEN		(CONFIG_ENV_SIZE + SZ_128K)
+#else
 #define CONFIG_SYS_MALLOC_LEN		(CONFIG_ENV_SIZE + SZ_128K)
+#endif
 #define CONFIG_SYS_GBL_DATA_SIZE	128	/* bytes reserved for */
 						/* initial data */
 /*
@@ -98,6 +113,8 @@
 #define CONFIG_BAUDRATE			115200
 #define CONFIG_SYS_BAUDRATE_TABLE	{4800, 9600, 19200, 38400, 57600,\
 					115200}
+
+#ifndef CONFIG_FITS_IN_INTERNAL_RAM_WITH_USB
 #define CONFIG_MMC			1
 #define CONFIG_OMAP3_MMC		1
 #define CONFIG_DOS_PARTITION		1
@@ -114,6 +131,7 @@
 #define CONFIG_CMD_ONENAND	/* ONENAND support		*/
 #define CONFIG_CMD_DHCP
 #define CONFIG_CMD_PING
+#endif
 
 #undef CONFIG_CMD_FLASH		/* flinfo, erase, protect	*/
 #undef CONFIG_CMD_FPGA		/* FPGA configuration Support	*/
@@ -130,6 +148,7 @@
 /*
  * Board NAND Info.
  */
+#ifndef CONFIG_FITS_IN_INTERNAL_RAM_WITH_USB
 #define CONFIG_SYS_NAND_ADDR		NAND_BASE	/* physical address */
 							/* to access nand */
 #define CONFIG_SYS_NAND_BASE		NAND_BASE	/* physical address */
@@ -145,6 +164,7 @@
 /* start of jffs2 partition */
 #define CONFIG_JFFS2_PART_OFFSET	0x680000
 #define CONFIG_JFFS2_PART_SIZE		0xf980000	/* sz of jffs2 part */
+#endif
 
 /* Environment information */
 #define CONFIG_BOOTDELAY	10
@@ -152,6 +172,7 @@
 /*
  * USB MSC and Keyboard support
  */
+#ifndef CONFIG_FITS_IN_INTERNAL_RAM_WITH_USB
 #define CONFIG_USB_OMAP3
 #define CONFIG_MUSB_HCD
 
@@ -168,7 +189,19 @@
 #define CONFIG_PREBOOT "usb start"
 #endif
 #endif
+#endif
+
+#ifdef CONFIG_FITS_IN_INTERNAL_RAM_WITH_USB
+#define CONFIG_EXTRA_ENV_SETTINGS \
+	"bootargs=mem=128MB console=ttyS0,115200n8 rw root=/dev/ram\0"\
+	"usbtty=cdc_acm\0"\
+	"stdout=usbtty\0" \
+	"stdin=usbtty\0" \
+	"stderr=usbtty\0" \
+
+#undef CONFIG_AUTO_COMPLETE
 
+#else
 #define CONFIG_EXTRA_ENV_SETTINGS \
 	"loadaddr=0x82000000\0" \
 	"console=ttyS2,115200n8\0" \
@@ -203,13 +236,18 @@
 	"else run nandboot; fi"
 
 #define CONFIG_AUTO_COMPLETE	1
+
+#endif
+
 /*
  * Miscellaneous configurable options
  */
 #define V_PROMPT		"OMAP3_EVM # "
 
+#ifndef CONFIG_FITS_IN_INTERNAL_RAM_WITH_USB
 #define CONFIG_SYS_LONGHELP		/* undef to save memory */
 #define CONFIG_SYS_HUSH_PARSER		/* use "hush" command parser */
+#endif
 #define CONFIG_SYS_PROMPT_HUSH_PS2	"> "
 #define CONFIG_SYS_PROMPT		V_PROMPT
 #define CONFIG_SYS_CBSIZE		256	/* Console I/O Buffer Size */
@@ -242,7 +280,7 @@
  *
  * The stack sizes are set up in start.S using the settings below
  */
-#define CONFIG_STACKSIZE	SZ_128K	/* regular stack */
+#define CONFIG_STACKSIZE	SZ_4K	/* regular stack */
 #ifdef CONFIG_USE_IRQ
 #define CONFIG_STACKSIZE_IRQ	SZ_4K	/* IRQ stack */
 #define CONFIG_STACKSIZE_FIQ	SZ_4K	/* FIQ stack */
@@ -265,6 +303,7 @@
 
 /* **** PISMO SUPPORT *** */
 
+#ifndef CONFIG_FITS_IN_INTERNAL_RAM_WITH_USB
 /* Configure the PISMO */
 #define PISMO1_NAND_SIZE		GPMC_SIZE_128M
 #define PISMO1_ONEN_SIZE		GPMC_SIZE_128M
@@ -312,6 +351,9 @@
 extern unsigned int boot_flash_sec;
 extern unsigned int boot_flash_type;
 #endif
+#else
+#define CONFIG_SYS_MONITOR_LEN		0   /* don't care, but must be defined */
+#endif
 
 /*----------------------------------------------------------------------------
  * SMSC9115 Ethernet from SMSC9118 family
@@ -334,4 +376,44 @@
 #define CONFIG_BOOTP_HOSTNAME		0x00000004
 #define CONFIG_BOOTP_BOOTPATH		0x00000010
 
+
+#ifdef CONFIG_FITS_IN_INTERNAL_RAM_WITH_USB
+#define CONFIG_ENV_IS_NOWHERE	1
+#define CONFIG_SKIP_RELOCATE_UBOOT	1
+#define CONFIG_CMD_LOADB
+
+/*
+ * Defines to cut out uneeded code.
+ */
+#define CONFIG_ASSUME_IMAGE_TYPES
+#define CONFIG_IMAGE_NAME_OS "linux"
+#define CONFIG_IMAGE_NAME_ARCH "arm"
+#define CONFIG_IMAGE_NAME_TYPE "kernel"
+#define CONFIG_IMAGE_NAME_COMP "gzip"
+#define CONFIG_IMAGE_ID_OS IH_OS_LINUX
+#define CONFIG_IMAGE_ID_ARCH IH_ARCH_ARM
+#define CONFIG_IMAGE_ID_TYPE IH_TYPE_KERNEL
+#define CONFIG_IMAGE_ID_COMP IH_COMP_GZIP
+
+#undef CONFIG_SYS_CBSIZE
+#define CONFIG_SYS_CBSIZE		128	/* Console I/O Buffer Size */
+
+#define CONFIG_CMD_LOADB_XMODEM_ONLY
+#define CONFIG_BOOTM_LINUX_ONLY
+#define CONFIG_NO_SETENV
+#define CONFIG_NO_GZIP
+
+/*
+ * USB Configuration
+ */
+#define CONFIG_USB_DEVICE	1
+#define CONFIG_USB_TTY		1
+#define CONFIG_MUSB		1 /* Enable USB driver*/
+#define CONFIG_TWL4030_USB	1 /* Enable TWL4030 USB */
+
+/* Allow console in serial and USB at the same time */
+#define CONFIG_SYS_CONSOLE_IS_IN_ENV 1
+
+#endif
+
 #endif /* __CONFIG_H */
diff -urN a/lib_arm/board.c b/lib_arm/board.c
--- a/lib_arm/board.c	2009-06-22 11:18:30.000000000 -0700
+++ b/lib_arm/board.c	2009-06-22 11:15:08.000000000 -0700
@@ -93,10 +93,10 @@
 static ulong mem_malloc_brk = 0;
 
 static
-void mem_malloc_init (ulong dest_addr)
+void mem_malloc_init (ulong dest_addr, ulong len)
 {
 	mem_malloc_start = dest_addr;
-	mem_malloc_end = dest_addr + CONFIG_SYS_MALLOC_LEN;
+	mem_malloc_end = dest_addr + len;
 	mem_malloc_brk = mem_malloc_start;
 
 	memset ((void *) mem_malloc_start, 0,
@@ -351,7 +351,11 @@
 #endif /* CONFIG_LCD */
 
 	/* armboot_start is defined in the board-specific linker script */
-	mem_malloc_init (_armboot_start - CONFIG_SYS_MALLOC_LEN);
+#ifdef CONFIG_SYS_MALLOC_EXTERNAL_MEM_START
+	mem_malloc_init (CONFIG_SYS_MALLOC_EXTERNAL_MEM_START, CONFIG_SYS_MALLOC_EXTERNAL_MEM_LEN);
+#else
+	mem_malloc_init (_armboot_start - CONFIG_SYS_MALLOC_LEN, CONFIG_SYS_MALLOC_LEN);
+#endif
 
 #if defined(CONFIG_CMD_NAND)
 	puts ("NAND:  ");
diff -urN a/lib_generic/Makefile b/lib_generic/Makefile
--- a/lib_generic/Makefile	2009-06-22 11:18:24.000000000 -0700
+++ b/lib_generic/Makefile	2009-06-22 11:15:06.000000000 -0700
@@ -36,7 +36,9 @@
 COBJS-y += ctype.o
 COBJS-y += display_options.o
 COBJS-y += div64.o
+ifndef CONFIG_NO_GZIP
 COBJS-y += gunzip.o
+endif
 COBJS-y += lmb.o
 COBJS-y += ldiv.o
 COBJS-$(CONFIG_MD5) += md5.o
@@ -45,7 +47,9 @@
 COBJS-y += string.o
 COBJS-y	+= strmhz.o
 COBJS-y += vsprintf.o
+ifndef CONFIG_NO_GZIP
 COBJS-y += zlib.o
+endif
 COBJS-$(CONFIG_RBTREE)	+= rbtree.o
 
 COBJS	:= $(COBJS-y)
diff -urN a/Makefile b/Makefile
--- a/Makefile	2009-06-22 11:18:24.000000000 -0700
+++ b/Makefile	2009-06-22 11:15:06.000000000 -0700
@@ -285,7 +285,6 @@
 # The "tools" are needed early, so put this first
 # Don't include stuff already done in $(LIBS)
 SUBDIRS	= tools \
-	  examples \
 	  api_examples
 
 .PHONY : $(SUBDIRS)
