diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c index f701ab6f7..da38c322a 100644 --- a/common/cmd_bootm.c +++ b/common/cmd_bootm.c @@ -36,6 +36,10 @@ #include #include +#if (CONFIG_COMMANDS & CFG_CMD_USB) +#include +#endif + #ifdef CFG_HUSH_PARSER #include #endif @@ -213,6 +217,20 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) */ iflag = disable_interrupts(); +#if (CONFIG_COMMANDS & CFG_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_AMIGAONEG3SE /* * We've possible left the caches enabled during