Release notes - TC23.1

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 10 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 with simpleperf;

  • 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:

  1. When the terminal displays Hit any key to stop autoboot: X, press ENTER.

  2. At the resulting command prompt, type boot and press ENTER. 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

  1. Ray tracing is currently not supported by the GPU DDK (hardware rendering);

  2. 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
    (...)
    
  3. 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
    (...)
    
  4. 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;

  5. 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;

  6. 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.

  7. 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.

  8. 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>)
    (...)
    
  9. 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
    =======================================================
    (...)
    
  10. 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
    (...)
    
  11. 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"

  12. 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.