From patchwork Thu Dec 4 15:19:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Hugues KAMBA MPIANA X-Patchwork-Id: 75899 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 54CA0D206B5 for ; Thu, 4 Dec 2025 15:25:27 +0000 (UTC) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.46553.1764861919421893607 for ; Thu, 04 Dec 2025 07:25:19 -0800 Authentication-Results: mx.groups.io; dkim=none (message not signed); spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: hugues.kambampiana@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id A53BA339; Thu, 4 Dec 2025 07:25:11 -0800 (PST) Received: from LXKV206JHX.arm.com (unknown [10.57.43.122]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 60E723F59E; Thu, 4 Dec 2025 07:25:18 -0800 (PST) From: Hugues KAMBA MPIANA To: meta-arm@lists.yoctoproject.org Cc: Hugues KAMBA MPIANA Subject: [PATCH 6/6] arm-bsp/docs:corstone1000: Add Corstone-1000 with Cortex-A320 Date: Thu, 4 Dec 2025 15:19:53 +0000 Message-ID: <20251204152500.78818-7-hugues.kambampiana@arm.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251204152500.78818-1-hugues.kambampiana@arm.com> References: <20251204152500.78818-1-hugues.kambampiana@arm.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Thu, 04 Dec 2025 15:25:27 -0000 X-Groupsio-URL: https://lists.yoctoproject.org/g/meta-arm/message/6785 - Document Corstone‑1000 platform architecture based on the Cortex‑A320 core - Add test specification and guide for Corstone‑1000 with Cortex‑A320 Signed-off-by: Hugues KAMBA MPIANA --- .../images/CorstoneA320Subsystems.png | Bin 0 -> 55372 bytes .../corstone1000/software-architecture.rst | 13 ++ .../documentation/corstone1000/user-guide.rst | 126 ++++++++++++++++-- 3 files changed, 129 insertions(+), 10 deletions(-) create mode 100644 meta-arm-bsp/documentation/corstone1000/images/CorstoneA320Subsystems.png diff --git a/meta-arm-bsp/documentation/corstone1000/images/CorstoneA320Subsystems.png b/meta-arm-bsp/documentation/corstone1000/images/CorstoneA320Subsystems.png new file mode 100644 index 0000000000000000000000000000000000000000..d3022a16379ce149c19d63b6a29c34a036fb159f GIT binary patch literal 55372 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 literal 0 HcmV?d00001 diff --git a/meta-arm-bsp/documentation/corstone1000/software-architecture.rst b/meta-arm-bsp/documentation/corstone1000/software-architecture.rst index c5bfea33..e4f407d8 100644 --- a/meta-arm-bsp/documentation/corstone1000/software-architecture.rst +++ b/meta-arm-bsp/documentation/corstone1000/software-architecture.rst @@ -116,6 +116,19 @@ The Corstone-1000 architecture is designed to cover a range of `Power, Performance, and Area (PPA) `__ applications, and enable extension for use-case specific applications, for example, sensors, cloud connectivity, and edge computing. +************************************** +Corstone-1000 with Cortex-A320 Variant +************************************** + +This variant of the Corstone-1000 platform replaces the Host System's Cortex-A35 processor +with a Cortex-A320. In this configuration, the optional External System (previously a Cortex-M3) +is replaced by an Arm Ethos-U85 Neural Processing Unit (NPU). +The Ethos-U85 runs in the direct drive configuration, where the Host System is responsible for managing the NPU directly. + +.. image:: images/CorstoneA320Subsystems.png + :width: 720 + :alt: CorstoneA320Subsystems + ***************** Secure Boot Chain ***************** diff --git a/meta-arm-bsp/documentation/corstone1000/user-guide.rst b/meta-arm-bsp/documentation/corstone1000/user-guide.rst index a6834a34..e22406a0 100644 --- a/meta-arm-bsp/documentation/corstone1000/user-guide.rst +++ b/meta-arm-bsp/documentation/corstone1000/user-guide.rst @@ -223,7 +223,7 @@ Build .. code-block:: console cd ${WORKSPACE} - git clone https://git.yoctoproject.org/git/meta-arm -b CORSTONE1000-2025.05 + git clone https://git.yoctoproject.org/git/meta-arm -b CORSTONE1000-2025.12 #. Build a Corstone-1000 image: @@ -243,13 +243,28 @@ Build .. warning:: + **The External System Processor is not available on the Corstone-1000 with Cortex-A320 FVP.** + Access to the External System Processor is disabled by default. + To build the Corstone-1000 image with External System Processor enabled, run: .. code-block:: console kas build meta-arm/kas/corstone1000-${TARGET}.yml:meta-arm/ci/debug.yml:meta-arm/kas/corstone1000-extsys.yml + .. warning:: + + **The Ethos-U85 Neural Processing Unit (NPU) is only available on + the Corstone-1000 with Cortex-A320 FVP.** + + To build the Corstone-1000 image with the Ethos-U85 NPU enabled, run: + + .. code-block:: console + + kas build meta-arm/kas/corstone1000-fvp.yml:meta-arm/ci/debug.yml:meta-arm/kas/corstone1000-a320.yml + + A clean build takes a significant amount of time given that all of the development machine utilities are also built along with the target images. Those development machine utilities include executables (Python, CMake, etc.) and the required toolchains. @@ -442,9 +457,14 @@ Corstone-1000 FVP software image. A Yocto recipe is provided to download the latest supported FVP version. The recipe is located at ``${WORKSPACE}/meta-arm/meta-arm/recipes-devtools/fvp/fvp-corstone1000.bb``. +This recipe supports selecting different Corstone‑1000 FVP models via MACHINE_FEATURES: -The latest FVP version is ``11.23.25`` and is automatically downloaded and installed when using the -``runfvp`` command as detailed below. +- ``cortexa320`` use the Cortex-A320 Host Processor with Ethos U85 enabled FVP build +- (default) use the Cortex-A35 Host Processor with Cortex-M3 External System FVP build + +The latest FVP version is ``11.23.25`` for Corstone-1000 with Cortex-A35 and ``11.30.27`` for +Corstone-1000 with Cortex-A320, and each model is automatically downloaded and installed when using +the ``runfvp`` command as detailed below. .. note:: @@ -496,8 +516,8 @@ Tests Reports ------- -Reports for the tests conducted on the `Corstone-1000 software (CORSTONE1000-2025.05) `__ -release are available for reference `here `__. +Reports for the tests conducted on the `Corstone-1000 software (CORSTONE1000-2025.12) `__ +release are available for reference `here `__. .. _clean-secure-flash: @@ -516,7 +536,7 @@ Clean Secure Flash .. code-block:: console cd ${WORKSPACE} - git clone https://git.gitlab.arm.com/arm-reference-solutions/systemready-patch.git -b CORSTONE1000-2025.05 + git clone https://git.gitlab.arm.com/arm-reference-solutions/systemready-patch.git -b CORSTONE1000-2025.12 #. Copy the secure flash cleaning Git patch file to your copy of `meta-arm`. @@ -838,6 +858,33 @@ The results can be fetched from the `acs_results` folder in the ``BOOT`` partiti Capsule Update -------------- +.. warning:: + + The **Corstone-1000 with Cortex-A320 FVP** becomes unresponsive when the Linux kernel driver for the + Ethos-U85 NPU loads automatically after a software reboot. + This behavior results from a power reset control issue in the **Corstone-1000 with Cortex-A320 FVP** model. + To prevent the failure and complete the test successfully, + rebuild the **Corstone-1000 with Cortex-A320** firmware image using the following steps: + + + #. Clone the `systemready-patch` repository to your ``${WORKSPACE}``. + + .. code-block:: console + + cd ${WORKSPACE} + git clone https://git.gitlab.arm.com/arm-reference-solutions/systemready-patch.git \ + -b CORSTONE1000-2025.12 + + + #. Re-Build the **Corstone-1000 with Cortex-A320 FVP** software stack as follows: + + .. code-block:: console + + kas build meta-arm/kas/corstone1000-fvp.yml:meta-arm/ci/debug.yml:meta-arm/kas/corstone1000-a320.yml:\ + systemready-patch/embedded-a/corstone1000/disable_module_autoloading/disable_module_autoloading.yml + + + The following section describes the steps to update the firmware using Capsule Update as the Corstone-1000 supports UEFI. @@ -866,10 +913,10 @@ Generate Capsules `EDK II's `__ ``GenerateCapsule`` tool is used to generate capsules and is built automatically for the host machine during the firmware image building process. -The tool can be found in the ``${WORKSPACE}/build/tmp/sysroots-components/aarch64/edk2-basetools-native/usr/bin/edk2-BaseTools/BinWrappers/PosixLike/GenerateCapsule`` directory. +The tool can be found at ``${WORKSPACE}/build/tmp/sysroots-components/aarch64/edk2-basetools-native/usr/bin/edk2-BaseTools/BinWrappers/PosixLike/GenerateCapsule``. A JSON file containing metadata about the capsule payloads needs to be created using the script -found at ``${WORKSPACE}/meta-arm/scripts/generate_capsule_json_multiple.py``. +found at ``${WORKSPACE}/meta-arm/meta-arm/scripts/generate_capsule_json_multiple.py``. This JSON file is required by EDK II's ``GenerateCapsule`` tool to generate the capsule. The capsule's default metadata passed can be found in the ``${WORKSPACE}/meta-arm/meta-arm-bsp/recipes-bsp/images/corstone1000-flash-firmware-image.bb`` @@ -1712,7 +1759,7 @@ Generate Keys, Signed Image and Unsigned Image git clone https://gitlab.arm.com/arm-reference-solutions/systemready-patch \ - -b CORSTONE1000-2025.05 + -b CORSTONE1000-2025.12 #. Set the current working directory to build directory's subdirectory containing the software stack build images. @@ -2011,7 +2058,7 @@ Symmetric Multiprocessing .. warning:: - Symmetric multiprocessing (SMP) mode is only supported on FVP but is disabled by default. + Symmetric multiprocessing (SMP) mode is only supported on Corstone-1000 with Cortex-A35 FVP but is disabled by default. #. Build the software stack with SMP mode enabled: @@ -2035,6 +2082,65 @@ Symmetric Multiprocessing nproc 4 # number of processing units +Ethos-U85 NPU +------------- + +.. warning:: + + The Ethos-U85 NPU is only supported on Corstone-1000 with Cortex-A320 FVP. + + +#. Clone the `systemready-patch` repository to your ``${WORKSPACE}``. + + .. code-block:: console + + cd ${WORKSPACE} + git clone https://git.gitlab.arm.com/arm-reference-solutions/systemready-patch.git \ + -b CORSTONE1000-2025.12 + +#. Re-Build the Corstone-1000 with Cortex-A320 FVP software stack as follows: + + .. code-block:: console + + kas build meta-arm/kas/corstone1000-fvp.yml:meta-arm/ci/debug.yml:meta-arm/kas/corstone1000-a320.yml:\ + systemready-patch/embedded-a/corstone1000/ethos-u85_test/ethos-u85_test.yml + +#. Run the Corstone-1000 with Cortex-320 FVP: + + .. code-block:: console + + kas shell meta-arm/kas/corstone1000-fvp.yml:meta-arm/ci/debug.yml:meta-arm/kas/corstone1000-a320.yml:\ + systemready-patch/embedded-a/corstone1000/ethos-u85_test/ethos-u85_test.yml \ + -c "../meta-arm/scripts/runfvp" + +#. To verify you are running the Corstone-1000 with Cortex-A320, build and run the FVP and inspect the CPU model + reported in ``/proc/cpuinfo`` as shown below. Inside the FVP shell, confirm the core type: + + + .. code-block:: console + + grep -E 'CPU part|model name' /proc/cpuinfo + # Expect: CPU part : 0xd8f (which corresponds to Cortex-A320) + +#. Run the `delegate_runner` test application inside the FVP shell as follows: + + .. code-block:: console + + delegate_runner -l /usr/lib/libethosu_op_delegate.so \ + -n /usr/share/ethosu/mobilenet_v2_1.0_224_INT8_vela.tflite \ + -i /usr/share/ethosu/input_data0.bin \ + -o /usr/share/ethosu/actual_output_data0.bin + + The test completes in approximately one minute. + +#. Run the following command to compare the generated output binary with the expected output binary: + + .. code-block:: console + + cmp -s /usr/share/ethosu/expected_output_data0.bin /usr/share/ethosu/actual_output_data0.bin + + The two binary files should be identical. + Secure Debug ------------