aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/cmd_bootm.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
index f701ab6f7c6..da38c322a23 100644
--- a/common/cmd_bootm.c
+++ b/common/cmd_bootm.c
@@ -36,6 +36,10 @@
#include <lmb.h>
#include <asm/byteorder.h>
+#if (CONFIG_COMMANDS & CFG_CMD_USB)
+#include <usb.h>
+#endif
+
#ifdef CFG_HUSH_PARSER
#include <hush.h>
#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