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

[XEN v7 00/11] Add support for 32-bit physical address


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Ayan Kumar Halder <ayan.kumar.halder@xxxxxxx>
  • Date: Thu, 18 May 2023 15:39:09 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=aJCvJZk+ePYZnsdqF65o/m8Ky/j3D4a3J97pUu8ku9s=; b=LdVY9sTMm7WOKIc/SiY74yycRnjVa6NZhCQpwEtc/+9R4eJ3m72PXZVPAy31+gWLidNHNSnoaAnEDAe8lcY0nPB9YN9b1pLcNPDsGfWsmU7muf/jL9F4FHaOOOsROzZG5TmS5jZEvy14OGJySBjH2YCsojsxF9cVMyLLfVK6kW26mJcKTIUJWej0Avcoqe6lMnoGRcSPWUO1U6FFeOwa3w72k6pgNxf7LlsVtYXaGH9xaPgG10IHJTGyqezdjfhV0Pm+twVtf3JT5SXsUN7Ya7uTPwJif93Fw1WAtDUZByUBMM/gAOX3VEAjZ+6pA+l8MN3+mpwXdwMwCSnSBOIJjw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PXp8NrG71WdXvHyJiseIZqZlZF++FeRXuH8CJyDz9/JE2UZL/TLN8iiH5XZJiAIu86WKguhO7hEkZkLUtKk1WBqUaP5nNR8BbN2e7tPANHdS40/zeX9RSJiGq5VSkpUpkAhFXMhKLz+dr0rxgKs6jdyxw7BDjROgr8u3HfnTa6zZr22lGAPIKhQ4/lOqfb9Uu9lFCruPDAQDrBqNuqnGgUKg78EUwXnccUMITF0eFbdvX+uB0D9k1G2JHgR7gI9f6p6Y8Sidt8cxunf1EH1heZrU6X+Z2tRwVlJ2921wZYWwa4eIMaI4LmflhCa8Vi3QnHjTXm0AWN0LdDxxITHeLA==
  • Cc: <sstabellini@xxxxxxxxxx>, <stefano.stabellini@xxxxxxx>, <julien@xxxxxxx>, <Volodymyr_Babchuk@xxxxxxxx>, <bertrand.marquis@xxxxxxx>, <andrew.cooper3@xxxxxxxxxx>, <george.dunlap@xxxxxxxxxx>, <jbeulich@xxxxxxxx>, <wl@xxxxxxx>, <rahul.singh@xxxxxxx>, <michal.orzel@xxxxxxx>, "Ayan Kumar Halder" <ayan.kumar.halder@xxxxxxx>
  • Delivery-date: Thu, 18 May 2023 14:39:44 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

Hi All,

Please have a look at 
https://lists.xenproject.org/archives/html/xen-devel/2022-11/msg01465.html
for the context.

The benefits of using 32 bit physical addresses are as follows :-

1. It helps to use Xen on platforms (for eg R52) which supports 32-bit
physical addresses and has no support for large physical address extension.
On 32-bit MPU systems which supports flat-mapping (for eg R52), it helps
to translate 32 bit VA into 32 bit PA.

2. It also helps in code optimization when the underlying platform does not
use large physical address extension.

The following points are to be noted :-
1. Device tree always use uint64_t for address and size. The caller needs to
translate between uint64_t and unsigned long (when 32 bit physical addressing 
is used).
2. Currently, we have enabled this option for Arm_32 as the MMU for Arm_64
uses 48-bit physical addressing.


A note for the Xen committers/reviewers :-

The following patches are ready to be committed (1..5). They have been reviewed
by atleast 2 people (out of which atleast one is mantainer).
  xen/arm: domain_build: Track unallocated pages using the frame number
  xen/arm: Typecast the DT values into paddr_t
  xen/arm: Introduce a wrapper for dt_device_get_address() to handle
    paddr_t
  xen/arm: smmu: Use writeq_relaxed_non_atomic() for writing to
    SMMU_CBn_TTBR0
  xen/arm: domain_build: Check if the address fits the range of physical
    address

Out of the remaining patches, the following is the status :-
  xen: dt: Replace u64 with uint64_t as the callback function parameters
    for dt_for_each_range() (Reviewed)
  xen/arm: p2m: Use the pa_range_info table to support ARM_32 and ARM_64
  xen/arm: Introduce choice to enable 64/32 bit physical addressing
  xen/arm: guest_walk: LPAE specific bits should be enclosed within
    "ifndef CONFIG_PHYS_ADDR_T_32"  (Acked)
  xen/arm: Restrict zeroeth_table_offset for ARM_64 (Reviewed and Ack)
  xen/arm: p2m: Enable support for 32bit IPA for ARM_32

I have reordered the patches such that the initial five patches can be
committed without any rebase.

Changes from :

v1 - 1. Reordered the patches such that the first three patches fixes issues in
the existing codebase. These can be applied independent of the remaining patches
in this serie.

2. Dropped translate_dt_address_size() for the address/size translation between
paddr_t and u64 (as parsed from the device tree). Also, dropped the check for
truncation (while converting u64 to paddr_t).
Instead now we have modified device_tree_get_reg() and typecasted the return for
dt_read_number(), to obtain paddr_t. Also, introduced wrappers for
fdt_get_mem_rsv() and dt_device_get_address() for the same purpose. These can be
found in patch 4/11 and patch 6/11.

3. Split "Other adaptations required to support 32bit paddr" into the following
individual patches for each adaptation :
  xen/arm: smmu: Use writeq_relaxed_non_atomic() for writing to
    SMMU_CBn_TTBR0
  xen/arm: guest_walk: LPAE specific bits should be enclosed within
    "ifndef CONFIG_ARM_PA_32"

4. Introduced "xen/arm: p2m: Enable support for 32bit IPA".

v2 - 1. Dropped patches 1/11, 2/11 and 3/11 from the v2 as it has already been
committed (except 2/11 - "[XEN v5] xen/arm: Use the correct format specifier"
which is waiting to be committed).

2. Introduced a new patch "xen/drivers: ns16550: Use paddr_t for 
io_base/io_size".

v3 - 1. Combined the patches from 
https://lists.xenproject.org/archives/html/xen-devel/2023-02/msg00656.html in 
this series.

v4 - 1. Dropped "xen/drivers: ns16550: Use paddr_t for io_base/io_size" from 
the patch series.

2. Introduced "xen/arm: domain_build: Check if the address fits the range of 
physical address".

3. "xen/arm: Use the correct format specifier" has been committed in v4.

v5 - 1. Based on the comments on "[XEN v5 08/10] xen/arm: domain_build: Check 
if the address fits the range of physical address",
the patch has been modified and split into the following :-

a.  xen: dt: Replace u64 with uint64_t as the callback function parameters
    for dt_for_each_range()
b.  xen/arm: pci: Use 'uint64_t' as the datatype for the function
    parameters.
c.  xen/arm: domain_build: Check if the address fits the range of physical
    address

v6 - 1. Reordered the patches such that only the patches which are dependent on
"CONFIG_PHYS_ADDR_T_32" appear after the Kconfig option is introduced.

Ayan Kumar Halder (11):
  xen/arm: domain_build: Track unallocated pages using the frame number
  xen/arm: Typecast the DT values into paddr_t
  xen/arm: Introduce a wrapper for dt_device_get_address() to handle
    paddr_t
  xen/arm: smmu: Use writeq_relaxed_non_atomic() for writing to
    SMMU_CBn_TTBR0
  xen/arm: domain_build: Check if the address fits the range of physical
    address
  xen: dt: Replace u64 with uint64_t as the callback function parameters
    for dt_for_each_range()
  xen/arm: p2m: Use the pa_range_info table to support ARM_32 and ARM_64
  xen/arm: Introduce choice to enable 64/32 bit physical addressing
  xen/arm: guest_walk: LPAE specific bits should be enclosed within
    "ifndef CONFIG_PHYS_ADDR_T_32"
  xen/arm: Restrict zeroeth_table_offset for ARM_64
  xen/arm: p2m: Enable support for 32bit IPA for ARM_32

 xen/arch/Kconfig                           |  3 ++
 xen/arch/arm/Kconfig                       | 32 ++++++++++++
 xen/arch/arm/bootfdt.c                     | 46 +++++++++++++----
 xen/arch/arm/domain_build.c                | 57 +++++++++++++++-------
 xen/arch/arm/gic-v2.c                      | 10 ++--
 xen/arch/arm/gic-v3-its.c                  |  4 +-
 xen/arch/arm/gic-v3.c                      | 10 ++--
 xen/arch/arm/guest_walk.c                  |  2 +
 xen/arch/arm/include/asm/lpae.h            |  4 ++
 xen/arch/arm/include/asm/p2m.h             |  6 ---
 xen/arch/arm/include/asm/page-bits.h       |  6 +--
 xen/arch/arm/include/asm/setup.h           |  6 +--
 xen/arch/arm/include/asm/types.h           | 13 +++++
 xen/arch/arm/mm.c                          | 12 ++---
 xen/arch/arm/p2m.c                         | 38 ++++++++++-----
 xen/arch/arm/pci/pci-host-common.c         |  8 +--
 xen/arch/arm/platforms/brcm-raspberry-pi.c |  2 +-
 xen/arch/arm/platforms/brcm.c              |  6 +--
 xen/arch/arm/platforms/exynos5.c           | 32 ++++++------
 xen/arch/arm/platforms/sunxi.c             |  2 +-
 xen/arch/arm/platforms/xgene-storm.c       |  2 +-
 xen/arch/arm/setup.c                       | 14 +++---
 xen/arch/arm/smpboot.c                     |  2 +-
 xen/common/device_tree.c                   | 40 ++++++++++++++-
 xen/drivers/char/cadence-uart.c            |  4 +-
 xen/drivers/char/exynos4210-uart.c         |  4 +-
 xen/drivers/char/imx-lpuart.c              |  4 +-
 xen/drivers/char/meson-uart.c              |  4 +-
 xen/drivers/char/mvebu-uart.c              |  4 +-
 xen/drivers/char/omap-uart.c               |  4 +-
 xen/drivers/char/pl011.c                   |  6 +--
 xen/drivers/char/scif-uart.c               |  4 +-
 xen/drivers/passthrough/arm/ipmmu-vmsa.c   |  8 +--
 xen/drivers/passthrough/arm/smmu-v3.c      |  2 +-
 xen/drivers/passthrough/arm/smmu.c         | 23 ++++-----
 xen/include/xen/device_tree.h              | 42 +++++++++++++++-
 xen/include/xen/libfdt/libfdt-xen.h        | 55 +++++++++++++++++++++
 37 files changed, 380 insertions(+), 141 deletions(-)
 create mode 100644 xen/include/xen/libfdt/libfdt-xen.h

-- 
2.17.1




 


Rackspace

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