From dac218827a87348bc69af6acf401cdcea4c26fab Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Thu, 7 Jun 2012 01:43:34 -0500 Subject: [PATCH] add patch from calxeda enabling the kernel to boot on physical hardware http://lists.arm.linux.org.uk/lurker/message/20120605.031140.e7d9b601.en.html --- highbank-secure-smc.patch | 110 ++++++++++++++++++++++++++++++++++++++ kernel.spec | 7 +++ 2 files changed, 117 insertions(+) create mode 100644 highbank-secure-smc.patch diff --git a/highbank-secure-smc.patch b/highbank-secure-smc.patch new file mode 100644 index 000000000..363ea6981 --- /dev/null +++ b/highbank-secure-smc.patch @@ -0,0 +1,110 @@ +Linux runs in non-secure mode on highbank, so we need secure monitor calls +to enable and disable the PL310. Rather than invent new smc calls, the same +calling convention used by OMAP is used here. + +Signed-off-by: Rob Herring +--- + arch/arm/mach-highbank/Makefile | 6 +++++- + arch/arm/mach-highbank/core.h | 1 + + arch/arm/mach-highbank/highbank.c | 14 ++++++++++++++ + arch/arm/mach-highbank/smc.S | 29 +++++++++++++++++++++++++++++ + 4 files changed, 49 insertions(+), 1 deletion(-) + create mode 100644 arch/arm/mach-highbank/smc.S + + + +diff --git a/arch/arm/mach-highbank/Makefile b/arch/arm/mach-highbank/Makefile +index f8437dd..ded4652 100644 +--- a/arch/arm/mach-highbank/Makefile ++++ b/arch/arm/mach-highbank/Makefile +@@ -1,4 +1,8 @@ +-obj-y := clock.o highbank.o system.o ++obj-y := clock.o highbank.o system.o smc.o ++ ++plus_sec := $(call as-instr,.arch_extension sec,+sec) ++AFLAGS_smc.o :=-Wa,-march=armv7-a$(plus_sec) ++ + obj-$(CONFIG_DEBUG_HIGHBANK_UART) += lluart.o + obj-$(CONFIG_SMP) += platsmp.o + obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o +diff --git a/arch/arm/mach-highbank/core.h b/arch/arm/mach-highbank/core.h +index d8e2d0b..141ed51 100644 +--- a/arch/arm/mach-highbank/core.h ++++ b/arch/arm/mach-highbank/core.h +@@ -8,3 +8,4 @@ extern void highbank_lluart_map_io(void); + static inline void highbank_lluart_map_io(void) {} + #endif + + + ++extern void highbank_smc1(int fn, int arg); +diff --git a/arch/arm/mach-highbank/highbank.c b/arch/arm/mach-highbank/highbank.c +index 410a112..8777612 100644 +--- a/arch/arm/mach-highbank/highbank.c ++++ b/arch/arm/mach-highbank/highbank.c +@@ -85,10 +85,24 @@ const static struct of_device_id irq_match[] = { + {} + }; + + + ++#ifdef CONFIG_CACHE_L2X0 ++static void highbank_l2x0_disable(void) ++{ ++ /* Disable PL310 L2 Cache controller */ ++ highbank_smc1(0x102, 0x0); ++} ++#endif ++ + static void __init highbank_init_irq(void) + { + of_irq_init(irq_match); ++ ++#ifdef CONFIG_CACHE_L2X0 ++ /* Enable PL310 L2 Cache controller */ ++ highbank_smc1(0x102, 0x1); + l2x0_of_init(0, ~0UL); ++ outer_cache.disable = highbank_l2x0_disable; ++#endif + } + + + + static void __init highbank_timer_init(void) +diff --git a/arch/arm/mach-highbank/smc.S b/arch/arm/mach-highbank/smc.S +new file mode 100644 +index 0000000..bba369e +--- /dev/null ++++ b/arch/arm/mach-highbank/smc.S +@@ -0,0 +1,29 @@ ++/* ++ * Copied from omap44xx-smc.S Copyright (C) 2010 Texas Instruments, Inc. ++ * Copyright 2012 Calxeda, Inc. ++ * ++ * 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 ++ ++/* ++ * This is common routine to manage secure monitor API ++ * used to modify the PL310 secure registers. ++ * 'r0' contains the value to be modified and 'r12' contains ++ * the monitor API number. It uses few CPU registers ++ * internally and hence they need be backed up including ++ * link register "lr". ++ * Function signature : void highbank_smc1(u32 fn, u32 arg) ++ */ ++ ++ENTRY(highbank_smc1) ++ stmfd sp!, {r2-r12, lr} ++ mov r12, r0 ++ mov r0, r1 ++ dsb ++ smc #0 ++ ldmfd sp!, {r2-r12, pc} ++ENDPROC(highbank_smc1) +-- +1.7.9.5 diff --git a/kernel.spec b/kernel.spec index 4fe64fd67..96b3f9d5e 100644 --- a/kernel.spec +++ b/kernel.spec @@ -724,6 +724,8 @@ Patch21006: arm-beagle-usb-init.patch # ARM highbank patches # Highbank clock functions need to be EXPORT for module builds Patch21010: highbank-export-clock-functions.patch +# http://lists.arm.linux.org.uk/lurker/message/20120605.031140.e7d9b601.en.html +Patch21011: highbank-secure-smc.patch Patch21094: power-x86-destdir.patch @@ -1449,6 +1451,7 @@ ApplyPatch weird-root-dentry-name-debug.patch #Highbank clock functions ApplyPatch highbank-export-clock-functions.patch +ApplyPatch highbank-secure-smc.patch #selinux ptrace child permissions ApplyPatch selinux-apply-different-permission-to-ptrace-child.patch @@ -2333,6 +2336,10 @@ fi # '-' | | # '-' %changelog +* Wed Jun 06 2012 Dennis Gilmore 3.4.1-2 +- add patch from calxeda to enable the highbank kernel to boot +- on real hardware + * Tue Jun 05 2012 Dennis Gilmore - add patch to register omapdrm to the platforms so that we get - working console framebuffer and X on panda and beagle boards