From: Nishanth Menon <nm@ti.com>
To: "Pali Rohár" <pali.rohar@gmail.com>
Cc: Tony Lindgren <tony@atomide.com>,
Russell King <linux@arm.linux.org.uk>,
linux-kernel@vger.kernel.org,
Ivaylo Dimitrov <freemangordon@abv.bg>,
linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
Date: Thu, 28 Feb 2013 08:40:05 -0600 [thread overview]
Message-ID: <20130228144005.GA22544@kahuna> (raw)
In-Reply-To: <1362044548-5398-1-git-send-email-pali.rohar@gmail.com>
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
WARNING: multiple messages have this Message-ID (diff)
From: nm@ti.com (Nishanth Menon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
Date: Thu, 28 Feb 2013 08:40:05 -0600 [thread overview]
Message-ID: <20130228144005.GA22544@kahuna> (raw)
In-Reply-To: <1362044548-5398-1-git-send-email-pali.rohar@gmail.com>
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
WARNING: multiple messages have this Message-ID (diff)
From: Nishanth Menon <nm@ti.com>
To: "Pali Rohár" <pali.rohar@gmail.com>
Cc: Tony Lindgren <tony@atomide.com>,
Russell King <linux@arm.linux.org.uk>,
<linux-kernel@vger.kernel.org>,
Ivaylo Dimitrov <freemangordon@abv.bg>,
<linux-omap@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH] arm: omap: RX-51: ARM errata 430973 workaround
Date: Thu, 28 Feb 2013 08:40:05 -0600 [thread overview]
Message-ID: <20130228144005.GA22544@kahuna> (raw)
In-Reply-To: <1362044548-5398-1-git-send-email-pali.rohar@gmail.com>
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
next prev parent reply other threads:[~2013-02-28 14:40 UTC|newest]
Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top
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 [this message]
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-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
-- strict thread matches above, loose matches on Subject: below --
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130228144005.GA22544@kahuna \
--to=nm@ti.com \
--cc=freemangordon@abv.bg \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=pali.rohar@gmail.com \
--cc=tony@atomide.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is 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.