Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / arch / arm / mach-omap1 / sram-init.c
diff --git a/kernel/arch/arm/mach-omap1/sram-init.c b/kernel/arch/arm/mach-omap1/sram-init.c
new file mode 100644 (file)
index 0000000..6431b0f
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * OMAP SRAM detection and management
+ *
+ * Copyright (C) 2005 Nokia Corporation
+ * Written by Tony Lindgren <tony@atomide.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/io.h>
+
+#include <asm/fncpy.h>
+#include <asm/tlb.h>
+#include <asm/cacheflush.h>
+
+#include <asm/mach/map.h>
+
+#include "soc.h"
+#include "sram.h"
+
+#define OMAP1_SRAM_PA          0x20000000
+#define SRAM_BOOTLOADER_SZ     0x80
+
+/*
+ * The amount of SRAM depends on the core type.
+ * Note that we cannot try to test for SRAM here because writes
+ * to secure SRAM will hang the system. Also the SRAM is not
+ * yet mapped at this point.
+ */
+static void __init omap_detect_and_map_sram(void)
+{
+       unsigned long omap_sram_skip = SRAM_BOOTLOADER_SZ;
+       unsigned long omap_sram_start = OMAP1_SRAM_PA;
+       unsigned long omap_sram_size;
+
+       if (cpu_is_omap7xx())
+               omap_sram_size = 0x32000;       /* 200K */
+       else if (cpu_is_omap15xx())
+               omap_sram_size = 0x30000;       /* 192K */
+       else if (cpu_is_omap1610() || cpu_is_omap1611() ||
+                       cpu_is_omap1621() || cpu_is_omap1710())
+               omap_sram_size = 0x4000;        /* 16K */
+       else {
+               pr_err("Could not detect SRAM size\n");
+               omap_sram_size = 0x4000;
+       }
+
+       omap_map_sram(omap_sram_start, omap_sram_size,
+               omap_sram_skip, 1);
+}
+
+static void (*_omap_sram_reprogram_clock)(u32 dpllctl, u32 ckctl);
+
+void omap_sram_reprogram_clock(u32 dpllctl, u32 ckctl)
+{
+       BUG_ON(!_omap_sram_reprogram_clock);
+       /* On 730, bit 13 must always be 1 */
+       if (cpu_is_omap7xx())
+               ckctl |= 0x2000;
+       _omap_sram_reprogram_clock(dpllctl, ckctl);
+}
+
+int __init omap_sram_init(void)
+{
+       omap_detect_and_map_sram();
+       _omap_sram_reprogram_clock =
+                       omap_sram_push(omap1_sram_reprogram_clock,
+                                       omap1_sram_reprogram_clock_sz);
+
+       return 0;
+}