Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / u-boot / arch / arm / cpu / arm946es / cpu.c
diff --git a/qemu/roms/u-boot/arch/arm/cpu/arm946es/cpu.c b/qemu/roms/u-boot/arch/arm/cpu/arm946es/cpu.c
new file mode 100644 (file)
index 0000000..0c8d92d
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger@sysgo.de>
+ *
+ * (C) Copyright 2002
+ * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+/*
+ * CPU specific code
+ */
+
+#include <common.h>
+#include <command.h>
+#include <asm/system.h>
+
+static void cache_flush(void);
+
+int cleanup_before_linux (void)
+{
+       /*
+        * this function is called just before we call linux
+        * it prepares the processor for linux
+        *
+        * we turn off caches etc ...
+        */
+
+       disable_interrupts ();
+
+       /* ARM926E-S needs the protection unit enabled for the icache to have
+        * been enabled  - left for possible later use
+        * should turn off the protection unit as well....
+        */
+       /* turn off I/D-cache */
+       icache_disable();
+       dcache_disable();
+       /* flush I/D-cache */
+       cache_flush();
+
+       return 0;
+}
+
+/* flush I/D-cache */
+static void cache_flush (void)
+{
+       unsigned long i = 0;
+
+       asm ("mcr p15, 0, %0, c7, c5, 0": :"r" (i));
+       asm ("mcr p15, 0, %0, c7, c6, 0": :"r" (i));
+}