]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
arm, arm-kirkwood: disable l2c before linux boot
authorMichael Walle <[michael@walle.cc]>
Mon, 6 Feb 2012 17:12:10 +0000 (22:42 +0530)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Sun, 12 Feb 2012 09:11:28 +0000 (10:11 +0100)
The decompressor expects the L2 cache to be disabled. This fixes booting
some kernels, which have CONFIG_ARM_PATCH_PHYS_VIRT enabled.

Signed-off-by: Michael Walle <michael@walle.cc>
Acked-by: Prafulla Wadaskar <prafulla@marvell.com>
Cc: Albert ARIBAUD <albert.u.boot@aribaud.net>
Cc: Prafulla Wadaskar <prafulla@marvell.com>
Cc: Wolfgang Denk <wd@denx.de>
arch/arm/cpu/arm926ejs/cache.c
arch/arm/cpu/arm926ejs/cpu.c
arch/arm/cpu/arm926ejs/kirkwood/Makefile
arch/arm/cpu/arm926ejs/kirkwood/cache.c [new file with mode: 0644]

index ee90ab71958792f5257a304d6db5be589f21d510..504f604684d5098b8048338a63ab5dae7d573b55 100644 (file)
@@ -68,3 +68,12 @@ void  flush_cache(unsigned long start, unsigned long size)
 {
 }
 #endif /* #ifndef CONFIG_SYS_DCACHE_OFF */
+
+/*
+ * Stub implementations for l2 cache operations
+ */
+void __l2_cache_disable(void)
+{
+}
+void l2_cache_disable(void)
+        __attribute__((weak, alias("__l2_cache_disable")));
index 5c902dfc133dea358d1e81a4a37e552d7603ee6b..626384c3fc1e3d4156dded9141b55d95987c1216 100644 (file)
@@ -50,6 +50,8 @@ int cleanup_before_linux (void)
        /* turn off I/D-cache */
        icache_disable();
        dcache_disable();
+       l2_cache_disable();
+
        /* flush I/D-cache */
        cache_flush();
 
index 07542975e68b8a259a8caef81a575eef81f4fdaf..777006c4fd905e296fcbbafe51eb14ff13b780a0 100644 (file)
@@ -30,6 +30,7 @@ COBJS-y       = cpu.o
 COBJS-y        += dram.o
 COBJS-y        += mpp.o
 COBJS-y        += timer.o
+COBJS-y        += cache.o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
 OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS-y))
diff --git a/arch/arm/cpu/arm926ejs/kirkwood/cache.c b/arch/arm/cpu/arm926ejs/kirkwood/cache.c
new file mode 100644 (file)
index 0000000..645d962
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2012 Michael Walle
+ * Michael Walle <michael@walle.cc>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc.
+ */
+#include <common.h>
+#include <asm/arch/cpu.h>
+
+#define FEROCEON_EXTRA_FEATURE_L2C_EN (1<<22)
+
+void l2_cache_disable()
+{
+       u32 ctrl;
+
+       ctrl = readfr_extra_feature_reg();
+       ctrl &= ~FEROCEON_EXTRA_FEATURE_L2C_EN;
+       writefr_extra_feature_reg(ctrl);
+}