diff mbox

[U-Boot,1/2] ARM: cache: introduce weak arm_setup_identity_mapping

Message ID 1353337174-9858-2-git-send-email-v-stehle@ti.com
State Changes Requested
Delegated to: Tom Rini
Headers show

Commit Message

Vincent Stehlé Nov. 19, 2012, 2:59 p.m. UTC
Separate the MMU identity mapping for ARM in a weak function, to allow
redefinition with platform specific function.

This is motivated by the need to unmap the region near address zero on HS OMAP
devices, to avoid speculative accesses. Accessing this region causes security
violations, which we want to avoid.

Signed-off-by: Vincent Stehlé <v-stehle@ti.com>
---
 arch/arm/lib/cache-cp15.c |   18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

Comments

Tom Rini Nov. 19, 2012, 8:48 p.m. UTC | #1
On Mon, Nov 19, 2012 at 03:59:33PM +0100, Vincent Stehlé wrote:
> Separate the MMU identity mapping for ARM in a weak function, to allow
> redefinition with platform specific function.
> 
> This is motivated by the need to unmap the region near address zero on HS OMAP
> devices, to avoid speculative accesses. Accessing this region causes security
> violations, which we want to avoid.
> 
> Signed-off-by: Vincent Stehlé <v-stehle@ti.com>
> ---
>  arch/arm/lib/cache-cp15.c |   18 +++++++++++++++---
>  1 file changed, 15 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/arm/lib/cache-cp15.c b/arch/arm/lib/cache-cp15.c
> index 939de10..886fe5c 100644
> --- a/arch/arm/lib/cache-cp15.c
> +++ b/arch/arm/lib/cache-cp15.c
> @@ -40,6 +40,17 @@ void __arm_init_before_mmu(void)
>  void arm_init_before_mmu(void)
>  	__attribute__((weak, alias("__arm_init_before_mmu")));
>  
> +void __arm_setup_identity_mapping(u32 *page_table)
> +{
> +	int i;
> +
> +	/* Set up an identity-mapping for all 4GB, rw for everyone */
> +	for (i = 0; i < 4096; i++)
> +		page_table[i] = i << 20 | (3 << 10) | 0x12;
> +}
> +void arm_setup_identity_mapping(u32 *page_table)
> +	__attribute__((weak, alias("__arm_setup_identity_mapping")));

Please use __weak as found in <linux/compiler.h>, thanks.
diff mbox

Patch

diff --git a/arch/arm/lib/cache-cp15.c b/arch/arm/lib/cache-cp15.c
index 939de10..886fe5c 100644
--- a/arch/arm/lib/cache-cp15.c
+++ b/arch/arm/lib/cache-cp15.c
@@ -40,6 +40,17 @@  void __arm_init_before_mmu(void)
 void arm_init_before_mmu(void)
 	__attribute__((weak, alias("__arm_init_before_mmu")));
 
+void __arm_setup_identity_mapping(u32 *page_table)
+{
+	int i;
+
+	/* Set up an identity-mapping for all 4GB, rw for everyone */
+	for (i = 0; i < 4096; i++)
+		page_table[i] = i << 20 | (3 << 10) | 0x12;
+}
+void arm_setup_identity_mapping(u32 *page_table)
+	__attribute__((weak, alias("__arm_setup_identity_mapping")));
+
 static void cp_delay (void)
 {
 	volatile int i;
@@ -72,9 +83,10 @@  static inline void mmu_setup(void)
 	u32 reg;
 
 	arm_init_before_mmu();
-	/* Set up an identity-mapping for all 4GB, rw for everyone */
-	for (i = 0; i < 4096; i++)
-		page_table[i] = i << 20 | (3 << 10) | 0x12;
+
+	/* Set up an identity-mapping. Default version maps all 4GB rw for
+	 * everyone */
+	arm_setup_identity_mapping(page_table);
 
 	for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
 		dram_bank_mmu_setup(i);