File tree Expand file tree Collapse file tree 4 files changed +39
-27
lines changed Expand file tree Collapse file tree 4 files changed +39
-27
lines changed Original file line number Diff line number Diff line change 1616#include  <asm/sysreg.h> 
1717#include  <linux/irqchip/arm-gic-v3.h> 
1818
19+ .macro  init_el2_hcr 	val 
20+ 	mov_q 	x0 , \val 
21+ 
22+ 	/* 
23+ 	 * Compliant CPUs advertise their VHE-onlyness with 
24+ 	 * ID_AA64MMFR4_EL1.E2H0 < 0. On such CPUs HCR_EL2.E2H is RES1, but it 
25+ 	 * can reset into an UNKNOWN state and might not read as 1 until it has 
26+ 	 * been initialized explicitly. 
27+ 	 * 
28+ 	 * Fruity CPUs seem to have HCR_EL2.E2H set to RAO/WI, but 
29+ 	 * don't advertise it (they predate this relaxation). 
30+ 	 * 
31+ 	 * Initalize HCR_EL2.E2H so that later code can rely upon HCR_EL2.E2H 
32+ 	 * indicating whether the CPU is running in E2H mode. 
33+ 	 */ 
34+ 	mrs_s 	x1 , SYS_ID_AA64MMFR4_EL1 
35+ 	sbfx 	x1 , x1 , #ID_AA64MMFR4_EL1_E2H0_SHIFT , #ID_AA64MMFR4_EL1_E2H0_WIDTH 
36+ 	cmp 	x1 , #0 
37+ 	b .ge 	.LnVHE_ \@
38+ 
39+ 	orr 	x0 , x0 , #HCR_E2H 
40+ .LnVHE_ \@:
41+ 	msr 	hcr_el2 , x0 
42+ 	isb 
43+ .endm 
44+ 
1945.macro  __init_el2_sctlr 
2046	mov_q 	x0 , INIT_SCTLR_EL2_MMU_OFF 
2147	msr 	sctlr_el2 , x0 
244270.Lskip_gcs_ \@:
245271.endm 
246272
247- .macro  __init_el2_nvhe_prepare_eret 
248- 	mov 	x0 , #INIT_PSTATE_EL1 
249- 	msr 	spsr_el2 , x0 
250- .endm 
251- 
252273.macro  __init_el2_mpam 
253274	/* Memory Partitioning And Monitoring: disable EL2 traps */ 
254275	mrs 	x1 , id_aa64pfr0_el1 
Original file line number Diff line number Diff line change @@ -298,25 +298,8 @@ SYM_INNER_LABEL(init_el2, SYM_L_LOCAL)
298298	msr	sctlr_el2 ,  x0 
299299	isb 
3003000 : 
301- 	mov_q	x0 ,  HCR_HOST_NVHE_FLAGS 
302- 
303- 	/ * 
304- 	  *  Compliant CPUs advertise their VHE - onlyness with 
305- 	  *  ID_AA64MMFR4_EL1.E2H0 <  0 . HCR_EL2. E2H  can be 
306- 	  *  RES1  in  th at  case. Publish the  E2H  bit early so th at 
307- 	  *  it can be picked up by the init_el2_state macro. 
308- 	  * 
309- 	  *  Fruity CPUs seem to have HCR_EL2. E2H  set to RAO/WI ,  but 
310- 	  *  don't advertise it (they predate this relaxation). 
311- 	  * / 
312- 	mrs_s	x1 ,  SYS_ID_AA64MMFR4_EL1 
313- 	tbz	x1 ,  #(ID_AA64MMFR4_EL1_E2H0_SHIFT  +  ID_AA64MMFR4_EL1_E2H0_WIDTH  -   1 ) ,  1f 
314- 
315- 	orr	x0 ,  x0 ,  #HCR_E2H 
316- 1 : 
317- 	msr	hcr_el2 ,  x0 
318- 	isb 
319301
302+ 	init_el2_hcr	HCR_HOST_NVHE_FLAGS 
320303	init_el2_state 
321304
322305	/ *  Hypervisor stub  * / 
@@ -339,7 +322,8 @@ SYM_INNER_LABEL(init_el2, SYM_L_LOCAL)
339322	msr	sctlr_el1 ,  x1 
340323	 mov 	x2 ,  xzr 
3413243 : 
342- 	__init_el2_nvhe_prepare_eret 
325+ 	 mov 	x0 ,  #INIT_PSTATE_EL1 
326+ 	msr	spsr_el2 ,  x0 
343327
344328	 mov 	w0 ,  #BOOT_CPU_MODE_EL2 
345329	orr	x0 ,  x0 ,  x2 
Original file line number Diff line number Diff line change @@ -73,8 +73,12 @@ __do_hyp_init:
7373	eret 
7474SYM_CODE_END(__kvm_hyp_init) 
7575
76+ / * 
77+   *  Initialize EL2  CPU  state to sane values. 
78+   * 
79+   *  HCR_EL2. E2H  must have been initialized already. 
80+   * / 
7681SYM_CODE_START_LOCAL(__kvm_init_el2_state) 
77- 	/ *  Initialize EL2  CPU  state to sane values.  * / 
7882	init_el2_state				// Clobbers x0..x2 
7983	finalise_el2_state 
8084	 ret 
@@ -206,9 +210,9 @@ SYM_CODE_START_LOCAL(__kvm_hyp_init_cpu)
206210
2072112 :	msr	SPsel ,  # 1 			// We want to use SP_EL{ 1 , 2 } 
208212
209- 	 bl 	__kvm_init_el2_state 
213+ 	init_el2_hcr	  0 
210214
211- 	__init_el2_nvhe_prepare_eret  
215+ 	 bl 	__kvm_init_el2_state 
212216
213217	/ *  Enable MMU ,  set vectors  and  stack.  * / 
214218	 mov 	x0 ,  x28 
Original file line number Diff line number Diff line change @@ -218,6 +218,9 @@ asmlinkage void __noreturn __kvm_host_psci_cpu_entry(bool is_cpu_on)
218218	if  (is_cpu_on )
219219		release_boot_args (boot_args );
220220
221+ 	write_sysreg_el1 (INIT_SCTLR_EL1_MMU_OFF , SYS_SCTLR );
222+ 	write_sysreg (INIT_PSTATE_EL1 , SPSR_EL2 );
223+ 
221224	__host_enter (host_ctxt );
222225}
223226
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments