All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-02-28  9:42 ` Pali Rohár
  0 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-02-28  9:42 UTC (permalink / raw)
  To: Tony Lindgren
  Cc: Russell King, linux-arm-kernel, linux-omap, linux-kernel,
	Pali Rohár, Ivaylo Dimitrov

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


^ permalink raw reply related	[flat|nested] 78+ messages in thread

* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-02-28  9:42 ` Pali Rohár
  0 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-02-28  9:42 UTC (permalink / raw)
  To: Tony Lindgren
  Cc: Russell King, linux-kernel, Ivaylo Dimitrov, Pali Rohár,
	linux-omap, linux-arm-kernel

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


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 78+ messages in thread

* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-02-28  9:42 ` Pali Rohár
  0 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-02-28  9:42 UTC (permalink / raw)
  To: linux-arm-kernel

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

^ permalink raw reply related	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
  2013-02-28  9:42 ` Pali Rohár
  (?)
@ 2013-02-28 14:40   ` Nishanth Menon
  -1 siblings, 0 replies; 78+ messages in thread
From: Nishanth Menon @ 2013-02-28 14:40 UTC (permalink / raw)
  To: Pali Rohár
  Cc: Tony Lindgren, Russell King, linux-kernel, Ivaylo Dimitrov,
	linux-omap, linux-arm-kernel

On 10:42-20130228, Pali Rohár wrote:
> 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 ++++

Wondering if we can integrate these into 
arch/arm/mach-omap2/omap-smc.S
and
arch/arm/mach-omap2/omap-secure.c
on a quick look, it does seem there are commonalities.

>  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
> 
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

-- 
Regards,
Nishanth Menon

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-02-28 14:40   ` Nishanth Menon
  0 siblings, 0 replies; 78+ messages in thread
From: Nishanth Menon @ 2013-02-28 14:40 UTC (permalink / raw)
  To: Pali Rohár
  Cc: Tony Lindgren, Russell King, linux-kernel, Ivaylo Dimitrov,
	linux-omap, linux-arm-kernel

On 10:42-20130228, Pali Rohár wrote:
> 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 ++++

Wondering if we can integrate these into 
arch/arm/mach-omap2/omap-smc.S
and
arch/arm/mach-omap2/omap-secure.c
on a quick look, it does seem there are commonalities.

>  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
> 
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

-- 
Regards,
Nishanth Menon

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-02-28 14:40   ` Nishanth Menon
  0 siblings, 0 replies; 78+ messages in thread
From: Nishanth Menon @ 2013-02-28 14:40 UTC (permalink / raw)
  To: linux-arm-kernel

On 10:42-20130228, Pali Roh?r wrote:
> 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 ++++

Wondering if we can integrate these into 
arch/arm/mach-omap2/omap-smc.S
and
arch/arm/mach-omap2/omap-secure.c
on a quick look, it does seem there are commonalities.

>  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
> 
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

-- 
Regards,
Nishanth Menon

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
  2013-02-28  9:42 ` Pali Rohár
  (?)
@ 2013-03-01  9:43   ` Peter De Schrijver
  -1 siblings, 0 replies; 78+ messages in thread
From: Peter De Schrijver @ 2013-03-01  9:43 UTC (permalink / raw)
  To: Pali Rohár
  Cc: Tony Lindgren, Russell King, linux-kernel, Ivaylo Dimitrov,
	linux-omap, linux-arm-kernel

On Thu, Feb 28, 2013 at 10:42:28AM +0100, Pali Rohár wrote:
> 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
> 

Is this necessary? I thought the PPA sets this bit?

Cheers,

Peter.

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-01  9:43   ` Peter De Schrijver
  0 siblings, 0 replies; 78+ messages in thread
From: Peter De Schrijver @ 2013-03-01  9:43 UTC (permalink / raw)
  To: Pali Rohár
  Cc: Tony Lindgren, Russell King, linux-kernel, Ivaylo Dimitrov,
	linux-omap, linux-arm-kernel

On Thu, Feb 28, 2013 at 10:42:28AM +0100, Pali Rohár wrote:
> 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
> 

Is this necessary? I thought the PPA sets this bit?

Cheers,

Peter.

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-01  9:43   ` Peter De Schrijver
  0 siblings, 0 replies; 78+ messages in thread
From: Peter De Schrijver @ 2013-03-01  9:43 UTC (permalink / raw)
  To: linux-arm-kernel

On Thu, Feb 28, 2013 at 10:42:28AM +0100, Pali Roh?r wrote:
> 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
> 

Is this necessary? I thought the PPA sets this bit?

Cheers,

Peter.

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
  2013-02-28  9:42 ` Pali Rohár
@ 2013-03-30 18:36   ` Pavel Machek
  -1 siblings, 0 replies; 78+ messages in thread
From: Pavel Machek @ 2013-03-30 18:36 UTC (permalink / raw)
  To: Pali Rohár
  Cc: Tony Lindgren, Russell King, linux-arm-kernel, linux-omap,
	linux-kernel, Ivaylo Dimitrov

Hi!

> +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;
> +}

You can do without ret variable... Also more detailed changelog would
be nice... like what exact problem this works around.

<google>

So... some CPU errata where code sharing virtual addresses could be
executed improperly?
								
> @@ -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
> +

Thanks,
								Pavel

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-30 18:36   ` Pavel Machek
  0 siblings, 0 replies; 78+ messages in thread
From: Pavel Machek @ 2013-03-30 18:36 UTC (permalink / raw)
  To: linux-arm-kernel

Hi!

> +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;
> +}

You can do without ret variable... Also more detailed changelog would
be nice... like what exact problem this works around.

<google>

So... some CPU errata where code sharing virtual addresses could be
executed improperly?
								
> @@ -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
> +

Thanks,
								Pavel

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH v2 0/2] arm: omap: RX-51: ARM errata 430973 workaround
  2013-02-28  9:42 ` Pali Rohár
@ 2013-07-10 12:59   ` Pali Rohár
  -1 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-07-10 12:59 UTC (permalink / raw)
  To: linux-kernel, Tony Lindgren, Aaro Koskinen
  Cc: linux-omap, linux, linux-arm-kernel, Nishanth Menon,
	Pavel Machek, Peter De Schrijver, Santosh Shilimkar,
	Ivaylo Dimitrov, Pali Rohár

This patch adds RX-51 specific SMC support and sets IBE bit in ACTLR during
board init code for ARM errata 430973 workaround.

This is second version of patch which simplifing API and moving all board
functions to one file board-rx51.c. Wrapper around smc #1 instruction is in
omap-smc.S file because some other board may use it too.

Pali Rohár (2):
  ARM: OMAP: Add secure function omap_smc3() which calling instruction
    smc #1
  RX-51: ARM errata 430973 workaround

 arch/arm/mach-omap2/board-rx51.c  |   78 +++++++++++++++++++++++++++++++++++++
 arch/arm/mach-omap2/omap-secure.h |    1 +
 arch/arm/mach-omap2/omap-smc.S    |   22 ++++++++++-
 3 files changed, 100 insertions(+), 1 deletion(-)

-- 
1.7.10.4


^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH v2 0/2] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-07-10 12:59   ` Pali Rohár
  0 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-07-10 12:59 UTC (permalink / raw)
  To: linux-arm-kernel

This patch adds RX-51 specific SMC support and sets IBE bit in ACTLR during
board init code for ARM errata 430973 workaround.

This is second version of patch which simplifing API and moving all board
functions to one file board-rx51.c. Wrapper around smc #1 instruction is in
omap-smc.S file because some other board may use it too.

Pali Roh?r (2):
  ARM: OMAP: Add secure function omap_smc3() which calling instruction
    smc #1
  RX-51: ARM errata 430973 workaround

 arch/arm/mach-omap2/board-rx51.c  |   78 +++++++++++++++++++++++++++++++++++++
 arch/arm/mach-omap2/omap-secure.h |    1 +
 arch/arm/mach-omap2/omap-smc.S    |   22 ++++++++++-
 3 files changed, 100 insertions(+), 1 deletion(-)

-- 
1.7.10.4

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH v2 1/2] ARM: OMAP: Add secure function omap_smc3() which calling instruction smc #1
  2013-07-10 12:59   ` Pali Rohár
@ 2013-07-10 12:59     ` Pali Rohár
  -1 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-07-10 12:59 UTC (permalink / raw)
  To: linux-kernel, Tony Lindgren, Aaro Koskinen
  Cc: linux-omap, linux, linux-arm-kernel, Nishanth Menon,
	Pavel Machek, Peter De Schrijver, Santosh Shilimkar,
	Ivaylo Dimitrov, Pali Rohár

Other secure functions omap_smc1() and omap_smc2() calling instruction smc #0
but Nokia RX-51 board needs to call smc #1 for PPA access.

Signed-off-by: Ivaylo Dimitrov <freemangordon@abv.bg>
Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
---
 arch/arm/mach-omap2/omap-secure.h |    1 +
 arch/arm/mach-omap2/omap-smc.S    |   22 +++++++++++++++++++++-
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/arch/arm/mach-omap2/omap-secure.h b/arch/arm/mach-omap2/omap-secure.h
index 0e72917..c4586f4 100644
--- a/arch/arm/mach-omap2/omap-secure.h
+++ b/arch/arm/mach-omap2/omap-secure.h
@@ -51,6 +51,7 @@
 extern u32 omap_secure_dispatcher(u32 idx, u32 flag, u32 nargs,
 				u32 arg1, u32 arg2, u32 arg3, u32 arg4);
 extern u32 omap_smc2(u32 id, u32 falg, u32 pargs);
+extern u32 omap_smc3(u32 id, u32 process, u32 flag, u32 pargs);
 extern phys_addr_t omap_secure_ram_mempool_base(void);
 extern int omap_secure_ram_reserve_memblock(void);
 
diff --git a/arch/arm/mach-omap2/omap-smc.S b/arch/arm/mach-omap2/omap-smc.S
index f6441c1..5c02b8d 100644
--- a/arch/arm/mach-omap2/omap-smc.S
+++ b/arch/arm/mach-omap2/omap-smc.S
@@ -1,9 +1,11 @@
 /*
- * OMAP44xx secure APIs file.
+ * OMAP34xx and OMAP44xx secure APIs file.
  *
  * Copyright (C) 2010 Texas Instruments, Inc.
  * Written by Santosh Shilimkar <santosh.shilimkar@ti.com>
  *
+ * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
+ * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com>
  *
  * 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
@@ -54,6 +56,24 @@ ENTRY(omap_smc2)
 	ldmfd   sp!, {r4-r12, pc}
 ENDPROC(omap_smc2)
 
+/**
+ * u32 omap_smc3(u32 service_id, u32 process_id, u32 flag, u32 pargs)
+ * Low level common routine for secure HAL and PPA APIs via smc #1
+ * r0 - @service_id: Secure Service ID
+ * r1 - @process_id: Process ID
+ * r2 - @flag: Flag to indicate the criticality of operation
+ * r3 - @pargs: Physical address of parameter list
+ */
+ENTRY(omap_smc3)
+	stmfd	sp!, {r4-r12, lr}
+	mov	r12, r0		@ Copy the secure service ID
+	mov	r6, #0xff	@ Indicate new Task call
+	dsb
+	dmb
+	smc	#1		@ call PPA service
+	ldmfd	sp!, {r4-r12, pc}
+ENDPROC(omap_smc3)
+
 ENTRY(omap_modify_auxcoreboot0)
 	stmfd   sp!, {r1-r12, lr}
 	ldr	r12, =0x104
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 78+ messages in thread

* [PATCH v2 1/2] ARM: OMAP: Add secure function omap_smc3() which calling instruction smc #1
@ 2013-07-10 12:59     ` Pali Rohár
  0 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-07-10 12:59 UTC (permalink / raw)
  To: linux-arm-kernel

Other secure functions omap_smc1() and omap_smc2() calling instruction smc #0
but Nokia RX-51 board needs to call smc #1 for PPA access.

Signed-off-by: Ivaylo Dimitrov <freemangordon@abv.bg>
Signed-off-by: Pali Roh?r <pali.rohar@gmail.com>
---
 arch/arm/mach-omap2/omap-secure.h |    1 +
 arch/arm/mach-omap2/omap-smc.S    |   22 +++++++++++++++++++++-
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/arch/arm/mach-omap2/omap-secure.h b/arch/arm/mach-omap2/omap-secure.h
index 0e72917..c4586f4 100644
--- a/arch/arm/mach-omap2/omap-secure.h
+++ b/arch/arm/mach-omap2/omap-secure.h
@@ -51,6 +51,7 @@
 extern u32 omap_secure_dispatcher(u32 idx, u32 flag, u32 nargs,
 				u32 arg1, u32 arg2, u32 arg3, u32 arg4);
 extern u32 omap_smc2(u32 id, u32 falg, u32 pargs);
+extern u32 omap_smc3(u32 id, u32 process, u32 flag, u32 pargs);
 extern phys_addr_t omap_secure_ram_mempool_base(void);
 extern int omap_secure_ram_reserve_memblock(void);
 
diff --git a/arch/arm/mach-omap2/omap-smc.S b/arch/arm/mach-omap2/omap-smc.S
index f6441c1..5c02b8d 100644
--- a/arch/arm/mach-omap2/omap-smc.S
+++ b/arch/arm/mach-omap2/omap-smc.S
@@ -1,9 +1,11 @@
 /*
- * OMAP44xx secure APIs file.
+ * OMAP34xx and OMAP44xx secure APIs file.
  *
  * Copyright (C) 2010 Texas Instruments, Inc.
  * Written by Santosh Shilimkar <santosh.shilimkar@ti.com>
  *
+ * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
+ * Copyright (C) 2013 Pali Roh?r <pali.rohar@gmail.com>
  *
  * 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
@@ -54,6 +56,24 @@ ENTRY(omap_smc2)
 	ldmfd   sp!, {r4-r12, pc}
 ENDPROC(omap_smc2)
 
+/**
+ * u32 omap_smc3(u32 service_id, u32 process_id, u32 flag, u32 pargs)
+ * Low level common routine for secure HAL and PPA APIs via smc #1
+ * r0 - @service_id: Secure Service ID
+ * r1 - @process_id: Process ID
+ * r2 - @flag: Flag to indicate the criticality of operation
+ * r3 - @pargs: Physical address of parameter list
+ */
+ENTRY(omap_smc3)
+	stmfd	sp!, {r4-r12, lr}
+	mov	r12, r0		@ Copy the secure service ID
+	mov	r6, #0xff	@ Indicate new Task call
+	dsb
+	dmb
+	smc	#1		@ call PPA service
+	ldmfd	sp!, {r4-r12, pc}
+ENDPROC(omap_smc3)
+
 ENTRY(omap_modify_auxcoreboot0)
 	stmfd   sp!, {r1-r12, lr}
 	ldr	r12, =0x104
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 78+ messages in thread

* [PATCH v2 2/2] RX-51: ARM errata 430973 workaround
  2013-07-10 12:59   ` Pali Rohár
@ 2013-07-10 12:59     ` Pali Rohár
  -1 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-07-10 12:59 UTC (permalink / raw)
  To: linux-kernel, Tony Lindgren, Aaro Koskinen
  Cc: linux-omap, linux, linux-arm-kernel, Nishanth Menon,
	Pavel Machek, Peter De Schrijver, Santosh Shilimkar,
	Ivaylo Dimitrov, Pali Rohár

Closed and signed Nokia X-Loader bootloader stored in RX-51 nand does not set
IBE bit in ACTLR and starting kernel in non-secure mode. So direct write to
ACTLR by our kernel does not working and the code for ARM errata 430973 in
commit 7ce236fcd6fd45b0441a2d49acb2ceb2de2e8a47 that sets IBE bit is a noop.

In order to have workaround for ARM errata 430973 from non-secure world on
RX-51 we needs Secure Monitor Call to set IBE BIT in ACTLR.

This patch adds RX-51 specific SMC support and sets IBE bit in ACTLR during
board init code for ARM errata 430973 workaround.

ARM errata 430973 workaround is needed for thumb-2 ISA compiled userspace
binaries. Without this workaround thumb-2 binaries crashing. So with this
patch it is possible to recompile and run applications/binaries with thumb-2
ISA on RX-51.

Signed-off-by: Ivaylo Dimitrov <freemangordon@abv.bg>
Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
---
 arch/arm/mach-omap2/board-rx51.c |   78 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 78 insertions(+)

diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c
index 03663c2..f234dee 100644
--- a/arch/arm/mach-omap2/board-rx51.c
+++ b/arch/arm/mach-omap2/board-rx51.c
@@ -2,6 +2,8 @@
  * Board support file for Nokia N900 (aka RX-51).
  *
  * Copyright (C) 2007, 2008 Nokia
+ * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
+ * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com>
  *
  * 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
@@ -21,6 +23,7 @@
 #include <linux/usb/musb.h>
 #include <linux/platform_data/spi-omap2-mcspi.h>
 
+#include <asm/cacheflush.h>
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
@@ -31,7 +34,14 @@
 #include "mux.h"
 #include "gpmc.h"
 #include "pm.h"
+#include "soc.h"
 #include "sdram-nokia.h"
+#include "omap-secure.h"
+
+/* Secure PPA (Primary Protected Application) APIs */
+#define RX51_PPA_HWRNG			29
+#define RX51_PPA_L2_INVAL		40
+#define RX51_PPA_WRITE_ACR		42
 
 #define RX51_GPIO_SLEEP_IND 162
 
@@ -90,6 +100,66 @@ static struct omap_musb_board_data musb_board_data = {
 	.power			= 0,
 };
 
+/**
+ * rx51_secure_dispatcher: Routine to dispatch secure PPA API calls
+ * @idx: The PPA API index
+ * @process: Process ID
+ * @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.
+ */
+static u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs,
+			   u32 arg1, u32 arg2, u32 arg3, u32 arg4)
+{
+	u32 ret;
+	u32 param[5];
+
+	param[0] = nargs+1; /* RX-51 needs number of arguments + 1 */
+	param[1] = arg1;
+	param[2] = arg2;
+	param[3] = arg3;
+	param[4] = arg4;
+
+	/*
+	 * Secure API needs physical address
+	 * pointer for the parameters
+	 */
+	local_irq_disable();
+	local_fiq_disable();
+	flush_cache_all();
+	outer_clean_range(__pa(param), __pa(param + 5));
+	ret = omap_smc3(idx, process, flag, __pa(param));
+	flush_cache_all();
+	local_fiq_enable();
+	local_irq_enable();
+
+	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.
+*/
+static 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,
+				      0,
+				      FLAG_START_CRITICAL,
+				      1, acr, 0, 0, 0);
+}
+
 static void __init rx51_init(void)
 {
 	struct omap_sdrc_params *sdrc_params;
@@ -105,6 +175,14 @@ static void __init rx51_init(void)
 	rx51_peripherals_init();
 	rx51_camera_init();
 
+	if (omap_type() == OMAP2_DEVICE_TYPE_SEC) {
+#ifdef CONFIG_ARM_ERRATA_430973
+		pr_info("RX-51: Enabling ARM errata 430973 workaround\n");
+		/* set IBE to 1 */
+		rx51_secure_update_aux_cr(BIT(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


^ permalink raw reply related	[flat|nested] 78+ messages in thread

* [PATCH v2 2/2] RX-51: ARM errata 430973 workaround
@ 2013-07-10 12:59     ` Pali Rohár
  0 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-07-10 12:59 UTC (permalink / raw)
  To: linux-arm-kernel

Closed and signed Nokia X-Loader bootloader stored in RX-51 nand does not set
IBE bit in ACTLR and starting kernel in non-secure mode. So direct write to
ACTLR by our kernel does not working and the code for ARM errata 430973 in
commit 7ce236fcd6fd45b0441a2d49acb2ceb2de2e8a47 that sets IBE bit is a noop.

In order to have workaround for ARM errata 430973 from non-secure world on
RX-51 we needs Secure Monitor Call to set IBE BIT in ACTLR.

This patch adds RX-51 specific SMC support and sets IBE bit in ACTLR during
board init code for ARM errata 430973 workaround.

ARM errata 430973 workaround is needed for thumb-2 ISA compiled userspace
binaries. Without this workaround thumb-2 binaries crashing. So with this
patch it is possible to recompile and run applications/binaries with thumb-2
ISA on RX-51.

Signed-off-by: Ivaylo Dimitrov <freemangordon@abv.bg>
Signed-off-by: Pali Roh?r <pali.rohar@gmail.com>
---
 arch/arm/mach-omap2/board-rx51.c |   78 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 78 insertions(+)

diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c
index 03663c2..f234dee 100644
--- a/arch/arm/mach-omap2/board-rx51.c
+++ b/arch/arm/mach-omap2/board-rx51.c
@@ -2,6 +2,8 @@
  * Board support file for Nokia N900 (aka RX-51).
  *
  * Copyright (C) 2007, 2008 Nokia
+ * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
+ * Copyright (C) 2013 Pali Roh?r <pali.rohar@gmail.com>
  *
  * 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
@@ -21,6 +23,7 @@
 #include <linux/usb/musb.h>
 #include <linux/platform_data/spi-omap2-mcspi.h>
 
+#include <asm/cacheflush.h>
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
@@ -31,7 +34,14 @@
 #include "mux.h"
 #include "gpmc.h"
 #include "pm.h"
+#include "soc.h"
 #include "sdram-nokia.h"
+#include "omap-secure.h"
+
+/* Secure PPA (Primary Protected Application) APIs */
+#define RX51_PPA_HWRNG			29
+#define RX51_PPA_L2_INVAL		40
+#define RX51_PPA_WRITE_ACR		42
 
 #define RX51_GPIO_SLEEP_IND 162
 
@@ -90,6 +100,66 @@ static struct omap_musb_board_data musb_board_data = {
 	.power			= 0,
 };
 
+/**
+ * rx51_secure_dispatcher: Routine to dispatch secure PPA API calls
+ * @idx: The PPA API index
+ * @process: Process ID
+ * @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.
+ */
+static u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs,
+			   u32 arg1, u32 arg2, u32 arg3, u32 arg4)
+{
+	u32 ret;
+	u32 param[5];
+
+	param[0] = nargs+1; /* RX-51 needs number of arguments + 1 */
+	param[1] = arg1;
+	param[2] = arg2;
+	param[3] = arg3;
+	param[4] = arg4;
+
+	/*
+	 * Secure API needs physical address
+	 * pointer for the parameters
+	 */
+	local_irq_disable();
+	local_fiq_disable();
+	flush_cache_all();
+	outer_clean_range(__pa(param), __pa(param + 5));
+	ret = omap_smc3(idx, process, flag, __pa(param));
+	flush_cache_all();
+	local_fiq_enable();
+	local_irq_enable();
+
+	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.
+*/
+static 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,
+				      0,
+				      FLAG_START_CRITICAL,
+				      1, acr, 0, 0, 0);
+}
+
 static void __init rx51_init(void)
 {
 	struct omap_sdrc_params *sdrc_params;
@@ -105,6 +175,14 @@ static void __init rx51_init(void)
 	rx51_peripherals_init();
 	rx51_camera_init();
 
+	if (omap_type() == OMAP2_DEVICE_TYPE_SEC) {
+#ifdef CONFIG_ARM_ERRATA_430973
+		pr_info("RX-51: Enabling ARM errata 430973 workaround\n");
+		/* set IBE to 1 */
+		rx51_secure_update_aux_cr(BIT(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

^ permalink raw reply related	[flat|nested] 78+ messages in thread

* Re: [PATCH v2 1/2] ARM: OMAP: Add secure function omap_smc3() which calling instruction smc #1
  2013-07-10 12:59     ` Pali Rohár
  (?)
@ 2013-07-10 17:45       ` Dave Martin
  -1 siblings, 0 replies; 78+ messages in thread
From: Dave Martin @ 2013-07-10 17:45 UTC (permalink / raw)
  To: Pali Rohár
  Cc: linux-kernel, Tony Lindgren, Aaro Koskinen, Nishanth Menon,
	linux, Peter De Schrijver, Ivaylo Dimitrov, Santosh Shilimkar,
	Pavel Machek, linux-omap, linux-arm-kernel

On Wed, Jul 10, 2013 at 02:59:04PM +0200, Pali Rohár wrote:
> Other secure functions omap_smc1() and omap_smc2() calling instruction smc #0
> but Nokia RX-51 board needs to call smc #1 for PPA access.
> 
> Signed-off-by: Ivaylo Dimitrov <freemangordon@abv.bg>
> Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
> ---
>  arch/arm/mach-omap2/omap-secure.h |    1 +
>  arch/arm/mach-omap2/omap-smc.S    |   22 +++++++++++++++++++++-
>  2 files changed, 22 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm/mach-omap2/omap-secure.h b/arch/arm/mach-omap2/omap-secure.h
> index 0e72917..c4586f4 100644
> --- a/arch/arm/mach-omap2/omap-secure.h
> +++ b/arch/arm/mach-omap2/omap-secure.h
> @@ -51,6 +51,7 @@
>  extern u32 omap_secure_dispatcher(u32 idx, u32 flag, u32 nargs,
>  				u32 arg1, u32 arg2, u32 arg3, u32 arg4);
>  extern u32 omap_smc2(u32 id, u32 falg, u32 pargs);
> +extern u32 omap_smc3(u32 id, u32 process, u32 flag, u32 pargs);
>  extern phys_addr_t omap_secure_ram_mempool_base(void);
>  extern int omap_secure_ram_reserve_memblock(void);
>  
> diff --git a/arch/arm/mach-omap2/omap-smc.S b/arch/arm/mach-omap2/omap-smc.S
> index f6441c1..5c02b8d 100644
> --- a/arch/arm/mach-omap2/omap-smc.S
> +++ b/arch/arm/mach-omap2/omap-smc.S
> @@ -1,9 +1,11 @@
>  /*
> - * OMAP44xx secure APIs file.
> + * OMAP34xx and OMAP44xx secure APIs file.
>   *
>   * Copyright (C) 2010 Texas Instruments, Inc.
>   * Written by Santosh Shilimkar <santosh.shilimkar@ti.com>
>   *
> + * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
> + * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com>
>   *
>   * 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
> @@ -54,6 +56,24 @@ ENTRY(omap_smc2)
>  	ldmfd   sp!, {r4-r12, pc}
>  ENDPROC(omap_smc2)
>  
> +/**
> + * u32 omap_smc3(u32 service_id, u32 process_id, u32 flag, u32 pargs)
> + * Low level common routine for secure HAL and PPA APIs via smc #1
> + * r0 - @service_id: Secure Service ID
> + * r1 - @process_id: Process ID
> + * r2 - @flag: Flag to indicate the criticality of operation
> + * r3 - @pargs: Physical address of parameter list
> + */
> +ENTRY(omap_smc3)
> +	stmfd	sp!, {r4-r12, lr}

You don't need to save/restore r12.  The ABI allows it to be clobbered
across function calls.

> +	mov	r12, r0		@ Copy the secure service ID
> +	mov	r6, #0xff	@ Indicate new Task call
> +	dsb
> +	dmb

dsb synchronises a superset of what dmb synchronises, so the dmb here is
not useful.

In any case, any code calling this must flush the region addressed by
r3 beforehand anyway, which will include a dsb as part of its semantics
-- this is how you call it from rx51_secure_dispatcher().

So I think the dsb may not be needed here (?)

Cheers
---Dave


^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH v2 1/2] ARM: OMAP: Add secure function omap_smc3() which calling instruction smc #1
@ 2013-07-10 17:45       ` Dave Martin
  0 siblings, 0 replies; 78+ messages in thread
From: Dave Martin @ 2013-07-10 17:45 UTC (permalink / raw)
  To: Pali Rohár
  Cc: Nishanth Menon, linux, Aaro Koskinen, Tony Lindgren,
	Peter De Schrijver, linux-kernel, Ivaylo Dimitrov,
	Santosh Shilimkar, Pavel Machek, linux-omap, linux-arm-kernel

On Wed, Jul 10, 2013 at 02:59:04PM +0200, Pali Rohár wrote:
> Other secure functions omap_smc1() and omap_smc2() calling instruction smc #0
> but Nokia RX-51 board needs to call smc #1 for PPA access.
> 
> Signed-off-by: Ivaylo Dimitrov <freemangordon@abv.bg>
> Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
> ---
>  arch/arm/mach-omap2/omap-secure.h |    1 +
>  arch/arm/mach-omap2/omap-smc.S    |   22 +++++++++++++++++++++-
>  2 files changed, 22 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm/mach-omap2/omap-secure.h b/arch/arm/mach-omap2/omap-secure.h
> index 0e72917..c4586f4 100644
> --- a/arch/arm/mach-omap2/omap-secure.h
> +++ b/arch/arm/mach-omap2/omap-secure.h
> @@ -51,6 +51,7 @@
>  extern u32 omap_secure_dispatcher(u32 idx, u32 flag, u32 nargs,
>  				u32 arg1, u32 arg2, u32 arg3, u32 arg4);
>  extern u32 omap_smc2(u32 id, u32 falg, u32 pargs);
> +extern u32 omap_smc3(u32 id, u32 process, u32 flag, u32 pargs);
>  extern phys_addr_t omap_secure_ram_mempool_base(void);
>  extern int omap_secure_ram_reserve_memblock(void);
>  
> diff --git a/arch/arm/mach-omap2/omap-smc.S b/arch/arm/mach-omap2/omap-smc.S
> index f6441c1..5c02b8d 100644
> --- a/arch/arm/mach-omap2/omap-smc.S
> +++ b/arch/arm/mach-omap2/omap-smc.S
> @@ -1,9 +1,11 @@
>  /*
> - * OMAP44xx secure APIs file.
> + * OMAP34xx and OMAP44xx secure APIs file.
>   *
>   * Copyright (C) 2010 Texas Instruments, Inc.
>   * Written by Santosh Shilimkar <santosh.shilimkar@ti.com>
>   *
> + * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
> + * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com>
>   *
>   * 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
> @@ -54,6 +56,24 @@ ENTRY(omap_smc2)
>  	ldmfd   sp!, {r4-r12, pc}
>  ENDPROC(omap_smc2)
>  
> +/**
> + * u32 omap_smc3(u32 service_id, u32 process_id, u32 flag, u32 pargs)
> + * Low level common routine for secure HAL and PPA APIs via smc #1
> + * r0 - @service_id: Secure Service ID
> + * r1 - @process_id: Process ID
> + * r2 - @flag: Flag to indicate the criticality of operation
> + * r3 - @pargs: Physical address of parameter list
> + */
> +ENTRY(omap_smc3)
> +	stmfd	sp!, {r4-r12, lr}

You don't need to save/restore r12.  The ABI allows it to be clobbered
across function calls.

> +	mov	r12, r0		@ Copy the secure service ID
> +	mov	r6, #0xff	@ Indicate new Task call
> +	dsb
> +	dmb

dsb synchronises a superset of what dmb synchronises, so the dmb here is
not useful.

In any case, any code calling this must flush the region addressed by
r3 beforehand anyway, which will include a dsb as part of its semantics
-- this is how you call it from rx51_secure_dispatcher().

So I think the dsb may not be needed here (?)

Cheers
---Dave

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH v2 1/2] ARM: OMAP: Add secure function omap_smc3() which calling instruction smc #1
@ 2013-07-10 17:45       ` Dave Martin
  0 siblings, 0 replies; 78+ messages in thread
From: Dave Martin @ 2013-07-10 17:45 UTC (permalink / raw)
  To: linux-arm-kernel

On Wed, Jul 10, 2013 at 02:59:04PM +0200, Pali Roh?r wrote:
> Other secure functions omap_smc1() and omap_smc2() calling instruction smc #0
> but Nokia RX-51 board needs to call smc #1 for PPA access.
> 
> Signed-off-by: Ivaylo Dimitrov <freemangordon@abv.bg>
> Signed-off-by: Pali Roh?r <pali.rohar@gmail.com>
> ---
>  arch/arm/mach-omap2/omap-secure.h |    1 +
>  arch/arm/mach-omap2/omap-smc.S    |   22 +++++++++++++++++++++-
>  2 files changed, 22 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm/mach-omap2/omap-secure.h b/arch/arm/mach-omap2/omap-secure.h
> index 0e72917..c4586f4 100644
> --- a/arch/arm/mach-omap2/omap-secure.h
> +++ b/arch/arm/mach-omap2/omap-secure.h
> @@ -51,6 +51,7 @@
>  extern u32 omap_secure_dispatcher(u32 idx, u32 flag, u32 nargs,
>  				u32 arg1, u32 arg2, u32 arg3, u32 arg4);
>  extern u32 omap_smc2(u32 id, u32 falg, u32 pargs);
> +extern u32 omap_smc3(u32 id, u32 process, u32 flag, u32 pargs);
>  extern phys_addr_t omap_secure_ram_mempool_base(void);
>  extern int omap_secure_ram_reserve_memblock(void);
>  
> diff --git a/arch/arm/mach-omap2/omap-smc.S b/arch/arm/mach-omap2/omap-smc.S
> index f6441c1..5c02b8d 100644
> --- a/arch/arm/mach-omap2/omap-smc.S
> +++ b/arch/arm/mach-omap2/omap-smc.S
> @@ -1,9 +1,11 @@
>  /*
> - * OMAP44xx secure APIs file.
> + * OMAP34xx and OMAP44xx secure APIs file.
>   *
>   * Copyright (C) 2010 Texas Instruments, Inc.
>   * Written by Santosh Shilimkar <santosh.shilimkar@ti.com>
>   *
> + * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
> + * Copyright (C) 2013 Pali Roh?r <pali.rohar@gmail.com>
>   *
>   * 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
> @@ -54,6 +56,24 @@ ENTRY(omap_smc2)
>  	ldmfd   sp!, {r4-r12, pc}
>  ENDPROC(omap_smc2)
>  
> +/**
> + * u32 omap_smc3(u32 service_id, u32 process_id, u32 flag, u32 pargs)
> + * Low level common routine for secure HAL and PPA APIs via smc #1
> + * r0 - @service_id: Secure Service ID
> + * r1 - @process_id: Process ID
> + * r2 - @flag: Flag to indicate the criticality of operation
> + * r3 - @pargs: Physical address of parameter list
> + */
> +ENTRY(omap_smc3)
> +	stmfd	sp!, {r4-r12, lr}

You don't need to save/restore r12.  The ABI allows it to be clobbered
across function calls.

> +	mov	r12, r0		@ Copy the secure service ID
> +	mov	r6, #0xff	@ Indicate new Task call
> +	dsb
> +	dmb

dsb synchronises a superset of what dmb synchronises, so the dmb here is
not useful.

In any case, any code calling this must flush the region addressed by
r3 beforehand anyway, which will include a dsb as part of its semantics
-- this is how you call it from rx51_secure_dispatcher().

So I think the dsb may not be needed here (?)

Cheers
---Dave

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH v2 2/2] RX-51: ARM errata 430973 workaround
  2013-07-10 12:59     ` Pali Rohár
@ 2013-09-17 23:24       ` Tony Lindgren
  -1 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-09-17 23:24 UTC (permalink / raw)
  To: Pali Rohár
  Cc: linux-kernel, Aaro Koskinen, linux-omap, linux, linux-arm-kernel,
	Nishanth Menon, Pavel Machek, Peter De Schrijver,
	Santosh Shilimkar, Ivaylo Dimitrov

* Pali Rohár <pali.rohar@gmail.com> [130710 06:06]:
> --- a/arch/arm/mach-omap2/board-rx51.c
> +++ b/arch/arm/mach-omap2/board-rx51.c

This file will be gone as soon as we're moving to device
tree based booting. So let's do this in more future proof
way.

> +/**
> + * rx51_secure_dispatcher: Routine to dispatch secure PPA API calls
> + * @idx: The PPA API index
> + * @process: Process ID
> + * @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.
> + */
> +static u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs,
> +			   u32 arg1, u32 arg2, u32 arg3, u32 arg4)
> +{
> +	u32 ret;
> +	u32 param[5];
> +
> +	param[0] = nargs+1; /* RX-51 needs number of arguments + 1 */
> +	param[1] = arg1;
> +	param[2] = arg2;
> +	param[3] = arg3;
> +	param[4] = arg4;
> +
> +	/*
> +	 * Secure API needs physical address
> +	 * pointer for the parameters
> +	 */
> +	local_irq_disable();
> +	local_fiq_disable();
> +	flush_cache_all();
> +	outer_clean_range(__pa(param), __pa(param + 5));
> +	ret = omap_smc3(idx, process, flag, __pa(param));
> +	flush_cache_all();
> +	local_fiq_enable();
> +	local_irq_enable();
> +
> +	return ret;
> +}

I think this used to be in omap-secure.c, and then made rx51
specific.. But since board-rx51.c is going away, let's move
this function to omap-secure.c.

> + * 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.
> +*/
> +static 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,
> +				      0,
> +				      FLAG_START_CRITICAL,
> +				      1, acr, 0, 0, 0);
> +}

This too.

>  static void __init rx51_init(void)
>  {
>  	struct omap_sdrc_params *sdrc_params;
> @@ -105,6 +175,14 @@ static void __init rx51_init(void)
>  	rx51_peripherals_init();
>  	rx51_camera_init();
>  
> +	if (omap_type() == OMAP2_DEVICE_TYPE_SEC) {
> +#ifdef CONFIG_ARM_ERRATA_430973
> +		pr_info("RX-51: Enabling ARM errata 430973 workaround\n");
> +		/* set IBE to 1 */
> +		rx51_secure_update_aux_cr(BIT(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);

Then this can be called both from board-generic.c based on the
compatible flag, and board-rx51.c for now.

Regards,

Tony

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH v2 2/2] RX-51: ARM errata 430973 workaround
@ 2013-09-17 23:24       ` Tony Lindgren
  0 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-09-17 23:24 UTC (permalink / raw)
  To: linux-arm-kernel

* Pali Roh?r <pali.rohar@gmail.com> [130710 06:06]:
> --- a/arch/arm/mach-omap2/board-rx51.c
> +++ b/arch/arm/mach-omap2/board-rx51.c

This file will be gone as soon as we're moving to device
tree based booting. So let's do this in more future proof
way.

> +/**
> + * rx51_secure_dispatcher: Routine to dispatch secure PPA API calls
> + * @idx: The PPA API index
> + * @process: Process ID
> + * @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.
> + */
> +static u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs,
> +			   u32 arg1, u32 arg2, u32 arg3, u32 arg4)
> +{
> +	u32 ret;
> +	u32 param[5];
> +
> +	param[0] = nargs+1; /* RX-51 needs number of arguments + 1 */
> +	param[1] = arg1;
> +	param[2] = arg2;
> +	param[3] = arg3;
> +	param[4] = arg4;
> +
> +	/*
> +	 * Secure API needs physical address
> +	 * pointer for the parameters
> +	 */
> +	local_irq_disable();
> +	local_fiq_disable();
> +	flush_cache_all();
> +	outer_clean_range(__pa(param), __pa(param + 5));
> +	ret = omap_smc3(idx, process, flag, __pa(param));
> +	flush_cache_all();
> +	local_fiq_enable();
> +	local_irq_enable();
> +
> +	return ret;
> +}

I think this used to be in omap-secure.c, and then made rx51
specific.. But since board-rx51.c is going away, let's move
this function to omap-secure.c.

> + * 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.
> +*/
> +static 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,
> +				      0,
> +				      FLAG_START_CRITICAL,
> +				      1, acr, 0, 0, 0);
> +}

This too.

>  static void __init rx51_init(void)
>  {
>  	struct omap_sdrc_params *sdrc_params;
> @@ -105,6 +175,14 @@ static void __init rx51_init(void)
>  	rx51_peripherals_init();
>  	rx51_camera_init();
>  
> +	if (omap_type() == OMAP2_DEVICE_TYPE_SEC) {
> +#ifdef CONFIG_ARM_ERRATA_430973
> +		pr_info("RX-51: Enabling ARM errata 430973 workaround\n");
> +		/* set IBE to 1 */
> +		rx51_secure_update_aux_cr(BIT(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);

Then this can be called both from board-generic.c based on the
compatible flag, and board-rx51.c for now.

Regards,

Tony

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH v2 2/2] RX-51: ARM errata 430973 workaround
  2013-09-17 23:24       ` Tony Lindgren
@ 2013-09-18  8:33         ` Pali Rohár
  -1 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-09-18  8:33 UTC (permalink / raw)
  To: Tony Lindgren
  Cc: linux-kernel, Aaro Koskinen, linux-omap, linux, linux-arm-kernel,
	Nishanth Menon, Pavel Machek, Peter De Schrijver,
	Santosh Shilimkar, Ivaylo Dimitrov

[-- Attachment #1: Type: Text/Plain, Size: 4964 bytes --]

On Wednesday 18 September 2013 01:24:17 Tony Lindgren wrote:
> * Pali Rohár <pali.rohar@gmail.com> [130710 06:06]:
> > --- a/arch/arm/mach-omap2/board-rx51.c
> > +++ b/arch/arm/mach-omap2/board-rx51.c
> 
> This file will be gone as soon as we're moving to device
> tree based booting. So let's do this in more future proof
> way.
> 
> > +/**
> > + * rx51_secure_dispatcher: Routine to dispatch secure PPA
> > API calls + * @idx: The PPA API index
> > + * @process: Process ID
> > + * @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.
> > + */
> > +static u32 rx51_secure_dispatcher(u32 idx, u32 process, u32
> > flag, u32 nargs, +			   u32 arg1, u32 arg2, u32 arg3, u32
> > arg4)
> > +{
> > +	u32 ret;
> > +	u32 param[5];
> > +
> > +	param[0] = nargs+1; /* RX-51 needs number of arguments + 
1
> > */ +	param[1] = arg1;
> > +	param[2] = arg2;
> > +	param[3] = arg3;
> > +	param[4] = arg4;
> > +
> > +	/*
> > +	 * Secure API needs physical address
> > +	 * pointer for the parameters
> > +	 */
> > +	local_irq_disable();
> > +	local_fiq_disable();
> > +	flush_cache_all();
> > +	outer_clean_range(__pa(param), __pa(param + 5));
> > +	ret = omap_smc3(idx, process, flag, __pa(param));
> > +	flush_cache_all();
> > +	local_fiq_enable();
> > +	local_irq_enable();
> > +
> > +	return ret;
> > +}
> 
> I think this used to be in omap-secure.c, and then made rx51
> specific.. But since board-rx51.c is going away, let's move
> this function to omap-secure.c.
> 
> > + * 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.
> > +*/
> > +static 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,
> > +				      0,
> > +				      FLAG_START_CRITICAL,
> > +				      1, acr, 0, 0, 0);
> > +}
> 
> This too.
> 
> >  static void __init rx51_init(void)
> >  {
> >  
> >  	struct omap_sdrc_params *sdrc_params;
> > 
> > @@ -105,6 +175,14 @@ static void __init rx51_init(void)
> > 
> >  	rx51_peripherals_init();
> >  	rx51_camera_init();
> > 
> > +	if (omap_type() == OMAP2_DEVICE_TYPE_SEC) {
> > +#ifdef CONFIG_ARM_ERRATA_430973
> > +		pr_info("RX-51: Enabling ARM errata 430973
> > workaround\n"); +		/* set IBE to 1 */
> > +		rx51_secure_update_aux_cr(BIT(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);
> 
> Then this can be called both from board-generic.c based on the
> compatible flag, and board-rx51.c for now.
> 
> Regards,
> 
> Tony

Hi Tony,

I'm not very happy. I sent this patch 6 months ago and only now 
you commented that needs rework again. This patch is needed 
because all thumb-2 userspace binaries crashing. I want to have
working support for Nokia N900 and not always rebasing and 
changing patches. Also DT still not working on N900 (file contains 
only small subset of devices as in board files plus it is not in 
stable kernel) so I do not want to switch to DT. I need something 
which is working and not something new non-working. I belive that 
you and other kernel guys do not remove all n900 board files until 
every one line will be rewritten to DT and tested that everything 
working. And from this and other conversation it looks for me 
that you are going to do that. So please clarify what you want to 
do (and when) with board-rx51-* files. Aftethat I can decide what 
to do in future.

For now I see this situation something like: I wrote patches, 
send them to ML and after half of year maintainer politely 
rejected them becuase my patches not using new uber cool 
technology with still not working and also was not available half 
year ago. What happen if I find another time to rework this patch 
and send it again in next 2 or 5 months?

Tony, if you did not have time for review this patch months ago 
or you found it only today - no problem, I understand it. But 
what I need to know is what will happen with board-rx51-* files 
(and when?) You can see that DT does not have definitions of all 
n900 hw parts (plus it is not in last 3.11 kernel!) which means 
that DT is not usable for me and other n900 people. This also 
means that I cannot rewrite my patches for DT and test if they 
working.

-- 
Pali Rohár
pali.rohar@gmail.com

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH v2 2/2] RX-51: ARM errata 430973 workaround
@ 2013-09-18  8:33         ` Pali Rohár
  0 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-09-18  8:33 UTC (permalink / raw)
  To: linux-arm-kernel

On Wednesday 18 September 2013 01:24:17 Tony Lindgren wrote:
> * Pali Roh?r <pali.rohar@gmail.com> [130710 06:06]:
> > --- a/arch/arm/mach-omap2/board-rx51.c
> > +++ b/arch/arm/mach-omap2/board-rx51.c
> 
> This file will be gone as soon as we're moving to device
> tree based booting. So let's do this in more future proof
> way.
> 
> > +/**
> > + * rx51_secure_dispatcher: Routine to dispatch secure PPA
> > API calls + * @idx: The PPA API index
> > + * @process: Process ID
> > + * @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.
> > + */
> > +static u32 rx51_secure_dispatcher(u32 idx, u32 process, u32
> > flag, u32 nargs, +			   u32 arg1, u32 arg2, u32 arg3, u32
> > arg4)
> > +{
> > +	u32 ret;
> > +	u32 param[5];
> > +
> > +	param[0] = nargs+1; /* RX-51 needs number of arguments + 
1
> > */ +	param[1] = arg1;
> > +	param[2] = arg2;
> > +	param[3] = arg3;
> > +	param[4] = arg4;
> > +
> > +	/*
> > +	 * Secure API needs physical address
> > +	 * pointer for the parameters
> > +	 */
> > +	local_irq_disable();
> > +	local_fiq_disable();
> > +	flush_cache_all();
> > +	outer_clean_range(__pa(param), __pa(param + 5));
> > +	ret = omap_smc3(idx, process, flag, __pa(param));
> > +	flush_cache_all();
> > +	local_fiq_enable();
> > +	local_irq_enable();
> > +
> > +	return ret;
> > +}
> 
> I think this used to be in omap-secure.c, and then made rx51
> specific.. But since board-rx51.c is going away, let's move
> this function to omap-secure.c.
> 
> > + * 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.
> > +*/
> > +static 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,
> > +				      0,
> > +				      FLAG_START_CRITICAL,
> > +				      1, acr, 0, 0, 0);
> > +}
> 
> This too.
> 
> >  static void __init rx51_init(void)
> >  {
> >  
> >  	struct omap_sdrc_params *sdrc_params;
> > 
> > @@ -105,6 +175,14 @@ static void __init rx51_init(void)
> > 
> >  	rx51_peripherals_init();
> >  	rx51_camera_init();
> > 
> > +	if (omap_type() == OMAP2_DEVICE_TYPE_SEC) {
> > +#ifdef CONFIG_ARM_ERRATA_430973
> > +		pr_info("RX-51: Enabling ARM errata 430973
> > workaround\n"); +		/* set IBE to 1 */
> > +		rx51_secure_update_aux_cr(BIT(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);
> 
> Then this can be called both from board-generic.c based on the
> compatible flag, and board-rx51.c for now.
> 
> Regards,
> 
> Tony

Hi Tony,

I'm not very happy. I sent this patch 6 months ago and only now 
you commented that needs rework again. This patch is needed 
because all thumb-2 userspace binaries crashing. I want to have
working support for Nokia N900 and not always rebasing and 
changing patches. Also DT still not working on N900 (file contains 
only small subset of devices as in board files plus it is not in 
stable kernel) so I do not want to switch to DT. I need something 
which is working and not something new non-working. I belive that 
you and other kernel guys do not remove all n900 board files until 
every one line will be rewritten to DT and tested that everything 
working. And from this and other conversation it looks for me 
that you are going to do that. So please clarify what you want to 
do (and when) with board-rx51-* files. Aftethat I can decide what 
to do in future.

For now I see this situation something like: I wrote patches, 
send them to ML and after half of year maintainer politely 
rejected them becuase my patches not using new uber cool 
technology with still not working and also was not available half 
year ago. What happen if I find another time to rework this patch 
and send it again in next 2 or 5 months?

Tony, if you did not have time for review this patch months ago 
or you found it only today - no problem, I understand it. But 
what I need to know is what will happen with board-rx51-* files 
(and when?) You can see that DT does not have definitions of all 
n900 hw parts (plus it is not in last 3.11 kernel!) which means 
that DT is not usable for me and other n900 people. This also 
means that I cannot rewrite my patches for DT and test if they 
working.

-- 
Pali Roh?r
pali.rohar at gmail.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130918/573a27bd/attachment-0001.sig>

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH v2 2/2] RX-51: ARM errata 430973 workaround
  2013-09-18  8:33         ` Pali Rohár
@ 2013-09-18 17:18           ` Tony Lindgren
  -1 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-09-18 17:18 UTC (permalink / raw)
  To: Pali Rohár
  Cc: linux-kernel, Aaro Koskinen, linux-omap, linux, linux-arm-kernel,
	Nishanth Menon, Pavel Machek, Peter De Schrijver,
	Santosh Shilimkar, Ivaylo Dimitrov

* Pali Rohár <pali.rohar@gmail.com> [130918 01:41]:
> 
> I'm not very happy. I sent this patch 6 months ago and only now 
> you commented that needs rework again. This patch is needed 
> because all thumb-2 userspace binaries crashing. I want to have
> working support for Nokia N900 and not always rebasing and 
> changing patches. Also DT still not working on N900 (file contains 
> only small subset of devices as in board files plus it is not in 
> stable kernel) so I do not want to switch to DT. I need something 
> which is working and not something new non-working. I belive that 
> you and other kernel guys do not remove all n900 board files until 
> every one line will be rewritten to DT and tested that everything 
> working. And from this and other conversation it looks for me 
> that you are going to do that. So please clarify what you want to 
> do (and when) with board-rx51-* files. Aftethat I can decide what 
> to do in future.

Sorry if there's been some going back and forth with the patches,
I think pretty much everybody wants n900 support in the mainline.

It's obvious that we're moving everything to be devicetree only
as discussed on the mailing lists over past few years. For most
drivers it's already working, and we can still initialize platform
data too for the legacy devices until they have bindings, so it
should not be too intrusive except for the configuration changes
to use appended DTB or a chained bootloader with DTB support.

> For now I see this situation something like: I wrote patches, 
> send them to ML and after half of year maintainer politely 
> rejected them becuase my patches not using new uber cool 
> technology with still not working and also was not available half 
> year ago. What happen if I find another time to rework this patch 
> and send it again in next 2 or 5 months?

Hmm hasn't there been pending comments until recently on your
patches?

It seems that with the changes I suggested your patches should
work for both legacy booting and DT based booting, so maybe just
try to update them over next few weeks, let's say by -rc3 rather
than wait 2 to 5 months? :) No need to test them currently on
the DT based booting if you don't have that set up, just move
the code out of the board-*.c file.
 
> Tony, if you did not have time for review this patch months ago 
> or you found it only today - no problem, I understand it. But 
> what I need to know is what will happen with board-rx51-* files 
> (and when?) You can see that DT does not have definitions of all 
> n900 hw parts (plus it is not in last 3.11 kernel!) which means 
> that DT is not usable for me and other n900 people. This also 
> means that I cannot rewrite my patches for DT and test if they 
> working.

I usually stop looking at new code around -rc4 and concentrate
on fixes until -rc1 or so. So there can be easily one month
delays on reviewing stuff depending on where we are with the
current merge window or -rc cycle, sorry if that's annoying.

The .dts files will be separate from the kernel soonish, so
that's not be a show stopper. Just like all the board specific
.config files are separate from the kernel already. Too bad our
.dts changes did not get merged for v3.12 because of conflicts
with other branches, but hey, they should be independent from the
kernel anyways.

The board files will be going away as soon as things are working
with DT. We've been pretty much only applying fixes to them for
quite some time now. For the timeline, the earliest we'll be able
to remove the board-*.c files and platform data is for v3.13
assuming the PM dependencies get sorted out before that. Making
omap3 DT only is going remove about 25k LOC, so that's a good
reason for doing that.

Cheers,

Tony

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH v2 2/2] RX-51: ARM errata 430973 workaround
@ 2013-09-18 17:18           ` Tony Lindgren
  0 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-09-18 17:18 UTC (permalink / raw)
  To: linux-arm-kernel

* Pali Roh?r <pali.rohar@gmail.com> [130918 01:41]:
> 
> I'm not very happy. I sent this patch 6 months ago and only now 
> you commented that needs rework again. This patch is needed 
> because all thumb-2 userspace binaries crashing. I want to have
> working support for Nokia N900 and not always rebasing and 
> changing patches. Also DT still not working on N900 (file contains 
> only small subset of devices as in board files plus it is not in 
> stable kernel) so I do not want to switch to DT. I need something 
> which is working and not something new non-working. I belive that 
> you and other kernel guys do not remove all n900 board files until 
> every one line will be rewritten to DT and tested that everything 
> working. And from this and other conversation it looks for me 
> that you are going to do that. So please clarify what you want to 
> do (and when) with board-rx51-* files. Aftethat I can decide what 
> to do in future.

Sorry if there's been some going back and forth with the patches,
I think pretty much everybody wants n900 support in the mainline.

It's obvious that we're moving everything to be devicetree only
as discussed on the mailing lists over past few years. For most
drivers it's already working, and we can still initialize platform
data too for the legacy devices until they have bindings, so it
should not be too intrusive except for the configuration changes
to use appended DTB or a chained bootloader with DTB support.

> For now I see this situation something like: I wrote patches, 
> send them to ML and after half of year maintainer politely 
> rejected them becuase my patches not using new uber cool 
> technology with still not working and also was not available half 
> year ago. What happen if I find another time to rework this patch 
> and send it again in next 2 or 5 months?

Hmm hasn't there been pending comments until recently on your
patches?

It seems that with the changes I suggested your patches should
work for both legacy booting and DT based booting, so maybe just
try to update them over next few weeks, let's say by -rc3 rather
than wait 2 to 5 months? :) No need to test them currently on
the DT based booting if you don't have that set up, just move
the code out of the board-*.c file.
 
> Tony, if you did not have time for review this patch months ago 
> or you found it only today - no problem, I understand it. But 
> what I need to know is what will happen with board-rx51-* files 
> (and when?) You can see that DT does not have definitions of all 
> n900 hw parts (plus it is not in last 3.11 kernel!) which means 
> that DT is not usable for me and other n900 people. This also 
> means that I cannot rewrite my patches for DT and test if they 
> working.

I usually stop looking at new code around -rc4 and concentrate
on fixes until -rc1 or so. So there can be easily one month
delays on reviewing stuff depending on where we are with the
current merge window or -rc cycle, sorry if that's annoying.

The .dts files will be separate from the kernel soonish, so
that's not be a show stopper. Just like all the board specific
.config files are separate from the kernel already. Too bad our
.dts changes did not get merged for v3.12 because of conflicts
with other branches, but hey, they should be independent from the
kernel anyways.

The board files will be going away as soon as things are working
with DT. We've been pretty much only applying fixes to them for
quite some time now. For the timeline, the earliest we'll be able
to remove the board-*.c files and platform data is for v3.13
assuming the PM dependencies get sorted out before that. Making
omap3 DT only is going remove about 25k LOC, so that's a good
reason for doing that.

Cheers,

Tony

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH v2 2/2] RX-51: ARM errata 430973 workaround
  2013-09-18 17:18           ` Tony Lindgren
@ 2013-09-18 18:13             ` Pali Rohár
  -1 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-09-18 18:13 UTC (permalink / raw)
  To: Tony Lindgren
  Cc: linux-kernel, Aaro Koskinen, linux-omap, linux, linux-arm-kernel,
	Nishanth Menon, Pavel Machek, Peter De Schrijver,
	Santosh Shilimkar, Ivaylo Dimitrov

[-- Attachment #1: Type: Text/Plain, Size: 4273 bytes --]

Hello,

On Wednesday 18 September 2013 19:18:17 Tony Lindgren wrote:
> * Pali Rohár <pali.rohar@gmail.com> [130918 01:41]:
> > I'm not very happy. I sent this patch 6 months ago and only
> > now you commented that needs rework again. This patch is
> > needed because all thumb-2 userspace binaries crashing. I
> > want to have working support for Nokia N900 and not always
> > rebasing and changing patches. Also DT still not working on
> > N900 (file contains only small subset of devices as in
> > board files plus it is not in stable kernel) so I do not
> > want to switch to DT. I need something which is working and
> > not something new non-working. I belive that you and other
> > kernel guys do not remove all n900 board files until every
> > one line will be rewritten to DT and tested that everything
> > working. And from this and other conversation it looks for
> > me that you are going to do that. So please clarify what
> > you want to do (and when) with board-rx51-* files. Aftethat
> > I can decide what to do in future.
> 
> Sorry if there's been some going back and forth with the
> patches, I think pretty much everybody wants n900 support in
> the mainline.
> 
> It's obvious that we're moving everything to be devicetree
> only as discussed on the mailing lists over past few years.
> For most drivers it's already working, and we can still
> initialize platform data too for the legacy devices until
> they have bindings, so it should not be too intrusive except
> for the configuration changes to use appended DTB or a
> chained bootloader with DTB support.
> 
> > For now I see this situation something like: I wrote
> > patches, send them to ML and after half of year maintainer
> > politely rejected them becuase my patches not using new
> > uber cool technology with still not working and also was
> > not available half year ago. What happen if I find another
> > time to rework this patch and send it again in next 2 or 5
> > months?
> 
> Hmm hasn't there been pending comments until recently on your
> patches?
> 

Since 10.07.2013 I do not have any emails for patch 2/2. If I 
missed something from you, please resend me it.

> It seems that with the changes I suggested your patches should
> work for both legacy booting and DT based booting, so maybe
> just try to update them over next few weeks, let's say by
> -rc3 rather than wait 2 to 5 months? :) No need to test them
> currently on the DT based booting if you don't have that set
> up, just move the code out of the board-*.c file.
> 

Ok, no problem. I will move code as you suggested.

> > Tony, if you did not have time for review this patch months
> > ago or you found it only today - no problem, I understand
> > it. But what I need to know is what will happen with
> > board-rx51-* files (and when?) You can see that DT does not
> > have definitions of all n900 hw parts (plus it is not in
> > last 3.11 kernel!) which means that DT is not usable for me
> > and other n900 people. This also means that I cannot
> > rewrite my patches for DT and test if they working.
> 
> I usually stop looking at new code around -rc4 and concentrate
> on fixes until -rc1 or so. So there can be easily one month
> delays on reviewing stuff depending on where we are with the
> current merge window or -rc cycle, sorry if that's annoying.
> 
> The .dts files will be separate from the kernel soonish, so
> that's not be a show stopper. Just like all the board specific
> .config files are separate from the kernel already. Too bad
> our .dts changes did not get merged for v3.12 because of
> conflicts with other branches, but hey, they should be
> independent from the kernel anyways.
> 
> The board files will be going away as soon as things are
> working with DT. We've been pretty much only applying fixes
> to them for quite some time now. For the timeline, the
> earliest we'll be able to remove the board-*.c files and
> platform data is for v3.13 assuming the PM dependencies get
> sorted out before that. Making omap3 DT only is going remove
> about 25k LOC, so that's a good reason for doing that.
> 
> Cheers,
> 
> Tony

Thanks for clarification.

-- 
Pali Rohár
pali.rohar@gmail.com

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH v2 2/2] RX-51: ARM errata 430973 workaround
@ 2013-09-18 18:13             ` Pali Rohár
  0 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-09-18 18:13 UTC (permalink / raw)
  To: linux-arm-kernel

Hello,

On Wednesday 18 September 2013 19:18:17 Tony Lindgren wrote:
> * Pali Roh?r <pali.rohar@gmail.com> [130918 01:41]:
> > I'm not very happy. I sent this patch 6 months ago and only
> > now you commented that needs rework again. This patch is
> > needed because all thumb-2 userspace binaries crashing. I
> > want to have working support for Nokia N900 and not always
> > rebasing and changing patches. Also DT still not working on
> > N900 (file contains only small subset of devices as in
> > board files plus it is not in stable kernel) so I do not
> > want to switch to DT. I need something which is working and
> > not something new non-working. I belive that you and other
> > kernel guys do not remove all n900 board files until every
> > one line will be rewritten to DT and tested that everything
> > working. And from this and other conversation it looks for
> > me that you are going to do that. So please clarify what
> > you want to do (and when) with board-rx51-* files. Aftethat
> > I can decide what to do in future.
> 
> Sorry if there's been some going back and forth with the
> patches, I think pretty much everybody wants n900 support in
> the mainline.
> 
> It's obvious that we're moving everything to be devicetree
> only as discussed on the mailing lists over past few years.
> For most drivers it's already working, and we can still
> initialize platform data too for the legacy devices until
> they have bindings, so it should not be too intrusive except
> for the configuration changes to use appended DTB or a
> chained bootloader with DTB support.
> 
> > For now I see this situation something like: I wrote
> > patches, send them to ML and after half of year maintainer
> > politely rejected them becuase my patches not using new
> > uber cool technology with still not working and also was
> > not available half year ago. What happen if I find another
> > time to rework this patch and send it again in next 2 or 5
> > months?
> 
> Hmm hasn't there been pending comments until recently on your
> patches?
> 

Since 10.07.2013 I do not have any emails for patch 2/2. If I 
missed something from you, please resend me it.

> It seems that with the changes I suggested your patches should
> work for both legacy booting and DT based booting, so maybe
> just try to update them over next few weeks, let's say by
> -rc3 rather than wait 2 to 5 months? :) No need to test them
> currently on the DT based booting if you don't have that set
> up, just move the code out of the board-*.c file.
> 

Ok, no problem. I will move code as you suggested.

> > Tony, if you did not have time for review this patch months
> > ago or you found it only today - no problem, I understand
> > it. But what I need to know is what will happen with
> > board-rx51-* files (and when?) You can see that DT does not
> > have definitions of all n900 hw parts (plus it is not in
> > last 3.11 kernel!) which means that DT is not usable for me
> > and other n900 people. This also means that I cannot
> > rewrite my patches for DT and test if they working.
> 
> I usually stop looking at new code around -rc4 and concentrate
> on fixes until -rc1 or so. So there can be easily one month
> delays on reviewing stuff depending on where we are with the
> current merge window or -rc cycle, sorry if that's annoying.
> 
> The .dts files will be separate from the kernel soonish, so
> that's not be a show stopper. Just like all the board specific
> .config files are separate from the kernel already. Too bad
> our .dts changes did not get merged for v3.12 because of
> conflicts with other branches, but hey, they should be
> independent from the kernel anyways.
> 
> The board files will be going away as soon as things are
> working with DT. We've been pretty much only applying fixes
> to them for quite some time now. For the timeline, the
> earliest we'll be able to remove the board-*.c files and
> platform data is for v3.13 assuming the PM dependencies get
> sorted out before that. Making omap3 DT only is going remove
> about 25k LOC, so that's a good reason for doing that.
> 
> Cheers,
> 
> Tony

Thanks for clarification.

-- 
Pali Roh?r
pali.rohar at gmail.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130918/98fd8ae4/attachment.sig>

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH v2 2/2] RX-51: ARM errata 430973 workaround
  2013-09-18 18:13             ` Pali Rohár
@ 2013-09-18 18:21               ` Tony Lindgren
  -1 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-09-18 18:21 UTC (permalink / raw)
  To: Pali Rohár
  Cc: linux-kernel, Aaro Koskinen, linux-omap, linux, linux-arm-kernel,
	Nishanth Menon, Pavel Machek, Peter De Schrijver,
	Santosh Shilimkar, Ivaylo Dimitrov

* Pali Rohár <pali.rohar@gmail.com> [130918 11:21]:
> On Wednesday 18 September 2013 19:18:17 Tony Lindgren wrote:
> > 
> > Hmm hasn't there been pending comments until recently on your
> > patches?
> > 
> 
> Since 10.07.2013 I do not have any emails for patch 2/2. If I 
> missed something from you, please resend me it.

Sorry I noticed it only when looking at them again from "keep
in my inbox for applying" or "mark as read and archive" point
of view. So no other comments from me are pending.
 
> > It seems that with the changes I suggested your patches should
> > work for both legacy booting and DT based booting, so maybe
> > just try to update them over next few weeks, let's say by
> > -rc3 rather than wait 2 to 5 months? :) No need to test them
> > currently on the DT based booting if you don't have that set
> > up, just move the code out of the board-*.c file.
> > 
> 
> Ok, no problem. I will move code as you suggested.

Thanks,

Tony

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH v2 2/2] RX-51: ARM errata 430973 workaround
@ 2013-09-18 18:21               ` Tony Lindgren
  0 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-09-18 18:21 UTC (permalink / raw)
  To: linux-arm-kernel

* Pali Roh?r <pali.rohar@gmail.com> [130918 11:21]:
> On Wednesday 18 September 2013 19:18:17 Tony Lindgren wrote:
> > 
> > Hmm hasn't there been pending comments until recently on your
> > patches?
> > 
> 
> Since 10.07.2013 I do not have any emails for patch 2/2. If I 
> missed something from you, please resend me it.

Sorry I noticed it only when looking at them again from "keep
in my inbox for applying" or "mark as read and archive" point
of view. So no other comments from me are pending.
 
> > It seems that with the changes I suggested your patches should
> > work for both legacy booting and DT based booting, so maybe
> > just try to update them over next few weeks, let's say by
> > -rc3 rather than wait 2 to 5 months? :) No need to test them
> > currently on the DT based booting if you don't have that set
> > up, just move the code out of the board-*.c file.
> > 
> 
> Ok, no problem. I will move code as you suggested.

Thanks,

Tony

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH v3 2/2] RX-51: ARM errata 430973 workaround
  2013-09-17 23:24       ` Tony Lindgren
@ 2013-09-18 19:22         ` Pali Rohár
  -1 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-09-18 19:22 UTC (permalink / raw)
  To: Tony Lindgren
  Cc: linux-kernel, Aaro Koskinen, linux-omap, linux, linux-arm-kernel,
	Nishanth Menon, Pavel Machek, Peter De Schrijver,
	Santosh Shilimkar, Ivaylo Dimitrov

[-- Attachment #1: Type: Text/Plain, Size: 5263 bytes --]

Hello Tony,

here is new v3 patch. I just only moved functions rx51_secure_dispatcher and
rx51_secure_update_aux_cr to omap-secure.c and added header to omap-secure.h
Because I only moved two functions to other source file I tested only compilation.
It is OK now?

diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c
index 773510556..db168c9 100644
--- a/arch/arm/mach-omap2/board-rx51.c
+++ b/arch/arm/mach-omap2/board-rx51.c
@@ -2,6 +2,8 @@
  * Board support file for Nokia N900 (aka RX-51).
  *
  * Copyright (C) 2007, 2008 Nokia
+ * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
+ * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com>
  *
  * 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
@@ -31,7 +33,9 @@
 #include "mux.h"
 #include "gpmc.h"
 #include "pm.h"
+#include "soc.h"
 #include "sdram-nokia.h"
+#include "omap-secure.h"
 
 #define RX51_GPIO_SLEEP_IND 162
 
@@ -103,6 +107,14 @@ static void __init rx51_init(void)
 	usb_musb_init(&musb_board_data);
 	rx51_peripherals_init();
 
+	if (omap_type() == OMAP2_DEVICE_TYPE_SEC) {
+#ifdef CONFIG_ARM_ERRATA_430973
+		pr_info("RX-51: Enabling ARM errata 430973 workaround\n");
+		/* set IBE to 1 */
+		rx51_secure_update_aux_cr(BIT(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);
diff --git a/arch/arm/mach-omap2/omap-secure.c b/arch/arm/mach-omap2/omap-secure.c
index b970440..eba74cf 100644
--- a/arch/arm/mach-omap2/omap-secure.c
+++ b/arch/arm/mach-omap2/omap-secure.c
@@ -3,6 +3,8 @@
  *
  * Copyright (C) 2011 Texas Instruments, Inc.
  *	Santosh Shilimkar <santosh.shilimkar@ti.com>
+ * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
+ * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com>
  *
  *
  * This program is free software,you can redistribute it and/or modify
@@ -70,3 +72,63 @@ phys_addr_t omap_secure_ram_mempool_base(void)
 {
 	return omap_secure_memblock_base;
 }
+
+/**
+ * rx51_secure_dispatcher: Routine to dispatch secure PPA API calls
+ * @idx: The PPA API index
+ * @process: Process ID
+ * @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 process, u32 flag, u32 nargs,
+			   u32 arg1, u32 arg2, u32 arg3, u32 arg4)
+{
+	u32 ret;
+	u32 param[5];
+
+	param[0] = nargs+1; /* RX-51 needs number of arguments + 1 */
+	param[1] = arg1;
+	param[2] = arg2;
+	param[3] = arg3;
+	param[4] = arg4;
+
+	/*
+	 * Secure API needs physical address
+	 * pointer for the parameters
+	 */
+	local_irq_disable();
+	local_fiq_disable();
+	flush_cache_all();
+	outer_clean_range(__pa(param), __pa(param + 5));
+	ret = omap_smc3(idx, process, flag, __pa(param));
+	flush_cache_all();
+	local_fiq_enable();
+	local_irq_enable();
+
+	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,
+				      0,
+				      FLAG_START_CRITICAL,
+				      1, acr, 0, 0, 0);
+}
diff --git a/arch/arm/mach-omap2/omap-secure.h b/arch/arm/mach-omap2/omap-secure.h
index c4586f4..51b59c6 100644
--- a/arch/arm/mach-omap2/omap-secure.h
+++ b/arch/arm/mach-omap2/omap-secure.h
@@ -3,6 +3,8 @@
  *
  * Copyright (C) 2011 Texas Instruments, Inc.
  *	Santosh Shilimkar <santosh.shilimkar@ti.com>
+ * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
+ * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com>
  *
  * 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
@@ -46,6 +48,11 @@
 #define OMAP4_PPA_L2_POR_INDEX		0x23
 #define OMAP4_PPA_CPU_ACTRL_SMP_INDEX	0x25
 
+/* Secure RX-51 PPA (Primary Protected Application) APIs */
+#define RX51_PPA_HWRNG			29
+#define RX51_PPA_L2_INVAL		40
+#define RX51_PPA_WRITE_ACR		42
+
 #ifndef __ASSEMBLER__
 
 extern u32 omap_secure_dispatcher(u32 idx, u32 flag, u32 nargs,
@@ -55,6 +62,10 @@ extern u32 omap_smc3(u32 id, u32 process, u32 flag, u32 pargs);
 extern phys_addr_t omap_secure_ram_mempool_base(void);
 extern int omap_secure_ram_reserve_memblock(void);
 
+extern u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs,
+				  u32 arg1, u32 arg2, u32 arg3, u32 arg4);
+extern u32 rx51_secure_update_aux_cr(u32 set_bits, u32 clear_bits);
+
 #ifdef CONFIG_OMAP4_ERRATA_I688
 extern int omap_barrier_reserve_memblock(void);
 #else


-- 
Pali Rohár
pali.rohar@gmail.com

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply related	[flat|nested] 78+ messages in thread

* [PATCH v3 2/2] RX-51: ARM errata 430973 workaround
@ 2013-09-18 19:22         ` Pali Rohár
  0 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-09-18 19:22 UTC (permalink / raw)
  To: linux-arm-kernel

Hello Tony,

here is new v3 patch. I just only moved functions rx51_secure_dispatcher and
rx51_secure_update_aux_cr to omap-secure.c and added header to omap-secure.h
Because I only moved two functions to other source file I tested only compilation.
It is OK now?

diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c
index 773510556..db168c9 100644
--- a/arch/arm/mach-omap2/board-rx51.c
+++ b/arch/arm/mach-omap2/board-rx51.c
@@ -2,6 +2,8 @@
  * Board support file for Nokia N900 (aka RX-51).
  *
  * Copyright (C) 2007, 2008 Nokia
+ * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
+ * Copyright (C) 2013 Pali Roh?r <pali.rohar@gmail.com>
  *
  * 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
@@ -31,7 +33,9 @@
 #include "mux.h"
 #include "gpmc.h"
 #include "pm.h"
+#include "soc.h"
 #include "sdram-nokia.h"
+#include "omap-secure.h"
 
 #define RX51_GPIO_SLEEP_IND 162
 
@@ -103,6 +107,14 @@ static void __init rx51_init(void)
 	usb_musb_init(&musb_board_data);
 	rx51_peripherals_init();
 
+	if (omap_type() == OMAP2_DEVICE_TYPE_SEC) {
+#ifdef CONFIG_ARM_ERRATA_430973
+		pr_info("RX-51: Enabling ARM errata 430973 workaround\n");
+		/* set IBE to 1 */
+		rx51_secure_update_aux_cr(BIT(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);
diff --git a/arch/arm/mach-omap2/omap-secure.c b/arch/arm/mach-omap2/omap-secure.c
index b970440..eba74cf 100644
--- a/arch/arm/mach-omap2/omap-secure.c
+++ b/arch/arm/mach-omap2/omap-secure.c
@@ -3,6 +3,8 @@
  *
  * Copyright (C) 2011 Texas Instruments, Inc.
  *	Santosh Shilimkar <santosh.shilimkar@ti.com>
+ * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
+ * Copyright (C) 2013 Pali Roh?r <pali.rohar@gmail.com>
  *
  *
  * This program is free software,you can redistribute it and/or modify
@@ -70,3 +72,63 @@ phys_addr_t omap_secure_ram_mempool_base(void)
 {
 	return omap_secure_memblock_base;
 }
+
+/**
+ * rx51_secure_dispatcher: Routine to dispatch secure PPA API calls
+ * @idx: The PPA API index
+ * @process: Process ID
+ * @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 process, u32 flag, u32 nargs,
+			   u32 arg1, u32 arg2, u32 arg3, u32 arg4)
+{
+	u32 ret;
+	u32 param[5];
+
+	param[0] = nargs+1; /* RX-51 needs number of arguments + 1 */
+	param[1] = arg1;
+	param[2] = arg2;
+	param[3] = arg3;
+	param[4] = arg4;
+
+	/*
+	 * Secure API needs physical address
+	 * pointer for the parameters
+	 */
+	local_irq_disable();
+	local_fiq_disable();
+	flush_cache_all();
+	outer_clean_range(__pa(param), __pa(param + 5));
+	ret = omap_smc3(idx, process, flag, __pa(param));
+	flush_cache_all();
+	local_fiq_enable();
+	local_irq_enable();
+
+	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,
+				      0,
+				      FLAG_START_CRITICAL,
+				      1, acr, 0, 0, 0);
+}
diff --git a/arch/arm/mach-omap2/omap-secure.h b/arch/arm/mach-omap2/omap-secure.h
index c4586f4..51b59c6 100644
--- a/arch/arm/mach-omap2/omap-secure.h
+++ b/arch/arm/mach-omap2/omap-secure.h
@@ -3,6 +3,8 @@
  *
  * Copyright (C) 2011 Texas Instruments, Inc.
  *	Santosh Shilimkar <santosh.shilimkar@ti.com>
+ * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
+ * Copyright (C) 2013 Pali Roh?r <pali.rohar@gmail.com>
  *
  * 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
@@ -46,6 +48,11 @@
 #define OMAP4_PPA_L2_POR_INDEX		0x23
 #define OMAP4_PPA_CPU_ACTRL_SMP_INDEX	0x25
 
+/* Secure RX-51 PPA (Primary Protected Application) APIs */
+#define RX51_PPA_HWRNG			29
+#define RX51_PPA_L2_INVAL		40
+#define RX51_PPA_WRITE_ACR		42
+
 #ifndef __ASSEMBLER__
 
 extern u32 omap_secure_dispatcher(u32 idx, u32 flag, u32 nargs,
@@ -55,6 +62,10 @@ extern u32 omap_smc3(u32 id, u32 process, u32 flag, u32 pargs);
 extern phys_addr_t omap_secure_ram_mempool_base(void);
 extern int omap_secure_ram_reserve_memblock(void);
 
+extern u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs,
+				  u32 arg1, u32 arg2, u32 arg3, u32 arg4);
+extern u32 rx51_secure_update_aux_cr(u32 set_bits, u32 clear_bits);
+
 #ifdef CONFIG_OMAP4_ERRATA_I688
 extern int omap_barrier_reserve_memblock(void);
 #else


-- 
Pali Roh?r
pali.rohar at gmail.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130918/9da07aa7/attachment.sig>

^ permalink raw reply related	[flat|nested] 78+ messages in thread

* Re: [PATCH v3 2/2] RX-51: ARM errata 430973 workaround
  2013-09-18 19:22         ` Pali Rohár
@ 2013-09-18 19:27           ` Tony Lindgren
  -1 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-09-18 19:27 UTC (permalink / raw)
  To: Pali Rohár
  Cc: linux-kernel, Aaro Koskinen, linux-omap, linux, linux-arm-kernel,
	Nishanth Menon, Pavel Machek, Peter De Schrijver,
	Santosh Shilimkar, Ivaylo Dimitrov

* Pali Rohár <pali.rohar@gmail.com> [130918 12:29]:
> Hello Tony,
> 
> here is new v3 patch. I just only moved functions rx51_secure_dispatcher and
> rx51_secure_update_aux_cr to omap-secure.c and added header to omap-secure.h
> Because I only moved two functions to other source file I tested only compilation.
> It is OK now?

Yes looks OK to me for v3.13 for the patch.

For the patch description, maybe also add something saying
that the rx51_secure_dispatcher() is different from the existing
smc function as that may be easy to miss while glancing over
the code?

Regards,

Tony
 
> diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c
> index 773510556..db168c9 100644
> --- a/arch/arm/mach-omap2/board-rx51.c
> +++ b/arch/arm/mach-omap2/board-rx51.c
> @@ -2,6 +2,8 @@
>   * Board support file for Nokia N900 (aka RX-51).
>   *
>   * Copyright (C) 2007, 2008 Nokia
> + * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
> + * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com>
>   *
>   * 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
> @@ -31,7 +33,9 @@
>  #include "mux.h"
>  #include "gpmc.h"
>  #include "pm.h"
> +#include "soc.h"
>  #include "sdram-nokia.h"
> +#include "omap-secure.h"
>  
>  #define RX51_GPIO_SLEEP_IND 162
>  
> @@ -103,6 +107,14 @@ static void __init rx51_init(void)
>  	usb_musb_init(&musb_board_data);
>  	rx51_peripherals_init();
>  
> +	if (omap_type() == OMAP2_DEVICE_TYPE_SEC) {
> +#ifdef CONFIG_ARM_ERRATA_430973
> +		pr_info("RX-51: Enabling ARM errata 430973 workaround\n");
> +		/* set IBE to 1 */
> +		rx51_secure_update_aux_cr(BIT(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);
> diff --git a/arch/arm/mach-omap2/omap-secure.c b/arch/arm/mach-omap2/omap-secure.c
> index b970440..eba74cf 100644
> --- a/arch/arm/mach-omap2/omap-secure.c
> +++ b/arch/arm/mach-omap2/omap-secure.c
> @@ -3,6 +3,8 @@
>   *
>   * Copyright (C) 2011 Texas Instruments, Inc.
>   *	Santosh Shilimkar <santosh.shilimkar@ti.com>
> + * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
> + * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com>
>   *
>   *
>   * This program is free software,you can redistribute it and/or modify
> @@ -70,3 +72,63 @@ phys_addr_t omap_secure_ram_mempool_base(void)
>  {
>  	return omap_secure_memblock_base;
>  }
> +
> +/**
> + * rx51_secure_dispatcher: Routine to dispatch secure PPA API calls
> + * @idx: The PPA API index
> + * @process: Process ID
> + * @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 process, u32 flag, u32 nargs,
> +			   u32 arg1, u32 arg2, u32 arg3, u32 arg4)
> +{
> +	u32 ret;
> +	u32 param[5];
> +
> +	param[0] = nargs+1; /* RX-51 needs number of arguments + 1 */
> +	param[1] = arg1;
> +	param[2] = arg2;
> +	param[3] = arg3;
> +	param[4] = arg4;
> +
> +	/*
> +	 * Secure API needs physical address
> +	 * pointer for the parameters
> +	 */
> +	local_irq_disable();
> +	local_fiq_disable();
> +	flush_cache_all();
> +	outer_clean_range(__pa(param), __pa(param + 5));
> +	ret = omap_smc3(idx, process, flag, __pa(param));
> +	flush_cache_all();
> +	local_fiq_enable();
> +	local_irq_enable();
> +
> +	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,
> +				      0,
> +				      FLAG_START_CRITICAL,
> +				      1, acr, 0, 0, 0);
> +}
> diff --git a/arch/arm/mach-omap2/omap-secure.h b/arch/arm/mach-omap2/omap-secure.h
> index c4586f4..51b59c6 100644
> --- a/arch/arm/mach-omap2/omap-secure.h
> +++ b/arch/arm/mach-omap2/omap-secure.h
> @@ -3,6 +3,8 @@
>   *
>   * Copyright (C) 2011 Texas Instruments, Inc.
>   *	Santosh Shilimkar <santosh.shilimkar@ti.com>
> + * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
> + * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com>
>   *
>   * 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
> @@ -46,6 +48,11 @@
>  #define OMAP4_PPA_L2_POR_INDEX		0x23
>  #define OMAP4_PPA_CPU_ACTRL_SMP_INDEX	0x25
>  
> +/* Secure RX-51 PPA (Primary Protected Application) APIs */
> +#define RX51_PPA_HWRNG			29
> +#define RX51_PPA_L2_INVAL		40
> +#define RX51_PPA_WRITE_ACR		42
> +
>  #ifndef __ASSEMBLER__
>  
>  extern u32 omap_secure_dispatcher(u32 idx, u32 flag, u32 nargs,
> @@ -55,6 +62,10 @@ extern u32 omap_smc3(u32 id, u32 process, u32 flag, u32 pargs);
>  extern phys_addr_t omap_secure_ram_mempool_base(void);
>  extern int omap_secure_ram_reserve_memblock(void);
>  
> +extern u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs,
> +				  u32 arg1, u32 arg2, u32 arg3, u32 arg4);
> +extern u32 rx51_secure_update_aux_cr(u32 set_bits, u32 clear_bits);
> +
>  #ifdef CONFIG_OMAP4_ERRATA_I688
>  extern int omap_barrier_reserve_memblock(void);
>  #else
> 
> 
> -- 
> Pali Rohár
> pali.rohar@gmail.com



^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH v3 2/2] RX-51: ARM errata 430973 workaround
@ 2013-09-18 19:27           ` Tony Lindgren
  0 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-09-18 19:27 UTC (permalink / raw)
  To: linux-arm-kernel

* Pali Roh?r <pali.rohar@gmail.com> [130918 12:29]:
> Hello Tony,
> 
> here is new v3 patch. I just only moved functions rx51_secure_dispatcher and
> rx51_secure_update_aux_cr to omap-secure.c and added header to omap-secure.h
> Because I only moved two functions to other source file I tested only compilation.
> It is OK now?

Yes looks OK to me for v3.13 for the patch.

For the patch description, maybe also add something saying
that the rx51_secure_dispatcher() is different from the existing
smc function as that may be easy to miss while glancing over
the code?

Regards,

Tony
 
> diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c
> index 773510556..db168c9 100644
> --- a/arch/arm/mach-omap2/board-rx51.c
> +++ b/arch/arm/mach-omap2/board-rx51.c
> @@ -2,6 +2,8 @@
>   * Board support file for Nokia N900 (aka RX-51).
>   *
>   * Copyright (C) 2007, 2008 Nokia
> + * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
> + * Copyright (C) 2013 Pali Roh?r <pali.rohar@gmail.com>
>   *
>   * 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
> @@ -31,7 +33,9 @@
>  #include "mux.h"
>  #include "gpmc.h"
>  #include "pm.h"
> +#include "soc.h"
>  #include "sdram-nokia.h"
> +#include "omap-secure.h"
>  
>  #define RX51_GPIO_SLEEP_IND 162
>  
> @@ -103,6 +107,14 @@ static void __init rx51_init(void)
>  	usb_musb_init(&musb_board_data);
>  	rx51_peripherals_init();
>  
> +	if (omap_type() == OMAP2_DEVICE_TYPE_SEC) {
> +#ifdef CONFIG_ARM_ERRATA_430973
> +		pr_info("RX-51: Enabling ARM errata 430973 workaround\n");
> +		/* set IBE to 1 */
> +		rx51_secure_update_aux_cr(BIT(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);
> diff --git a/arch/arm/mach-omap2/omap-secure.c b/arch/arm/mach-omap2/omap-secure.c
> index b970440..eba74cf 100644
> --- a/arch/arm/mach-omap2/omap-secure.c
> +++ b/arch/arm/mach-omap2/omap-secure.c
> @@ -3,6 +3,8 @@
>   *
>   * Copyright (C) 2011 Texas Instruments, Inc.
>   *	Santosh Shilimkar <santosh.shilimkar@ti.com>
> + * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
> + * Copyright (C) 2013 Pali Roh?r <pali.rohar@gmail.com>
>   *
>   *
>   * This program is free software,you can redistribute it and/or modify
> @@ -70,3 +72,63 @@ phys_addr_t omap_secure_ram_mempool_base(void)
>  {
>  	return omap_secure_memblock_base;
>  }
> +
> +/**
> + * rx51_secure_dispatcher: Routine to dispatch secure PPA API calls
> + * @idx: The PPA API index
> + * @process: Process ID
> + * @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 process, u32 flag, u32 nargs,
> +			   u32 arg1, u32 arg2, u32 arg3, u32 arg4)
> +{
> +	u32 ret;
> +	u32 param[5];
> +
> +	param[0] = nargs+1; /* RX-51 needs number of arguments + 1 */
> +	param[1] = arg1;
> +	param[2] = arg2;
> +	param[3] = arg3;
> +	param[4] = arg4;
> +
> +	/*
> +	 * Secure API needs physical address
> +	 * pointer for the parameters
> +	 */
> +	local_irq_disable();
> +	local_fiq_disable();
> +	flush_cache_all();
> +	outer_clean_range(__pa(param), __pa(param + 5));
> +	ret = omap_smc3(idx, process, flag, __pa(param));
> +	flush_cache_all();
> +	local_fiq_enable();
> +	local_irq_enable();
> +
> +	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,
> +				      0,
> +				      FLAG_START_CRITICAL,
> +				      1, acr, 0, 0, 0);
> +}
> diff --git a/arch/arm/mach-omap2/omap-secure.h b/arch/arm/mach-omap2/omap-secure.h
> index c4586f4..51b59c6 100644
> --- a/arch/arm/mach-omap2/omap-secure.h
> +++ b/arch/arm/mach-omap2/omap-secure.h
> @@ -3,6 +3,8 @@
>   *
>   * Copyright (C) 2011 Texas Instruments, Inc.
>   *	Santosh Shilimkar <santosh.shilimkar@ti.com>
> + * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
> + * Copyright (C) 2013 Pali Roh?r <pali.rohar@gmail.com>
>   *
>   * 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
> @@ -46,6 +48,11 @@
>  #define OMAP4_PPA_L2_POR_INDEX		0x23
>  #define OMAP4_PPA_CPU_ACTRL_SMP_INDEX	0x25
>  
> +/* Secure RX-51 PPA (Primary Protected Application) APIs */
> +#define RX51_PPA_HWRNG			29
> +#define RX51_PPA_L2_INVAL		40
> +#define RX51_PPA_WRITE_ACR		42
> +
>  #ifndef __ASSEMBLER__
>  
>  extern u32 omap_secure_dispatcher(u32 idx, u32 flag, u32 nargs,
> @@ -55,6 +62,10 @@ extern u32 omap_smc3(u32 id, u32 process, u32 flag, u32 pargs);
>  extern phys_addr_t omap_secure_ram_mempool_base(void);
>  extern int omap_secure_ram_reserve_memblock(void);
>  
> +extern u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs,
> +				  u32 arg1, u32 arg2, u32 arg3, u32 arg4);
> +extern u32 rx51_secure_update_aux_cr(u32 set_bits, u32 clear_bits);
> +
>  #ifdef CONFIG_OMAP4_ERRATA_I688
>  extern int omap_barrier_reserve_memblock(void);
>  #else
> 
> 
> -- 
> Pali Roh?r
> pali.rohar at gmail.com

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH v4 2/2] RX-51: ARM errata 430973 workaround
  2013-09-18 19:27           ` Tony Lindgren
@ 2013-09-18 19:43             ` Pali Rohár
  -1 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-09-18 19:43 UTC (permalink / raw)
  To: Tony Lindgren
  Cc: linux-kernel, Aaro Koskinen, linux-omap, linux, linux-arm-kernel,
	Nishanth Menon, Pavel Machek, Peter De Schrijver,
	Santosh Shilimkar, Ivaylo Dimitrov

[-- Attachment #1: Type: Text/Plain, Size: 6567 bytes --]

Closed and signed Nokia X-Loader bootloader stored in RX-51 nand does not set
IBE bit in ACTLR and starting kernel in non-secure mode. So direct write to
ACTLR by our kernel does not working and the code for ARM errata 430973 in
commit 7ce236fcd6fd45b0441a2d49acb2ceb2de2e8a47 that sets IBE bit is a noop.

In order to have workaround for ARM errata 430973 from non-secure world on
RX-51 we needs Secure Monitor Call to set IBE BIT in ACTLR.

This patch adds RX-51 specific secure support code and sets IBE bit in ACTLR
during board init code for ARM errata 430973 workaround.

Note that new function rx51_secure_dispatcher() differs from existing
omap_secure_dispatcher(). It calling omap_smc3() and param[0] is nargs+1.

ARM errata 430973 workaround is needed for thumb-2 ISA compiled userspace
binaries. Without this workaround thumb-2 binaries crashing. So with this
patch it is possible to recompile and run applications/binaries with thumb-2
ISA on RX-51.

Signed-off-by: Ivaylo Dimitrov <freemangordon@abv.bg>
Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
---

I added note about difference between rx51_secure_dispatcher and
omap_secure_dispatcher to commit message and also to code.

 arch/arm/mach-omap2/board-rx51.c  |   12 +++++++
 arch/arm/mach-omap2/omap-secure.c |   65 +++++++++++++++++++++++++++++++++++++
 arch/arm/mach-omap2/omap-secure.h |   11 +++++++
 3 files changed, 88 insertions(+)

diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c
index 773510556..db168c9 100644
--- a/arch/arm/mach-omap2/board-rx51.c
+++ b/arch/arm/mach-omap2/board-rx51.c
@@ -2,6 +2,8 @@
  * Board support file for Nokia N900 (aka RX-51).
  *
  * Copyright (C) 2007, 2008 Nokia
+ * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
+ * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com>
  *
  * 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
@@ -31,7 +33,9 @@
 #include "mux.h"
 #include "gpmc.h"
 #include "pm.h"
+#include "soc.h"
 #include "sdram-nokia.h"
+#include "omap-secure.h"
 
 #define RX51_GPIO_SLEEP_IND 162
 
@@ -103,6 +107,14 @@ static void __init rx51_init(void)
 	usb_musb_init(&musb_board_data);
 	rx51_peripherals_init();
 
+	if (omap_type() == OMAP2_DEVICE_TYPE_SEC) {
+#ifdef CONFIG_ARM_ERRATA_430973
+		pr_info("RX-51: Enabling ARM errata 430973 workaround\n");
+		/* set IBE to 1 */
+		rx51_secure_update_aux_cr(BIT(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);
diff --git a/arch/arm/mach-omap2/omap-secure.c b/arch/arm/mach-omap2/omap-secure.c
index b970440..146a7c4 100644
--- a/arch/arm/mach-omap2/omap-secure.c
+++ b/arch/arm/mach-omap2/omap-secure.c
@@ -3,6 +3,8 @@
  *
  * Copyright (C) 2011 Texas Instruments, Inc.
  *	Santosh Shilimkar <santosh.shilimkar@ti.com>
+ * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
+ * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com>
  *
  *
  * This program is free software,you can redistribute it and/or modify
@@ -70,3 +72,66 @@ phys_addr_t omap_secure_ram_mempool_base(void)
 {
 	return omap_secure_memblock_base;
 }
+
+/**
+ * rx51_secure_dispatcher: Routine to dispatch secure PPA API calls
+ * @idx: The PPA API index
+ * @process: Process ID
+ * @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.
+ *
+ * NOTE: rx51_secure_dispatcher differs from omap_secure_dispatcher because
+ *       it calling omap_smc3() instead omap_smc2() and param[0] is nargs+1
+ */
+u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs,
+			   u32 arg1, u32 arg2, u32 arg3, u32 arg4)
+{
+	u32 ret;
+	u32 param[5];
+
+	param[0] = nargs+1; /* RX-51 needs number of arguments + 1 */
+	param[1] = arg1;
+	param[2] = arg2;
+	param[3] = arg3;
+	param[4] = arg4;
+
+	/*
+	 * Secure API needs physical address
+	 * pointer for the parameters
+	 */
+	local_irq_disable();
+	local_fiq_disable();
+	flush_cache_all();
+	outer_clean_range(__pa(param), __pa(param + 5));
+	ret = omap_smc3(idx, process, flag, __pa(param));
+	flush_cache_all();
+	local_fiq_enable();
+	local_irq_enable();
+
+	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,
+				      0,
+				      FLAG_START_CRITICAL,
+				      1, acr, 0, 0, 0);
+}
diff --git a/arch/arm/mach-omap2/omap-secure.h b/arch/arm/mach-omap2/omap-secure.h
index c4586f4..51b59c6 100644
--- a/arch/arm/mach-omap2/omap-secure.h
+++ b/arch/arm/mach-omap2/omap-secure.h
@@ -3,6 +3,8 @@
  *
  * Copyright (C) 2011 Texas Instruments, Inc.
  *	Santosh Shilimkar <santosh.shilimkar@ti.com>
+ * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
+ * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com>
  *
  * 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
@@ -46,6 +48,11 @@
 #define OMAP4_PPA_L2_POR_INDEX		0x23
 #define OMAP4_PPA_CPU_ACTRL_SMP_INDEX	0x25
 
+/* Secure RX-51 PPA (Primary Protected Application) APIs */
+#define RX51_PPA_HWRNG			29
+#define RX51_PPA_L2_INVAL		40
+#define RX51_PPA_WRITE_ACR		42
+
 #ifndef __ASSEMBLER__
 
 extern u32 omap_secure_dispatcher(u32 idx, u32 flag, u32 nargs,
@@ -55,6 +62,10 @@ extern u32 omap_smc3(u32 id, u32 process, u32 flag, u32 pargs);
 extern phys_addr_t omap_secure_ram_mempool_base(void);
 extern int omap_secure_ram_reserve_memblock(void);
 
+extern u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs,
+				  u32 arg1, u32 arg2, u32 arg3, u32 arg4);
+extern u32 rx51_secure_update_aux_cr(u32 set_bits, u32 clear_bits);
+
 #ifdef CONFIG_OMAP4_ERRATA_I688
 extern int omap_barrier_reserve_memblock(void);
 #else
-- 
1.7.10.4

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply related	[flat|nested] 78+ messages in thread

* [PATCH v4 2/2] RX-51: ARM errata 430973 workaround
@ 2013-09-18 19:43             ` Pali Rohár
  0 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-09-18 19:43 UTC (permalink / raw)
  To: linux-arm-kernel

Closed and signed Nokia X-Loader bootloader stored in RX-51 nand does not set
IBE bit in ACTLR and starting kernel in non-secure mode. So direct write to
ACTLR by our kernel does not working and the code for ARM errata 430973 in
commit 7ce236fcd6fd45b0441a2d49acb2ceb2de2e8a47 that sets IBE bit is a noop.

In order to have workaround for ARM errata 430973 from non-secure world on
RX-51 we needs Secure Monitor Call to set IBE BIT in ACTLR.

This patch adds RX-51 specific secure support code and sets IBE bit in ACTLR
during board init code for ARM errata 430973 workaround.

Note that new function rx51_secure_dispatcher() differs from existing
omap_secure_dispatcher(). It calling omap_smc3() and param[0] is nargs+1.

ARM errata 430973 workaround is needed for thumb-2 ISA compiled userspace
binaries. Without this workaround thumb-2 binaries crashing. So with this
patch it is possible to recompile and run applications/binaries with thumb-2
ISA on RX-51.

Signed-off-by: Ivaylo Dimitrov <freemangordon@abv.bg>
Signed-off-by: Pali Roh?r <pali.rohar@gmail.com>
---

I added note about difference between rx51_secure_dispatcher and
omap_secure_dispatcher to commit message and also to code.

 arch/arm/mach-omap2/board-rx51.c  |   12 +++++++
 arch/arm/mach-omap2/omap-secure.c |   65 +++++++++++++++++++++++++++++++++++++
 arch/arm/mach-omap2/omap-secure.h |   11 +++++++
 3 files changed, 88 insertions(+)

diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c
index 773510556..db168c9 100644
--- a/arch/arm/mach-omap2/board-rx51.c
+++ b/arch/arm/mach-omap2/board-rx51.c
@@ -2,6 +2,8 @@
  * Board support file for Nokia N900 (aka RX-51).
  *
  * Copyright (C) 2007, 2008 Nokia
+ * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
+ * Copyright (C) 2013 Pali Roh?r <pali.rohar@gmail.com>
  *
  * 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
@@ -31,7 +33,9 @@
 #include "mux.h"
 #include "gpmc.h"
 #include "pm.h"
+#include "soc.h"
 #include "sdram-nokia.h"
+#include "omap-secure.h"
 
 #define RX51_GPIO_SLEEP_IND 162
 
@@ -103,6 +107,14 @@ static void __init rx51_init(void)
 	usb_musb_init(&musb_board_data);
 	rx51_peripherals_init();
 
+	if (omap_type() == OMAP2_DEVICE_TYPE_SEC) {
+#ifdef CONFIG_ARM_ERRATA_430973
+		pr_info("RX-51: Enabling ARM errata 430973 workaround\n");
+		/* set IBE to 1 */
+		rx51_secure_update_aux_cr(BIT(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);
diff --git a/arch/arm/mach-omap2/omap-secure.c b/arch/arm/mach-omap2/omap-secure.c
index b970440..146a7c4 100644
--- a/arch/arm/mach-omap2/omap-secure.c
+++ b/arch/arm/mach-omap2/omap-secure.c
@@ -3,6 +3,8 @@
  *
  * Copyright (C) 2011 Texas Instruments, Inc.
  *	Santosh Shilimkar <santosh.shilimkar@ti.com>
+ * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
+ * Copyright (C) 2013 Pali Roh?r <pali.rohar@gmail.com>
  *
  *
  * This program is free software,you can redistribute it and/or modify
@@ -70,3 +72,66 @@ phys_addr_t omap_secure_ram_mempool_base(void)
 {
 	return omap_secure_memblock_base;
 }
+
+/**
+ * rx51_secure_dispatcher: Routine to dispatch secure PPA API calls
+ * @idx: The PPA API index
+ * @process: Process ID
+ * @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.
+ *
+ * NOTE: rx51_secure_dispatcher differs from omap_secure_dispatcher because
+ *       it calling omap_smc3() instead omap_smc2() and param[0] is nargs+1
+ */
+u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs,
+			   u32 arg1, u32 arg2, u32 arg3, u32 arg4)
+{
+	u32 ret;
+	u32 param[5];
+
+	param[0] = nargs+1; /* RX-51 needs number of arguments + 1 */
+	param[1] = arg1;
+	param[2] = arg2;
+	param[3] = arg3;
+	param[4] = arg4;
+
+	/*
+	 * Secure API needs physical address
+	 * pointer for the parameters
+	 */
+	local_irq_disable();
+	local_fiq_disable();
+	flush_cache_all();
+	outer_clean_range(__pa(param), __pa(param + 5));
+	ret = omap_smc3(idx, process, flag, __pa(param));
+	flush_cache_all();
+	local_fiq_enable();
+	local_irq_enable();
+
+	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,
+				      0,
+				      FLAG_START_CRITICAL,
+				      1, acr, 0, 0, 0);
+}
diff --git a/arch/arm/mach-omap2/omap-secure.h b/arch/arm/mach-omap2/omap-secure.h
index c4586f4..51b59c6 100644
--- a/arch/arm/mach-omap2/omap-secure.h
+++ b/arch/arm/mach-omap2/omap-secure.h
@@ -3,6 +3,8 @@
  *
  * Copyright (C) 2011 Texas Instruments, Inc.
  *	Santosh Shilimkar <santosh.shilimkar@ti.com>
+ * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
+ * Copyright (C) 2013 Pali Roh?r <pali.rohar@gmail.com>
  *
  * 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
@@ -46,6 +48,11 @@
 #define OMAP4_PPA_L2_POR_INDEX		0x23
 #define OMAP4_PPA_CPU_ACTRL_SMP_INDEX	0x25
 
+/* Secure RX-51 PPA (Primary Protected Application) APIs */
+#define RX51_PPA_HWRNG			29
+#define RX51_PPA_L2_INVAL		40
+#define RX51_PPA_WRITE_ACR		42
+
 #ifndef __ASSEMBLER__
 
 extern u32 omap_secure_dispatcher(u32 idx, u32 flag, u32 nargs,
@@ -55,6 +62,10 @@ extern u32 omap_smc3(u32 id, u32 process, u32 flag, u32 pargs);
 extern phys_addr_t omap_secure_ram_mempool_base(void);
 extern int omap_secure_ram_reserve_memblock(void);
 
+extern u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs,
+				  u32 arg1, u32 arg2, u32 arg3, u32 arg4);
+extern u32 rx51_secure_update_aux_cr(u32 set_bits, u32 clear_bits);
+
 #ifdef CONFIG_OMAP4_ERRATA_I688
 extern int omap_barrier_reserve_memblock(void);
 #else
-- 
1.7.10.4
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130918/cb9fc46e/attachment.sig>

^ permalink raw reply related	[flat|nested] 78+ messages in thread

* Re: [PATCH v2 2/2] RX-51: ARM errata 430973 workaround
  2013-09-18 17:18           ` Tony Lindgren
@ 2013-09-24  0:15             ` Pavel Machek
  -1 siblings, 0 replies; 78+ messages in thread
From: Pavel Machek @ 2013-09-24  0:15 UTC (permalink / raw)
  To: Tony Lindgren
  Cc: Pali Rohár, linux-kernel, Aaro Koskinen, linux-omap, linux,
	linux-arm-kernel, Nishanth Menon, Peter De Schrijver,
	Santosh Shilimkar, Ivaylo Dimitrov

Hi!

> > Tony, if you did not have time for review this patch months ago 
> > or you found it only today - no problem, I understand it. But 
> > what I need to know is what will happen with board-rx51-* files 
> > (and when?) You can see that DT does not have definitions of all 
> > n900 hw parts (plus it is not in last 3.11 kernel!) which means 
> > that DT is not usable for me and other n900 people. This also 
> > means that I cannot rewrite my patches for DT and test if they 
> > working.
> 
> I usually stop looking at new code around -rc4 and concentrate
> on fixes until -rc1 or so. So there can be easily one month
> delays on reviewing stuff depending on where we are with the
> current merge window or -rc cycle, sorry if that's annoying.
> 
> The .dts files will be separate from the kernel soonish, so
> that's not be a show stopper. Just like all the board specific
> .config files are separate from the kernel already. Too bad our
> .dts changes did not get merged for v3.12 because of conflicts
> with other branches, but hey, they should be independent from the
> kernel anyways.

Well... I'd say it is still time to merge them. "New hardware support"
is ok after -rc1.

> The board files will be going away as soon as things are working
> with DT. We've been pretty much only applying fixes to them for
> quite some time now. For the timeline, the earliest we'll be able
> to remove the board-*.c files and platform data is for v3.13

And it would be good to merge n900 dts support for 3.12. Adding 
device tree at the same release as removing board support files in
same release leaves zero room for testing, and practically guarantees
regressions.

									Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH v2 2/2] RX-51: ARM errata 430973 workaround
@ 2013-09-24  0:15             ` Pavel Machek
  0 siblings, 0 replies; 78+ messages in thread
From: Pavel Machek @ 2013-09-24  0:15 UTC (permalink / raw)
  To: linux-arm-kernel

Hi!

> > Tony, if you did not have time for review this patch months ago 
> > or you found it only today - no problem, I understand it. But 
> > what I need to know is what will happen with board-rx51-* files 
> > (and when?) You can see that DT does not have definitions of all 
> > n900 hw parts (plus it is not in last 3.11 kernel!) which means 
> > that DT is not usable for me and other n900 people. This also 
> > means that I cannot rewrite my patches for DT and test if they 
> > working.
> 
> I usually stop looking at new code around -rc4 and concentrate
> on fixes until -rc1 or so. So there can be easily one month
> delays on reviewing stuff depending on where we are with the
> current merge window or -rc cycle, sorry if that's annoying.
> 
> The .dts files will be separate from the kernel soonish, so
> that's not be a show stopper. Just like all the board specific
> .config files are separate from the kernel already. Too bad our
> .dts changes did not get merged for v3.12 because of conflicts
> with other branches, but hey, they should be independent from the
> kernel anyways.

Well... I'd say it is still time to merge them. "New hardware support"
is ok after -rc1.

> The board files will be going away as soon as things are working
> with DT. We've been pretty much only applying fixes to them for
> quite some time now. For the timeline, the earliest we'll be able
> to remove the board-*.c files and platform data is for v3.13

And it would be good to merge n900 dts support for 3.12. Adding 
device tree at the same release as removing board support files in
same release leaves zero room for testing, and practically guarantees
regressions.

									Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH v2 2/2] RX-51: ARM errata 430973 workaround
  2013-09-24  0:15             ` Pavel Machek
@ 2013-09-24 16:51               ` Tony Lindgren
  -1 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-09-24 16:51 UTC (permalink / raw)
  To: Pavel Machek
  Cc: Pali Rohár, linux-kernel, Aaro Koskinen, linux-omap, linux,
	linux-arm-kernel, Nishanth Menon, Peter De Schrijver,
	Santosh Shilimkar, Ivaylo Dimitrov

* Pavel Machek <pavel@ucw.cz> [130923 17:23]:
> Hi!
> 
> > > Tony, if you did not have time for review this patch months ago 
> > > or you found it only today - no problem, I understand it. But 
> > > what I need to know is what will happen with board-rx51-* files 
> > > (and when?) You can see that DT does not have definitions of all 
> > > n900 hw parts (plus it is not in last 3.11 kernel!) which means 
> > > that DT is not usable for me and other n900 people. This also 
> > > means that I cannot rewrite my patches for DT and test if they 
> > > working.
> > 
> > I usually stop looking at new code around -rc4 and concentrate
> > on fixes until -rc1 or so. So there can be easily one month
> > delays on reviewing stuff depending on where we are with the
> > current merge window or -rc cycle, sorry if that's annoying.
> > 
> > The .dts files will be separate from the kernel soonish, so
> > that's not be a show stopper. Just like all the board specific
> > .config files are separate from the kernel already. Too bad our
> > .dts changes did not get merged for v3.12 because of conflicts
> > with other branches, but hey, they should be independent from the
> > kernel anyways.
> 
> Well... I'd say it is still time to merge them. "New hardware support"
> is ok after -rc1.

Sure if there's a good reason like "driver foo is already device
tree only and cannot be used for board bar without blah".
 
> > The board files will be going away as soon as things are working
> > with DT. We've been pretty much only applying fixes to them for
> > quite some time now. For the timeline, the earliest we'll be able
> > to remove the board-*.c files and platform data is for v3.13
> 
> And it would be good to merge n900 dts support for 3.12. Adding 
> device tree at the same release as removing board support files in
> same release leaves zero room for testing, and practically guarantees
> regressions.

Yes we experienced that with omap4 conversion where it caused
some wl12xx regression. So we might want to keep some omap3
board files around until v3.14 if necessary.

Also please take a look at the "[PATCH 0/4] Clean up legacy platform
data handling for omaps for v3.13" patches I posted few days ago,
those should make it easy to have board specific pdata quirks
for DT based booting.

Regards,

Tony

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH v2 2/2] RX-51: ARM errata 430973 workaround
@ 2013-09-24 16:51               ` Tony Lindgren
  0 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-09-24 16:51 UTC (permalink / raw)
  To: linux-arm-kernel

* Pavel Machek <pavel@ucw.cz> [130923 17:23]:
> Hi!
> 
> > > Tony, if you did not have time for review this patch months ago 
> > > or you found it only today - no problem, I understand it. But 
> > > what I need to know is what will happen with board-rx51-* files 
> > > (and when?) You can see that DT does not have definitions of all 
> > > n900 hw parts (plus it is not in last 3.11 kernel!) which means 
> > > that DT is not usable for me and other n900 people. This also 
> > > means that I cannot rewrite my patches for DT and test if they 
> > > working.
> > 
> > I usually stop looking at new code around -rc4 and concentrate
> > on fixes until -rc1 or so. So there can be easily one month
> > delays on reviewing stuff depending on where we are with the
> > current merge window or -rc cycle, sorry if that's annoying.
> > 
> > The .dts files will be separate from the kernel soonish, so
> > that's not be a show stopper. Just like all the board specific
> > .config files are separate from the kernel already. Too bad our
> > .dts changes did not get merged for v3.12 because of conflicts
> > with other branches, but hey, they should be independent from the
> > kernel anyways.
> 
> Well... I'd say it is still time to merge them. "New hardware support"
> is ok after -rc1.

Sure if there's a good reason like "driver foo is already device
tree only and cannot be used for board bar without blah".
 
> > The board files will be going away as soon as things are working
> > with DT. We've been pretty much only applying fixes to them for
> > quite some time now. For the timeline, the earliest we'll be able
> > to remove the board-*.c files and platform data is for v3.13
> 
> And it would be good to merge n900 dts support for 3.12. Adding 
> device tree at the same release as removing board support files in
> same release leaves zero room for testing, and practically guarantees
> regressions.

Yes we experienced that with omap4 conversion where it caused
some wl12xx regression. So we might want to keep some omap3
board files around until v3.14 if necessary.

Also please take a look at the "[PATCH 0/4] Clean up legacy platform
data handling for omaps for v3.13" patches I posted few days ago,
those should make it easy to have board specific pdata quirks
for DT based booting.

Regards,

Tony

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
  2013-03-30 22:31 Ивайло Димитров
@ 2013-03-31  7:37   ` Pavel Machek
  0 siblings, 0 replies; 78+ messages in thread
From: Pavel Machek @ 2013-03-31  7:37 UTC (permalink / raw)
  To: Ивайло
	Димитров
  Cc: pali.rohar, tony, linux, linux-arm-kernel, linux-omap, linux-kernel

Hi!

>  >You can do without ret variable... Also more detailed changelog would
>  >be nice... like what exact problem this works around.
>  >
> 
> Sure i can, but I don't see a reason to ignore SM's return value. Changelog of what?
> 
> I guess if you read the thread over the ML you'll have your questions already answered. 
> Or google for "ARM errata 430973 workaround" :).

I did my googling. But I should not have had to. Just put the
explanatory link in commit log.
									Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-31  7:37   ` Pavel Machek
  0 siblings, 0 replies; 78+ messages in thread
From: Pavel Machek @ 2013-03-31  7:37 UTC (permalink / raw)
  To: linux-arm-kernel

Hi!

>  >You can do without ret variable... Also more detailed changelog would
>  >be nice... like what exact problem this works around.
>  >
> 
> Sure i can, but I don't see a reason to ignore SM's return value. Changelog of what?
> 
> I guess if you read the thread over the ML you'll have your questions already answered. 
> Or google for "ARM errata 430973 workaround" :).

I did my googling. But I should not have had to. Just put the
explanatory link in commit log.
									Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-30 22:31 Ивайло Димитров
  2013-03-31  7:37   ` Pavel Machek
  0 siblings, 1 reply; 78+ messages in thread
From: Ивайло Димитров @ 2013-03-30 22:31 UTC (permalink / raw)
  To: Pavel Machek
  Cc: pali.rohar, tony, linux, linux-arm-kernel, linux-omap, linux-kernel

 
Hi,

 >-------- Оригинално писмо --------
 >От:  Pavel Machek 
 >Относно: Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
 >До: Pali Rohár 
 >Изпратено на: Събота, 2013, Март 30 20:36:54 EET
 >
 >
 >Hi!
 >
 >> +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;
 >> +}
 >
 >You can do without ret variable... Also more detailed changelog would
 >be nice... like what exact problem this works around.
 >

Sure i can, but I don't see a reason to ignore SM's return value. Changelog of what?
 >
 >
 >So... some CPU errata where code sharing virtual addresses could be
 >executed improperly?
 >								
 >> @@ -103,6 +104,12 @@ static void __init rx51_init(void)
 >>  	rx51_peripherals_init();
 >>  	rx51_camera_init();
 >>  
 >> +#ifdef CONFIG_ARM_ERRATA_430973
 >> +	printk(KERN_INFO &quot;Enabling ARM errata 430973 workaround.&#92;n&quot;);
 >> +	/* set IBE to 1 */
 >> +	rx51_secure_update_aux_cr(1 << 6, 0);
 >> +#endif
 >> +
 >
 >Thanks,
 >								Pavel
 >
 >-- 
 >(english) http://www.livejournal.com/~pavelmachek
 >(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
 >

I guess if you read the thread over the ML you'll have your questions already answered. 
Or google for "ARM errata 430973 workaround" :).

Regards,
Ivo

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
  2013-03-28  5:30 Ивайло Димитров
  2013-03-28 15:58   ` Tony Lindgren
@ 2013-03-28 15:58   ` Tony Lindgren
  0 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-03-28 15:58 UTC (permalink / raw)
  To: Ивайло
	Димитров
  Cc: pali.rohar, nm, linux, linux-kernel, linux-omap, linux-arm-kernel

* Ивайло Димитров <freemangordon@abv.bg> [130327 22:34]:
>  Tony,
> 
> Who do you expect to make that code merge? Do you expect us to mechanically merge RX51 PPA API patch with the existing generic OMAP PPA API code putting #ifdefs all over the place? Not that it is impossible, but the only real piece of HW I have here is n900, so I just can't be sure the code will still work on the other platforms besides RX51, once the code modified. Please, advice on how to proceed.

Probably ifdefs won't work nice for other omapss. It seems that
your original patch is pretty close based on all that's been
discussed. Can you please repost with a proper patch description
also summarizing why we cannot have generci SMC API as discussed?

Thanks,

Tony

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-28 15:58   ` Tony Lindgren
  0 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-03-28 15:58 UTC (permalink / raw)
  To: Ивайло
	Димитров
  Cc: pali.rohar, nm, linux, linux-kernel, linux-omap, linux-arm-kernel

* Ивайло Димитров <freemangordon@abv.bg> [130327 22:34]:
>  Tony,
> 
> Who do you expect to make that code merge? Do you expect us to mechanically merge RX51 PPA API patch with the existing generic OMAP PPA API code putting #ifdefs all over the place? Not that it is impossible, but the only real piece of HW I have here is n900, so I just can't be sure the code will still work on the other platforms besides RX51, once the code modified. Please, advice on how to proceed.

Probably ifdefs won't work nice for other omapss. It seems that
your original patch is pretty close based on all that's been
discussed. Can you please repost with a proper patch description
also summarizing why we cannot have generci SMC API as discussed?

Thanks,

Tony
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-28 15:58   ` Tony Lindgren
  0 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-03-28 15:58 UTC (permalink / raw)
  To: linux-arm-kernel

* ?????? ???????? <freemangordon@abv.bg> [130327 22:34]:
>  Tony,
> 
> Who do you expect to make that code merge? Do you expect us to mechanically merge RX51 PPA API patch with the existing generic OMAP PPA API code putting #ifdefs all over the place? Not that it is impossible, but the only real piece of HW I have here is n900, so I just can't be sure the code will still work on the other platforms besides RX51, once the code modified. Please, advice on how to proceed.

Probably ifdefs won't work nice for other omapss. It seems that
your original patch is pretty close based on all that's been
discussed. Can you please repost with a proper patch description
also summarizing why we cannot have generci SMC API as discussed?

Thanks,

Tony

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
  2013-03-28 10:07                   ` Santosh Shilimkar
@ 2013-03-28 15:53                     ` Tony Lindgren
  -1 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-03-28 15:53 UTC (permalink / raw)
  To: Santosh Shilimkar
  Cc: Russell King - ARM Linux, Pali Rohár, Nishanth Menon,
	linux-kernel,
	Ивайло
	Димитров,
	linux-omap, linux-arm-kernel

* Santosh Shilimkar <santosh.shilimkar@ti.com> [130328 03:10]:
> On Thursday 28 March 2013 03:20 PM, Russell King - ARM Linux wrote:
> > On Wed, Mar 27, 2013 at 01:56:07PM -0700, Tony Lindgren wrote:
> >> * Pali Rohár <pali.rohar@gmail.com> [130324 07:31]:
> >>> it is possible to upstream errata 430973 workaround for RX-51?
> >>
> >> I think we should make the SMC handling a generic function for ARM.
> >>
> >> AFAIK just the SMC call numbering is different for various
> >> implementations. So the handler and passing of the parameters
> >> seems like it should be generic.
> > 
> > SMC calls vary greatly in how they are handled.  The only thing that's
> > generic is issuing the SMC call.  All the setup and what arguments are
> > required are completely different from SoC to SoC.
> > 
> > For example, some SoCs require arguments passed via memory.  Others like
> > OMAP its via registers.
> 
> Exactly. As somebody said on the list, that code looks identical but
> it is not. An SMC with barrier instruction is mostly common and nothing
> more than that.

Thanks all, case closed then. There's no way to come up with a generic
SMC function.

Regards,

Tony

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-28 15:53                     ` Tony Lindgren
  0 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-03-28 15:53 UTC (permalink / raw)
  To: linux-arm-kernel

* Santosh Shilimkar <santosh.shilimkar@ti.com> [130328 03:10]:
> On Thursday 28 March 2013 03:20 PM, Russell King - ARM Linux wrote:
> > On Wed, Mar 27, 2013 at 01:56:07PM -0700, Tony Lindgren wrote:
> >> * Pali Roh?r <pali.rohar@gmail.com> [130324 07:31]:
> >>> it is possible to upstream errata 430973 workaround for RX-51?
> >>
> >> I think we should make the SMC handling a generic function for ARM.
> >>
> >> AFAIK just the SMC call numbering is different for various
> >> implementations. So the handler and passing of the parameters
> >> seems like it should be generic.
> > 
> > SMC calls vary greatly in how they are handled.  The only thing that's
> > generic is issuing the SMC call.  All the setup and what arguments are
> > required are completely different from SoC to SoC.
> > 
> > For example, some SoCs require arguments passed via memory.  Others like
> > OMAP its via registers.
> 
> Exactly. As somebody said on the list, that code looks identical but
> it is not. An SMC with barrier instruction is mostly common and nothing
> more than that.

Thanks all, case closed then. There's no way to come up with a generic
SMC function.

Regards,

Tony

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
  2013-03-28  9:50                 ` Russell King - ARM Linux
@ 2013-03-28 10:07                   ` Santosh Shilimkar
  -1 siblings, 0 replies; 78+ messages in thread
From: Santosh Shilimkar @ 2013-03-28 10:07 UTC (permalink / raw)
  To: Russell King - ARM Linux
  Cc: Tony Lindgren, Pali Rohár, Nishanth Menon, linux-kernel,
	Ивайло
	Димитров,
	linux-omap, linux-arm-kernel

On Thursday 28 March 2013 03:20 PM, Russell King - ARM Linux wrote:
> On Wed, Mar 27, 2013 at 01:56:07PM -0700, Tony Lindgren wrote:
>> * Pali Rohár <pali.rohar@gmail.com> [130324 07:31]:
>>> it is possible to upstream errata 430973 workaround for RX-51?
>>
>> I think we should make the SMC handling a generic function for ARM.
>>
>> AFAIK just the SMC call numbering is different for various
>> implementations. So the handler and passing of the parameters
>> seems like it should be generic.
> 
> SMC calls vary greatly in how they are handled.  The only thing that's
> generic is issuing the SMC call.  All the setup and what arguments are
> required are completely different from SoC to SoC.
> 
> For example, some SoCs require arguments passed via memory.  Others like
> OMAP its via registers.

Exactly. As somebody said on the list, that code looks identical but
it is not. An SMC with barrier instruction is mostly common and nothing
more than that.

Regards,
Santosh


^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-28 10:07                   ` Santosh Shilimkar
  0 siblings, 0 replies; 78+ messages in thread
From: Santosh Shilimkar @ 2013-03-28 10:07 UTC (permalink / raw)
  To: linux-arm-kernel

On Thursday 28 March 2013 03:20 PM, Russell King - ARM Linux wrote:
> On Wed, Mar 27, 2013 at 01:56:07PM -0700, Tony Lindgren wrote:
>> * Pali Roh?r <pali.rohar@gmail.com> [130324 07:31]:
>>> it is possible to upstream errata 430973 workaround for RX-51?
>>
>> I think we should make the SMC handling a generic function for ARM.
>>
>> AFAIK just the SMC call numbering is different for various
>> implementations. So the handler and passing of the parameters
>> seems like it should be generic.
> 
> SMC calls vary greatly in how they are handled.  The only thing that's
> generic is issuing the SMC call.  All the setup and what arguments are
> required are completely different from SoC to SoC.
> 
> For example, some SoCs require arguments passed via memory.  Others like
> OMAP its via registers.

Exactly. As somebody said on the list, that code looks identical but
it is not. An SMC with barrier instruction is mostly common and nothing
more than that.

Regards,
Santosh

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
  2013-03-27 20:56               ` Tony Lindgren
@ 2013-03-28  9:50                 ` Russell King - ARM Linux
  -1 siblings, 0 replies; 78+ messages in thread
From: Russell King - ARM Linux @ 2013-03-28  9:50 UTC (permalink / raw)
  To: Tony Lindgren
  Cc: Pali Rohár, Nishanth Menon, linux-kernel,
	Ивайло
	Димитров,
	linux-omap, linux-arm-kernel

On Wed, Mar 27, 2013 at 01:56:07PM -0700, Tony Lindgren wrote:
> * Pali Rohár <pali.rohar@gmail.com> [130324 07:31]:
> > it is possible to upstream errata 430973 workaround for RX-51?
> 
> I think we should make the SMC handling a generic function for ARM.
> 
> AFAIK just the SMC call numbering is different for various
> implementations. So the handler and passing of the parameters
> seems like it should be generic.

SMC calls vary greatly in how they are handled.  The only thing that's
generic is issuing the SMC call.  All the setup and what arguments are
required are completely different from SoC to SoC.

For example, some SoCs require arguments passed via memory.  Others like
OMAP its via registers.

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-28  9:50                 ` Russell King - ARM Linux
  0 siblings, 0 replies; 78+ messages in thread
From: Russell King - ARM Linux @ 2013-03-28  9:50 UTC (permalink / raw)
  To: linux-arm-kernel

On Wed, Mar 27, 2013 at 01:56:07PM -0700, Tony Lindgren wrote:
> * Pali Roh?r <pali.rohar@gmail.com> [130324 07:31]:
> > it is possible to upstream errata 430973 workaround for RX-51?
> 
> I think we should make the SMC handling a generic function for ARM.
> 
> AFAIK just the SMC call numbering is different for various
> implementations. So the handler and passing of the parameters
> seems like it should be generic.

SMC calls vary greatly in how they are handled.  The only thing that's
generic is issuing the SMC call.  All the setup and what arguments are
required are completely different from SoC to SoC.

For example, some SoCs require arguments passed via memory.  Others like
OMAP its via registers.

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-28  5:30 Ивайло Димитров
  2013-03-28 15:58   ` Tony Lindgren
  0 siblings, 1 reply; 78+ messages in thread
From: Ивайло Димитров @ 2013-03-28  5:30 UTC (permalink / raw)
  To: Tony Lindgren
  Cc: pali.rohar, nm, linux, linux-kernel, linux-omap, linux-arm-kernel

 Tony,

Who do you expect to make that code merge? Do you expect us to mechanically merge RX51 PPA API patch with the existing generic OMAP PPA API code putting #ifdefs all over the place? Not that it is impossible, but the only real piece of HW I have here is n900, so I just can't be sure the code will still work on the other platforms besides RX51, once the code modified. Please, advice on how to proceed.

Regards,
Ivo

 >-------- Оригинално писмо --------
 >От:  Tony Lindgren 
 >Относно: Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
 >До: Pali Rohár 
 >Изпратено на: Сряда, 2013, Март 27 23:12:09 EET
 >
 >
 >* Pali Rohár  [130327 14:09]:
 >> On Wednesday 27 March 2013 21:56:07 Tony Lindgren wrote:
 >> > * Pali Rohár  [130324 07:31]:
 >> > > it is possible to upstream errata 430973 workaround for
 >> > > RX-51?
 >> > 
 >> > I think we should make the SMC handling a generic function for
 >> > ARM.
 >> > 
 >> > AFAIK just the SMC call numbering is different for various
 >> > implementations. So the handler and passing of the parameters
 >> > seems like it should be generic.
 >> > 
 >> 
 >> Not only, look at freemangordon's email: 
 >> https://lkml.org/lkml/2013/3/1/62
 >
 >Seem like you may need some SoC specific wrapper to the
 >generic function to deal with the params. But still seems
 >like we can have an ARM generic smc funtion.
 >
 >Regards,
 >
 >Tony
 >

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
  2013-03-27 21:05                 ` Pali Rohár
@ 2013-03-27 21:12                   ` Tony Lindgren
  -1 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-03-27 21:12 UTC (permalink / raw)
  To: Pali Rohár
  Cc: Nishanth Menon,
	Ивайло
	Димитров,
	linux, linux-kernel, linux-omap, linux-arm-kernel

* Pali Rohár <pali.rohar@gmail.com> [130327 14:09]:
> On Wednesday 27 March 2013 21:56:07 Tony Lindgren wrote:
> > * Pali Rohár <pali.rohar@gmail.com> [130324 07:31]:
> > > it is possible to upstream errata 430973 workaround for
> > > RX-51?
> > 
> > I think we should make the SMC handling a generic function for
> > ARM.
> > 
> > AFAIK just the SMC call numbering is different for various
> > implementations. So the handler and passing of the parameters
> > seems like it should be generic.
> > 
> 
> Not only, look at freemangordon's email: 
> https://lkml.org/lkml/2013/3/1/62

Seem like you may need some SoC specific wrapper to the
generic function to deal with the params. But still seems
like we can have an ARM generic smc funtion.

Regards,

Tony

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-27 21:12                   ` Tony Lindgren
  0 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-03-27 21:12 UTC (permalink / raw)
  To: linux-arm-kernel

* Pali Roh?r <pali.rohar@gmail.com> [130327 14:09]:
> On Wednesday 27 March 2013 21:56:07 Tony Lindgren wrote:
> > * Pali Roh?r <pali.rohar@gmail.com> [130324 07:31]:
> > > it is possible to upstream errata 430973 workaround for
> > > RX-51?
> > 
> > I think we should make the SMC handling a generic function for
> > ARM.
> > 
> > AFAIK just the SMC call numbering is different for various
> > implementations. So the handler and passing of the parameters
> > seems like it should be generic.
> > 
> 
> Not only, look at freemangordon's email: 
> https://lkml.org/lkml/2013/3/1/62

Seem like you may need some SoC specific wrapper to the
generic function to deal with the params. But still seems
like we can have an ARM generic smc funtion.

Regards,

Tony

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
  2013-03-27 20:56               ` Tony Lindgren
@ 2013-03-27 21:05                 ` Pali Rohár
  -1 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-03-27 21:05 UTC (permalink / raw)
  To: Tony Lindgren
  Cc: Nishanth Menon,
	Ивайло
	Димитров,
	linux, linux-kernel, linux-omap, linux-arm-kernel

[-- Attachment #1: Type: Text/Plain, Size: 584 bytes --]

On Wednesday 27 March 2013 21:56:07 Tony Lindgren wrote:
> * Pali Rohár <pali.rohar@gmail.com> [130324 07:31]:
> > it is possible to upstream errata 430973 workaround for
> > RX-51?
> 
> I think we should make the SMC handling a generic function for
> ARM.
> 
> AFAIK just the SMC call numbering is different for various
> implementations. So the handler and passing of the parameters
> seems like it should be generic.
> 

Not only, look at freemangordon's email: 
https://lkml.org/lkml/2013/3/1/62

> Regards,
> 
> Tony

-- 
Pali Rohár
pali.rohar@gmail.com

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-27 21:05                 ` Pali Rohár
  0 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-03-27 21:05 UTC (permalink / raw)
  To: linux-arm-kernel

On Wednesday 27 March 2013 21:56:07 Tony Lindgren wrote:
> * Pali Roh?r <pali.rohar@gmail.com> [130324 07:31]:
> > it is possible to upstream errata 430973 workaround for
> > RX-51?
> 
> I think we should make the SMC handling a generic function for
> ARM.
> 
> AFAIK just the SMC call numbering is different for various
> implementations. So the handler and passing of the parameters
> seems like it should be generic.
> 

Not only, look at freemangordon's email: 
https://lkml.org/lkml/2013/3/1/62

> Regards,
> 
> Tony

-- 
Pali Roh?r
pali.rohar at gmail.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130327/cf6e553e/attachment-0001.sig>

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
  2013-03-24 14:26             ` Pali Rohár
  (?)
@ 2013-03-27 20:56               ` Tony Lindgren
  -1 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-03-27 20:56 UTC (permalink / raw)
  To: Pali Rohár
  Cc: Nishanth Menon,
	Ивайло
	Димитров,
	linux, linux-kernel, linux-omap, linux-arm-kernel

* Pali Rohár <pali.rohar@gmail.com> [130324 07:31]:
> it is possible to upstream errata 430973 workaround for RX-51?

I think we should make the SMC handling a generic function for ARM.

AFAIK just the SMC call numbering is different for various
implementations. So the handler and passing of the parameters
seems like it should be generic.

Regards,

Tony

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-27 20:56               ` Tony Lindgren
  0 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-03-27 20:56 UTC (permalink / raw)
  To: Pali Rohár
  Cc: Nishanth Menon,
	Ивайло
	Димитров,
	linux, linux-kernel, linux-omap, linux-arm-kernel

* Pali Rohár <pali.rohar@gmail.com> [130324 07:31]:
> it is possible to upstream errata 430973 workaround for RX-51?

I think we should make the SMC handling a generic function for ARM.

AFAIK just the SMC call numbering is different for various
implementations. So the handler and passing of the parameters
seems like it should be generic.

Regards,

Tony
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-27 20:56               ` Tony Lindgren
  0 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-03-27 20:56 UTC (permalink / raw)
  To: linux-arm-kernel

* Pali Roh?r <pali.rohar@gmail.com> [130324 07:31]:
> it is possible to upstream errata 430973 workaround for RX-51?

I think we should make the SMC handling a generic function for ARM.

AFAIK just the SMC call numbering is different for various
implementations. So the handler and passing of the parameters
seems like it should be generic.

Regards,

Tony

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
  2013-03-06 19:13           ` Pali Rohár
@ 2013-03-24 14:26             ` Pali Rohár
  -1 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-03-24 14:26 UTC (permalink / raw)
  To: Tony Lindgren
  Cc: Nishanth Menon,
	Ивайло
	Димитров,
	linux, linux-kernel, linux-omap, linux-arm-kernel

[-- Attachment #1: Type: Text/Plain, Size: 3252 bytes --]

On Wednesday 06 March 2013 20:13:15 Pali Rohár wrote:
> On Wednesday 06 March 2013 18:51:21 Tony Lindgren wrote:
> > * Pali Rohár <pali.rohar@gmail.com> [130306 06:13]:
> > > On Monday 04 March 2013 19:58:06 Tony Lindgren wrote:
> > > > * Nishanth Menon <nm@ti.com> [130301 06:42]:
> > > > > On Fri, Mar 1, 2013 at 1:47 AM, Ивайло Димитров
> > > 
> > > <freemangordon@abv.bg> wrote:
> > > > > > They look similar, but they are not equivalent :).
> > > > > > The first major difference is here (code taken from
> > > > > > omap-smc.S)
> > > > > > 
> > > > > >> ENTRY(omap_smc2)
> > > > > >> 
> > > > > >>          stmfd   sp!, {r4-r12, lr}
> > > > > >>          mov     r3, r2
> > > > > >>          mov     r2, r1
> > > > > >>          mov     r1, #0x0        @ Process ID
> > > > > >>          mov     r6, #0xff
> > > > > >>          mov     r12, #0x00      @ Secure Service
> > > > > >>          ID
> > > > > > 
> > > > > > Always zero, while RX51 PPA expects a real value. I
> > > > > > wonder if it is a bug, but anyway I don't see the id
> > > > > > parameter (R0) used.
> > > > > > 
> > > > > >>          mov     r7, #0
> > > > > >>          mcr     p15, 0, r7, c7, c5, 6
> > > > > > 
> > > > > > According to ARM TRM, this is "Invalidate entire
> > > > > > branch predictor array"(IIUC). NFC why it is needed
> > > > > > here, but this will not work on RX-51 until IBE bit
> > > > > > in ACR is set.
> > > > > > 
> > > > > >>          dsb
> > > > > >>          dmb
> > > > > >>          smc     #0
> > > > > > 
> > > > > > RX-51 needs smc #1 ;)
> > > > > > 
> > > > > >>          ldmfd   sp!, {r4-r12, pc}
> > > > > > 
> > > > > > The next major difference is that RX-51 expects
> > > > > > parameter count passed in R3[0] to be the count of
> > > > > > the remaining parameters +1, but
> > > > > > omap_secure_dispatcher (in omap-secure.c) is passing
> > > > > > the exact count of the remaining parameters.
> > > > > > 
> > > > > > I guess all of the above problems can be
> > > > > > fixed/workarounded, but I wonder does it worth. Not
> > > > > > to say that I don't have BB around to test if the
> > > > > > code still works if I make changes to
> > > > > > omap2-secure.c/omap-smc.S :)
> > > > > 
> > > > > Yep, that was my point - instead of introducing new
> > > > > functions, extending the existing functions to handle
> > > > > new requirements is better solution, IMHO.
> > > > 
> > > > I think there have been patches posted for ARM generic
> > > > SMC handling. Might be worth looking at those a bit and
> > > > see if this can be made generic. I think only the SMC
> > > > call numbering is different for various SoCs?
> > > > 
> > > > Regards,
> > > > 
> > > > Tony
> > > 
> > > Hi Tony, where are patches for ARM generic SMC handling?
> > 
> > Sorry don't have the link available, but I recall seeing
> > some patch on linux-arm-kernel within past six months that
> > added a generic smc function.. Or maybe I was dreaming or
> > something.
> > 
> > Regards,
> > 
> > Tony
> 
> I am not able to find that patch...

Hi Tony,

it is possible to upstream errata 430973 workaround for RX-51?

-- 
Pali Rohár
pali.rohar@gmail.com

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-24 14:26             ` Pali Rohár
  0 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-03-24 14:26 UTC (permalink / raw)
  To: linux-arm-kernel

On Wednesday 06 March 2013 20:13:15 Pali Roh?r wrote:
> On Wednesday 06 March 2013 18:51:21 Tony Lindgren wrote:
> > * Pali Roh?r <pali.rohar@gmail.com> [130306 06:13]:
> > > On Monday 04 March 2013 19:58:06 Tony Lindgren wrote:
> > > > * Nishanth Menon <nm@ti.com> [130301 06:42]:
> > > > > On Fri, Mar 1, 2013 at 1:47 AM, ?????? ????????
> > > 
> > > <freemangordon@abv.bg> wrote:
> > > > > > They look similar, but they are not equivalent :).
> > > > > > The first major difference is here (code taken from
> > > > > > omap-smc.S)
> > > > > > 
> > > > > >> ENTRY(omap_smc2)
> > > > > >> 
> > > > > >>          stmfd   sp!, {r4-r12, lr}
> > > > > >>          mov     r3, r2
> > > > > >>          mov     r2, r1
> > > > > >>          mov     r1, #0x0        @ Process ID
> > > > > >>          mov     r6, #0xff
> > > > > >>          mov     r12, #0x00      @ Secure Service
> > > > > >>          ID
> > > > > > 
> > > > > > Always zero, while RX51 PPA expects a real value. I
> > > > > > wonder if it is a bug, but anyway I don't see the id
> > > > > > parameter (R0) used.
> > > > > > 
> > > > > >>          mov     r7, #0
> > > > > >>          mcr     p15, 0, r7, c7, c5, 6
> > > > > > 
> > > > > > According to ARM TRM, this is "Invalidate entire
> > > > > > branch predictor array"(IIUC). NFC why it is needed
> > > > > > here, but this will not work on RX-51 until IBE bit
> > > > > > in ACR is set.
> > > > > > 
> > > > > >>          dsb
> > > > > >>          dmb
> > > > > >>          smc     #0
> > > > > > 
> > > > > > RX-51 needs smc #1 ;)
> > > > > > 
> > > > > >>          ldmfd   sp!, {r4-r12, pc}
> > > > > > 
> > > > > > The next major difference is that RX-51 expects
> > > > > > parameter count passed in R3[0] to be the count of
> > > > > > the remaining parameters +1, but
> > > > > > omap_secure_dispatcher (in omap-secure.c) is passing
> > > > > > the exact count of the remaining parameters.
> > > > > > 
> > > > > > I guess all of the above problems can be
> > > > > > fixed/workarounded, but I wonder does it worth. Not
> > > > > > to say that I don't have BB around to test if the
> > > > > > code still works if I make changes to
> > > > > > omap2-secure.c/omap-smc.S :)
> > > > > 
> > > > > Yep, that was my point - instead of introducing new
> > > > > functions, extending the existing functions to handle
> > > > > new requirements is better solution, IMHO.
> > > > 
> > > > I think there have been patches posted for ARM generic
> > > > SMC handling. Might be worth looking at those a bit and
> > > > see if this can be made generic. I think only the SMC
> > > > call numbering is different for various SoCs?
> > > > 
> > > > Regards,
> > > > 
> > > > Tony
> > > 
> > > Hi Tony, where are patches for ARM generic SMC handling?
> > 
> > Sorry don't have the link available, but I recall seeing
> > some patch on linux-arm-kernel within past six months that
> > added a generic smc function.. Or maybe I was dreaming or
> > something.
> > 
> > Regards,
> > 
> > Tony
> 
> I am not able to find that patch...

Hi Tony,

it is possible to upstream errata 430973 workaround for RX-51?

-- 
Pali Roh?r
pali.rohar at gmail.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130324/a554eddb/attachment.sig>

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
  2013-03-06 17:51         ` Tony Lindgren
@ 2013-03-06 19:13           ` Pali Rohár
  -1 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-03-06 19:13 UTC (permalink / raw)
  To: Tony Lindgren
  Cc: Nishanth Menon,
	Ивайло
	Димитров,
	linux, linux-kernel, linux-omap, linux-arm-kernel

[-- Attachment #1: Type: Text/Plain, Size: 2938 bytes --]

On Wednesday 06 March 2013 18:51:21 Tony Lindgren wrote:
> * Pali Rohár <pali.rohar@gmail.com> [130306 06:13]:
> > On Monday 04 March 2013 19:58:06 Tony Lindgren wrote:
> > > * Nishanth Menon <nm@ti.com> [130301 06:42]:
> > > > On Fri, Mar 1, 2013 at 1:47 AM, Ивайло Димитров
> > 
> > <freemangordon@abv.bg> wrote:
> > > > > They look similar, but they are not equivalent :). The
> > > > > first major difference is here (code taken from
> > > > > omap-smc.S)
> > > > > 
> > > > >> ENTRY(omap_smc2)
> > > > >> 
> > > > >>          stmfd   sp!, {r4-r12, lr}
> > > > >>          mov     r3, r2
> > > > >>          mov     r2, r1
> > > > >>          mov     r1, #0x0        @ Process ID
> > > > >>          mov     r6, #0xff
> > > > >>          mov     r12, #0x00      @ Secure Service ID
> > > > > 
> > > > > Always zero, while RX51 PPA expects a real value. I
> > > > > wonder if it is a bug, but anyway I don't see the id
> > > > > parameter (R0) used.
> > > > > 
> > > > >>          mov     r7, #0
> > > > >>          mcr     p15, 0, r7, c7, c5, 6
> > > > > 
> > > > > According to ARM TRM, this is "Invalidate entire
> > > > > branch predictor array"(IIUC). NFC why it is needed
> > > > > here, but this will not work on RX-51 until IBE bit
> > > > > in ACR is set.
> > > > > 
> > > > >>          dsb
> > > > >>          dmb
> > > > >>          smc     #0
> > > > > 
> > > > > RX-51 needs smc #1 ;)
> > > > > 
> > > > >>          ldmfd   sp!, {r4-r12, pc}
> > > > > 
> > > > > The next major difference is that RX-51 expects
> > > > > parameter count passed in R3[0] to be the count of
> > > > > the remaining parameters +1, but
> > > > > omap_secure_dispatcher (in omap-secure.c) is passing
> > > > > the exact count of the remaining parameters.
> > > > > 
> > > > > I guess all of the above problems can be
> > > > > fixed/workarounded, but I wonder does it worth. Not to
> > > > > say that I don't have BB around to test if the code
> > > > > still works if I make changes to
> > > > > omap2-secure.c/omap-smc.S :)
> > > > 
> > > > Yep, that was my point - instead of introducing new
> > > > functions, extending the existing functions to handle
> > > > new requirements is better solution, IMHO.
> > > 
> > > I think there have been patches posted for ARM generic SMC
> > > handling. Might be worth looking at those a bit and see if
> > > this can be made generic. I think only the SMC call
> > > numbering is different for various SoCs?
> > > 
> > > Regards,
> > > 
> > > Tony
> > 
> > Hi Tony, where are patches for ARM generic SMC handling?
> 
> Sorry don't have the link available, but I recall seeing some
> patch on linux-arm-kernel within past six months that added a
> generic smc function.. Or maybe I was dreaming or something.
> 
> Regards,
> 
> Tony

I am not able to find that patch...

-- 
Pali Rohár
pali.rohar@gmail.com

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-06 19:13           ` Pali Rohár
  0 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-03-06 19:13 UTC (permalink / raw)
  To: linux-arm-kernel

On Wednesday 06 March 2013 18:51:21 Tony Lindgren wrote:
> * Pali Roh?r <pali.rohar@gmail.com> [130306 06:13]:
> > On Monday 04 March 2013 19:58:06 Tony Lindgren wrote:
> > > * Nishanth Menon <nm@ti.com> [130301 06:42]:
> > > > On Fri, Mar 1, 2013 at 1:47 AM, ?????? ????????
> > 
> > <freemangordon@abv.bg> wrote:
> > > > > They look similar, but they are not equivalent :). The
> > > > > first major difference is here (code taken from
> > > > > omap-smc.S)
> > > > > 
> > > > >> ENTRY(omap_smc2)
> > > > >> 
> > > > >>          stmfd   sp!, {r4-r12, lr}
> > > > >>          mov     r3, r2
> > > > >>          mov     r2, r1
> > > > >>          mov     r1, #0x0        @ Process ID
> > > > >>          mov     r6, #0xff
> > > > >>          mov     r12, #0x00      @ Secure Service ID
> > > > > 
> > > > > Always zero, while RX51 PPA expects a real value. I
> > > > > wonder if it is a bug, but anyway I don't see the id
> > > > > parameter (R0) used.
> > > > > 
> > > > >>          mov     r7, #0
> > > > >>          mcr     p15, 0, r7, c7, c5, 6
> > > > > 
> > > > > According to ARM TRM, this is "Invalidate entire
> > > > > branch predictor array"(IIUC). NFC why it is needed
> > > > > here, but this will not work on RX-51 until IBE bit
> > > > > in ACR is set.
> > > > > 
> > > > >>          dsb
> > > > >>          dmb
> > > > >>          smc     #0
> > > > > 
> > > > > RX-51 needs smc #1 ;)
> > > > > 
> > > > >>          ldmfd   sp!, {r4-r12, pc}
> > > > > 
> > > > > The next major difference is that RX-51 expects
> > > > > parameter count passed in R3[0] to be the count of
> > > > > the remaining parameters +1, but
> > > > > omap_secure_dispatcher (in omap-secure.c) is passing
> > > > > the exact count of the remaining parameters.
> > > > > 
> > > > > I guess all of the above problems can be
> > > > > fixed/workarounded, but I wonder does it worth. Not to
> > > > > say that I don't have BB around to test if the code
> > > > > still works if I make changes to
> > > > > omap2-secure.c/omap-smc.S :)
> > > > 
> > > > Yep, that was my point - instead of introducing new
> > > > functions, extending the existing functions to handle
> > > > new requirements is better solution, IMHO.
> > > 
> > > I think there have been patches posted for ARM generic SMC
> > > handling. Might be worth looking at those a bit and see if
> > > this can be made generic. I think only the SMC call
> > > numbering is different for various SoCs?
> > > 
> > > Regards,
> > > 
> > > Tony
> > 
> > Hi Tony, where are patches for ARM generic SMC handling?
> 
> Sorry don't have the link available, but I recall seeing some
> patch on linux-arm-kernel within past six months that added a
> generic smc function.. Or maybe I was dreaming or something.
> 
> Regards,
> 
> Tony

I am not able to find that patch...

-- 
Pali Roh?r
pali.rohar at gmail.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130306/5aec96fc/attachment.sig>

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
  2013-03-06 14:09       ` Pali Rohár
@ 2013-03-06 17:51         ` Tony Lindgren
  -1 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-03-06 17:51 UTC (permalink / raw)
  To: Pali Rohár
  Cc: Nishanth Menon,
	Ивайло
	Димитров,
	linux, linux-kernel, linux-omap, linux-arm-kernel

* Pali Rohár <pali.rohar@gmail.com> [130306 06:13]:
> On Monday 04 March 2013 19:58:06 Tony Lindgren wrote:
> > * Nishanth Menon <nm@ti.com> [130301 06:42]:
> > > On Fri, Mar 1, 2013 at 1:47 AM, Ивайло Димитров 
> <freemangordon@abv.bg> wrote:
> > > > They look similar, but they are not equivalent :). The
> > > > first major difference is here (code taken from
> > > > omap-smc.S)
> > > > 
> > > >> ENTRY(omap_smc2)
> > > >> 
> > > >>          stmfd   sp!, {r4-r12, lr}
> > > >>          mov     r3, r2
> > > >>          mov     r2, r1
> > > >>          mov     r1, #0x0        @ Process ID
> > > >>          mov     r6, #0xff
> > > >>          mov     r12, #0x00      @ Secure Service ID
> > > > 
> > > > Always zero, while RX51 PPA expects a real value. I wonder
> > > > if it is a bug, but anyway I don't see the id parameter
> > > > (R0) used.
> > > > 
> > > >>          mov     r7, #0
> > > >>          mcr     p15, 0, r7, c7, c5, 6
> > > > 
> > > > According to ARM TRM, this is "Invalidate entire branch
> > > > predictor array"(IIUC). NFC why it is needed here, but
> > > > this will not work on RX-51 until IBE bit in ACR is set.
> > > > 
> > > >>          dsb
> > > >>          dmb
> > > >>          smc     #0
> > > > 
> > > > RX-51 needs smc #1 ;)
> > > > 
> > > >>          ldmfd   sp!, {r4-r12, pc}
> > > > 
> > > > The next major difference is that RX-51 expects parameter
> > > > count passed in R3[0] to be the count of the remaining
> > > > parameters +1, but omap_secure_dispatcher (in
> > > > omap-secure.c) is passing the exact count of the
> > > > remaining parameters.
> > > > 
> > > > I guess all of the above problems can be
> > > > fixed/workarounded, but I wonder does it worth. Not to
> > > > say that I don't have BB around to test if the code still
> > > > works if I make changes to omap2-secure.c/omap-smc.S :)
> > > 
> > > Yep, that was my point - instead of introducing new
> > > functions, extending the existing functions to handle new
> > > requirements is better solution, IMHO.
> > 
> > I think there have been patches posted for ARM generic SMC
> > handling. Might be worth looking at those a bit and see if
> > this can be made generic. I think only the SMC call numbering
> > is different for various SoCs?
> > 
> > Regards,
> > 
> > Tony
> 
> Hi Tony, where are patches for ARM generic SMC handling?

Sorry don't have the link available, but I recall seeing some patch
on linux-arm-kernel within past six months that added a generic
smc function.. Or maybe I was dreaming or something.

Regards,

Tony

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-06 17:51         ` Tony Lindgren
  0 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-03-06 17:51 UTC (permalink / raw)
  To: linux-arm-kernel

* Pali Roh?r <pali.rohar@gmail.com> [130306 06:13]:
> On Monday 04 March 2013 19:58:06 Tony Lindgren wrote:
> > * Nishanth Menon <nm@ti.com> [130301 06:42]:
> > > On Fri, Mar 1, 2013 at 1:47 AM, ?????? ???????? 
> <freemangordon@abv.bg> wrote:
> > > > They look similar, but they are not equivalent :). The
> > > > first major difference is here (code taken from
> > > > omap-smc.S)
> > > > 
> > > >> ENTRY(omap_smc2)
> > > >> 
> > > >>          stmfd   sp!, {r4-r12, lr}
> > > >>          mov     r3, r2
> > > >>          mov     r2, r1
> > > >>          mov     r1, #0x0        @ Process ID
> > > >>          mov     r6, #0xff
> > > >>          mov     r12, #0x00      @ Secure Service ID
> > > > 
> > > > Always zero, while RX51 PPA expects a real value. I wonder
> > > > if it is a bug, but anyway I don't see the id parameter
> > > > (R0) used.
> > > > 
> > > >>          mov     r7, #0
> > > >>          mcr     p15, 0, r7, c7, c5, 6
> > > > 
> > > > According to ARM TRM, this is "Invalidate entire branch
> > > > predictor array"(IIUC). NFC why it is needed here, but
> > > > this will not work on RX-51 until IBE bit in ACR is set.
> > > > 
> > > >>          dsb
> > > >>          dmb
> > > >>          smc     #0
> > > > 
> > > > RX-51 needs smc #1 ;)
> > > > 
> > > >>          ldmfd   sp!, {r4-r12, pc}
> > > > 
> > > > The next major difference is that RX-51 expects parameter
> > > > count passed in R3[0] to be the count of the remaining
> > > > parameters +1, but omap_secure_dispatcher (in
> > > > omap-secure.c) is passing the exact count of the
> > > > remaining parameters.
> > > > 
> > > > I guess all of the above problems can be
> > > > fixed/workarounded, but I wonder does it worth. Not to
> > > > say that I don't have BB around to test if the code still
> > > > works if I make changes to omap2-secure.c/omap-smc.S :)
> > > 
> > > Yep, that was my point - instead of introducing new
> > > functions, extending the existing functions to handle new
> > > requirements is better solution, IMHO.
> > 
> > I think there have been patches posted for ARM generic SMC
> > handling. Might be worth looking at those a bit and see if
> > this can be made generic. I think only the SMC call numbering
> > is different for various SoCs?
> > 
> > Regards,
> > 
> > Tony
> 
> Hi Tony, where are patches for ARM generic SMC handling?

Sorry don't have the link available, but I recall seeing some patch
on linux-arm-kernel within past six months that added a generic
smc function.. Or maybe I was dreaming or something.

Regards,

Tony

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
  2013-03-04 18:58     ` Tony Lindgren
@ 2013-03-06 14:09       ` Pali Rohár
  -1 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-03-06 14:09 UTC (permalink / raw)
  To: Tony Lindgren
  Cc: Nishanth Menon,
	Ивайло
	Димитров,
	linux, linux-kernel, linux-omap, linux-arm-kernel

[-- Attachment #1: Type: Text/Plain, Size: 2288 bytes --]

On Monday 04 March 2013 19:58:06 Tony Lindgren wrote:
> * Nishanth Menon <nm@ti.com> [130301 06:42]:
> > On Fri, Mar 1, 2013 at 1:47 AM, Ивайло Димитров 
<freemangordon@abv.bg> wrote:
> > > They look similar, but they are not equivalent :). The
> > > first major difference is here (code taken from
> > > omap-smc.S)
> > > 
> > >> ENTRY(omap_smc2)
> > >> 
> > >>          stmfd   sp!, {r4-r12, lr}
> > >>          mov     r3, r2
> > >>          mov     r2, r1
> > >>          mov     r1, #0x0        @ Process ID
> > >>          mov     r6, #0xff
> > >>          mov     r12, #0x00      @ Secure Service ID
> > > 
> > > Always zero, while RX51 PPA expects a real value. I wonder
> > > if it is a bug, but anyway I don't see the id parameter
> > > (R0) used.
> > > 
> > >>          mov     r7, #0
> > >>          mcr     p15, 0, r7, c7, c5, 6
> > > 
> > > According to ARM TRM, this is "Invalidate entire branch
> > > predictor array"(IIUC). NFC why it is needed here, but
> > > this will not work on RX-51 until IBE bit in ACR is set.
> > > 
> > >>          dsb
> > >>          dmb
> > >>          smc     #0
> > > 
> > > RX-51 needs smc #1 ;)
> > > 
> > >>          ldmfd   sp!, {r4-r12, pc}
> > > 
> > > The next major difference is that RX-51 expects parameter
> > > count passed in R3[0] to be the count of the remaining
> > > parameters +1, but omap_secure_dispatcher (in
> > > omap-secure.c) is passing the exact count of the
> > > remaining parameters.
> > > 
> > > I guess all of the above problems can be
> > > fixed/workarounded, but I wonder does it worth. Not to
> > > say that I don't have BB around to test if the code still
> > > works if I make changes to omap2-secure.c/omap-smc.S :)
> > 
> > Yep, that was my point - instead of introducing new
> > functions, extending the existing functions to handle new
> > requirements is better solution, IMHO.
> 
> I think there have been patches posted for ARM generic SMC
> handling. Might be worth looking at those a bit and see if
> this can be made generic. I think only the SMC call numbering
> is different for various SoCs?
> 
> Regards,
> 
> Tony

Hi Tony, where are patches for ARM generic SMC handling?

-- 
Pali Rohár
pali.rohar@gmail.com

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-06 14:09       ` Pali Rohár
  0 siblings, 0 replies; 78+ messages in thread
From: Pali Rohár @ 2013-03-06 14:09 UTC (permalink / raw)
  To: linux-arm-kernel

On Monday 04 March 2013 19:58:06 Tony Lindgren wrote:
> * Nishanth Menon <nm@ti.com> [130301 06:42]:
> > On Fri, Mar 1, 2013 at 1:47 AM, ?????? ???????? 
<freemangordon@abv.bg> wrote:
> > > They look similar, but they are not equivalent :). The
> > > first major difference is here (code taken from
> > > omap-smc.S)
> > > 
> > >> ENTRY(omap_smc2)
> > >> 
> > >>          stmfd   sp!, {r4-r12, lr}
> > >>          mov     r3, r2
> > >>          mov     r2, r1
> > >>          mov     r1, #0x0        @ Process ID
> > >>          mov     r6, #0xff
> > >>          mov     r12, #0x00      @ Secure Service ID
> > > 
> > > Always zero, while RX51 PPA expects a real value. I wonder
> > > if it is a bug, but anyway I don't see the id parameter
> > > (R0) used.
> > > 
> > >>          mov     r7, #0
> > >>          mcr     p15, 0, r7, c7, c5, 6
> > > 
> > > According to ARM TRM, this is "Invalidate entire branch
> > > predictor array"(IIUC). NFC why it is needed here, but
> > > this will not work on RX-51 until IBE bit in ACR is set.
> > > 
> > >>          dsb
> > >>          dmb
> > >>          smc     #0
> > > 
> > > RX-51 needs smc #1 ;)
> > > 
> > >>          ldmfd   sp!, {r4-r12, pc}
> > > 
> > > The next major difference is that RX-51 expects parameter
> > > count passed in R3[0] to be the count of the remaining
> > > parameters +1, but omap_secure_dispatcher (in
> > > omap-secure.c) is passing the exact count of the
> > > remaining parameters.
> > > 
> > > I guess all of the above problems can be
> > > fixed/workarounded, but I wonder does it worth. Not to
> > > say that I don't have BB around to test if the code still
> > > works if I make changes to omap2-secure.c/omap-smc.S :)
> > 
> > Yep, that was my point - instead of introducing new
> > functions, extending the existing functions to handle new
> > requirements is better solution, IMHO.
> 
> I think there have been patches posted for ARM generic SMC
> handling. Might be worth looking at those a bit and see if
> this can be made generic. I think only the SMC call numbering
> is different for various SoCs?
> 
> Regards,
> 
> Tony

Hi Tony, where are patches for ARM generic SMC handling?

-- 
Pali Roh?r
pali.rohar at gmail.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130306/42c9aa94/attachment.sig>

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-06  9:32 Ивайло Димитров
  0 siblings, 0 replies; 78+ messages in thread
From: Ивайло Димитров @ 2013-03-06  9:32 UTC (permalink / raw)
  To: Aaro Koskinen
  Cc: pdeschrijver, pali.rohar, tony, linux, linux-kernel, linux-omap,
	linux-arm-kernel

 




 >-------- Оригинално писмо --------
 >От:  Aaro Koskinen 
 >Относно: Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
 >До: Ивайло Димитров 
 >Изпратено на: Събота, 2013, Март 2 01:51:39 EET
 >
 >
 >On Fri, Mar 01, 2013 at 12:09:12PM +0200, Ивайло Димитров wrote:
 >> Unfortunately it is necessary, on RX-51 PPA/NOLO leaves IBE bit unset.
 >
 >You sure? I think you need to explain this more - the commit message in
 >the original patch is empty/missing...
 >
 >A.
 >

Yes, I am sure, NOLO leaves IBE bit in ACR unset, I've verified that by reading/printing the contents of ACR from both u-boot and the kernel itself. With IBE bit unset, "mcr p15, 0, rX, c7, c5, 6" - flush BTAC/BTB instruction(which is needed to workaround errata 430973) is a noop.

Yes, I am sure, IBE but must be set by using a call to PPA, on RX-51 setting that bit from the kernel (as it is done in the "ARM errata: Stale prediction on replaced interworking branch" kernel patch, see http://kerneltrap.org/mailarchive/git-commits-head/2009/5/3/5622724) does not work, see the comment at the end: "Note that setting specific bits in the ACTLR register may not be available in non-secure mode.". This is exactly the case for RX-51. I've verified that too.

If you need anything else elaborated on, I'm fine, just ask :)


Regards,
Ivo

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
  2013-03-01 14:38   ` Nishanth Menon
@ 2013-03-04 18:58     ` Tony Lindgren
  -1 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-03-04 18:58 UTC (permalink / raw)
  To: Nishanth Menon
  Cc: Ивайло
	Димитров,
	pali.rohar, linux, linux-kernel, linux-omap, linux-arm-kernel

* Nishanth Menon <nm@ti.com> [130301 06:42]:
> On Fri, Mar 1, 2013 at 1:47 AM, Ивайло Димитров <freemangordon@abv.bg> wrote:
> >
> > They look similar, but they are not equivalent :). The first major difference is here (code taken from omap-smc.S)
> >
> >> ENTRY(omap_smc2)
> >>          stmfd   sp!, {r4-r12, lr}
> >>          mov     r3, r2
> >>          mov     r2, r1
> >>          mov     r1, #0x0        @ Process ID
> >>          mov     r6, #0xff
> >>          mov     r12, #0x00      @ Secure Service ID
> >
> > Always zero, while RX51 PPA expects a real value. I wonder if it is a bug, but anyway I don't see the id parameter (R0) used.
> >
> >>          mov     r7, #0
> >>          mcr     p15, 0, r7, c7, c5, 6
> >
> > According to ARM TRM, this is "Invalidate entire branch predictor array"(IIUC). NFC why it is needed here, but this will not work on RX-51 until IBE bit in ACR is set.
> >
> >>          dsb
> >>          dmb
> >>          smc     #0
> >
> > RX-51 needs smc #1 ;)
> >
> >>          ldmfd   sp!, {r4-r12, pc}
> >
> >
> > The next major difference is that RX-51 expects parameter count passed in R3[0] to be the count of the remaining parameters +1, but omap_secure_dispatcher (in omap-secure.c) is passing the exact count of the remaining parameters.
> >
> > I guess all of the above problems can be fixed/workarounded, but I wonder does it worth. Not to say that I don't have BB around to test if the code still works if I make changes to omap2-secure.c/omap-smc.S :)
> >
> >
> 
> Yep, that was my point - instead of introducing new functions,
> extending the existing functions to handle new requirements is better
> solution, IMHO.

I think there have been patches posted for ARM generic SMC
handling. Might be worth looking at those a bit and see if
this can be made generic. I think only the SMC call numbering
is different for various SoCs?

Regards,

Tony

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-04 18:58     ` Tony Lindgren
  0 siblings, 0 replies; 78+ messages in thread
From: Tony Lindgren @ 2013-03-04 18:58 UTC (permalink / raw)
  To: linux-arm-kernel

* Nishanth Menon <nm@ti.com> [130301 06:42]:
> On Fri, Mar 1, 2013 at 1:47 AM, ?????? ???????? <freemangordon@abv.bg> wrote:
> >
> > They look similar, but they are not equivalent :). The first major difference is here (code taken from omap-smc.S)
> >
> >> ENTRY(omap_smc2)
> >>          stmfd   sp!, {r4-r12, lr}
> >>          mov     r3, r2
> >>          mov     r2, r1
> >>          mov     r1, #0x0        @ Process ID
> >>          mov     r6, #0xff
> >>          mov     r12, #0x00      @ Secure Service ID
> >
> > Always zero, while RX51 PPA expects a real value. I wonder if it is a bug, but anyway I don't see the id parameter (R0) used.
> >
> >>          mov     r7, #0
> >>          mcr     p15, 0, r7, c7, c5, 6
> >
> > According to ARM TRM, this is "Invalidate entire branch predictor array"(IIUC). NFC why it is needed here, but this will not work on RX-51 until IBE bit in ACR is set.
> >
> >>          dsb
> >>          dmb
> >>          smc     #0
> >
> > RX-51 needs smc #1 ;)
> >
> >>          ldmfd   sp!, {r4-r12, pc}
> >
> >
> > The next major difference is that RX-51 expects parameter count passed in R3[0] to be the count of the remaining parameters +1, but omap_secure_dispatcher (in omap-secure.c) is passing the exact count of the remaining parameters.
> >
> > I guess all of the above problems can be fixed/workarounded, but I wonder does it worth. Not to say that I don't have BB around to test if the code still works if I make changes to omap2-secure.c/omap-smc.S :)
> >
> >
> 
> Yep, that was my point - instead of introducing new functions,
> extending the existing functions to handle new requirements is better
> solution, IMHO.

I think there have been patches posted for ARM generic SMC
handling. Might be worth looking at those a bit and see if
this can be made generic. I think only the SMC call numbering
is different for various SoCs?

Regards,

Tony

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
  2013-03-01 10:09 Ивайло Димитров
  2013-03-01 23:51   ` Aaro Koskinen
@ 2013-03-01 23:51   ` Aaro Koskinen
  0 siblings, 0 replies; 78+ messages in thread
From: Aaro Koskinen @ 2013-03-01 23:51 UTC (permalink / raw)
  To: Ивайло
	Димитров
  Cc: Peter De Schrijver, pali.rohar, tony, linux, linux-kernel,
	linux-omap, linux-arm-kernel

On Fri, Mar 01, 2013 at 12:09:12PM +0200, Ивайло Димитров wrote:
> Unfortunately it is necessary, on RX-51 PPA/NOLO leaves IBE bit unset.

You sure? I think you need to explain this more - the commit message in
the original patch is empty/missing...

A.

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-01 23:51   ` Aaro Koskinen
  0 siblings, 0 replies; 78+ messages in thread
From: Aaro Koskinen @ 2013-03-01 23:51 UTC (permalink / raw)
  To: Ивайло
	Димитров
  Cc: Peter De Schrijver, pali.rohar, tony, linux, linux-kernel,
	linux-omap, linux-arm-kernel

On Fri, Mar 01, 2013 at 12:09:12PM +0200, Ивайло Димитров wrote:
> Unfortunately it is necessary, on RX-51 PPA/NOLO leaves IBE bit unset.

You sure? I think you need to explain this more - the commit message in
the original patch is empty/missing...

A.
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-01 23:51   ` Aaro Koskinen
  0 siblings, 0 replies; 78+ messages in thread
From: Aaro Koskinen @ 2013-03-01 23:51 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, Mar 01, 2013 at 12:09:12PM +0200, ?????? ???????? wrote:
> Unfortunately it is necessary, on RX-51 PPA/NOLO leaves IBE bit unset.

You sure? I think you need to explain this more - the commit message in
the original patch is empty/missing...

A.

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
  2013-03-01  7:47 [PATCH] arm: omap: " Ивайло Димитров
@ 2013-03-01 14:38   ` Nishanth Menon
  0 siblings, 0 replies; 78+ messages in thread
From: Nishanth Menon @ 2013-03-01 14:38 UTC (permalink / raw)
  To: Ивайло
	Димитров
  Cc: pali.rohar, tony, linux, linux-kernel, linux-omap, linux-arm-kernel

On Fri, Mar 1, 2013 at 1:47 AM, Ивайло Димитров <freemangordon@abv.bg> wrote:
>
> They look similar, but they are not equivalent :). The first major difference is here (code taken from omap-smc.S)
>
>> ENTRY(omap_smc2)
>>          stmfd   sp!, {r4-r12, lr}
>>          mov     r3, r2
>>          mov     r2, r1
>>          mov     r1, #0x0        @ Process ID
>>          mov     r6, #0xff
>>          mov     r12, #0x00      @ Secure Service ID
>
> Always zero, while RX51 PPA expects a real value. I wonder if it is a bug, but anyway I don't see the id parameter (R0) used.
>
>>          mov     r7, #0
>>          mcr     p15, 0, r7, c7, c5, 6
>
> According to ARM TRM, this is "Invalidate entire branch predictor array"(IIUC). NFC why it is needed here, but this will not work on RX-51 until IBE bit in ACR is set.
>
>>          dsb
>>          dmb
>>          smc     #0
>
> RX-51 needs smc #1 ;)
>
>>          ldmfd   sp!, {r4-r12, pc}
>
>
> The next major difference is that RX-51 expects parameter count passed in R3[0] to be the count of the remaining parameters +1, but omap_secure_dispatcher (in omap-secure.c) is passing the exact count of the remaining parameters.
>
> I guess all of the above problems can be fixed/workarounded, but I wonder does it worth. Not to say that I don't have BB around to test if the code still works if I make changes to omap2-secure.c/omap-smc.S :)
>
>

Yep, that was my point - instead of introducing new functions,
extending the existing functions to handle new requirements is better
solution, IMHO.

Regards,
Nishanth Menon

^ permalink raw reply	[flat|nested] 78+ messages in thread

* [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-01 14:38   ` Nishanth Menon
  0 siblings, 0 replies; 78+ messages in thread
From: Nishanth Menon @ 2013-03-01 14:38 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, Mar 1, 2013 at 1:47 AM, ?????? ???????? <freemangordon@abv.bg> wrote:
>
> They look similar, but they are not equivalent :). The first major difference is here (code taken from omap-smc.S)
>
>> ENTRY(omap_smc2)
>>          stmfd   sp!, {r4-r12, lr}
>>          mov     r3, r2
>>          mov     r2, r1
>>          mov     r1, #0x0        @ Process ID
>>          mov     r6, #0xff
>>          mov     r12, #0x00      @ Secure Service ID
>
> Always zero, while RX51 PPA expects a real value. I wonder if it is a bug, but anyway I don't see the id parameter (R0) used.
>
>>          mov     r7, #0
>>          mcr     p15, 0, r7, c7, c5, 6
>
> According to ARM TRM, this is "Invalidate entire branch predictor array"(IIUC). NFC why it is needed here, but this will not work on RX-51 until IBE bit in ACR is set.
>
>>          dsb
>>          dmb
>>          smc     #0
>
> RX-51 needs smc #1 ;)
>
>>          ldmfd   sp!, {r4-r12, pc}
>
>
> The next major difference is that RX-51 expects parameter count passed in R3[0] to be the count of the remaining parameters +1, but omap_secure_dispatcher (in omap-secure.c) is passing the exact count of the remaining parameters.
>
> I guess all of the above problems can be fixed/workarounded, but I wonder does it worth. Not to say that I don't have BB around to test if the code still works if I make changes to omap2-secure.c/omap-smc.S :)
>
>

Yep, that was my point - instead of introducing new functions,
extending the existing functions to handle new requirements is better
solution, IMHO.

Regards,
Nishanth Menon

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-01 10:09 Ивайло Димитров
  2013-03-01 23:51   ` Aaro Koskinen
  0 siblings, 1 reply; 78+ messages in thread
From: Ивайло Димитров @ 2013-03-01 10:09 UTC (permalink / raw)
  To: Peter De Schrijver
  Cc: pali.rohar, tony, linux, linux-kernel, linux-omap, linux-arm-kernel

 
Unfortunately it is necessary, on RX-51 PPA/NOLO leaves IBE bit unset.


 >-------- Оригинално писмо --------
 >От:  Peter De Schrijver 
 >Относно: Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
 >До: Pali Rohár 
 >Изпратено на: Петък, 2013, Март 1 11:43:14 EET
 >
 >
 >On Thu, Feb 28, 2013 at 10:42:28AM +0100, Pali Rohár wrote:
 >> Signed-off-by: Ivaylo Dimitrov 
 >> Signed-off-by: Pali Rohár 
 >> ---
 >>  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
 >> 
 >
 >Is this necessary? I thought the PPA sets this bit?
 >
 >Cheers,
 >
 >Peter.
 >

^ permalink raw reply	[flat|nested] 78+ messages in thread

* Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
@ 2013-03-01  7:47 Ивайло Димитров
  2013-03-01 14:38   ` Nishanth Menon
  0 siblings, 1 reply; 78+ messages in thread
From: Ивайло Димитров @ 2013-03-01  7:47 UTC (permalink / raw)
  To: Nishanth Menon
  Cc: pali.rohar, tony, linux, linux-kernel, linux-omap, linux-arm-kernel

   
They look similar, but they are not equivalent :). The first major difference is here (code taken from omap-smc.S)

> ENTRY(omap_smc2)
>          stmfd   sp!, {r4-r12, lr}
>          mov     r3, r2
>          mov     r2, r1
>          mov     r1, #0x0        @ Process ID
>          mov     r6, #0xff
>          mov     r12, #0x00      @ Secure Service ID

Always zero, while RX51 PPA expects a real value. I wonder if it is a bug, but anyway I don't see the id parameter (R0) used.

>          mov     r7, #0
>          mcr     p15, 0, r7, c7, c5, 6

According to ARM TRM, this is "Invalidate entire branch predictor array"(IIUC). NFC why it is needed here, but this will not work on RX-51 until IBE bit in ACR is set. 

>          dsb
>          dmb
>          smc     #0

RX-51 needs smc #1 ;)

>          ldmfd   sp!, {r4-r12, pc}


The next major difference is that RX-51 expects parameter count passed in R3[0] to be the count of the remaining parameters +1, but omap_secure_dispatcher (in omap-secure.c) is passing the exact count of the remaining parameters.

I guess all of the above problems can be fixed/workarounded, but I wonder does it worth. Not to say that I don't have BB around to test if the code still works if I make changes to omap2-secure.c/omap-smc.S :)


 >-------- Оригинално писмо --------
 >От:  Nishanth Menon 
 >Относно: Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
 >До: Pali Rohár 
 >Изпратено на: Четвъртък, 2013, Февруари 28 16:40:05 EET
 >
 >
 >On 10:42-20130228, Pali Rohár wrote:
 >> Signed-off-by: Ivaylo Dimitrov 
 >> Signed-off-by: Pali Rohár 
 >> ---
 >>  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 ++++
 >
 >Wondering if we can integrate these into 
 >arch/arm/mach-omap2/omap-smc.S
 >and
 >arch/arm/mach-omap2/omap-secure.c
 >on a quick look, it does seem there are commonalities.
 >
 >>  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-&#36;(CONFIG_MACH_NOKIA_RX51)		+= board-rx51.o sdram-nokia.o
 >>  obj-&#36;(CONFIG_MACH_NOKIA_RX51)		+= board-rx51-peripherals.o
 >>  obj-&#36;(CONFIG_MACH_NOKIA_RX51)		+= board-rx51-video.o
 >>  obj-&#36;(CONFIG_MACH_NOKIA_RX51)		+= board-rx51-camera.o
 >> +obj-&#36;(CONFIG_MACH_NOKIA_RX51)		+= board-rx51-smc.o board-rx51-secure.o
 >>  obj-&#36;(CONFIG_MACH_OMAP_ZOOM2)		+= board-zoom.o board-zoom-peripherals.o
 >>  obj-&#36;(CONFIG_MACH_OMAP_ZOOM2)		+= board-zoom-display.o
 >>  obj-&#36;(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 
 >> + *
 >> + *
 >> + * 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 
 >> +
 >> +#include &quot;board-rx51-secure.h&quot;
 >> +
 >> +/**
 >> + * 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 (&quot;mrc p15, 0, %0, c1, c0, 1&quot; : &quot;=r&quot; (acr));
 >> +	acr &amp;= ~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 
 >> + *
 >> + * 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 
 >> + *
 >> + *
 >> + * 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 
 >> +
 >> +/**
 >> + * 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 &quot;gpmc.h&quot;
 >>  #include &quot;pm.h&quot;
 >>  #include &quot;sdram-nokia.h&quot;
 >> +#include &quot;board-rx51-secure.h&quot;
 >>  
 >>  #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 &quot;Enabling ARM errata 430973 workaround.&#92;n&quot;);
 >> +	/* 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(&quot;sdrc_cke0&quot;, OMAP_PIN_OUTPUT);
 >>  	omap_mux_init_signal(&quot;sdrc_cke1&quot;, OMAP_PIN_OUTPUT);
 >> -- 
 >> 1.7.10.4
 >> 
 >> 
 >> _______________________________________________
 >> linux-arm-kernel mailing list
 >> linux-arm-kernel@lists.infradead.org
 >> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
 >
 >-- 
 >Regards,
 >Nishanth Menon
 >

^ permalink raw reply	[flat|nested] 78+ messages in thread

end of thread, other threads:[~2013-09-24 16:51 UTC | newest]

Thread overview: 78+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-02-28  9:42 [PATCH] arm: omap: RX-51: ARM errata 430973 workaround Pali Rohár
2013-02-28  9:42 ` Pali Rohár
2013-02-28  9:42 ` Pali Rohár
2013-02-28 14:40 ` Nishanth Menon
2013-02-28 14:40   ` Nishanth Menon
2013-02-28 14:40   ` Nishanth Menon
2013-03-01  9:43 ` Peter De Schrijver
2013-03-01  9:43   ` Peter De Schrijver
2013-03-01  9:43   ` Peter De Schrijver
2013-03-30 18:36 ` Pavel Machek
2013-03-30 18:36   ` Pavel Machek
2013-07-10 12:59 ` [PATCH v2 0/2] " Pali Rohár
2013-07-10 12:59   ` 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 12:59     ` Pali Rohár
2013-07-10 17:45     ` Dave Martin
2013-07-10 17:45       ` Dave Martin
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-07-10 12:59     ` Pali Rohár
2013-09-17 23:24     ` Tony Lindgren
2013-09-17 23:24       ` Tony Lindgren
2013-09-18  8:33       ` Pali Rohár
2013-09-18  8:33         ` Pali Rohár
2013-09-18 17:18         ` Tony Lindgren
2013-09-18 17:18           ` Tony Lindgren
2013-09-18 18:13           ` Pali Rohár
2013-09-18 18:13             ` Pali Rohár
2013-09-18 18:21             ` Tony Lindgren
2013-09-18 18:21               ` Tony Lindgren
2013-09-24  0:15           ` Pavel Machek
2013-09-24  0:15             ` Pavel Machek
2013-09-24 16:51             ` Tony Lindgren
2013-09-24 16:51               ` Tony Lindgren
2013-09-18 19:22       ` [PATCH v3 " Pali Rohár
2013-09-18 19:22         ` Pali Rohár
2013-09-18 19:27         ` Tony Lindgren
2013-09-18 19:27           ` Tony Lindgren
2013-09-18 19:43           ` [PATCH v4 " Pali Rohár
2013-09-18 19:43             ` Pali Rohár
2013-03-01  7:47 [PATCH] arm: omap: " Ивайло Димитров
2013-03-01 14:38 ` Nishanth Menon
2013-03-01 14:38   ` Nishanth Menon
2013-03-04 18:58   ` Tony Lindgren
2013-03-04 18:58     ` Tony Lindgren
2013-03-06 14:09     ` Pali Rohár
2013-03-06 14:09       ` Pali Rohár
2013-03-06 17:51       ` Tony Lindgren
2013-03-06 17:51         ` Tony Lindgren
2013-03-06 19:13         ` Pali Rohár
2013-03-06 19:13           ` Pali Rohár
2013-03-24 14:26           ` Pali Rohár
2013-03-24 14:26             ` Pali Rohár
2013-03-27 20:56             ` Tony Lindgren
2013-03-27 20:56               ` Tony Lindgren
2013-03-27 20:56               ` Tony Lindgren
2013-03-27 21:05               ` Pali Rohár
2013-03-27 21:05                 ` Pali Rohár
2013-03-27 21:12                 ` Tony Lindgren
2013-03-27 21:12                   ` Tony Lindgren
2013-03-28  9:50               ` Russell King - ARM Linux
2013-03-28  9:50                 ` Russell King - ARM Linux
2013-03-28 10:07                 ` Santosh Shilimkar
2013-03-28 10:07                   ` Santosh Shilimkar
2013-03-28 15:53                   ` Tony Lindgren
2013-03-28 15:53                     ` Tony Lindgren
2013-03-01 10:09 Ивайло Димитров
2013-03-01 23:51 ` Aaro Koskinen
2013-03-01 23:51   ` Aaro Koskinen
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-28 15:58   ` Tony Lindgren
2013-03-28 15:58   ` Tony Lindgren
2013-03-30 22:31 Ивайло Димитров
2013-03-31  7:37 ` Pavel Machek
2013-03-31  7:37   ` Pavel Machek

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.