vexpress64: Add ARMv8R-64 board variant
authorPeter Hoyes <Peter.Hoyes@arm.com>
Fri, 4 Mar 2022 16:30:18 +0000 (16:30 +0000)
committerTom Rini <trini@konsulko.com>
Fri, 1 Apr 2022 19:03:03 +0000 (15:03 -0400)
The ARMv8-R64 architecture introduces optional VMSA (paging based MMU)
support in the EL1/0 translation regime, which makes that part mostly
compatible to ARMv8-A.

Add a new board variant to describe the "BASE-R64" FVP model, which
inherits a lot from the existing v8-A FVP support. One major difference
is that the memory map in "inverted": DRAM starts at 0x0, MMIO is at
2GB [1].

 * Create new TARGET_VEXPRESS64_BASER_FVP target, sharing most of the
   exising configuration.
 * Implement inverted memory map in vexpress_aemv8.h
 * Create vexpress_aemv8r defconfig
 * Provide an MMU memory map for the BASER_FVP
 * Update vexpress64 documentation

At the moment the boot-wrapper is the only supported secure firmware. As
there is no official DT for the board yet, we rely on it being supplied
by the boot-wrapper into U-Boot, so use OF_HAS_PRIOR_STAGE, and go with
a dummy DT for now.

[1] https://developer.arm.com/documentation/100964/1114/Base-Platform/Base---memory/BaseR-Platform-memory-map

Signed-off-by: Peter Hoyes <Peter.Hoyes@arm.com>
[Andre: rebase and add Linux kernel header]
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
[trini: Add MAINTAINERS entry for Peter]

arch/arm/dts/Makefile
arch/arm/dts/arm_fvp.dts [new file with mode: 0644]
board/armltd/vexpress64/Kconfig
board/armltd/vexpress64/MAINTAINERS
configs/vexpress_aemv8r_defconfig [new file with mode: 0644]
doc/arch/arm64.rst
doc/board/armltd/vexpress64.rst
include/configs/vexpress_aemv8.h

index fe726d422be6e9d1b63b29fff1483ccd57320dab..99dc7bc777310e317ad2125702f374a1aeb307ec 100644 (file)
@@ -1186,6 +1186,7 @@ dtb-$(CONFIG_TARGET_MX53PPD) += imx53-ppd.dtb
 # Kconfig option to build all of these. See examples above.
 dtb-$(CONFIG_TARGET_VEXPRESS_CA9X4) += vexpress-v2p-ca9.dtb
 dtb-$(CONFIG_TARGET_VEXPRESS64_BASE_FVP) += fvp-base-revc.dtb
+dtb-$(CONFIG_TARGET_VEXPRESS64_BASER_FVP) += arm_fvp.dtb
 dtb-$(CONFIG_TARGET_VEXPRESS64_JUNO) += juno-r2.dtb
 
 dtb-$(CONFIG_TARGET_TOTAL_COMPUTE) += total_compute.dtb
diff --git a/arch/arm/dts/arm_fvp.dts b/arch/arm/dts/arm_fvp.dts
new file mode 100644 (file)
index 0000000..3a4ad5d
--- /dev/null
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: GPL-2.0+ OR MIT
+/*
+ * Empty device tree for the Arm Ltd FVP platform model
+
+ * Copyright 2022 Arm Ltd.
+ */
+
+/dts-v1/;
+
+/ {
+};
index 512bbbe72e60748f8b8b5a3fac853e2d6e2c63f7..a0314c65379fe24d1600d855489b87c71d9ed5ee 100644 (file)
@@ -9,19 +9,28 @@ config SYS_VENDOR
 config SYS_CONFIG_NAME
        default "vexpress_aemv8"
 
-choice
-       prompt "VExpress64 board variant"
-
-config TARGET_VEXPRESS64_BASE_FVP
-       bool "Support Versatile Express ARMv8a FVP BASE model"
+config VEXPRESS64_BASE_MODEL
+       bool
        select SEMIHOSTING
        select VIRTIO_BLK if VIRTIO_MMIO
        select VIRTIO_NET if VIRTIO_MMIO
        select DM_ETH if VIRTIO_NET
        select LINUX_KERNEL_IMAGE_HEADER
        select POSITION_INDEPENDENT
+
+choice
+       prompt "VExpress64 board variant"
+
+config TARGET_VEXPRESS64_BASE_FVP
+       bool "Support Versatile Express ARMv8a FVP BASE model"
+       select VEXPRESS64_BASE_MODEL
        select OF_BOARD
 
+config TARGET_VEXPRESS64_BASER_FVP
+       bool "Support Versatile Express ARMv8r64 FVP BASE model"
+       select VEXPRESS64_BASE_MODEL
+       imply OF_HAS_PRIOR_STAGE
+
 config TARGET_VEXPRESS64_JUNO
        bool "Support Versatile Express Juno Development Platform"
        select PCIE_ECAM_GENERIC if PCI
@@ -50,6 +59,7 @@ config LNX_KRNL_IMG_TEXT_OFFSET_BASE
 config SYS_TEXT_BASE
        default 0x88000000 if TARGET_VEXPRESS64_BASE_FVP
        default 0xe0000000 if TARGET_VEXPRESS64_JUNO
+       default 0x00001000 if TARGET_VEXPRESS64_BASER_FVP
 
 config SYS_MALLOC_LEN
        default 0x810000 if TARGET_VEXPRESS64_JUNO
@@ -59,11 +69,13 @@ config SYS_MALLOC_F_LEN
        default 0x2000
 
 config SYS_LOAD_ADDR
+       default 0x10000000 if TARGET_VEXPRESS64_BASER_FVP
        default 0x90000000
 
 config ENV_ADDR
        default 0x0BFC0000 if TARGET_VEXPRESS64_JUNO
        default 0x0FFC0000 if TARGET_VEXPRESS64_BASE_FVP
+       default 0x8FFC0000 if TARGET_VEXPRESS64_BASER_FVP
 
 config ENV_SIZE
        default 0x10000 if TARGET_VEXPRESS64_JUNO
index 0ba044d7ff8711816df1ba8028de0df3aacc41bb..b3ecc9bba0362a5089b4ccf774259a83aba4c321 100644 (file)
@@ -14,3 +14,8 @@ JUNO DEVELOPMENT PLATFORM BOARD
 M:     Linus Walleij <linus.walleij@linaro.org>
 S:     Maintained
 F:     configs/vexpress_aemv8a_juno_defconfig
+
+VEXPRESS64 ARMV8R-64
+M:     Peter Hoyes <Peter.Hoyes@arm.com>
+S:     Maintained
+F:     configs/vexpress_aemv8r_defconfig
diff --git a/configs/vexpress_aemv8r_defconfig b/configs/vexpress_aemv8r_defconfig
new file mode 100644 (file)
index 0000000..612797e
--- /dev/null
@@ -0,0 +1,14 @@
+CONFIG_ARM=y
+CONFIG_ARCH_VEXPRESS64=y
+CONFIG_NR_DRAM_BANKS=2
+CONFIG_DEFAULT_DEVICE_TREE="arm_fvp"
+CONFIG_IDENT_STRING=" vexpress_aemv8r64"
+CONFIG_TARGET_VEXPRESS64_BASER_FVP=y
+CONFIG_REMAKE_ELF=y
+CONFIG_BOOTDELAY=3
+CONFIG_USE_BOOTARGS=y
+CONFIG_BOOTARGS="console=ttyAMA0 earlycon=pl011,0x9c090000 rootfstype=ext4 root=/dev/vda2 rw rootwait"
+# CONFIG_DISPLAY_CPUINFO is not set
+CONFIG_SYS_PROMPT="VExpress64# "
+# CONFIG_MMC is not set
+CONFIG_VIRTIO_MMIO=y
index 80498f6f6b8e4fe8e9b71ce73df2a9f54c4930b9..7c0713504c479bbc78d315162899b3b098d48c0b 100644 (file)
@@ -18,7 +18,8 @@ Notes
    classical firmware (like initial hardware setup, CPU errata workarounds
    or SMP bringup). U-Boot can be entered in EL2 when its main purpose is
    that of a boot loader. It can drop to lower exception levels before
-   entering the OS.
+   entering the OS. For ARMv8-R it is recommened to enter at S-EL1, as for this
+   architecture there is no S-EL3.
 
 2. U-Boot for arm64 is compiled with AArch64-gcc. AArch64-gcc
    use rela relocation format, a tool(tools/relocate-rela) by Scott Wood
index d87b1c38f5b27ec79f1be4addafc0a0155accfbe..a7f771d2667ff8296c7ef382c56ed2601cacde67 100644 (file)
@@ -6,6 +6,7 @@ Arm Versatile Express
 The vexpress_* board configuration supports the following platforms:
 
  * FVP_Base_RevC-2xAEMvA
+ * FVP_BaseR_AEMv8R
  * Juno development board
 
 Fixed Virtual Platforms
index e0f9bbeb16cb01127af2af3edbabc24ead3eaf8d..efffea97c2e9889026878aa4b56b1870ec1e3436 100644 (file)
 #define CONFIG_SYS_BOOTM_LEN (64 << 20)      /* Increase max gunzip size */
 
 /* CS register bases for the original memory map. */
+#ifdef CONFIG_TARGET_VEXPRESS64_BASER_FVP
+#define V2M_DRAM_BASE                  0x00000000
+#define V2M_PA_BASE                    0x80000000
+#else
 #define V2M_DRAM_BASE                  0x80000000
 #define V2M_PA_BASE                    0x00000000
+#endif
 
 #define V2M_PA_CS0                     (V2M_PA_BASE + 0x00000000)
 #define V2M_PA_CS1                     (V2M_PA_BASE + 0x14000000)
                "boot_name=boot.img\0"                                  \
                "boot_addr_r=" __stringify(VEXPRESS_BOOT_ADDR) "\0"
 
+#elif CONFIG_TARGET_VEXPRESS64_BASER_FVP               /* ARMv8-R base model */
+
+#define BOOT_TARGET_DEVICES(func)      \
+       func(MEM, mem, na)              \
+       FUNC_VIRTIO(func)               \
+       func(PXE, pxe, na)              \
+       func(DHCP, dhcp, na)
+
+#define VEXPRESS_KERNEL_ADDR           0x00200000
+#define VEXPRESS_PXEFILE_ADDR          0x0fb00000
+#define VEXPRESS_FDT_ADDR              0x0fc00000
+#define VEXPRESS_SCRIPT_ADDR           0x0fd00000
+#define VEXPRESS_RAMDISK_ADDR          0x0fe00000
+
+#define EXTRA_ENV_NAMES                                                        \
+                                       "kernel_name=Image\0"           \
+                                       "ramdisk_name=ramdisk.img\0"    \
+                                       "fdtfile=board.dtb\0"
 #endif
 
 #include <config_distro_bootcmd.h>