[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/9] arm: consolidate setup of hypervisor traps and second stage paging
On Wed, 6 Mar 2013, Ian Campbell wrote: > From: Ian Campbell <ian.campbell@xxxxxxxxxx> > > In particular be sure to initisalise HCR_EL2 on secondary processors. > > Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > xen/arch/arm/domain_build.c | 7 ------- > xen/arch/arm/mm.c | 10 ++++++++++ > xen/arch/arm/setup.c | 13 +++---------- > xen/arch/arm/smpboot.c | 5 +++-- > xen/arch/arm/traps.c | 11 +++++++++++ > xen/include/asm-arm/mm.h | 4 +++- > xen/include/asm-arm/processor.h | 2 ++ > 7 files changed, 32 insertions(+), 20 deletions(-) > > diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c > index bdf41fa..f161845 100644 > --- a/xen/arch/arm/domain_build.c > +++ b/xen/arch/arm/domain_build.c > @@ -322,10 +322,6 @@ int construct_dom0(struct domain *d) > gic_route_irq_to_guest(d, 46, "lcd"); > gic_route_irq_to_guest(d, 47, "eth"); > > - /* Enable second stage translation */ > - WRITE_SYSREG(READ_SYSREG(HCR_EL2) | HCR_VM, HCR_EL2); > - isb(); > - > /* The following loads use the domain's p2m */ > p2m_load_VTTBR(d); > > @@ -373,9 +369,6 @@ int construct_dom0(struct domain *d) > } > #endif > > - WRITE_SYSREG(HCR_PTW|HCR_BSU_OUTER|HCR_AMO|HCR_IMO|HCR_VM|HCR_TWI, > HCR_EL2); > - isb(); > - > local_abort_enable(); > > return 0; > diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c > index 9661f10..ba3140d 100644 > --- a/xen/arch/arm/mm.c > +++ b/xen/arch/arm/mm.c > @@ -251,6 +251,16 @@ void __init arch_init_memory(void) > BUG_ON(IS_ERR(dom_cow)); > } > > +void __cpuinit setup_virt_paging(void) > +{ > + /* Setup Stage 2 address translation */ > + /* SH0=00, ORGN0=IRGN0=01 > + * SL0=01 (Level-1) > + * T0SZ=(1)1000 = -8 (40 bit physical addresses) > + */ > + WRITE_SYSREG32(0x80002558, VTCR_EL2); isb(); > +} > + > /* Boot-time pagetable setup. > * Changes here may need matching changes in head.S */ > void __init setup_pagetables(unsigned long boot_phys_offset, paddr_t > xen_paddr) > diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c > index 566f36c..cfe3d94 100644 > --- a/xen/arch/arm/setup.c > +++ b/xen/arch/arm/setup.c > @@ -446,16 +446,9 @@ void __init start_xen(unsigned long boot_phys_offset, > set_current((struct vcpu *)0xfffff000); /* debug sanity */ > idle_vcpu[0] = current; > > - /* Setup Hyp vector base */ > - WRITE_SYSREG((vaddr_t)hyp_traps_vector, VBAR_EL2); > - isb(); > - > - /* Setup Stage 2 address translation */ > - /* SH0=00, ORGN0=IRGN0=01 > - * SL0=01 (Level-1) > - * T0SZ=(1)1000 = -8 (40 bit physical addresses) > - */ > - WRITE_SYSREG32(0x80002558, VTCR_EL2); isb(); > + init_traps(); > + > + setup_virt_paging(); > > enable_vfp(); > > diff --git a/xen/arch/arm/smpboot.c b/xen/arch/arm/smpboot.c > index b2af42e..1bebf86 100644 > --- a/xen/arch/arm/smpboot.c > +++ b/xen/arch/arm/smpboot.c > @@ -148,8 +148,9 @@ void __cpuinit start_secondary(unsigned long > boot_phys_offset, > *c = boot_cpu_data; > identify_cpu(c); > > - /* Setup Hyp vector base */ > - WRITE_SYSREG((vaddr_t)hyp_traps_vector, VBAR_EL2); > + init_traps(); > + > + setup_virt_paging(); > > mmu_init_secondary_cpu(); > enable_vfp(); > diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c > index cf28974..2cc31ab 100644 > --- a/xen/arch/arm/traps.c > +++ b/xen/arch/arm/traps.c > @@ -53,6 +53,17 @@ integer_param("debug_stack_lines", debug_stack_lines); > > #define stack_words_per_line 8 > > + > +void __cpuinit init_traps(void) > +{ > + /* Setup Hyp vector base */ > + WRITE_SYSREG((vaddr_t)hyp_traps_vector, VBAR_EL2); > + > + /* Setup hypervisor traps */ > + WRITE_SYSREG(HCR_PTW|HCR_BSU_OUTER|HCR_AMO|HCR_IMO|HCR_VM|HCR_TWI, > HCR_EL2); > + isb(); > +} > + > asmlinkage void __div0(void) > { > printk("Division by zero in hypervisor.\n"); > diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h > index 19e5bc2..4be383e 100644 > --- a/xen/include/asm-arm/mm.h > +++ b/xen/include/asm-arm/mm.h > @@ -138,8 +138,10 @@ extern unsigned long total_pages; > > /* Boot-time pagetable setup */ > extern void setup_pagetables(unsigned long boot_phys_offset, paddr_t > xen_paddr); > -/* MMU setup for seccondary CPUS (which already have paging enabled) */ > +/* MMU setup for secondary CPUS (which already have paging enabled) */ > extern void __cpuinit mmu_init_secondary_cpu(void); > +/* Second stage paging setup, to be called on all CPUs */ > +extern void __cpuinit setup_virt_paging(void); > /* Set up the xenheap: up to 1GB of contiguous, always-mapped memory. > * Base must be 32MB aligned and size a multiple of 32MB. */ > extern void setup_xenheap_mappings(unsigned long base_mfn, unsigned long > nr_mfns); > diff --git a/xen/include/asm-arm/processor.h b/xen/include/asm-arm/processor.h > index 6fbe2fa..1681ebf 100644 > --- a/xen/include/asm-arm/processor.h > +++ b/xen/include/asm-arm/processor.h > @@ -353,6 +353,8 @@ union hsr { > #ifndef __ASSEMBLY__ > extern uint32_t hyp_traps_vector[]; > > +void init_traps(void); > + > void panic_PAR(uint64_t par); > > void show_execution_state(struct cpu_user_regs *regs); > -- > 1.7.10.4 > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |