summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNitin Garg <nitin.garg@freescale.com>2014-05-27 13:38:22 -0500
committerNitin Garg <nitin.garg@freescale.com>2014-05-27 22:18:37 -0500
commit1309b1ed78b3156310cc1564d669e8e2b1c0ce5f (patch)
tree7840b98fd5b31a0cee5aaab87982921b722c07ed
parentb8ab9b3eabb94bbbc1eea63e7c0e2a87d2d645f4 (diff)
downloadu-boot-imx-1309b1ed78b3156310cc1564d669e8e2b1c0ce5f.zip
u-boot-imx-1309b1ed78b3156310cc1564d669e8e2b1c0ce5f.tar.gz
u-boot-imx-1309b1ed78b3156310cc1564d669e8e2b1c0ce5f.tar.bz2
ENGR00315499-8 Auto check if boot from usb
If boot from usb, reset environment to default value. Auto apply mfgtools setting and boot mfgtools kernel. Signed-off-by: Frank Li <Frank.li@freescale.com> Signed-off-by: Nitin Garg <nitin.garg@freescale.com>
-rw-r--r--arch/arm/include/asm/arch-mx6/imx-regs.h5
-rw-r--r--common/main.c22
-rw-r--r--include/configs/mx6sabre_common.h20
3 files changed, 47 insertions, 0 deletions
diff --git a/arch/arm/include/asm/arch-mx6/imx-regs.h b/arch/arm/include/asm/arch-mx6/imx-regs.h
index 8124ce2..dd91a81 100644
--- a/arch/arm/include/asm/arch-mx6/imx-regs.h
+++ b/arch/arm/include/asm/arch-mx6/imx-regs.h
@@ -691,5 +691,10 @@ struct wdog_regs {
extern void check_cpu_temperature(void);
+/* If ROM fail back to USB recover mode, USBPH0_PWD will be clear to use USB
+ * If boot from the other mode, USB0_PWD will keep reset value
+ */
+#define is_boot_from_usb(void) (!(readl(USB_PHY0_BASE_ADDR) & (1<<20)))
+
#endif /* __ASSEMBLER__*/
#endif /* __ASM_ARCH_MX6_IMX_REGS_H__ */
diff --git a/common/main.c b/common/main.c
index 8b6f274..c709587 100644
--- a/common/main.c
+++ b/common/main.c
@@ -17,6 +17,11 @@
#include <hush.h>
#include <malloc.h>
#include <menu.h>
+
+#ifdef is_boot_from_usb
+#include <environment.h>
+#endif
+
#include <post.h>
#include <version.h>
#include <watchdog.h>
@@ -342,6 +347,16 @@ static void process_boot_delay(void)
s = getenv ("bootdelay");
bootdelay = s ? (int)simple_strtol(s, NULL, 10) : CONFIG_BOOTDELAY;
+#ifdef is_boot_from_usb
+ if (is_boot_from_usb()) {
+ printf("Boot from USB for mfgtools\n");
+ bootdelay = 0;
+ set_default_env("Use default environment for mfgtools\n");
+ } else {
+ printf("Normal Boot\n");
+ }
+#endif
+
#ifdef CONFIG_OF_CONTROL
bootdelay = fdtdec_get_config_int(gd->fdt_blob, "bootdelay",
bootdelay);
@@ -371,6 +386,13 @@ static void process_boot_delay(void)
else
#endif /* CONFIG_BOOTCOUNT_LIMIT */
s = getenv ("bootcmd");
+#ifdef is_boot_from_usb
+ if (is_boot_from_usb()) {
+ s = getenv("bootcmd_mfg");
+ printf("Run bootcmd_mfg: %s\n", s);
+ }
+#endif
+
#ifdef CONFIG_OF_CONTROL
/* Allow the fdt to override the boot command */
env = fdtdec_get_config_string(gd->fdt_blob, "bootcmd");
diff --git a/include/configs/mx6sabre_common.h b/include/configs/mx6sabre_common.h
index b97a3ac..de93854 100644
--- a/include/configs/mx6sabre_common.h
+++ b/include/configs/mx6sabre_common.h
@@ -98,6 +98,12 @@
#define CONFIG_LOADADDR 0x12000000
#define CONFIG_SYS_TEXT_BASE 0x17800000
+#ifdef CONFIG_SYS_BOOT_NAND
+#define CONFIG_MFG_NAND_PARTITION "mtdparts=gpmi-nand:16m(boot),16m(kernel),16m(dtb),-(rootfs) "
+#else
+#define CONFIG_MFG_NAND_PARTITION ""
+#endif
+
#ifdef CONFIG_SUPPORT_EMMC_BOOT
#define EMMC_ENV \
"emmcdev=2\0" \
@@ -120,7 +126,21 @@
#define EMMC_ENV ""
#endif
+#define CONFIG_MFG_ENV_SETTINGS \
+ "mfgtool_args=setenv bootargs console=" CONFIG_CONSOLE_DEV ",115200 " \
+ "rdinit=/linuxrc " \
+ "g_mass_storage.stall=0 g_mass_storage.removable=1 " \
+ "g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF "\
+ "g_mass_storage.iSerialNumber=\"\" "\
+ "enable_wait_mode=off "\
+ CONFIG_MFG_NAND_PARTITION \
+ "\0" \
+ "initrd_addr=0x12C00000\0" \
+ "initrd_high=0xffffffff\0" \
+ "bootcmd_mfg=run mfgtool_args;bootm ${loadaddr} ${initrd_addr} ${fdt_addr};\0" \
+
#define CONFIG_EXTRA_ENV_SETTINGS \
+ CONFIG_MFG_ENV_SETTINGS \
"script=boot.scr\0" \
"image=zImage\0" \
"fdt_file=" CONFIG_DEFAULT_FDT_FILE "\0" \