[kernel/f17] add patch from calxeda enabling the kernel to boot on physical hardware http://lists.arm.linux.org.u

Dennis Gilmore ausil at fedoraproject.org
Thu Jun 7 06:46:11 UTC 2012


commit dac218827a87348bc69af6acf401cdcea4c26fab
Author: Dennis Gilmore <dennis at ausil.us>
Date:   Thu Jun 7 01:43:34 2012 -0500

    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(+), 0 deletions(-)
---
diff --git a/highbank-secure-smc.patch b/highbank-secure-smc.patch
new file mode 100644
index 0000000..363ea69
--- /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 <rob.herring at calxeda.com>
+---
+ 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 <linux/linkage.h>
++
++/*
++ * 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 4fe64fd..96b3f9d 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 <dennis at ausil.us> 3.4.1-2
+- add patch from calxeda to enable the highbank kernel to boot
+- on real hardware
+
 * Tue Jun 05 2012 Dennis Gilmore <dennis at ausil.us>
 - add patch to register omapdrm to the platforms so that we get
 - working console framebuffer and X on panda and beagle boards


More information about the scm-commits mailing list