mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
autostart: unify duplicated logic into the bootm code
Rather than having a bunch of random commands handle autostart behavior, unify the logic in a single place. This also fixes building of these different commands when bootm is disabled. Acked-by: Matthew McClintock <msm@freescale.com> Acked-by: Scott Wood <scottwood@freescale.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
parent
51f924e5ce
commit
67d668bf92
9 changed files with 33 additions and 85 deletions
|
@ -708,6 +708,21 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||
return 1;
|
||||
}
|
||||
|
||||
int bootm_maybe_autostart(cmd_tbl_t *cmdtp, const char *cmd)
|
||||
{
|
||||
const char *ep = getenv("autostart");
|
||||
|
||||
if (ep && !strcmp(ep, "yes")) {
|
||||
char *local_args[2];
|
||||
local_args[0] = (char *)cmd;
|
||||
local_args[1] = NULL;
|
||||
printf("Automatic boot of image at addr 0x%08lX ...\n", load_addr);
|
||||
return do_bootm(cmdtp, 0, 1, local_args);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* image_get_kernel - verify legacy format kernel image
|
||||
* @img_addr: in RAM address of the legacy format image to be verified
|
||||
|
|
|
@ -721,8 +721,6 @@ int do_fdcboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||
image_header_t *hdr; /* used for fdc boot */
|
||||
unsigned char boot_drive;
|
||||
int i,nrofblk;
|
||||
char *ep;
|
||||
int rcode = 0;
|
||||
#if defined(CONFIG_FIT)
|
||||
const void *fit_hdr = NULL;
|
||||
#endif
|
||||
|
@ -823,19 +821,7 @@ int do_fdcboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||
/* Loading ok, update default load address */
|
||||
load_addr = addr;
|
||||
|
||||
/* Check if we should attempt an auto-start */
|
||||
if (((ep = getenv("autostart")) != NULL) && (strcmp(ep,"yes") == 0)) {
|
||||
char *local_args[2];
|
||||
|
||||
local_args[0] = argv[0];
|
||||
local_args[1] = NULL;
|
||||
|
||||
printf ("Automatic boot of image at addr 0x%08lX ...\n", addr);
|
||||
|
||||
do_bootm (cmdtp, 0, 1, local_args);
|
||||
rcode ++;
|
||||
}
|
||||
return rcode;
|
||||
return bootm_maybe_autostart(cmdtp, argv[0]);
|
||||
}
|
||||
|
||||
U_BOOT_CMD(
|
||||
|
|
|
@ -40,7 +40,6 @@ int do_fdosboot(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||
char *name;
|
||||
char *ep;
|
||||
int size;
|
||||
int rcode = 0;
|
||||
char buf [12];
|
||||
int drive = CONFIG_SYS_FDC_DRIVE_NUMBER;
|
||||
|
||||
|
@ -98,15 +97,7 @@ int do_fdosboot(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||
printf("Floppy DOS load complete: %d bytes loaded to 0x%lx\n",
|
||||
size, load_addr);
|
||||
|
||||
/* Check if we should attempt an auto-start */
|
||||
if (((ep = getenv("autostart")) != NULL) && (strcmp(ep,"yes") == 0)) {
|
||||
char *local_args[2];
|
||||
local_args[0] = argv[0];
|
||||
local_args[1] = NULL;
|
||||
printf ("Automatic boot of image at addr 0x%08lX ...\n", load_addr);
|
||||
rcode = do_bootm (cmdtp, 0, 1, local_args);
|
||||
}
|
||||
return rcode;
|
||||
return bootm_maybe_autostart(cmdtp, argv[0]);
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------
|
||||
|
|
|
@ -356,7 +356,6 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||
ulong addr, cnt;
|
||||
disk_partition_t info;
|
||||
image_header_t *hdr;
|
||||
int rcode = 0;
|
||||
#if defined(CONFIG_FIT)
|
||||
const void *fit_hdr = NULL;
|
||||
#endif
|
||||
|
@ -495,19 +494,7 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||
|
||||
load_addr = addr;
|
||||
|
||||
/* Check if we should attempt an auto-start */
|
||||
if (((ep = getenv("autostart")) != NULL) && (strcmp(ep,"yes") == 0)) {
|
||||
char *local_args[2];
|
||||
|
||||
local_args[0] = argv[0];
|
||||
local_args[1] = NULL;
|
||||
|
||||
printf ("Automatic boot of image at addr 0x%08lX ...\n", addr);
|
||||
|
||||
do_bootm (cmdtp, 0, 1, local_args);
|
||||
rcode = 1;
|
||||
}
|
||||
return rcode;
|
||||
return bootm_maybe_autostart(cmdtp, argv[0]);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
|
|
@ -741,7 +741,7 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,
|
|||
ulong offset, ulong addr, char *cmd)
|
||||
{
|
||||
int r;
|
||||
char *ep, *s;
|
||||
char *s;
|
||||
size_t cnt;
|
||||
image_header_t *hdr;
|
||||
#if defined(CONFIG_FIT)
|
||||
|
@ -816,19 +816,7 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,
|
|||
|
||||
load_addr = addr;
|
||||
|
||||
/* Check if we should attempt an auto-start */
|
||||
if (((ep = getenv("autostart")) != NULL) && (strcmp(ep, "yes") == 0)) {
|
||||
char *local_args[2];
|
||||
|
||||
local_args[0] = cmd;
|
||||
local_args[1] = NULL;
|
||||
|
||||
printf("Automatic boot of image at addr 0x%08lx ...\n", addr);
|
||||
|
||||
do_bootm(cmdtp, 0, 1, local_args);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
return bootm_maybe_autostart(cmdtp, cmd);
|
||||
}
|
||||
|
||||
int do_nandboot(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
|
||||
|
|
|
@ -227,17 +227,8 @@ netboot_common (proto_t proto, cmd_tbl_t *cmdtp, int argc, char * const argv[])
|
|||
/* flush cache */
|
||||
flush_cache(load_addr, size);
|
||||
|
||||
/* Loading ok, check if we should attempt an auto-start */
|
||||
if (((s = getenv("autostart")) != NULL) && (strcmp(s,"yes") == 0)) {
|
||||
char *local_args[2];
|
||||
local_args[0] = argv[0];
|
||||
local_args[1] = NULL;
|
||||
|
||||
printf ("Automatic boot of image at addr 0x%08lX ...\n",
|
||||
load_addr);
|
||||
show_boot_progress (82);
|
||||
rcode = do_bootm (cmdtp, 0, 1, local_args);
|
||||
}
|
||||
show_boot_progress(82);
|
||||
rcode = bootm_maybe_autostart(cmdtp, argv[0]);
|
||||
|
||||
if (rcode < 0)
|
||||
show_boot_progress (-83);
|
||||
|
|
|
@ -210,7 +210,6 @@ int do_scsiboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||
ulong addr, cnt;
|
||||
disk_partition_t info;
|
||||
image_header_t *hdr;
|
||||
int rcode = 0;
|
||||
#if defined(CONFIG_FIT)
|
||||
const void *fit_hdr = NULL;
|
||||
#endif
|
||||
|
@ -326,15 +325,7 @@ int do_scsiboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||
|
||||
flush_cache (addr, (cnt+1)*info.blksz);
|
||||
|
||||
/* Check if we should attempt an auto-start */
|
||||
if (((ep = getenv("autostart")) != NULL) && (strcmp(ep,"yes") == 0)) {
|
||||
char *local_args[2];
|
||||
local_args[0] = argv[0];
|
||||
local_args[1] = NULL;
|
||||
printf ("Automatic boot of image at addr 0x%08lX ...\n", addr);
|
||||
rcode = do_bootm (cmdtp, 0, 1, local_args);
|
||||
}
|
||||
return rcode;
|
||||
return bootm_maybe_autostart(cmdtp, argv[0]);
|
||||
}
|
||||
|
||||
/*********************************************************************************
|
||||
|
|
|
@ -356,7 +356,7 @@ int do_usbboot(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||
{
|
||||
char *boot_device = NULL;
|
||||
char *ep;
|
||||
int dev, part = 1, rcode;
|
||||
int dev, part = 1;
|
||||
ulong addr, cnt;
|
||||
disk_partition_t info;
|
||||
image_header_t *hdr;
|
||||
|
@ -490,16 +490,7 @@ int do_usbboot(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||
|
||||
flush_cache(addr, (cnt+1)*info.blksz);
|
||||
|
||||
/* Check if we should attempt an auto-start */
|
||||
if (((ep = getenv("autostart")) != NULL) && (strcmp(ep, "yes") == 0)) {
|
||||
char *local_args[2];
|
||||
local_args[0] = argv[0];
|
||||
local_args[1] = NULL;
|
||||
printf("Automatic boot of image at addr 0x%08lX ...\n", addr);
|
||||
rcode = do_bootm(cmdtp, 0, 1, local_args);
|
||||
return rcode;
|
||||
}
|
||||
return 0;
|
||||
return bootm_maybe_autostart(cmdtp, argv[0]);
|
||||
}
|
||||
#endif /* CONFIG_USB_STORAGE */
|
||||
|
||||
|
|
|
@ -98,7 +98,15 @@ extern int cmd_get_data_size(char* arg, int default_size);
|
|||
#ifdef CONFIG_CMD_BOOTD
|
||||
extern int do_bootd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
|
||||
#endif
|
||||
#ifdef CONFIG_CMD_BOOTM
|
||||
extern int do_bootm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
|
||||
extern int bootm_maybe_autostart(cmd_tbl_t *cmdtp, const char *cmd);
|
||||
#else
|
||||
static inline int bootm_maybe_autostart(cmd_tbl_t *cmdtp, const char *cmd)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
extern int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
|
Loading…
Reference in a new issue