[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH MM-PART2 RESEND v2 02/19] xen/arm: Rename SCTLR_* defines and remove unused one



On Tue, 14 May 2019, Julien Grall wrote:
> The SCTLR_* are currently used for SCTLR/HSCTLR (arm32) and
> SCTLR_EL1/SCTLR_EL2 (arm64).
> 
> The naming scheme is actually quite confusing because they may only be
> defined for an archicture (or even an exception level). So it is not easy
> for the developer to know which one to use.
> 
> The naming scheme is reworked by adding Axx_ELx in each define:
>     * xx is replaced by 32 or 64 if specific to an architecture
>     * x is replaced by 2 (hypervisor) or 1 (kernel) if specific to an
>     exception level
> 
> While doing the renaming, remove the unused defines (or at least the ones
> that are unlikely going to be used).
> 
> Signed-off-by: Julien Grall <julien.grall@xxxxxxx>
> Reviewed-by: Andrii Anisov <andrii_anisov@xxxxxxxx>

Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>

> ---
>     Changes in v2:
>         - Fix build on arm32
>         - Add Andrii's reviewed-by
> ---
>  xen/arch/arm/arm32/head.S       |  5 +++--
>  xen/arch/arm/arm64/head.S       |  4 ++--
>  xen/arch/arm/guest_walk.c       |  2 +-
>  xen/arch/arm/mm.c               |  2 +-
>  xen/arch/arm/traps.c            |  6 +++---
>  xen/include/asm-arm/p2m.h       |  4 +++-
>  xen/include/asm-arm/processor.h | 37 +++++++++++++++++--------------------
>  7 files changed, 30 insertions(+), 30 deletions(-)
> 
> diff --git a/xen/arch/arm/arm32/head.S b/xen/arch/arm/arm32/head.S
> index 390a505e05..454d24537c 100644
> --- a/xen/arch/arm/arm32/head.S
> +++ b/xen/arch/arm/arm32/head.S
> @@ -244,7 +244,7 @@ cpu_init_done:
>           * Alignment checking enabled,
>           * MMU translation disabled (for now).
>           */
> -        ldr   r0, =(HSCTLR_BASE|SCTLR_A)
> +        ldr   r0, =(HSCTLR_BASE|SCTLR_Axx_ELx_A)
>          mcr   CP32(r0, HSCTLR)
>  
>          /*
> @@ -369,7 +369,8 @@ virtphys_clash:
>  
>          ldr   r1, =paging            /* Explicit vaddr, not RIP-relative */
>          mrc   CP32(r0, HSCTLR)
> -        orr   r0, r0, #(SCTLR_M|SCTLR_C) /* Enable MMU and D-cache */
> +        /* Enable MMU and D-cache */
> +        orr   r0, r0, #(SCTLR_Axx_ELx_M|SCTLR_Axx_ELx_C)
>          dsb                          /* Flush PTE writes and finish reads */
>          mcr   CP32(r0, HSCTLR)       /* now paging is enabled */
>          isb                          /* Now, flush the icache */
> diff --git a/xen/arch/arm/arm64/head.S b/xen/arch/arm/arm64/head.S
> index 4589a37874..8a6be3352e 100644
> --- a/xen/arch/arm/arm64/head.S
> +++ b/xen/arch/arm/arm64/head.S
> @@ -514,8 +514,8 @@ virtphys_clash:
>  
>          ldr   x1, =paging            /* Explicit vaddr, not RIP-relative */
>          mrs   x0, SCTLR_EL2
> -        orr   x0, x0, #SCTLR_M       /* Enable MMU */
> -        orr   x0, x0, #SCTLR_C       /* Enable D-cache */
> +        orr   x0, x0, #SCTLR_Axx_ELx_M  /* Enable MMU */
> +        orr   x0, x0, #SCTLR_Axx_ELx_C  /* Enable D-cache */
>          dsb   sy                     /* Flush PTE writes and finish reads */
>          msr   SCTLR_EL2, x0          /* now paging is enabled */
>          isb                          /* Now, flush the icache */
> diff --git a/xen/arch/arm/guest_walk.c b/xen/arch/arm/guest_walk.c
> index f10d2e9f76..c6d6e23bf5 100644
> --- a/xen/arch/arm/guest_walk.c
> +++ b/xen/arch/arm/guest_walk.c
> @@ -612,7 +612,7 @@ bool guest_walk_tables(const struct vcpu *v, vaddr_t gva,
>      *perms = GV2M_READ;
>  
>      /* If the MMU is disabled, there is no need to translate the gva. */
> -    if ( !(sctlr & SCTLR_M) )
> +    if ( !(sctlr & SCTLR_Axx_ELx_M) )
>      {
>          *ipa = gva;
>  
> diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
> index 9d584e4cbf..e090afb976 100644
> --- a/xen/arch/arm/mm.c
> +++ b/xen/arch/arm/mm.c
> @@ -609,7 +609,7 @@ void __init remove_early_mappings(void)
>   */
>  static void xen_pt_enforce_wnx(void)
>  {
> -    WRITE_SYSREG32(READ_SYSREG32(SCTLR_EL2) | SCTLR_WXN, SCTLR_EL2);
> +    WRITE_SYSREG32(READ_SYSREG32(SCTLR_EL2) | SCTLR_Axx_ELx_WXN, SCTLR_EL2);
>      /*
>       * The TLBs may cache SCTLR_EL2.WXN. So ensure it is synchronized
>       * before flushing the TLBs.
> diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
> index 1aba970415..6c757c12a8 100644
> --- a/xen/arch/arm/traps.c
> +++ b/xen/arch/arm/traps.c
> @@ -392,9 +392,9 @@ static void cpsr_switch_mode(struct cpu_user_regs *regs, 
> int mode)
>      regs->cpsr |= PSR_IRQ_MASK;
>      if ( mode == PSR_MODE_ABT )
>          regs->cpsr |= PSR_ABT_MASK;
> -    if ( sctlr & SCTLR_TE )
> +    if ( sctlr & SCTLR_A32_ELx_TE )
>          regs->cpsr |= PSR_THUMB;
> -    if ( sctlr & SCTLR_EE )
> +    if ( sctlr & SCTLR_Axx_ELx_EE )
>          regs->cpsr |= PSR_BIG_ENDIAN;
>  }
>  
> @@ -402,7 +402,7 @@ static vaddr_t exception_handler32(vaddr_t offset)
>  {
>      uint32_t sctlr = READ_SYSREG32(SCTLR_EL1);
>  
> -    if ( sctlr & SCTLR_V )
> +    if ( sctlr & SCTLR_A32_EL1_V )
>          return 0xffff0000 + offset;
>      else /* always have security exceptions */
>          return READ_SYSREG(VBAR_EL1) + offset;
> diff --git a/xen/include/asm-arm/p2m.h b/xen/include/asm-arm/p2m.h
> index 041dea827c..2f89bb00c3 100644
> --- a/xen/include/asm-arm/p2m.h
> +++ b/xen/include/asm-arm/p2m.h
> @@ -391,10 +391,12 @@ static inline int set_foreign_p2m_entry(struct domain 
> *d, unsigned long gfn,
>   */
>  static inline bool vcpu_has_cache_enabled(struct vcpu *v)
>  {
> +    const uint32_t mask = SCTLR_Axx_ELx_C | SCTLR_Axx_ELx_M;
> +
>      /* Only works with the current vCPU */
>      ASSERT(current == v);
>  
> -    return (READ_SYSREG32(SCTLR_EL1) & (SCTLR_C|SCTLR_M)) == 
> (SCTLR_C|SCTLR_M);
> +    return (READ_SYSREG32(SCTLR_EL1) & mask) == mask;
>  }
>  
>  #endif /* _XEN_P2M_H */
> diff --git a/xen/include/asm-arm/processor.h b/xen/include/asm-arm/processor.h
> index 04b05b3f39..f3b68185eb 100644
> --- a/xen/include/asm-arm/processor.h
> +++ b/xen/include/asm-arm/processor.h
> @@ -117,26 +117,23 @@
>  #define TTBCR_PD1       (_AC(1,U)<<5)
>  
>  /* SCTLR System Control Register. */
> -/* HSCTLR is a subset of this. */
> -#define SCTLR_TE        (_AC(1,U)<<30)
> -#define SCTLR_AFE       (_AC(1,U)<<29)
> -#define SCTLR_TRE       (_AC(1,U)<<28)
> -#define SCTLR_NMFI      (_AC(1,U)<<27)
> -#define SCTLR_EE        (_AC(1,U)<<25)
> -#define SCTLR_VE        (_AC(1,U)<<24)
> -#define SCTLR_U         (_AC(1,U)<<22)
> -#define SCTLR_FI        (_AC(1,U)<<21)
> -#define SCTLR_WXN       (_AC(1,U)<<19)
> -#define SCTLR_HA        (_AC(1,U)<<17)
> -#define SCTLR_RR        (_AC(1,U)<<14)
> -#define SCTLR_V         (_AC(1,U)<<13)
> -#define SCTLR_I         (_AC(1,U)<<12)
> -#define SCTLR_Z         (_AC(1,U)<<11)
> -#define SCTLR_SW        (_AC(1,U)<<10)
> -#define SCTLR_B         (_AC(1,U)<<7)
> -#define SCTLR_C         (_AC(1,U)<<2)
> -#define SCTLR_A         (_AC(1,U)<<1)
> -#define SCTLR_M         (_AC(1,U)<<0)
> +
> +/* Bits specific to SCTLR_EL1 for Arm32 */
> +
> +#define SCTLR_A32_EL1_V     (_AC(1,U)<<13)
> +
> +/* Common bits for SCTLR_ELx for Arm32 */
> +
> +#define SCTLR_A32_ELx_TE    (_AC(1,U)<<30)
> +#define SCTLR_A32_ELx_FI    (_AC(1,U)<<21)
> +
> +/* Common bits for SCTLR_ELx on all architectures */
> +#define SCTLR_Axx_ELx_EE    (_AC(1,U)<<25)
> +#define SCTLR_Axx_ELx_WXN   (_AC(1,U)<<19)
> +#define SCTLR_Axx_ELx_I     (_AC(1,U)<<12)
> +#define SCTLR_Axx_ELx_C     (_AC(1,U)<<2)
> +#define SCTLR_Axx_ELx_A     (_AC(1,U)<<1)
> +#define SCTLR_Axx_ELx_M     (_AC(1,U)<<0)
>  
>  #define HSCTLR_BASE     _AC(0x30c51878,U)
>  
> -- 
> 2.11.0
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.