Release notes - TC23.1
Contents
Release tag
The manifest tag for this release is TC23.1
.
Platform Support
This software release is tested on
TC3 Fixed Virtual Platform (FVP) version 11.26.16
.
Components
- The following is a summary of the key components of the release:
Board Support Package (BSP) build supporting Android, Buildroot and Debian distros;
Trusted firmware-A for secure boot;
U-Boot bootloader;
Hafnium for S-EL2 Secure Partition Manager core;
OP-TEE for Trusted Execution Environment (TEE) in Buildroot;
Trusted Services (Crypto and Internal Trusted Storage) in Buildroot;
Trusty for Trusted Execution Environment (TEE) with FF-A messaging in Android;
System Control Processor (SCP) firmware for programming the interconnect, power control, and so on;
Runtime Security Engine (RSE) - previously known as Runtime Security SubSystem (RSS) - firmware for providing hardware Root-of-Trust (RoT);
TensorFlow Lite Machine Learning.
Hardware Features
- This software release provides the following high-level hardware features:
Arm® Tower MCN and NCI Interconnect with Memory Tagging Unit (MTU) support driver in SCP firmware;
Arm® CoreLink™ GIC-700 Generic Interrupt Controller in Trusted Firmware-A;
Mali-G725 GPU;
Arm® Mali™-D71 Display Processor and virtual encoder support for display on Linux;
MHUv3 Driver for SCP and Application Processor (AP) communication;
UARTs, Timers, Flash, Clock drivers, CCSM (Clock Control State Machine);
PL180 MMC;
DynamIQ Shared Unit (DSU) with 8 cores (2x Cortex-X925 + 4x Cortex-A725 + 2x Cortex-A520 cores configuration);
Cortex®-M55-based Runtime Security Engine (RSE);
Cortex®-M85-based System Control Processor (SCP).
Software Features
Buildroot distribution support;
Debian 12 (aka Bookworm);
Android 14 and Android 13 support;
Android Common Kernel 6.1.25;
Android Kernel is built with Bazel (instead of Make) which is referred to Kleaf;
Android Hardware Rendering with Mali-G725 GPU - DDK r49p0_00eac0 (source code or prebuilt binaries);
Android Software rendering with DRM Hardware Composer offloading composition to Mali D71 DPU;
Arm implementation for Hardware Composer 3 is used for Android Hardware Rendering with Mali-G725 GPU - DDK r49p0_00eac0 (source code or prebuilt binaries);
Hardware Graphics Composer 3 Ranchu is used for Software Rendering (implementation is tweaked);
KVM default mode of operation is set to
protected
by default, thus effectively enabling pKVM on the system. This is a nVHE based mode with kernel running at EL1;Microdroid based pVM support in Android;
ADB connection from host machine to protected VM Microdroid;
GPU and DPU support for S1 and S2 translation squashed with SMMU-700;
Maximum Power Mitigation Mechanism (MPMM) support;
GPU Dynamic Voltage Frequency Scaling (DVFS)/Idle power states support;
Support for Memory System Resource Partitioning and Monitoring (MPAM) (see link);
Support for Energy Aware Scheduling (EAS) (see link);
Trusted Firmware-A v2.10;
Hafnium v2.10 as Secure Partition Manager (SPM) at S-EL2;
OP-TEE 4.2.0 as Secure Partition at S-EL1, managed by S-EL2 SPMC (Hafnium), support in Buildroot distribution. This includes OP-TEE client and OP-TEE test suite;
Trusty with FF-A messaging - FF-A v1.0;
Tower Interconnect PMU’s enabled for profiling;
Support for secure boot based on Trusted Boot Board Requirements (TBBR) specification (see link);
System Control Processor (SCP) firmware v2.14;
Runtime Security Engine (RSE) firmware v2.0.0;
U-Boot bootloader v2024.02;
Power management features: cpufreq and cpuidle;
System Control and Management Interface (SCMI) support;
Virtio to mount the Android image in the host machine as a storage device in the FVP;
Verified U-Boot for authenticating fit image (containing kernel + ramdisk) during Buildroot boot;
Android Verified Boot (AVB) for authenticating boot and system image during Android boot;
Arm FF-A driver and FF-A Transport support for OP-TEE driver in Android Common Kernel;
Trusted Services (Crypto and Internal Trusted Storage) running at S-EL0;
Trusted Services test suite added to Buildroot distribution;
PAC/BTI is enabled in Hafnium, OP-TEE and Trusted Services;
Tracing support, based on ETE and TRBE v1.1 in TF-A, kernel and
simpleperf
. Traces can be captured withsimpleperf
;DICE Protection Environment (DPE) support;
Full-HD (1920x1080-60fps) resolution support for use with the FVP model.
Tools Support
This software release extends docker support to Debian distro (making it supported to all TC build variants).
Optimizations
U-Boot boot time optimization
To speed up the boot process, you can interrupt the auto-boot process:
When the terminal displays
Hit any key to stop autoboot: X
, pressENTER
.At the resulting command prompt, type
boot
and pressENTER
. This continues the boot process. Although the configured delay is 1-3 seconds, it takes considerably longer (approximately 15 seconds) because of the time difference between the CPU frequency and the FVP operating frequency.
Limitations
Development Host OS Support
Ubuntu 22.04 is not supported in this release;
Known issues
Ray tracing is currently not supported by the GPU DDK (hardware rendering);
The Kernel Selftest sanity test reports a failure for the
check_ksm_options
test as illustrated on the following excerpt. This is expected as the KSM driver is not part of the TC3 kernel.(...) # selftests: arm64: check_ksm_options not ok 3 selftests: arm64: check_ksm_options # exit=1 (...)
When running the EAS for LISA, the test
TwoBigThreeSmall:test_task_placement
may fail with an output similar to the following:(...) TwoBigThreeSmall[board=tc]:test_task_placement UUID=17fc2798916b4b1f9dae399c20dd3e63 FAILED energy threshold: 2472495.7617728077 bogo-joules estimated energy: 2699550.767562539 bogo-joules noisiest task: comm: sshd duration (abs): 0.00029410398565232754 s duration (rel): 0.029381488120311203 % pid: 175 (...)
For Android builds which use the TAP network interface, the default browser available in Android (
webview_shell
) is not able to open HTTPS URLs. You can work around this limitation by getting the ARM64 specific Android Application Package (APK) package for other browsers (for example, Mozilla Firefox), installing it using Android Debug Bridge (ADB), and using it to browse HTTPS URLs;The Android PAUTH sanity test may sometimes report inconsistent failing test results (this behaviour is currently under investigation). If experiencing this situation, repeat the test a few times to validate the feature;
TensorFlow application (
benchmark_model
) needs to download extra dependencies during the build process, which may lead to a failure because of network related issues. If experiencing this issue, try to rebuild TensorFlow application alone a few times with./run_docker.sh ./build-ml-app.sh clean build deploy
to finish the build.The TC FVP model running Android may report a crash if the TensorFlow application
benchmark_model
is interrupted during execution. To prevent this situation, please wait until the TensorFlow application has finished executing.When running the GPU GLES Integration tests, one of the tests belonging to the
gles3_api_integration
set may fail with output similar to the following:(...) ======================================================= UTF: Running gles3_api_integration ======================================================= (...) Initializing: S:{gles3_api_integration} T:{afrc_sample [0x0006]} D:{0} System time: Fri Apr 5 15:54:57 2024 Running: S:{gles3_api_integration} T:{afrc_sample [0x0006]} D:{0} Fail: S:{gles3_api_integration} T:{afrc_sample [0x0006]} F:{ [0x00]} D:{294} - file!=((void*)0) fail [0x0!=0x0] (<unknown>) Terminating: S:{gles3_api_integration} T:{afrc_sample [0x0006]} D:{0} (...) ======================================================= UTF: Result Details ======================================================= (...) Info: S:{gles3_api_integration} T:{afrc_render [0x0005]} F:{ [0x00]} D:{9000} - ------------------------------------------------------- Fail: S:{gles3_api_integration} T:{afrc_sample [0x0006]} F:{ [0x00]} D:{294} - file!=((void*)0) fail [0x0!=0x0] (<unknown>) (...)
When running the GPU EGL Integration tests, some tests may fail, resulting in output similar to the following:
(...) ======================================================= UTF: Result Details ======================================================= (...) Fail: S:{egl_surface_suite} T:{surface_depth_readback_valid_swap [0x0015]} F:{ [0x00]} D:{11441} - Fail check_res != 0 fail (<unknown>) Fail: S:{egl_surface_suite} T:{surface_depth_readback_valid_swap [0x0015]} F:{ [0x00]} D:{21467} - Fail check_res != 0 fail (<unknown>) Fail: S:{egl_surface_suite} T:{surface_depth_readback_valid_swap [0x0015]} F:{ [0x00]} D:{31473} - Fail check_res != 0 fail (<unknown>) Fail: S:{egl_surface_suite} T:{surface_depth_readback_valid_swap [0x0015]} F:{ [0x00]} D:{41673} - Fail check_res != 0 fail (<unknown>) Fail: S:{egl_surface_suite} T:{surface_depth_readback_valid_swap [0x0015]} F:{ [0x00]} D:{51919} - Fail check_res != 0 fail (<unknown>) Fail: S:{egl_surface_suite} T:{surface_depth_readback_valid_swap [0x0015]} F:{ [0x00]} D:{62043} - Fail check_res != 0 fail (<unknown>) Fail: S:{egl_surface_suite} T:{surface_depth_readback_valid_swap [0x0015]} F:{ [0x00]} D:{72164} - Fail check_res != 0 fail (<unknown>) Fail: S:{egl_surface_suite} T:{surface_depth_readback_valid_swap [0x0015]} F:{ [0x00]} D:{82463} - Fail check_res != 0 fail (<unknown>) (...) Fail: S:{egl_surface_suite} T:{surface_color_readback_valid_msaa_swap [0x0017]} F:{ [0x00]} D:{11605} - Fail check_res != 0 fail (<unknown>) Fail: S:{egl_surface_suite} T:{surface_color_readback_valid_msaa_swap [0x0017]} F:{ [0x00]} D:{21859} - Fail check_res != 0 fail (<unknown>) Fail: S:{egl_surface_suite} T:{surface_color_readback_valid_msaa_swap [0x0017]} F:{ [0x00]} D:{32137} - Fail check_res != 0 fail (<unknown>) Fail: S:{egl_surface_suite} T:{surface_color_readback_valid_msaa_swap [0x0017]} F:{ [0x00]} D:{42144} - Fail check_res != 0 fail (<unknown>) Fail: S:{egl_surface_suite} T:{surface_color_readback_valid_msaa_swap [0x0017]} F:{ [0x00]} D:{52193} - Fail check_res != 0 fail (<unknown>) Fail: S:{egl_surface_suite} T:{surface_color_readback_valid_msaa_swap [0x0017]} F:{ [0x00]} D:{62272} - Fail check_res != 0 fail (<unknown>) Fail: S:{egl_surface_suite} T:{surface_color_readback_valid_msaa_swap [0x0017]} F:{ [0x00]} D:{72636} - Fail check_res != 0 fail (<unknown>) Fail: S:{egl_surface_suite} T:{surface_color_readback_valid_msaa_swap [0x0017]} F:{ [0x00]} D:{82977} - Fail check_res != 0 fail (<unknown>) (...) Fail: S:{egl_image_suite} T:{afbc_bch_external_image_test [0x0008]} F:{ [0x00]} D:{135} - file!=((void*)0) fail [0x0!=0x0] (<unknown>) Fail: S:{egl_image_suite} T:{afbc_usm_external_image_test [0x0009]} F:{ [0x00]} D:{343} - file!=((void*)0) fail [0x0!=0x0] (<unknown>) (...) Fail: S:{egl_damage_suite} T:{partial_update_entire_surface_with_buffer_age_zero [0x0002]} F:{ [0x00]} D:{30687} - check_res==1 fail [0==1] (<unknown>) (...) Fail: S:{egl_damage_suite} T:{partial_update_glReadPixel_in_damage_region_between_drawcalls_ms [0x0007]} F:{ [0x00]} D:{6764} - data_out==ref_color_out fail [00==0xff @ item 0] (<unknown>) (...) Fail: S:{egl_damage_suite} T:{partial_update_prerotate_fullscreen [0x000e]} F:{ [0x00]} D:{68555} - check_res==1 fail [0==1] (<unknown>) (...) Fail: S:{egl_damage_suite} T:{partial_update_set_region_after_drawcall [0x0016]} F:{ [0x00]} D:{38224} - check_res==1 fail [0==1] (<unknown>) (...) ======================================================= UTF: Result Summary ======================================================= 22 assertions Fail 200 tests considered 165 tests passed 27 tests skipped 0 tests expected to fail 8 tests failed 6 suites considered 3 suites did not pass Run time 70m 7s ======================================================= (...)
When running the GPU Vulkan Integration tests, the test
vulkan_wsi_external_memory_dma_buf_32k_image
fails and aborts execution as shown in the following output. The exact cause is currently under investigation. To work around this error and prevent the GPU Integration test failing, run the tests individually.(...) 02-20 21:26:32.471 3197 3197 I mali_test: [INSTANCE EXTENSION] [12] 'VK_EXT_debug_report' version 10 02-20 21:26:32.471 3197 3197 I mali_test: [INSTANCE EXTENSION] [13] 'VK_EXT_debug_utils' version 2 02-20 21:26:32.471 3197 3197 I mali_test: [DEVICE QUEUE] count 1 02-20 21:26:32.471 3197 3197 I mali_test: [DEVICE QUEUE] [0] flags = 0xc07, count = 2, timestamp valid bits = 64 02-20 21:26:32.474 3197 3197 I mali_test: Testing format R8G8B8A8, linear case. 02-20 21:26:32.484 3197 3197 I mali_test: DRM format modifier 0: 02-20 21:26:32.484 3197 3197 I mali_test: type = LINEAR 02-20 22:03:21.584 3197 3199 I mali_test: UTF not progressing. 02-20 22:23:21.584 3197 3199 I mali_test: UTF not progressing. 02-20 22:43:21.585 3197 3199 I mali_test: UTF not progressing after 3 checks. Aborting (...)
The SSH connection to fvp running Buildroot may fail due to a “Host key verification failed…” error. To resolve this issue, you can use the following command to remove the localhost entry and try again:
ssh-keygen -f "$HOME/.ssh/known_hosts" -R "[localhost]:8022"
The CPU hotplug works well with Buildroot and Debian distributions. However, in Android, CPU hotplug operations cause the system to hang. The issue is due to the integration of Hafnium and Trusty OS in the system and the PSCI CPU ON and OFF APIs are not yet supported in this case.
Support
For support email: support@arm.com.
Copyright (c) 2022-2024, Arm Limited. All rights reserved.