summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-keystone/mon.c
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2016-03-16 09:10:08 -0400
committerTom Rini <trini@konsulko.com>2016-03-16 15:03:15 -0400
commitaadd3360e61fe605eb53efe65e537dd5c1e8a4d1 (patch)
tree1b16eb104fd0279ecf8a4b0f254311a2e8aaf47e /arch/arm/mach-keystone/mon.c
parent07adb7c22700921f660182b571366076bbacc01e (diff)
downloadtalos-obmc-uboot-aadd3360e61fe605eb53efe65e537dd5c1e8a4d1.tar.gz
talos-obmc-uboot-aadd3360e61fe605eb53efe65e537dd5c1e8a4d1.zip
ARM: keystone2: Split monitor code / command code
When we switch to including all linker lists in SPL it is important to not include commands as that may lead to link errors due to other things we have already discarded. In this case, we split the code for supporting the monitor out from the code for loading it. Cc: Vitaly Andrianov <vitalya@ti.com> Cc: Nishanth Menon <nm@ti.com> Cc: Lokesh Vutla <lokeshvutla@ti.com> Signed-off-by: Tom Rini <trini@konsulko.com>
Diffstat (limited to 'arch/arm/mach-keystone/mon.c')
-rw-r--r--arch/arm/mach-keystone/mon.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/arch/arm/mach-keystone/mon.c b/arch/arm/mach-keystone/mon.c
new file mode 100644
index 0000000000..256f6300ed
--- /dev/null
+++ b/arch/arm/mach-keystone/mon.c
@@ -0,0 +1,63 @@
+/*
+ * K2HK: secure kernel command file
+ *
+ * (C) Copyright 2012-2014
+ * Texas Instruments Incorporated, <www.ti.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <common.h>
+#include <command.h>
+#include <mach/mon.h>
+asm(".arch_extension sec\n\t");
+
+int mon_install(u32 addr, u32 dpsc, u32 freq)
+{
+ int result;
+
+ __asm__ __volatile__ (
+ "stmfd r13!, {lr}\n"
+ "mov r0, %1\n"
+ "mov r1, %2\n"
+ "mov r2, %3\n"
+ "blx r0\n"
+ "ldmfd r13!, {lr}\n"
+ : "=&r" (result)
+ : "r" (addr), "r" (dpsc), "r" (freq)
+ : "cc", "r0", "r1", "r2", "memory");
+ return result;
+}
+
+int mon_power_on(int core_id, void *ep)
+{
+ int result;
+
+ asm volatile (
+ "stmfd r13!, {lr}\n"
+ "mov r1, %1\n"
+ "mov r2, %2\n"
+ "mov r0, #0\n"
+ "smc #0\n"
+ "ldmfd r13!, {lr}\n"
+ : "=&r" (result)
+ : "r" (core_id), "r" (ep)
+ : "cc", "r0", "r1", "r2", "memory");
+ return result;
+}
+
+int mon_power_off(int core_id)
+{
+ int result;
+
+ asm volatile (
+ "stmfd r13!, {lr}\n"
+ "mov r1, %1\n"
+ "mov r0, #1\n"
+ "smc #1\n"
+ "ldmfd r13!, {lr}\n"
+ : "=&r" (result)
+ : "r" (core_id)
+ : "cc", "r0", "r1", "memory");
+ return result;
+}
OpenPOWER on IntegriCloud