diff --git a/board/ti/beagle/beagle.c b/board/ti/beagle/beagle.c
index ff317ef..8c1639b 100644
--- a/board/ti/beagle/beagle.c
+++ b/board/ti/beagle/beagle.c
@@ -56,6 +56,7 @@
 #define BBTOYS_WIFI			0x01000B00
 #define BBTOYS_VGA			0x02000B00
 #define BBTOYS_LCD			0x03000B00
+#define BBTOYS_ULCD			0x04000B00
 #define BCT_BRETTL3			0x01000F00
 #define BCT_BRETTL4			0x02000F00
 #define LSR_COM6L_ADPT			0x01001300
@@ -211,25 +212,25 @@ void get_board_mem_timings(struct board_sdrc_timings *timings)
  *		bus 1 for the availability of an AT24C01B serial EEPROM.
  *		returns the device_vendor field from the EEPROM
  */
-static unsigned int get_expansion_id(void)
+static unsigned int get_expansion_id(int eeprom_address)
 {
 	i2c_set_bus_num(EXPANSION_EEPROM_I2C_BUS);
 
 	/* return BEAGLE_NO_EEPROM if eeprom doesn't respond */
-	if (i2c_probe(EXPANSION_EEPROM_I2C_ADDRESS) == 1) {
+	if (i2c_probe(eeprom_address) == 1) {
 		i2c_set_bus_num(TWL4030_I2C_BUS);
 		return BEAGLE_NO_EEPROM;
 	}
 
 	/* read configuration data */
-	i2c_read(EXPANSION_EEPROM_I2C_ADDRESS, 0, 1, (u8 *)&expansion_config,
+	i2c_read(eeprom_address, 0, 1, (u8 *)&expansion_config,
 		 sizeof(expansion_config));
 
 	/* retry reading configuration data with 16bit addressing */
 	if ((expansion_config.device_vendor == 0xFFFFFF00) ||
 	    (expansion_config.device_vendor == 0xFFFFFFFF)) {
 		printf("EEPROM is blank or 8bit addressing failed: retrying with 16bit:\n");
-		i2c_read(EXPANSION_EEPROM_I2C_ADDRESS, 0, 2, (u8 *)&expansion_config,
+		i2c_read(eeprom_address, 0, 2, (u8 *)&expansion_config,
 			 sizeof(expansion_config));
 	}
 
@@ -341,15 +342,18 @@ int misc_init_r(void)
 	case REVISION_AXBX:
 		printf("Beagle Rev Ax/Bx\n");
 		setenv("beaglerev", "AxBx");
+		setenv("musb", "musb_hdrc.fifo_mode=5");
 		break;
 	case REVISION_CX:
 		printf("Beagle Rev C1/C2/C3\n");
 		setenv("beaglerev", "Cx");
+		setenv("musb", "musb_hdrc.fifo_mode=5");
 		MUX_BEAGLE_C();
 		break;
 	case REVISION_C4:
 		printf("Beagle Rev C4\n");
 		setenv("beaglerev", "C4");
+		setenv("musb", "musb_hdrc.fifo_mode=5");
 		MUX_BEAGLE_C();
 		/* Set VAUX2 to 1.8V for EHCI PHY */
 		twl4030_pmrecv_vsel_cfg(TWL4030_PM_RECEIVER_VAUX2_DEDICATED,
@@ -390,7 +394,7 @@ int misc_init_r(void)
 		generate_fake_mac = true;
 	}
 
-	switch (get_expansion_id()) {
+	switch (get_expansion_id(EXPANSION_EEPROM_I2C_ADDRESS)) {
 	case TINCANTOOLS_ZIPPY:
 		printf("Recognized Tincantools Zippy board (rev %d %s)\n",
 			expansion_config.revision,
@@ -473,6 +477,30 @@ int misc_init_r(void)
 	if (expansion_config.content == 1)
 		setenv(expansion_config.env_var, expansion_config.env_setting);
 
+	/* Scan 0x51 as well for loop-thru boards */
+	switch (get_expansion_id(EXPANSION_EEPROM_I2C_ADDRESS + 1)) {
+	case BBTOYS_ULCD:
+		printf("Recognized BeagleBoardToys uLCD-lite board\n");
+		setenv("buddy2", "bbtoys-ulcd");
+		setenv("defaultdisplay", "dvi");
+		setenv("dvimode", "800x480MR-16@60");
+		setenv("lcd1", "i2c mw 40 00 00; i2c mw 40 04 80; i2c mw 40 0d 05");
+		setenv("lcdcmd", "i2c dev 1 ; run lcd1; i2c dev 0");
+		setenv("kmsmode", "video=DVI-D-1:800x480");
+		break;
+	case BEAGLE_NO_EEPROM:
+		printf("No EEPROM on expansion board\n");
+		setenv("buddy2", "none");
+		break;
+	default:
+		printf("Unrecognized expansion board: %x\n",
+			expansion_config.device_vendor);
+		setenv("buddy2", "unknown");
+	}
+
+	if (expansion_config.content == 1)
+		setenv(expansion_config.env_var, expansion_config.env_setting);
+
 	twl4030_power_init();
 	switch (get_board_revision()) {
 	case REVISION_XM_AB:
diff --git a/include/configs/omap3_beagle.h b/include/configs/omap3_beagle.h
index 65f08a1..5058c3f 100644
--- a/include/configs/omap3_beagle.h
+++ b/include/configs/omap3_beagle.h
@@ -91,6 +91,12 @@
 #define CONFIG_USB_ETHER_MCS7830
 #define CONFIG_USB_ETHER_SMSC95XX
 
+/* Parabola GNU/Linux-libre extras */
+#define CONFIG_IDENT_STRING " Parabola GNU/Linux-libre"
+#define CONFIG_SUPPORT_RAW_INITRD
+#define CONFIG_CMD_PART
+#define CONFIG_PARTITION_UUIDS
+
 /* GPIO banks */
 #define CONFIG_OMAP3_GPIO_5		/* GPIO128..159 is in GPIO bank 5 */
 #define CONFIG_OMAP3_GPIO_6		/* GPIO160..191 is in GPIO bank 6 */
@@ -125,50 +131,62 @@
 							/* devices */
 
 #define CONFIG_EXTRA_ENV_SETTINGS \
-	"loadaddr=0x80200000\0" \
-	"rdaddr=0x81000000\0" \
+	"loadaddr=0x82000000\0" \
+	"rdaddr=0x88080000\0" \
 	"fdt_high=0xffffffff\0" \
-	"fdtaddr=0x80f80000\0" \
-	"usbtty=cdc_acm\0" \
-	"bootfile=uImage\0" \
-	"ramdisk=ramdisk.gz\0" \
-	"bootdir=/boot\0" \
-	"bootpart=0:2\0" \
+	"fdtaddr=0x88000000\0" \
 	"console=ttyO2,115200n8\0" \
-	"mpurate=auto\0" \
-	"buddy=none\0" \
-	"optargs=\0" \
-	"camera=none\0" \
-	"vram=12M\0" \
-	"dvimode=640x480MR-16@60\0" \
-	"defaultdisplay=dvi\0" \
+	"fdtfile=undefined\0" \
+	"bootpart=0:1\0" \
+	"bootdir=\0" \
+	"fdtdir=/dtbs/linux-libre\0" \
+	"bootfile=vmlinuz-linux-libre\0" \
+	"rdfile=initramfs-linux-libre.img\0" \
 	"mmcdev=0\0" \
-	"mmcroot=/dev/mmcblk0p2 rw\0" \
-	"mmcrootfstype=ext3 rootwait\0" \
-	"nandroot=ubi0:rootfs ubi.mtd=4\0" \
-	"nandrootfstype=ubifs\0" \
-	"ramroot=/dev/ram0 rw ramdisk_size=65536 initrd=0x81000000,64M\0" \
-	"ramrootfstype=ext2\0" \
+	"optargs=\0" \
 	"mmcargs=setenv bootargs console=${console} " \
 		"${optargs} " \
-		"mpurate=${mpurate} " \
-		"buddy=${buddy} "\
-		"camera=${camera} "\
-		"vram=${vram} " \
-		"omapfb.mode=dvi:${dvimode} " \
-		"omapdss.def_disp=${defaultdisplay} " \
-		"root=${mmcroot} " \
-		"rootfstype=${mmcrootfstype}\0" \
-	"nandargs=setenv bootargs console=${console} " \
-		"${optargs} " \
-		"mpurate=${mpurate} " \
-		"buddy=${buddy} "\
-		"camera=${camera} "\
-		"vram=${vram} " \
-		"omapfb.mode=dvi:${dvimode} " \
-		"omapdss.def_disp=${defaultdisplay} " \
-		"root=${nandroot} " \
-		"rootfstype=${nandrootfstype}\0" \
+		"root=${root} " \
+		"${musb} " \
+		"${cmdline}\0" \
+	"loadimage=load ${devtype} ${bootpart} ${loadaddr} ${bootdir}/${bootfile}\0" \
+	"loadrd=load ${devtype} ${bootpart} ${rdaddr} ${bootdir}/${rdfile}\0" \
+	"loadfdt=echo loading ${fdtdir}/${fdtfile} ...; load ${devtype} ${bootpart} ${fdtaddr} ${fdtdir}/${fdtfile}\0" \
+	"mmcboot=usb start;" \
+		"for devtype in mmc usb; do " \
+			"setenv devnum 0;" \
+			"while ${devtype} dev ${devnum}; do " \
+				"echo ${devtype} found on device ${devnum};" \
+				"setenv bootpart ${devnum}:1;" \
+				"if test ${devtype} = mmc; then part uuid mmc ${devnum}:2 uuid; else part uuid ${devtype} ${devnum}:1 uuid; fi;" \
+				"part uuid ${devtype} ${rootpart} uuid;" \
+				"setenv root PARTUUID=${uuid} rw rootwait;" \
+				"echo Checking for: ${bootdir}/uEnv.txt ...;" \
+				"if test -e ${devtype} ${bootpart} ${bootdir}/uEnv.txt; then " \
+					"load ${devtype} ${bootpart} ${loadaddr} ${bootdir}/uEnv.txt;" \
+					"env import -t ${loadaddr} ${filesize};" \
+					"echo Loaded environment from ${bootdir}/uEnv.txt;" \
+					"echo Checking if uenvcmd is set ...;" \
+					"if test -n ${uenvcmd}; then " \
+						"echo Running uenvcmd ...;" \
+						"run uenvcmd;" \
+					"fi;" \
+				"fi;" \
+				"if run loadimage; then " \
+					"run mmcargs;" \
+					"if run loadfdt; then " \
+						"if run loadrd; then " \
+							"bootz ${loadaddr} ${rdaddr}:${filesize} ${fdtaddr};" \
+						"else " \
+							"bootz ${loadaddr} - ${fdtaddr};" \
+						"fi;" \
+					"fi;" \
+				"else " \
+					"echo No kernel found;" \
+				"fi;" \
+				"setexpr devnum ${devnum} + 1;" \
+			"done;" \
+		"done;\0" \
 	"findfdt=" \
 		"if test $beaglerev = AxBx; then " \
 			"setenv fdtfile omap3-beagle.dtb; fi; " \
@@ -181,81 +199,11 @@
 		"if test $beaglerev = xMC; then " \
 			"setenv fdtfile omap3-beagle-xm.dtb; fi; " \
 		"if test $fdtfile = undefined; then " \
-			"echo WARNING: Could not determine device tree to use; fi; \0" \
-	"validatefdt=" \
-		"if test $beaglerev = xMAB; then " \
-			"if test ! -e mmc ${bootpart} ${bootdir}/${fdtfile}; then " \
-				"setenv fdtfile omap3-beagle-xm.dtb; " \
-			"fi; " \
-		"fi; \0" \
-	"bootenv=uEnv.txt\0" \
-	"loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}\0" \
-	"importbootenv=echo Importing environment from mmc ...; " \
-		"env import -t -r $loadaddr $filesize\0" \
-	"ramargs=setenv bootargs console=${console} " \
-		"${optargs} " \
-		"mpurate=${mpurate} " \
-		"buddy=${buddy} "\
-		"vram=${vram} " \
-		"omapfb.mode=dvi:${dvimode} " \
-		"omapdss.def_disp=${defaultdisplay} " \
-		"root=${ramroot} " \
-		"rootfstype=${ramrootfstype}\0" \
-	"loadramdisk=load mmc ${bootpart} ${rdaddr} ${bootdir}/${ramdisk}\0" \
-	"loadimage=load mmc ${bootpart} ${loadaddr} ${bootdir}/${bootfile}\0" \
-	"loadbootscript=load mmc ${mmcdev} ${loadaddr} boot.scr\0" \
-	"bootscript=echo Running bootscript from mmc${mmcdev} ...; " \
-		"source ${loadaddr}\0" \
-	"loadfdt=run validatefdt; load mmc ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile}\0" \
-	"mmcboot=echo Booting from mmc ...; " \
-		"run mmcargs; " \
-		"bootm ${loadaddr}\0" \
-	"mmcbootz=echo Booting with DT from mmc${mmcdev} ...; " \
-		"run mmcargs; " \
-		"bootz ${loadaddr} - ${fdtaddr}\0" \
-	"nandboot=echo Booting from nand ...; " \
-		"run nandargs; " \
-		"nand read ${loadaddr} 280000 400000; " \
-		"bootm ${loadaddr}\0" \
-	"ramboot=echo Booting from ramdisk ...; " \
-		"run ramargs; " \
-		"bootm ${loadaddr}\0" \
-	"userbutton=if gpio input 173; then run userbutton_xm; " \
-		"else run userbutton_nonxm; fi;\0" \
-	"userbutton_xm=gpio input 4;\0" \
-	"userbutton_nonxm=gpio input 7;\0"
-/* "run userbutton" will return 1 (false) if pressed and 0 (true) if not */
+			"echo WARNING: Could not determine device tree to use; fi; \0"
+
 #define CONFIG_BOOTCOMMAND \
 	"run findfdt; " \
-	"mmc dev ${mmcdev}; if mmc rescan; then " \
-		"if run userbutton; then " \
-			"setenv bootenv uEnv.txt;" \
-		"else " \
-			"setenv bootenv user.txt;" \
-		"fi;" \
-		"echo SD/MMC found on device ${mmcdev};" \
-		"if run loadbootenv; then " \
-			"echo Loaded environment from ${bootenv};" \
-			"run importbootenv;" \
-		"fi;" \
-		"if test -n $uenvcmd; then " \
-			"echo Running uenvcmd ...;" \
-			"run uenvcmd;" \
-		"fi;" \
-		"if run loadbootscript; then " \
-			"run bootscript; " \
-		"else " \
-			"if run loadimage; then " \
-				"run mmcboot;" \
-			"fi;" \
-		"fi; " \
-	"fi;" \
-	"run nandboot;" \
-	"setenv bootfile zImage;" \
-	"if run loadimage; then " \
-		"run loadfdt;" \
-		"run mmcbootz; " \
-	"fi; " \
+	"run mmcboot"
 
 /*
  * OMAP3 has 12 GP timers, they can be driven by the system clock
-- 
2.7.0

