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

Re: [XEN v3 6/9] xen/arm: Introduce choice to enable 64/32 bit physical addressing



On Wed, 8 Feb 2023, Ayan Kumar Halder wrote:
> Some Arm based hardware platforms which does not support LPAE
> (eg Cortex-R52), uses 32 bit physical addresses.
> Also, users may choose to use 32 bits to represent physical addresses
> for optimization.
> 
> To support the above use cases, we have introduced arch independent
> configs to choose if the physical address can be represented using
> 32 bits (PHYS_ADDR_32) or 64 bits (PHYS_ADDR_64).
> For now only ARM_32 provides support to enable 32 bit physical
> addressing.
> 
> Signed-off-by: Ayan Kumar Halder <ayan.kumar.halder@xxxxxxx>
> ---
> 
> Changes from -
> v1 - 1. Extracted from "[XEN v1 8/9] xen/arm: Other adaptations required to 
> support 32bit paddr".
> 
> v2 - 1. Introduced Kconfig choice. ARM_64 can select PHYS_ADDR_64 only whereas
> ARM_32 can select PHYS_ADDR_32 or PHYS_ADDR_64.
> 2. For CONFIG_ARM_PA_32, paddr_t is defined as 'unsigned long'.
> 
> (Jan,Julien please let me know if I understood your suggestion about Kconfig 
> correctly).
> 
>  xen/arch/Kconfig                     | 12 +++++++++++
>  xen/arch/arm/Kconfig                 | 31 ++++++++++++++++++++++++++++
>  xen/arch/arm/include/asm/page-bits.h |  2 ++
>  xen/arch/arm/include/asm/types.h     |  6 ++++++
>  4 files changed, 51 insertions(+)
> 
> diff --git a/xen/arch/Kconfig b/xen/arch/Kconfig
> index 7028f7b74f..1eff312b51 100644
> --- a/xen/arch/Kconfig
> +++ b/xen/arch/Kconfig
> @@ -1,6 +1,18 @@
>  config 64BIT
>       bool
>  
> +config PHYS_ADDR_32
> +     bool
> +     help
> +       Select this option if the physical addresses can be represented by
> +       32 bits.
> +
> +config PHYS_ADDR_64
> +     bool
> +     help
> +       Select this option if the physical addresses can be represented
> +       64 bits.

These two config symbols should be defined in xen/arch/arm/Kconfig
(unless you plan to also define them for x86).


>  config NR_CPUS
>       int "Maximum number of CPUs"
>       range 1 4095
> diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig
> index 239d3aed3c..0955891e86 100644
> --- a/xen/arch/arm/Kconfig
> +++ b/xen/arch/arm/Kconfig
> @@ -18,6 +18,37 @@ config ARM
>       select HAS_PDX
>       select HAS_PMAP
>       select IOMMU_FORCE_PT_SHARE
> +     choice

This shows up at the very beginning of the global menu. I think it would
be better to move it under "Architecture Features"

Also given that there is not choice on arm64, I don't think the choice
option should be visible to the user (because the user cannot change
selection for arm64).

> +             bool "Representative width for any physical address (default 
> 64bit)"
> +             optional

should not be "optional", optional means that neither ARM_PA_64 nor
ARM_PA_32 could be selected. I think we want one of the two to always be
selected, ARM_PA_64 being the default option, and the only option on
arm64.

> +             ---help---
> +               You may want to specify the width to represent the physical
> +               address space.
> +               By default, the physical addresses are represented using
> +               64 bits.
> +
> +               However in certain platforms, the physical addresses may be
> +               represented using 32 bits.
> +               Also, the user may decide that the physical addresses can be
> +               represented using 32 bits for a given SoC. In those cases,
> +               user may want to enable 32 bit physical address for
> +               optimization.
> +               For now, we have enabled this choice for ARM_32 only.
> +
> +             config ARM_PA_64
> +                     select PHYS_ADDR_64
> +                     bool "Select 64 bits to represent physical address"
> +                     ---help---
> +                       Use 64 bits to represent physical address.
> +
> +             config ARM_PA_32
> +                     select PHYS_ADDR_32
> +                     depends on ARM_32
> +                     bool "Select 32 bits to represent physical address"
> +                     ---help---
> +                       Use 32 bits to represent physical address.
> +
> +    endchoice
>  
>  config ARCH_DEFCONFIG
>       string
> diff --git a/xen/arch/arm/include/asm/page-bits.h 
> b/xen/arch/arm/include/asm/page-bits.h
> index 5d6477e599..8f4dcebcfd 100644
> --- a/xen/arch/arm/include/asm/page-bits.h
> +++ b/xen/arch/arm/include/asm/page-bits.h
> @@ -5,6 +5,8 @@
>  
>  #ifdef CONFIG_ARM_64
>  #define PADDR_BITS              48
> +#elif CONFIG_ARM_PA_32
> +#define PADDR_BITS              32
>  #else
>  #define PADDR_BITS              40
>  #endif
> diff --git a/xen/arch/arm/include/asm/types.h 
> b/xen/arch/arm/include/asm/types.h
> index e218ed77bd..26144bc87e 100644
> --- a/xen/arch/arm/include/asm/types.h
> +++ b/xen/arch/arm/include/asm/types.h
> @@ -34,9 +34,15 @@ typedef signed long long s64;
>  typedef unsigned long long u64;
>  typedef u32 vaddr_t;
>  #define PRIvaddr PRIx32
> +#if defined(CONFIG_ARM_PA_32)
> +typedef unsigned long paddr_t;
> +#define INVALID_PADDR (~0UL)
> +#define PRIpaddr "08lx"
> +#else
>  typedef u64 paddr_t;
>  #define INVALID_PADDR (~0ULL)
>  #define PRIpaddr "016llx"
> +#endif
>  typedef u32 register_t;
>  #define PRIregister "08x"
>  #elif defined (CONFIG_ARM_64)
> -- 
> 2.17.1
> 
> 



 


Rackspace

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