1
0
mirror of https://git.yoctoproject.org/meta-arm synced 2026-01-11 15:00:39 +00:00

arm-bsp/optee-os:corstone1000: Add Cortex-A320 support

Update the OP-TEE OS build logic to detect `MACHINE_FEATURES` and
append the appropriate `arm64-platform-cpuarch` value to
`EXTRA_OEMAKE`, instead of hard-coding `cortex-a35`.

This change ensures that when `MACHINE_FEATURES` includes
`cortexa320`, the OP-TEE build receives the matching `core-arch` flag,
while maintaining `cortex-a35` as the default.

The new Corstone-1000 variant with Cortex-A320 replaces the original
GIC-400 (v2) interrupt controller with a GIC-600, which is
architecturally compliant with GICv3. Since OP-TEE already provides
a generic GICv3 driver, only minimal platform changes are needed
to expose the updated register map and initialize the GICv3 interface.

Signed-off-by: Hugues KAMBA MPIANA <hugues.kambampiana@arm.com>
Signed-off-by: Harsimran Singh Tungal <harsimransingh.tungal@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
This commit is contained in:
Hugues KAMBA MPIANA
2025-12-04 15:19:49 +00:00
committed by Jon Mason
parent b6b1a81f5e
commit 0faf5c4d37
2 changed files with 152 additions and 0 deletions

View File

@@ -0,0 +1,143 @@
From 4a8fa965a39879d98eac1626c4c756043985726d Mon Sep 17 00:00:00 2001
From: Hugues KAMBA MPIANA <hugues.kambampiana@arm.com>
Date: Tue, 11 Nov 2025 08:09:40 +0000
Subject: [PATCH] plat-corstone1000: Add Cortex-A320 support
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Convert arm64-platform-cpuarch from a hard-coded cortex-a35 into a “?=”
(default) assignment so users can override it (for example to
cortex-a320) via the make command line.
The Cortex-A320 core is not yet supported via -mcpu=cortex-a320.
When arm64-platform-cpuarch is set to cortex-a320, switch to
-march=armv9.2-a.
The new Corstone-1000 variant with Cortex-A320 replaces the original
GIC-400 (v2) interrupt controller with a GIC-600, which is
architecturally compliant with GICv3. Since OP-TEE already provides
a generic GICv3 driver, only minimal platform changes are needed
to expose the updated register map and initialize the GICv3 interface.
**Changes introduced**
* When `cortex-a320` is selected:
* Force `CFG_ARM_GICV3=y`.
* Introduce `CFG_CORSTONE1000_CORTEX_A320` to guard
Cortex-A320specific code.
* Map the Redistributor region (`GICR_BASE`).
* Use `gic_init_v3(…)` instead of the v2 helper for Cortex-A320 builds.
* Add `GICR_BASE`, `GIC_REDIST_REG_SIZE`, and related offsets.
* Retain legacy `GICC_BASE` definitions under the GICv2 path so that
the Cortex-A35 + GIC-400 variant continues to build unchanged.
Upstream-Status: Submitted (https://github.com/OP-TEE/optee_os/pull/7627)
Signed-off-by: Hugues KAMBA MPIANA <hugues.kambampiana@arm.com>
Signed-off-by: Harsimran Singh Tungal <harsimransingh.tungal@arm.com>
---
core/arch/arm/plat-corstone1000/conf.mk | 11 ++++++++++-
core/arch/arm/plat-corstone1000/main.c | 11 ++++++++++-
.../arm/plat-corstone1000/platform_config.h | 19 +++++++++++++++++--
3 files changed, 37 insertions(+), 4 deletions(-)
diff --git a/core/arch/arm/plat-corstone1000/conf.mk b/core/arch/arm/plat-corstone1000/conf.mk
index 86b8d8480..147b6972f 100644
--- a/core/arch/arm/plat-corstone1000/conf.mk
+++ b/core/arch/arm/plat-corstone1000/conf.mk
@@ -23,9 +23,18 @@ $(call force,CFG_PL011,y)
$(call force,CFG_SECURE_TIME_SOURCE_CNTPCT,y)
$(call force,CFG_ARM64_core,y)
-arm64-platform-cpuarch := cortex-a35
+# Default CPU core for Corstone1000 platform; override for other cores (e.g. cortex-a320)
+arm64-platform-cpuarch ?= cortex-a35
+
+ifeq ($(arm64-platform-cpuarch),cortex-a320)
+arm64-platform-cflags += -march=armv9.2-a
+arm64-platform-aflags += -march=armv9.2-a
+$(call force,CFG_ARM_GICV3,y)
+$(call force,CFG_CORSTONE1000_CORTEX_A320,y)
+else
arm64-platform-cflags += -mcpu=$(arm64-platform-cpuarch)
arm64-platform-aflags += -mcpu=$(arm64-platform-cpuarch)
+endif
CFG_WITH_STATS ?= y
CFG_WITH_ARM_TRUSTED_FW ?= y
diff --git a/core/arch/arm/plat-corstone1000/main.c b/core/arch/arm/plat-corstone1000/main.c
index 9e1482a7b..fd2dd888c 100644
--- a/core/arch/arm/plat-corstone1000/main.c
+++ b/core/arch/arm/plat-corstone1000/main.c
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: BSD-2-Clause
/*
- * Copyright (c) 2022, Arm Limited
+ * Copyright (c) 2022, 2025, Arm Limited
*/
#include <console.h>
@@ -18,11 +18,20 @@ register_ddr(DRAM0_BASE, DRAM0_SIZE);
register_phys_mem_pgdir(MEM_AREA_IO_SEC, CONSOLE_UART_BASE, PL011_REG_SIZE);
register_phys_mem_pgdir(MEM_AREA_IO_SEC, GICD_BASE, GIC_DIST_REG_SIZE);
+
+#if defined(CFG_CORSTONE1000_CORTEX_A320) && defined(CFG_ARM_GICV3)
+register_phys_mem_pgdir(MEM_AREA_IO_SEC, GICR_BASE, GIC_REDIST_REG_SIZE);
+#else
register_phys_mem_pgdir(MEM_AREA_IO_SEC, GICC_BASE, GIC_CPU_REG_SIZE);
+#endif
void boot_primary_init_intc(void)
{
+#if defined(CFG_CORSTONE1000_CORTEX_A320) && defined(CFG_ARM_GICV3)
+ gic_init_v3(0, GICD_BASE, GICR_BASE);
+#else
gic_init(GICC_BASE, GICD_BASE);
+#endif
}
void boot_secondary_init_intc(void)
diff --git a/core/arch/arm/plat-corstone1000/platform_config.h b/core/arch/arm/plat-corstone1000/platform_config.h
index f59c93a14..600b2c02e 100644
--- a/core/arch/arm/plat-corstone1000/platform_config.h
+++ b/core/arch/arm/plat-corstone1000/platform_config.h
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
- * Copyright (c) 2022, Arm Limited
+ * Copyright (c) 2022, 2025 Arm Limited
*/
#ifndef PLATFORM_CONFIG_H
@@ -20,11 +20,26 @@
#define DRAM0_BASE 0x80000000
#define DRAM0_SIZE CFG_DDR_SIZE
+#if defined(CFG_CORSTONE1000_CORTEX_A320) && defined(CFG_ARM_GICV3)
+#define GICR_SIZE_PER_CORE 0x20000
+#define GIC_REDIST_REG_SIZE (GICR_SIZE_PER_CORE * CFG_TEE_CORE_NB_CORE)
+#endif
+
+#if defined(CFG_CORSTONE1000_CORTEX_A320) && defined(CFG_ARM_GICV3)
+/* Corstone-1000 with Cortex-A320 uses GIC-v3 which supports GICR */
+#define GICD_OFFSET 0x00000
+#define GICR_OFFSET 0x40000
+#else
#define GICD_OFFSET 0x10000
#define GICC_OFFSET 0x2F000
+#endif
-#define GICD_BASE (GIC_BASE + GICD_OFFSET)
+#if defined(CFG_CORSTONE1000_CORTEX_A320) && defined(CFG_ARM_GICV3)
+#define GICR_BASE (GIC_BASE + GICR_OFFSET)
+#else
#define GICC_BASE (GIC_BASE + GICC_OFFSET)
+#endif
+#define GICD_BASE (GIC_BASE + GICD_OFFSET)
#define UART_BAUDRATE 115200
#define CONSOLE_BAUDRATE UART_BAUDRATE
--
2.50.1

View File

@@ -1,5 +1,9 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/files/optee-os/corstone1000:"
SRC_URI:append = " \
file://0001-plat-corstone1000-Add-Cortex-A320-support.patch \
"
COMPATIBLE_MACHINE = "corstone1000"
OPTEEMACHINE = "corstone1000"
@@ -14,3 +18,8 @@ EXTRA_OEMAKE += " CFG_CORE_SEL1_SPMC=y CFG_CORE_FFA=y"
EXTRA_OEMAKE += " CFG_WITH_SP=y"
EXTRA_OEMAKE:append:corstone1000-fvp = "${@bb.utils.contains('MACHINE_FEATURES', 'corstone1000_fvp_smp', ' CFG_TEE_CORE_NB_CORE=4', '', d)}"
# Override OP-TEE OS ARM64 core architecture based on MACHINE_FEATURES
CPUARCH = "cortex-a35"
CPUARCH:cortexa320 = "cortex-a320"
EXTRA_OEMAKE:append:corstone1000 = " arm64-platform-cpuarch=${CPUARCH}"