From: "Pali Rohár" <pali.rohar@gmail.com>
To: Tony Lindgren <tony@atomide.com>
Cc: "Russell King" <linux@arm.linux.org.uk>,
linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org,
linux-kernel@vger.kernel.org, "Pali Rohár" <pali.rohar@gmail.com>,
"Ivaylo Dimitrov" <freemangordon@abv.bg>
Subject: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
Date: Thu, 28 Feb 2013 10:42:28 +0100 [thread overview]
Message-ID: <1362044548-5398-1-git-send-email-pali.rohar@gmail.com> (raw)
Signed-off-by: Ivaylo Dimitrov <freemangordon@abv.bg>
Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
---
arch/arm/mach-omap2/Makefile | 1 +
arch/arm/mach-omap2/board-rx51-secure.c | 66 +++++++++++++++++++++++++++++++
arch/arm/mach-omap2/board-rx51-secure.h | 36 +++++++++++++++++
arch/arm/mach-omap2/board-rx51-smc.S | 34 ++++++++++++++++
arch/arm/mach-omap2/board-rx51.c | 7 ++++
5 files changed, 144 insertions(+)
create mode 100644 arch/arm/mach-omap2/board-rx51-secure.c
create mode 100644 arch/arm/mach-omap2/board-rx51-secure.h
create mode 100644 arch/arm/mach-omap2/board-rx51-smc.S
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index 0ebbdd50..8eb4fb4 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -241,6 +241,7 @@ obj-$(CONFIG_MACH_NOKIA_RX51) += board-rx51.o sdram-nokia.o
obj-$(CONFIG_MACH_NOKIA_RX51) += board-rx51-peripherals.o
obj-$(CONFIG_MACH_NOKIA_RX51) += board-rx51-video.o
obj-$(CONFIG_MACH_NOKIA_RX51) += board-rx51-camera.o
+obj-$(CONFIG_MACH_NOKIA_RX51) += board-rx51-smc.o board-rx51-secure.o
obj-$(CONFIG_MACH_OMAP_ZOOM2) += board-zoom.o board-zoom-peripherals.o
obj-$(CONFIG_MACH_OMAP_ZOOM2) += board-zoom-display.o
obj-$(CONFIG_MACH_OMAP_ZOOM2) += board-zoom-debugboard.o
diff --git a/arch/arm/mach-omap2/board-rx51-secure.c b/arch/arm/mach-omap2/board-rx51-secure.c
new file mode 100644
index 0000000..361dc78
--- /dev/null
+++ b/arch/arm/mach-omap2/board-rx51-secure.c
@@ -0,0 +1,66 @@
+/*
+ * RX51 Secure PPA API.
+ *
+ * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
+ *
+ *
+ * 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 <asm/cacheflush.h>
+
+#include "board-rx51-secure.h"
+
+/**
+ * rx51_secure_dispatcher: Routine to dispatch secure PPA API calls
+ * @idx: The PPA API index
+ * @flag: The flag indicating criticality of operation
+ * @nargs: Number of valid arguments out of four.
+ * @arg1, arg2, arg3 args4: Parameters passed to secure API
+ *
+ * Return the non-zero error value on failure.
+ */
+u32 rx51_secure_dispatcher(u32 idx, u32 flag, u32 nargs, u32 arg1, u32 arg2,
+ u32 arg3, u32 arg4)
+{
+ u32 ret;
+ u32 param[5];
+
+ param[0] = nargs+1;
+ param[1] = arg1;
+ param[2] = arg2;
+ param[3] = arg3;
+ param[4] = arg4;
+
+ /*
+ * Secure API needs physical address
+ * pointer for the parameters
+ */
+ flush_cache_all();
+ outer_clean_range(__pa(param), __pa(param + 5));
+ ret = rx51_ppa_smc(idx, flag, __pa(param));
+
+ return ret;
+}
+
+/**
+ * rx51_secure_update_aux_cr: Routine to modify the contents of Auxiliary Control Register
+ * @set_bits: bits to set in ACR
+ * @clr_bits: bits to clear in ACR
+ *
+ * Return the non-zero error value on failure.
+*/
+u32 rx51_secure_update_aux_cr(u32 set_bits, u32 clear_bits)
+{
+ u32 acr;
+
+ /* Read ACR */
+ asm volatile ("mrc p15, 0, %0, c1, c0, 1" : "=r" (acr));
+ acr &= ~clear_bits;
+ acr |= set_bits;
+
+ return rx51_secure_dispatcher(RX51_PPA_WRITE_ACR,
+ FLAG_START_CRITICAL,
+ 1,acr,0,0,0);
+}
diff --git a/arch/arm/mach-omap2/board-rx51-secure.h b/arch/arm/mach-omap2/board-rx51-secure.h
new file mode 100644
index 0000000..61c760b
--- /dev/null
+++ b/arch/arm/mach-omap2/board-rx51-secure.h
@@ -0,0 +1,36 @@
+/*
+ * board-rx51-secure.h: OMAP Secure infrastructure header.
+ *
+ * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
+ *
+ * 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.
+ */
+#ifndef OMAP_RX51_SECURE_H
+#define OMAP_RX51_SECURE_H
+
+/* HAL API error codes */
+#define API_HAL_RET_VALUE_OK 0x00
+#define API_HAL_RET_VALUE_FAIL 0x01
+
+/* Secure HAL API flags */
+#define FLAG_START_CRITICAL 0x4
+#define FLAG_IRQFIQ_MASK 0x3
+#define FLAG_IRQ_ENABLE 0x2
+#define FLAG_FIQ_ENABLE 0x1
+#define NO_FLAG 0x0
+
+/* Secure PPA(Primary Protected Application) APIs */
+#define RX51_PPA_L2_INVAL 40
+#define RX51_PPA_WRITE_ACR 42
+
+#ifndef __ASSEMBLER__
+
+extern u32 rx51_secure_dispatcher(u32 idx, u32 flag, u32 nargs,
+ u32 arg1, u32 arg2, u32 arg3, u32 arg4);
+extern u32 rx51_ppa_smc(u32 id, u32 flag, u32 pargs);
+
+extern u32 rx51_secure_update_aux_cr(u32 set_bits, u32 clear_bits);
+#endif /* __ASSEMBLER__ */
+#endif /* OMAP_RX51_SECURE_H */
diff --git a/arch/arm/mach-omap2/board-rx51-smc.S b/arch/arm/mach-omap2/board-rx51-smc.S
new file mode 100644
index 0000000..70e2eb7
--- /dev/null
+++ b/arch/arm/mach-omap2/board-rx51-smc.S
@@ -0,0 +1,34 @@
+/*
+ * RX51 secure APIs file.
+ *
+ * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
+ *
+ *
+ * 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>
+
+/**
+ * u32 rx51_ppa_smc(u32 id, u32 flag, u32 pargs)
+ * Low level common routine for secure HAL and PPA APIs.
+ * @id: Secure Service ID
+ * @flag: Flag to indicate the criticality of operation
+ * @pargs: Physical address of parameter list starting
+ * with number of parametrs
+ */
+ENTRY(rx51_ppa_smc)
+ .arch_extension sec
+ stmfd sp!, {r4-r12, lr}
+ mov r12, r0 @ Copy the secure service ID
+ mov r3, r2 @ Copy the pointer to va_list in R3
+ mov r2, r1 @ Copy the flags in R2
+ mov r1, #0x0 @ Process ID - 0
+ mov r6, #0xff @ Indicate new Task call
+ dsb
+ dmb
+ smc #1 @ call PPA service
+ ldmfd sp!, {r4-r12, pc}
+ENDPROC(rx51_ppa_smc)
diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c
index 92117a13..fd85081 100644
--- a/arch/arm/mach-omap2/board-rx51.c
+++ b/arch/arm/mach-omap2/board-rx51.c
@@ -31,6 +31,7 @@
#include "gpmc.h"
#include "pm.h"
#include "sdram-nokia.h"
+#include "board-rx51-secure.h"
#define RX51_GPIO_SLEEP_IND 162
@@ -103,6 +104,12 @@ static void __init rx51_init(void)
rx51_peripherals_init();
rx51_camera_init();
+#ifdef CONFIG_ARM_ERRATA_430973
+ printk(KERN_INFO "Enabling ARM errata 430973 workaround.\n");
+ /* set IBE to 1 */
+ rx51_secure_update_aux_cr(1 << 6, 0);
+#endif
+
/* Ensure SDRC pins are mux'd for self-refresh */
omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);
--
1.7.10.4
next reply other threads:[~2013-02-28 9:51 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-28 9:42 Pali Rohár [this message]
2013-02-28 14:40 ` [PATCH] arm: omap: RX-51: ARM errata 430973 workaround Nishanth Menon
2013-03-01 9:43 ` Peter De Schrijver
2013-03-30 18:36 ` Pavel Machek
2013-07-10 12:59 ` [PATCH v2 0/2] " Pali Rohár
2013-07-10 12:59 ` [PATCH v2 1/2] ARM: OMAP: Add secure function omap_smc3() which calling instruction smc #1 Pali Rohár
2013-07-10 17:45 ` Dave Martin
2013-07-10 12:59 ` [PATCH v2 2/2] RX-51: ARM errata 430973 workaround Pali Rohár
2013-09-17 23:24 ` Tony Lindgren
2013-09-18 8:33 ` Pali Rohár
2013-09-18 17:18 ` Tony Lindgren
2013-09-18 18:13 ` Pali Rohár
2013-09-18 18:21 ` Tony Lindgren
2013-09-24 0:15 ` Pavel Machek
2013-09-24 16:51 ` Tony Lindgren
2013-09-18 19:22 ` [PATCH v3 " Pali Rohár
2013-09-18 19:27 ` Tony Lindgren
2013-09-18 19:43 ` [PATCH v4 " Pali Rohár
2013-03-01 7:47 [PATCH] arm: omap: " Ивайло Димитров
2013-03-01 14:38 ` Nishanth Menon
2013-03-04 18:58 ` Tony Lindgren
2013-03-06 14:09 ` Pali Rohár
2013-03-06 17:51 ` Tony Lindgren
2013-03-06 19:13 ` Pali Rohár
2013-03-24 14:26 ` Pali Rohár
2013-03-27 20:56 ` Tony Lindgren
2013-03-27 21:05 ` Pali Rohár
2013-03-27 21:12 ` Tony Lindgren
2013-03-28 9:50 ` Russell King - ARM Linux
2013-03-28 10:07 ` Santosh Shilimkar
2013-03-28 15:53 ` Tony Lindgren
2013-03-01 10:09 Ивайло Димитров
2013-03-01 23:51 ` Aaro Koskinen
2013-03-06 9:32 Ивайло Димитров
2013-03-28 5:30 Ивайло Димитров
2013-03-28 15:58 ` Tony Lindgren
2013-03-30 22:31 Ивайло Димитров
2013-03-31 7:37 ` Pavel Machek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1362044548-5398-1-git-send-email-pali.rohar@gmail.com \
--to=pali.rohar@gmail.com \
--cc=freemangordon@abv.bg \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=tony@atomide.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).