Quote:
Originally Posted by h1uke
u-boot/ imx50_yoshi.c says (CONFIG_BIST, CONFIG_CMD_PMIC and CONFIG_CMD_IDME are defined):
Code:
inline int check_boot_mode(void)
{
char boot_mode[20];
char boot_cmd[20];
#ifdef CONFIG_BIST
setenv("bootdelay", "-1");
#endif
#if defined(CONFIG_CMD_IDME)
if (idme_get_var("bootmode", boot_mode, 20))
#endif
{
return -1;
}
boot_cmd[0] = 0;
if (!strncmp(boot_mode, "diags", 5)) {
printf ("BOOTMODE OVERRIDE: DIAGS\n");
strcpy(boot_cmd, "run bootcmd_diags");
} else if (!strncmp(boot_mode, "fastboot", 8)) {
printf ("BOOTMODE OVERRIDE: FASTBOOT\n");
strcpy(boot_cmd, "run bootcmd_fastboot");
} else if (!strncmp(boot_mode, "factory", 7)) {
#if defined(CONFIG_PMIC)
if (pmic_charging()) {
char *cmd = (char *) CONFIG_BISTCMD_LOCATION;
/* Ignore any bist commands */
cmd[0] = 0;
printf ("BOOTMODE OVERRIDE OVERRIDE: DIAGS\n");
#if defined(CONFIG_CMD_IDME)
/* Update bootmode idme var */
idme_update_var("bootmode", "diags");
#endif
/* Set the bootcmd to diags and boot immediately */
setenv("bootcmd", "run bootcmd_diags");
setenv("bootdelay", "0");
return 0;
}
#endif //CONFIG_PMIC
printf ("BOOTMODE OVERRIDE: FACTORY\n");
strcpy(boot_cmd, "run bootcmd_factory");
} else if (!strncmp(boot_mode, "reset", 7)) {
printf ("BOOTMODE OVERRIDE: RESET\n");
strcpy(boot_cmd, "bist reset");
} else if (!strncmp(boot_mode, "main", 4)) {
/* clear bootargs */
setenv("bootargs", "\0");
/* set bootcmd back to default */
sprintf(boot_cmd, "bootm 0x%x", CONFIG_MMC_BOOTFLASH_ADDR);
return 0;
} else {
return 0;
}
setenv("bootcmd", boot_cmd);
return 0;
}
i.e. the diag mode is forced if pmic_charging() returns nonzero
|
It should work only if
boot_mode is set to "factory", right? By default,
boot_mode is set to "main". It's initialized from some configuration variable (
idme variable), persistently stored at eMMC. You can change
bootmode from U-Boot console (by
idme command) or from root shell on device (by
/usr/sbin/idme tool).