Re: [U-Boot] [PATCH 5/6] ARM: Introduce function to switch to hypervisor mode

2016-09-16 Thread Tom Rini
On Wed, Sep 14, 2016 at 10:43:32AM +0530, Keerthy wrote:

> On some of the SoCs one cannot enable hypervisor mode directly from the
> u-boot because the ROM code puts the chip to supervisor mode after it
> jumps to boot loader. Hence introduce a weak function which can be
> overridden based on the SoC type and switch to hypervisor mode in a
> custom way.
> 
> Cc: beagleboard-...@googlegroups.com
> Signed-off-by: Keerthy 

Reviewed-by: Tom Rini 

-- 
Tom


signature.asc
Description: Digital signature
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH 5/6] ARM: Introduce function to switch to hypervisor mode

2016-09-13 Thread Keerthy
On some of the SoCs one cannot enable hypervisor mode directly from the
u-boot because the ROM code puts the chip to supervisor mode after it
jumps to boot loader. Hence introduce a weak function which can be
overridden based on the SoC type and switch to hypervisor mode in a
custom way.

Cc: beagleboard-...@googlegroups.com
Signed-off-by: Keerthy 
---
 arch/arm/cpu/armv7/start.S| 21 +
 arch/arm/include/asm/system.h |  4 
 2 files changed, 25 insertions(+)

diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S
index 691e5d3..7eee54b 100644
--- a/arch/arm/cpu/armv7/start.S
+++ b/arch/arm/cpu/armv7/start.S
@@ -17,6 +17,7 @@
 #include 
 #include 
 #include 
+#include 
 
 /*
  *
@@ -30,11 +31,24 @@
 
.globl  reset
.globl  save_boot_params_ret
+#ifdef CONFIG_ARMV7_LPAE
+   .global switch_to_hypervisor_ret
+#endif
 
 reset:
/* Allow the board to save important registers */
b   save_boot_params
 save_boot_params_ret:
+#ifdef CONFIG_ARMV7_LPAE
+/*
+ * check for Hypervisor support
+ */
+   mrc p15, 0, r0, c0, c1, 1   @ read ID_PFR1
+   and r0, r0, #CPUID_ARM_VIRT_MASK@ mask virtualization bits
+   cmp r0, #(1 << CPUID_ARM_VIRT_SHIFT)
+   beq switch_to_hypervisor
+switch_to_hypervisor_ret:
+#endif
/*
 * disable interrupts (FIQ and IRQ), also set the cpu to SVC32 mode,
 * except if in HYP mode already
@@ -103,6 +117,13 @@ ENTRY(save_boot_params)
 ENDPROC(save_boot_params)
.weak   save_boot_params
 
+#ifdef CONFIG_ARMV7_LPAE
+ENTRY(switch_to_hypervisor)
+   b   switch_to_hypervisor_ret
+ENDPROC(switch_to_hypervisor)
+   .weak   switch_to_hypervisor
+#endif
+
 /*
  *
  * cpu_init_cp15
diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h
index 7b7b867..c18e1e3 100644
--- a/arch/arm/include/asm/system.h
+++ b/arch/arm/include/asm/system.h
@@ -223,6 +223,10 @@ void __noreturn psci_system_reset(bool smc);
  */
 void save_boot_params_ret(void);
 
+#ifdef CONFIG_ARMV7_LPAE
+void switch_to_hypervisor_ret(void);
+#endif
+
 #define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t");
 
 #ifdef __ARM_ARCH_7A__
-- 
1.9.1

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot