diff -Nur u-boot-2016.01.orig/board/ti/beagle/beagle.c u-boot-2016.01/board/ti/beagle/beagle.c --- u-boot-2016.01.orig/board/ti/beagle/beagle.c 2016-01-12 11:06:54.000000000 -0300 +++ u-boot-2016.01/board/ti/beagle/beagle.c 2016-02-24 19:45:05.779336247 -0300 @@ -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 @@ * 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 @@ 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 @@ 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, @@ -471,6 +475,30 @@ } 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(); diff -Nur u-boot-2016.01.orig/include/configs/omap3_beagle.h u-boot-2016.01/include/configs/omap3_beagle.h --- u-boot-2016.01.orig/include/configs/omap3_beagle.h 2016-01-12 11:06:54.000000000 -0300 +++ u-boot-2016.01/include/configs/omap3_beagle.h 2016-02-24 19:50:25.959802093 -0300 @@ -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 */ @@ -124,51 +130,71 @@ #define CONFIG_SYS_MAX_NAND_DEVICE 1 /* Max number of NAND */ /* devices */ +/* Enable Extlinux boot support */ +#define CONFIG_CMD_PXE +#define CONFIG_MENU +#define BOOT_TARGET_DEVICES(func) +#include + #define CONFIG_EXTRA_ENV_SETTINGS \ - "loadaddr=0x80200000\0" \ - "rdaddr=0x81000000\0" \ + BOOTENV \ + "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\0" \ + "bootfile=zImage\0" \ + "rdfile=initramfs-linux.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;" \ + "run scan_dev_for_boot;" \ + "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 +207,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