diff options
Diffstat (limited to 'common/cmd_bootm.c')
-rw-r--r-- | common/cmd_bootm.c | 53 |
1 files changed, 27 insertions, 26 deletions
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c index 3009ece..02a5013 100644 --- a/common/cmd_bootm.c +++ b/common/cmd_bootm.c @@ -516,36 +516,13 @@ static cmd_tbl_t cmd_bootm_sub[] = { }; static int boot_selected_os(int argc, char * const argv[], int state, - bootm_headers_t *images, boot_os_fn *boot_fn, ulong *iflag) + bootm_headers_t *images, boot_os_fn *boot_fn) { if (images->os.type == IH_TYPE_STANDALONE) { /* This may return when 'autostart' is 'no' */ bootm_start_standalone(argc, argv); return 0; } - /* - * We have reached the point of no return: we are going to - * overwrite all exception vector code, so we cannot easily - * recover from any failures any more... - */ - *iflag = disable_interrupts(); -#ifdef CONFIG_NETCONSOLE - /* Stop the ethernet stack if NetConsole could have left it up */ - eth_halt(); -#endif - -#if defined(CONFIG_CMD_USB) - /* - * turn off USB to prevent the host controller from writing to the - * SDRAM while Linux is booting. This could happen (at least for OHCI - * controller), because the HCCA (Host Controller Communication Area) - * lies within the SDRAM and the host controller writes continously to - * this area (as busmaster!). The HccaFrameNumber is for example - * updated every 1 ms within the HCCA structure in SDRAM! For more - * details see the OpenHCI specification. - */ - usb_stop(); -#endif #ifdef CONFIG_SILENT_CONSOLE if (images->os.os == IH_OS_LINUX) fixup_silent_linux(); @@ -611,6 +588,30 @@ static int do_bootm_states(cmd_tbl_t *cmdtp, int flag, int argc, argc = 0; /* consume the args */ } + /* + * We have reached the point of no return: we are going to + * overwrite all exception vector code, so we cannot easily + * recover from any failures any more... + */ + iflag = disable_interrupts(); +#ifdef CONFIG_NETCONSOLE + /* Stop the ethernet stack if NetConsole could have left it up */ + eth_halt(); +#endif + +#if defined(CONFIG_CMD_USB) + /* + * turn off USB to prevent the host controller from writing to the + * SDRAM while Linux is booting. This could happen (at least for OHCI + * controller), because the HCCA (Host Controller Communication Area) + * lies within the SDRAM and the host controller writes continously to + * this area (as busmaster!). The HccaFrameNumber is for example + * updated every 1 ms within the HCCA structure in SDRAM! For more + * details see the OpenHCI specification. + */ + usb_stop(); +#endif + /* Load the OS */ if (!ret && (states & BOOTM_STATE_LOADOS)) { ulong load_end; @@ -674,7 +675,7 @@ static int do_bootm_states(cmd_tbl_t *cmdtp, int flag, int argc, char *cmd_list = getenv("fakegocmd"); ret = boot_selected_os(argc, argv, BOOTM_STATE_OS_FAKE_GO, - images, boot_fn, &iflag); + images, boot_fn); if (!ret && cmd_list) ret = run_command_list(cmd_list, -1, flag); } @@ -682,7 +683,7 @@ static int do_bootm_states(cmd_tbl_t *cmdtp, int flag, int argc, /* Now run the OS! We hope this doesn't return */ if (!ret && (states & BOOTM_STATE_OS_GO)) { ret = boot_selected_os(argc, argv, BOOTM_STATE_OS_GO, - images, boot_fn, &iflag); + images, boot_fn); if (ret) goto err; } |