Change Log & Release Notes
==========================

Please note that the Trusted Firmware-A Tests version follows the Trusted
Firmware-A version for simplicity. At any point in time, TF-A Tests version
`x.y` aims at testing TF-A version `x.y`. Different versions of TF-A and TF-A
Tests are not guaranteed to be compatible. This also means that a version
upgrade on the TF-A-Tests side might not necessarily introduce any new feature.

Version 2.10
------------

New features
^^^^^^^^^^^^

-  More tests are made available in this release to help validate the
   functionalities in the following areas:

   - FF-A
   - Realm Management Extension
   - EL3 Runtime
   - New Platform ports

TFTF
~~~~

-  FF-A testing:

   - Fixing FF-A version tests and expected error codes.
   - Remove SPM tests from AArch32 builds.
   - Support extended set of registers with FF-A calls.
   - Fix use of instruction permissions in FF-A memory sharing tests.
   - Extend memory sharing tests that use the clear memory flags.
   - Test that memory from Root World/Realm can't be shared.
   - Test the compliance to SMCCC at the non-secure physical instance.
   - Exercise secure eSPI interrupt handling.

-  New tests:

   - Added test for Errata management firmware interface.
   - Added basic firmware handoff tests.
   - Test to verify SErrors synchronized at EL3 boundry.
   - Introduced RAS KFH support test.
   - Modified FEAT_FGT test to check for init values.
   - Updated test_psci_stat.c to support more power states.

-  Platforms:

   - TC:

      - Made TC0 TFTF code generic to TC.

   - Versal:

      - Added platform support and platform specific cases.
      - Added Versal documentation.

   - Versal NET:

      - Added platform support and platform specific cases.
      - Added Versal NET documentation.

   - Xilinx:
      - Reorganized timer code into common path.

-  Miscellaneous:

   - Added helper routines to read, write and compare SVE and FPU registers.
   - New CPU feature detection helpers.
   - Introduced clang toolchain support and added python generate_test_list
     script.
   - Docs: Updated toolchain requirements and added maintainers for AMD-Xilinx.
   - Tidy setup and discovery logs.
   - Added note on building TFA-Tests using clang docs.
   - Added SME helper routines and added Streaming SVE support.
   - Introduced SError exception handler.
   - Updated toolchain requirements documentation.
   - Check for support for ESPI before testing it.

Realm Management Extension (RME)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   - Added SVE Realm tests and tests for EAC1.
   - Test to intermittently switch to Realm while doing NS SVE and Streaming
     SVE ops.
   - Added tests to check NS SME ID registers and configurations.
   - Added test to check if RMM doesn't leak Realm contents in SVE registers.
   - Test to check if non SVE Realm gets undefined abort.
   - Test to check various SIMD state preserved across NS/RL switch.
   - Added test to check swtich SME registers to SIMD state.
   - Testcase for CPU_ON denied.
   - Test for multiple REC single CPU.
   - Test for PAuth in Realm.
   - Enhanced FPU state verification test.
   - Modified API of RMI_RTT_*_RIPAS, changed handling.
   - Removed RIPAS_UNDEFINED and modified RIPAS/HIPAS definitions for EAC2.
   - Removed RMI_VALID_NS status and RMI_ERROR_IN_USE error code
     RMI_RTT_UNMAP_UNPROTECTED and update API of data/rtt functions.
   - Updated RSI_VERSION, RMI_VERSION and modified rmi_realm_params structure.
   - Added support for PMU as per RMM Specification 1.0-eac2.
   - Added PSCI API to Realms and API for REC force exit.
   - Added support for multiple REC and CPU and data buffer to pass arg to REC.
   - Set size of RsiHostCall.gprs[] to 31.
   - Passing RD pointer in arg0 register X1.
   - Added host call to flush Realm prints.
   - Aligned Realm stack.
   - Introduced new build flag for RME stack and appended realm.bin at end of
     tftf.bin.

Cactus (Secure-EL1 test partition)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   - Test discovery of EL3 SPMD managed SPs.
   - Configure partitions load-address from SP layout file.
   - Use the non-secure memory attribute in descriptor obtain from
     FFA_MEM_RETRIEVE_RESP.
   - SPs configured with a unique boot-order field in their respective
     manifests.
   - Test to the FFA_PARTITION_INFO_GET_REGS interface.
   - Defined memory security state attribute for memory transaction desciptor.

Issues resolved since last release
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

   - Fixed incremental build issue with Realm payload and build dependency
     in test-realms-payload.
   - SME:  use of rdsvl instead of rdvl, enable SME/SME2 during arch init,
     align test vector arrays to 16 bytes.
   - SVE: representing Z0-Z31 as array of bytes and moved operation to a lib
     routine.
   - Fixed issue in processing dynamic relocations for AArch64.
   - Reclaim and check for shared memory now supported.
   - FPU replaced read with write of random value to fpsr/fpcr.
   - Disabled RMI tests when building for AArch32 architecture.
   - Fixed command id passed to Realm to compare FPU registers.
   - Fixed broken links in docs landing page and made generate_test_list
     backward compatible.
   - XLAT: added support for 52 bit PA size with 4KB granularity.
   - Fixed stress test for XLAT v2.
   - RAS: Moved wait logic from assembly to C and renamed SDEI related
     functions/events.

Version 2.9
-----------

New features
^^^^^^^^^^^^

-  More tests are made available in this release to help validate the
   functionalities in the following areas:

   - FF-A Features
   - Realm Management Extension
   - New Architecture Specific features related to v8.8
   - New platform ports

TFTF
~~~~

-  FF-A testing:

   - Reordered logs in the memory sharing tests.
   - Memory share bumped to v1.1 EAC0.
   - Updated tests for FFA_FEATURES(FFA_MEM_RETRIEVE_REQ).
   - Fixed issues with RXTX buffer unmapping and dependencies on tests.
   - Added check for execution state property of partitions.

-  New tests:

   - Tests for Errata management firmware interface.
   - Ensure FPU state registers context is preserved in RL/SE/NS.
   - Modified FEAT_HCX test to also check for HCRX_EL2 init value.
   - Added basic SME2 tests.
   - PSCI tests for OS-initiated mode.
   - Added "nop" test to be used in conjunction with TFX.
   - Introduced capability to generate Sync External Aborts (EA) in TFTF.
   - New test to generate an SError.
   - Tests to check whether the PMU is functional and if the state is
     preserved when switching worlds. PMEVTYPER.evtCount width extended.
   - Added support for more SPE versions.

-  Platforms:

   - RD-N2-Cfg3:

      - Added TFTF support.

-  Miscellaneous:

   - SIMD/FPU save/restore routine moved to common lib.
   - Updated toolchain requirements documentation.
   - Update SME/Mortlach tests.
   - Unified Firmware First handling of lower EL EA.
   - Moved trusted wdog API to spm_common.
   - Added the ability to skip tests for AArch32.
   - Added config file to allow doc defaults be changed.
   - Modified tests for FEAT_RNG_TRAP.
   - Moved 'Stress test timer framework' to a new test suite
     'tests-timer-stress'.
   - Support for new binutils versions.
   - Removed deprecated SPM libs and test code.


Realm Management Extension (RME)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   - Added helper macro for RME tests.
   - Test Secure interrupt can preempt Realm EL1.
   - Added PMU Realm tests.
   - Added BP_OPTION to REALM_CFLAGS to allow build realm payload with
     BTI/Pauth support.
   - Fixed build issues introduced by the TFTF Realm extension
     enhancement tests.
   - Test case return codes updated according to RMM Bet0 specification.
   - Fixed build problem related to rmi_rec_enter verbose log.
   - Added randomization of SMC RMI commands parameters and checking of
     X4-X7 return values as per SMCCC v1.2.

Cactus (Secure-EL1 test partition)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   - Use of FFA_CONSOLE_LOG for debug logs.
   - Test for consecutive same memory donation to other partitions.
   - Now validating NWd can't share forbidden addresses.
   - Support for registering irq handlers.
   - Fixed attributes for NS memory region.
   - Removal of memory regions not page-aligned.
   - Added check for core linear id matching id passed by SPMC.

Issues resolved since last release
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

   - Build issue for older toolchains and other failures resolved.
   - Dropped invalid access test from CI.
   - Now checking that the PMU is supported before using any of it.
   - Use of write instead of read to generate an SError to avoid sync
     exceptions instead.
   - Fixed broken link to TRNG_FW documentation.
   - INIT_TFTF_MAILBOX() is called first for the invalid access test.

Version 2.8
-----------

New features
^^^^^^^^^^^^
-  More tests are made available in this release to help validate the
   functionalities in the following areas:

   - FF-A Features
   - Realm Management Extension
   - New Architecture Specific features related to v8.8
   - New platform ports

TFTF
~~~~

-  FF-A testing:

    - UUID included in partition information descriptors.
    - Checks for size of partition information descriptors.
    - Renamed FFA_MSG_RUN ABI function to FFA_RUN and allowed it to return from
      Waiting state.
    - Made ffa_tests available for Ivy.
    - Updated verbose message log structure.
    - Prevented generate_json.sh from being called more than once by requiring
      a list of partitions to be supplied.
    - Added a temporary workaround for unexpected affinity info state to prevent
      a system panic.
    - Added test to exercise FFA_CONSOLE_LOG ABI.

    - FF-A v1.1 Secure interrupts

        - Added managed exit to first and second SP in call chain.
        - Added test to exercise managed exit by two SPs in a call chain.
        - Added tests to exercise NS interrupt being queued and signaled to SP.

-  New tests:

    - Tests for SVE operations in Normal World and discover SVE vector length.
    - Added cleanup TRNG service tests.
    - Added test for SMCCC_ARCH_WORKAROUND_3.
    - Updated PAuth helpers to support QARMA3 algorithm.
    - Added tests for RNG_TRAP.

-  Platforms:

    - SGI:

        - Introduced platform variant build option.
        - Re-organized header files.
        - Migrated to secure uart port for routing tftf logs.

    - N1SDP:

        - Added TFTF support for N1SDP.

    - RD-N2:

        - Added TFTF support for RD-N2.

    - RD-N2-Cfg1:

        - Added TFTF support for RD-N2-Cfg1.

    - RD-V1:

        - Added TFTF support for RD-V1.

-  Miscellaneous:

    - Added a missing ISB instruction in SME test.
    - Refactor to make some helper functions re-usable.
    - Updated build command to clean EL3 payload image.
    - Move renaming of the primary dts file for ivy partitions.
    - Added check that verifies if a platform supports el3_payload before
      building it.
    - Updated memory share test to meet Hafnium specification.
    - Updated toolchain requirements documentation.


Realm Management Extension (RME)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    - Added Realm payload management capabilities to TFTF to act as a NS Host.
    - Added test to verify that RMM and SPM can co-exist and work properly.
    - Added function to reset delegated buffers to non-delegated state.
    - Re-used existing wait_for_non_lead_cpus() function helper.
    - Refactored RMI FID macros to simplify usage.
    - Added userguide for realm payload testing.

Cactus (Secure-EL1 test partition)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    - Corrected some tests message types from ERROR to VERBOSE.
    - Increased the cactus number of xlat to allow the use of 48b PA size for
      memory sharing between SPs.
    - Introduced a new direct request message command to resume after managed
      exit.
    - Skip enabling virtual maintenance interrupts explicitly.
    - Allowed sender to resume interrupted target vCPU.
    - Added support for handling managed exit through vIRQ.
    - Added support for discovering interrupt IDs of managed exit signals.
    - Specified action in response to NS interrupt in manifest.

Ivy (Secure-EL0 test partition)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    - Allowed testing using VHE.
    - Allowed Ivy partitions to use ffa_helpers functions.
    - Requirement of common name for Ivy partitions for consistency.
    - Specified action in response to NS interrupt in manifest.

Issues resolved since last release
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    - Fixed SME header guard name.
    - Fixed response for incorrect direct message request for FF-A.

Version 2.7
-----------

New features
^^^^^^^^^^^^
-  More tests are made available in this release to help validate the
   functionalities in the following areas:

   - FF-A Features
   - New Architecture Specific features related to v8.7
   - New platform port

TFTF
~~~~

-  FF-A testing:

    - FF-A partition information structure is updated to include UUIDs.
    - Memory Management helper functions are refactored to fetch the details
      of smc call failures in tftf and cactus.
    - Added test to validate memory sharing operations from SP to NS-endpoint
      are denied by SPMC.
    - Added test to ensure an endpoint that sets its version to v1.0 receives
      v1.0 partition information descriptors as defined in v1.0 FF-A
      specification.
    - Added test to validate that memory is cleared on memory sharing operations
      between normal world and secure world.

    - FF-A v1.1 Secure interrupts

        - Added support to enhance the secure interrupt handling test.
        - Support for registering and unregistering custom handler that is
          invoked by SP at the tail end of the virtual interrupt processing.
        - Added support for querying the ID of the last serviced virtual interrupt.

-  New tests:

    - Added test to validate that realm region access is being prevented from
      normal world.
    - Added test to validate that secure region access is being prevented from
      normal world.
    - Added test to validate that secure region access is being prevented from
      realm world.
    - Added test to validate that root region access is being prevented from
      realm world.
    - Added a test for v8.7 Advanced floating-point behavior (FEAT_AFP).
    - Added a SPE test that reads static profiling system registers
      of available SPE version i.e. FEAT_SPE/FEAT_SPEv1p1/FEAT_SPEv1p2.
    - Added a test to validate functionality of WFET and WFIT instructions
      introduced by v8.7 FEAT_WFxT.
    - Added basic SME tests to ensure feature enablement by EL3 is proper for
      its usage at lower non-secure ELs.
    - Added test to check Data Independent timing (DIT) field of PSTATE is
      retained on exception.
    - Added test to ensure that EL3 has properly enabled access to FEAT_BRBE
      from non-secure ELs.

-  Platforms:

    - Add initial platform support for corstone1000.

    - TC:

        - Support for notification in tertiary SP manifest.

    - FVP:

        - Support to provide test memory addresses to validate the invalid
          memory access test from tftf(ns-el2).

-  Miscellaneous:

    - Added support to configure the physical/virtual address space for FVP.
    - Added common header file for defining macros with size to support all the
      platforms.
    - Introduced handler for synchronous exceptions (AArch64).
    - Added macros to extract the ISS portion of an ELx ESR exception syndrome
      register.
    - Support to dynamically map/unmap test region to validate invalid memory
      access tests.
    - Added support to receive boot information through secure partitions,
      according to the FF-A v1.1 EAC0 specification.
    - Added an helper API function from SPM test suite to initialize FFA-mailbox
      and enable FF-A based message with SP.
    - Updated the build string to display the rc-tagged version.

Cactus (Secure-EL1 test partition)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    - Added test for nonsecure memory sharing between Secure Partitions(SPs).
    - Added test to validate that a realm region cannot be accessed from secure
      world.
    - Added test to permit checking a root region cannot be accessed from secure
      world.
    - Extended the test command CACTUS_MEM_SEND_CMD to add support for memory
      sharing flags.
    - Added support to save the state of general purpose registers x0-x4 at the
      entry to cold boot and restore them before jumping to entrypoint of cactus.

Issues resolved since last release
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    - Fixed a bug to align RMI FIDs with SMCCC.
    - Fixed encoding of vCPU and receiver IDs in the FFA_NOTIFICATION_GET
      interface to comply with the FF-A v1.1 beta0 specification.
    - Fixed memory retrieve request attributes by enforcing them to be inner
      shareable rather than outer.
    - Fixed static memory mapping of EL3 in EL2.
    - Fixed a spurious error log message with memory share test.
    - Aligning RMI FIDs with SMCCC.
    - Fixed PSCI system suspend test suite execution in a four world system.
    - Configured the build system to use DWARF 4 standard for debug builds with
      ArmDS.
    - Introduced macro IRQ_TWDOG_INTID for the Tegra210, Tegra186 and Tegra194
      platforms to fix the compilation failures.

Version 2.6
-----------

New features
^^^^^^^^^^^^
-  More tests are made available in this release to help validate the
   functionalities in the following areas:

    - Firmware Framework for Arm A-profile(FF-A)
    - Realm Management Extensions(RME)
    - Embedded Trace Extension and Trace Buffer Extension (ETE and TRBE)

TFTF
~~~~

-  FF-A testing:

    - Update FF-A version to v1.1
    - Added helpers for SPM tests to check partition info of SPs from normal
      world.
    - Added tests to check for ffa_features supported.
    - Added test for FFA_RXTX_UNMAP ABI.
    - Added test for FFA_SPM_ID_GET.
    - FF-A v1.1 Notifications

        - Added test for notifications bitmap create and destroy ABIs.
        - Added test for notifications set and get ABIs.
        - Added test for notification INFO_GET ABI.
        - Added test to check notifications pending interrupt is injected into
          and handled by the expected vCPU in a MP setup.
        - Added test for signaling from MP SP to UP SP.
        - Added test to check notifications interrupt IDs retrieved with
          FFA_FEATURES ABI.
        - Added test to check functionality of notifications scheduled receiver
          interrupt.

    - FF-A v1.1 Secure interrupts

        - Added support for handling secure interrupts in Cactus SP.
        - Added several tests to exercise secure interrupt handling while SP
          is in WAITING/RUNNING/BLOCKED state.

-  New tests:

    - Enabled SVE tests
    - Added test for trace system registers access.
    - Added test for trace filter control registers access.
    - Added test for trace buffer control registers access.
    - Added test to check PSTATE in SDEI handler.
    - Added test to check if HCRX_EL2 is accessible.

-  Platforms:

    - TC0:

        - Support for direct messaging with managed exit.
        - Support for building S-EL0 Ivy partition.

    - FVP:

         - Update Cactus secure partitions to indicate Managed exit support.

-  Miscellaneous

    - Added random seed generation capability and ability to specify build
      parameters for SMC Fuzzer tool.

Cactus (Secure-EL1 test partition)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    - Added helper for Cactus SP sleep.
    - Added test commands to request use of notifications interfaces.
    - Added several commands that generate direct message requests to assist in
      testing secure interrupt handling and notifications features in FF-A v1.1
    - Added support for SP805 Trusted Watchdog module.

Ivy (Secure-EL1 test partition)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    - Add shim layer to Ivy partition and enable PIE.
    - Define Ivy partition manifest and use FF-A for message handling.
    - Prepare S-EL1/0 enviroment for enabling S-EL0 application.

Realm Management Extension(RME)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    - Added tests to run RMI and SPM on multiple CPUs concurrently.
    - Added tests for multi CPU delegation and fail conditions.
    - Added tests to query RMI version on multiple CPUs.

Issues resolved since last release
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    - Fixed Ivy partition start address for TC0.
    - Fixed SP manifests to use little endian format UUID.
    - Fixed a bug in memory sharing test for Cactus SP.
    - Invalidate data cache for NS_BL1U and NS_BL2U images.
    - Fixed attributes to Read-Write only for memory regions described in partition
      manifests.

Version 2.5
-----------

New features
^^^^^^^^^^^^
-  More tests are made available in this release to help validate the
   functionalities in the following areas:

    -  True Random Number Generator (TRNG) test scenarios.
    -  Multicore / Power State Controller Interface (PSCI) tests.
    -  v8.6 Activity Monitors Unit (AMU) enhancements test scenarios.
    -  Secure Partition Manager (SPM) / Firmware Framework (FF-A) v1.0 testing.
        -  Interrupt Handling between Non-secure and Secure world.
        -  Direct messages and memory sharing between Secure Partitions(SP).
        -  Many tests to exercise FF-A v1.0 ABIs.
        -  SPM saving/restoring the NS SIMD context enabling a normal world FF-A
           endpoint (TFTF) and a secure partition to use SIMD vectors and
           instructions independently.

TFTF
~~~~

-  SPM / FF-A v1.0 testing.
    -  Refactor FF-A memory sharing tests
        -  Created helper functions to initialize ffa_memory_region and to send
           the respective memory region to the SP, making it possible to reuse
           the logic in SP-to-SP memory share tests.
        -  Added comments to document relevant aspects about memory sharing.

    -  Trigger direct messaging between SPs.
        -  Use cactus command 'CACTUS_REQ_ECHO_SEND_CMD' to make cactus SPs
           communicate with each other using direct message interfaces.

    -  Added helpers for SPM tests.
        -  Checking SPMC has expected FFA_VERSION.
        -  Checking that expected FF-A endpoints are deployed in the system.
        -  Getting global TFTF mailbox.

-  Replace '.inst' AArch64 machine directives with CPU Memory Tagging Extension
   instructions in 'test_mte_instructions' function.

-  Add build option for Arm Feature Modifiers.
    -  This patch adds a new ARM_ARCH_FEATURE build option to add support
       for compiler's feature modifiers.

-  Enable 8 cores support for Theodul DSU(DynamIQ Shared Unit) for the
   Total Compute (TC0) platform.

-  New tests:

    -  Remove redundant code and add better tests for TRNG SMCs.
         -  Tests that the Version, Features, and RND calls conform to the spec.

    -  New tests for v8.6 AMU enhancements (FEAT_AMUv1p1)
         -  Make sure AMU offsets are being saved and restored properly.

    -  Tests to request SP-to-SP memory share.

    -  SP-to-SP direct messaging deadlock test.
         -  TFTF sends CACTUS_REQ_DEADLOCK_CMD to cactus SP.

Cactus(Secure-EL1 test partition)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

-  Enable managed exit for primary cactus secure partition.

-  Helper commands needed for interrupt testing.

-  Add handler from managed exit FIQ interrupt.

-  Make ffa_id global.

-  Implement HF_INTERRUPT_ENABLE Hafnium hypervisor call wrapper. With this
   service, a secure partition calls into the SPMC to enable/disable a
   particular virtual interrupt.

-  Invalidate the data cache for the cactus image.

-  Helper commands needed for interrupt testing.
     -  CACTUS_SLEEP_CMD & CACTUS_INTERRUPT_CMD added.

-  Decouple exception handling from tftf framework.
    -  With new interrupt related tests coming up in Cactus, added separate
       exception handler code for irq/fiq in Cactus.

-  Hypervisor calls moved to a separate module.

-  Add secondary entry point register function.

-  Declare third SP instance as UP SP.

-  Provision a cold boot path for secondary cores (or secondary pinned
   execution contexts).

-  Tidy message loop, commands definitions, direct messaging API definitions.

-  Helpers for error logging after FF-A calls.

-  Properly placing Cactus test files.

-  Tidying FF-A Memory Sharing tests.

-  Use CACTUS_ECHO_CMD in direct message tests.

-  Refactor handling of commands.
    -  Added helper macros to define a command handler, build a command table
       in which each element is a pair of the handler and respective command
       ID. Available tests have been moved to their own command handler.

-  Extend arguments in commands responses.
    -  In the test commands framework, added template to extend number of
       values to include in a command response.

-  Check FF-A return is a valid direct response.
    -  Added a helper function to check if return of FFA_MSG_SEND_DIRECT_REQ
       is FFA_MSG_SEND_DIRECT_RESP.

-  FFA_MSG_DIRECT_RESP call extended to use 5 registers.

-  Added accessors for arguments from FF-A calls.
    -  Some accessors for arguments from FF-A calls, namely for func id, error
       code, and direct message destination/source.

-  Use virtual counter for sp_sleep.
    -  Changes sp_sleep() to use virtual counter instead of physical counter.

-  Checks if SIMD vectors are preserved in the normal world while transitioning
   from normal world to secure world and back to normal world.

-  Tidying common code to tftf and cactus.

-  Refactor cactus_test_cmds.h to incorporate static inline functions instead
   of macros to enforce type checking.

-  Removed reference to Hafnium in name from helper function and macro to
   make them generic.

-  For consistency added the cmd id 'CACTUS_MEM_SEND_CMD'.

-  Add command to request memory sharing between SPs.

-  Add & handle commands 'CACTUS_REQ_ECHO_CMD' and 'CACTUS_ECHO_CMD'.

-  Update README with list of sample partitions.

-  Remove reference to PSA from xml test file.

-  Reduce tests verbosity in release mode.
    -  Update few NOTICE messages to VERBOSE/INFO.

-  Fix conversion issues on cactus responses.

-  Create RXTX map/configure helper macros and use them.

-  Update OP-TEE version used for testing to 3.10.
    -  SPMC as S-EL1 tests using OP-TEE depend on a static binary stored as
       a CI file. This binary corresponds to a build of OP-TEE v3.10.

-  Add uart2 to device-regions node.
    -  First SP no longer has an open access to the full system peripheral
       range and devices must be explicitly declared in the SP manifest.

-  New tests:

    -  Test for exercising SMMUv3 driver to perform stage2 translation.

    -  Test handling of non-secure interrupt while running SP.

    -  Add secondary cores direct messaging test for SPM.

    -  Testing deadlock by FF-A direct message.
         -  Added command CACTUS_DEADLOCK_CMD to file cactus_test_cmds.h to create
            a deadlock scenario using FF-A direct message interfaces.

    -  Test SP-to-SP memory share operations
         -  Handle 'CACTUS_REQ_MEM_SEND_CMD' by sending memory to the receiver SP.

    -  Implemented test to validate FFA_RXTX_MAP ABI.

Version 2.4
-----------

New features
^^^^^^^^^^^^
-  More tests are made available in this release to help validate the
   functionalities in the following areas:
   -  SMCCC.
   -  New architecture specific features.
   -  FF-A features.
   -  New platform ports.

-  Various improvements to test framework and test suite such as documentation,
   removing un-necessary dependencies, etc.

TFTF
~~~~

-  Remove dependencies from FVP to generic code by converting some FVP platform
   specific macros to the common macros.

-  Remove make as a package dependency to compile TF-A test code.

-  Move defaults values and macro defs in a separate folder from Makefile.

-  Allow alternate stdout to be used apart from pl011 UART.

-  Get FVP platform's topology from build options to make FVP platform
   configuration more flexible and eliminate test errors when the platform
   is configured with number of CPUs less than default values in the makefile.

-  Update the FIP corrupt address which is used to corrupt BL2 image that helps
   to trigger firmware update process.

-  Add explicit barrier before sev() in tftf_send_event_common API to avoid
   core hang.

-  Align output properly on issuing make help_tests by removing dashes
   and sort tests.

-  Moved a few FVP and Juno specific defined from common header files to platform
   specific header files.

-  Replace SPCI with PSA FF-A in code as SPCI is now called as FF-A.

-  Add owner field to sp_layout generation to differentiate owner of SP which
   could either be Silicon Provider or Platform provider.

-  Add v8.5 Branch Target Identifier(BTI) support in TFTF.

-  Remove dependency on SYS_CNT_BASE1 to read the memory mapped timers.

-  Enables SError aborts for all CPUs, during their power on sequence.

-  Documentation:

   -  Use conditional assignment on sphinx variables so that they can be
      overwritten by environment and/or command line.

   -  Add support for documentation build as a target in Makefile.

   -  Update list of maintainers.

   -  Update documentation to explain how to locally build the documentation.

   -  Add .editorconfig from TF-A to define the coding style.

   -  Fix documentation to include 'path/to' prefix when specifying tftf.bin on
      make fip cmd.

   -  Use docker to build documentation.

   -  Replace SPCI with PSA FF-A in documentation as SPCI is now called
      as FF-A.

-  NVIDIA Tegra194:

   -  Skip CPU suspend tests requiring SGI as wake source as Tegra194 platforms
      do not support CPU suspend power down and cannot be woken up with an SGI.

   -  Disable some system suspend test cases.

   -  Create dummy SMMU context for system resume to allow the System Resume
      Firmware to complete without any errors or warnings.

   -  Increase RTC step value to 5ms as RTC consumes 250us for each register
      read/write. Increase the step value to 5ms to cover all the register
      read/write in program_timer().

   -  Skip some timer framework validation tests as CPUs on Tegra194 platforms
      cannot be woken up with the RTC timer interrupt after power off.

   -  Introduce per-CPU Hypervisor Timer Interrupt ID.

   -  Skip PSCI STAT tests requiring PSTATE_TYPE_POWERDOWN as Tegra194 platforms
      do not support CPU suspend with state type as PSTATE_TYPE_POWERDOWN.

   -  Disable boot requirement tests as Tegra194 platforms do not support memory
      mapped timers.

   -  Skips the test "Create all power states and validate EL3 power state parsing"
      from the "EL3 power state parser validation" test suite as it is not in
      sync with this expectation.

   -  Moved reset, timers. wake, watchdog drivers from Tegra194 specific folder to
      common driver folder so that these drivers can be used for other NVIDIA platforms.

-  New tests:

   -  Add test for SDEI RM_ANY routing mode.

   -  Add initial platform support for TC0.

   -  Add SMC fuzzing module test.

   -  Add test case for SMCCC_ARCH_SOC_ID feature.

   -  Add test that supports ARMv8.6-FGT in TF-A.

   -  Add test that supports ARMv8.6-ECV in TF-A.

   -  Add test for FFA_VERSION interface.

   -  Add test for FFA_FEATURES interface.

   -  Add console driver for the TI UART 16550.

   -  Add tests for FF-A memory sharing interfaces between tftf
      and cactus secure partitions.

   -  NVIDIA Tegra194:

      -  Introduce platform port for Tegra194 to to initialize the tftf
         framework and execute tests on the CPUs.

      -  Introduce power management support.

      -  Introduce support for RTC as wake source.

      -  Introduce system reset functionality test.

      -  Introduce watchdog timer test.

      -  Introduce support for NVIDIA Denver CPUs.

      -  Introduce RAS uncorrectable error injection test.

      -  Introduce tests to verify the Video Memory resize interface.

      -  Introduce test to inject RAS corrected errors for all supported
         nodes from all CPUs.

      -  Introduce a test to get return value from SMC SiP function
         TEGRA_SIP_GET_SMMU_PER.

   -  NVIDIA Tegra196:

      -  Introduce initial support for Tegra186 platforms.

   -  NVIDIA Tegra210:

      -  Introduce initial support for Tegra210 platforms.

Secure partition - Cactus
~~~~~~~~~~~~~~~~~~~~~~~~~

-  TFTF doesn't need to boot Secondary Cactus as Hafnium now boots all
   partitions according to "boot-order" field value in the partition
   manifests.

-  Remove test files related to deprecated SPCI Alpha specification and
   SPRT interface.

-  Select different stdout device at runtime as primary VM can access
   to UART while secondary VM's use hypervisor call to SPM for debug
   logging.

-  An SP maps its RX/TX buffers in its EL1&0 Stage-1 translation regime.
   The same RX/TX buffers are mapped by the SPMC in the SP's EL1&0
   Stage-2 translation regime during boot time.

-  Update memory/device region nodes in manifest. Memory region has 3
   entries such as RX buffer, TX buffer and dummy. These memory region
   entries are mapped with attributes as "RX buffer: read-only",
   "TX buffer: read-write" and "dummy: read-write-execute".
   Device region mapped with read-write attribute.

-  Create tertiary partition without RX_TX region specified to test the
   RXTX_MAP API.

-  Add third partition to ffa_partition_info_get test to test that a
   partition can successfully get information about the third cactus
   partition.

-  Map RXTX region to third partition to point the mailbox to this RXTX
   region.

-  Adjust the number of EC context to max number of PEs as per the FF-A
   specification mandating that a SP must either "Implement as many ECs
   as the number of PEs (in case of a "multi-processor" SP with pinned
   contexts)" or "Implement a single EC (in case of a migratable
   "uni-processor" SP).

-  Updated cactus test payload and TFTF ids as it is decided to have
   secure partition FF-A ids in the range from 0x8001 to 0xfffe, 0x8000
   and 0xffff FF-A ids are reserved for the SPMC and the SPMD respectively
   and in the non-secure worlds, FF-A id 0 is reserved for the hypervisor
   and 1 to 0x7fff FF-A ids are reserved for VMs.

-  Break the message loop on bad message request instead of replying
   with the FF-A error ABI to the SPMC.

-  Remove deprecated hypervisor calls spm_vm_get_count and spm_vcpu_get_count.
   Instead use FFA_PARTITION_INFO_GET discovery ABI.

-  Implement hvc call 'SPM_INTERRUPT_GET' to get interrupt id.

-  Re-structure platform dependent files by moving platform dependent files
   and macros to platform specific folder.

-  Adjust partition info get properties to support receipt of direct
   message request.

-  New tests:

   -  Add FFA Version Test.

   -  Add FFA_FEATURES test.

   -  Add FFA_MEM_SHARE test

   -  Add FFA_MEM_LEND test.

   -  Add FFA_MEM_DONATE test.

   -  Add FFA_PARTITION_INFO_GET test.

   -  Add exception/interrupt framework.

   -  Add cactus support for TC0 platform.

Issues resolved since last release
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

-  Update link to SMCCC specification.

-  Trim down the top-level readme file to give brief overview of the project
   and also fix/update a number of broken/out-dated links in it.

-  Bug fix in Multicore IRQ spurious test.

-  Fix memory regions mapping with no NS bit set.

-  Reenable PSCI NODE_HW_STATE test which was disabled earlier due to
   outdated SCP firmware.

-  Fix Aarch32 zeromem() function by avoiding infinite loop in 'zeromem'
   function and optimizing 'memcpy4' function.

-  Add missing help_tests info on help target in the top-level Makefile.

-  Trim down the readme file as it does not need to provide detailed
   information, instead it can simply be a landing page providing a brief
   overview of the project and redirecting the reader to RTD for further
   information.

-  Fix maximum number of CPUs in DSU cluster by setting maximum number of CPUs
   in DSU cluster to 8.

Version 2.3
-----------

New features
^^^^^^^^^^^^

-  More tests are made available in this release to help validate
   the functionality of TF-A.

-  CI upgraded to use GCC 9.2-2019.12 toolchain for tf-a-tests.

-  Various improvements to test framework and test suite.

TFTF
~~~~

-  Support for extended register usage as per SMCCC v1.2 specification.

-  Support for FVP platforms with SMT capabilities.

-  Improved support for documentation through addition of basic Sphinx
   configuration and Makefile similar to TF-A repository.

-  Enhancement to libc library synchronous to TF-A code base.

-  ARMv8.3-PAuth enabled for all FWU tests in TFTF.

-  TFTF made RFC 4122 compliant by converting UUIDs to network order format.

-  Build improvement by deprecating custom AARCH64/AARCH32 macros in favor of
   __arch64__  macro provided by compiler.

-  Support for HVC as a SMCCC conduit in TFTF.

-  New tests:

   -  AArch32 tests for checking if PMU counters leak in secure world.

   -  Add new debug filesystem (debugfs) test.

   -  Add a SPCI direct messaging test targeting bare-metal cactus SP.


Secure partitions
~~~~~~~~~~~~~~~~~

Cactus
~~~~~~

-  Several build improvements and symbol relocation fixup to make it position
   independent executable.

-  Update of sample manifest to SPCI Beta1 format.

-  Support for generating JSON file as required by TF-A.

Issues resolved since last release
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

-  Makefile bug fix for performing parallel builds.

-  Add missing D-cache invalidation of RW memory in tftf_entrypoint to safeguard
   against possible corruption.

-  Fixes in GIC drivers to support base addresses beyond 4G range.

-  Fix build with XML::LibXML 2.0202 Perl module

Known issues and limitations
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The sections below list the known issues and limitations of each test image
provided in this repository. Unless and otherwise stated, issues and limitations
stated in previous release continue to exist in this release.

TFTF
~~~~
-  NODE_HW_STATE test has been temporarily disabled for sgi575 platform due to a
   dependency on SCP binaries version 2.5

Version 2.2
-----------

New features
^^^^^^^^^^^^

-  A wide range of tests are made available in this release to help validate
   the functionality of TF-A.

-  Various improvements to test framework and test suite.

TFTF
~~~~

-  Enhancement to xlat table library synchronous to TF-A code base.

-  Enabled strict alignment checks (SCTLR.A & SCTLR.SA) in all images.

-  Support for a simple console driver. Currently it serves as a placeholder
   with empty functions.

-  A topology helper API is added in the framework to get parent node info.

-  Support for FVP with clusters having upto 8 CPUs.

-  Enhanced linker script to separate code and RO data sections.

-  Relax SMC calls tests. The SMCCC specification recommends Trusted OSes to
   mitigate the risk of leaking information by either preserving the register
   state over the call, or returning a constant value, such as zero, in each
   register. Tests only allowed the former behaviour and have been extended to
   allow the latter as well.

-  Pointer Authentication enabled on warm boot path with individual APIAKey
   generation for each CPU.

-  New tests:

   -  Basic unit tests for xlat table library v2.

   -  Tests for validating SVE support in TF-A.

   -  Stress tests for dynamic xlat table library.

   -  PSCI test to measure latencies when turning ON a cluster.

   -  Series of AArch64 tests that stress the secure world to leak sensitive
      counter values.

   -  Test to validate PSCI SYSTEM_RESET call.

   -  Basic tests to validate Memory Tagging Extensions are being enabled and
      ensuring no undesired leak of sensitive data occurs.

-  Enhanced tests:

   -  Improved tests for Pointer Authentication support. Checks are performed
      to see if pointer authentication keys are accessible as well as validate
      if secure keys are being leaked after a PSCI version call or TSP call.

   -  Improved AMU test to remove unexecuted code iterating over Group1 counters
      and fix the conditional check of AMU Group0 counter value.

Secure partitions
~~~~~~~~~~~~~~~~~

A new Secure Partition Quark is introduced in this release.

Quark
~~~~~

The Quark test secure partition provided is a simple service which returns a
magic number. Further, a simple test is added to test if Quark is functional.

Issues resolved since last release
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

-  Bug fix in libc memchr implementation.

-  Bug fix in calculation of number of CPUs.

-  Streamlined SMC WORKAROUND_2 test and fixed a false fail on Cortex-A76 CPU.

-  Pointer Authentication support is now available for secondary CPUs and the
   corresponding tests are stable in this release.

Known issues and limitations
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The sections below list the known issues and limitations of each test image
provided in this repository. Unless and otherwise stated, issues and limitations
stated in previous release continue to exist in this release.

TFTF
~~~~
-  Multicore spurious interrupt test is observed to have unstable behavior. As a
   temporary solution, this test is skipped for AArch64 Juno configurations.

-  Generating SVE instructions requires `O3` compilation optimization. Since the
   current build structure does not allow compilation flag modification for
   specific files, the function which tests support for SVE has been pre-compiled
   and added as an assembly file.



Version 2.1
-----------

New features
^^^^^^^^^^^^

-  Add initial support for testing Secure Partition Client Interface (SPCI)
   and Secure Partition Run-Time (SPRT) standards.

   Exercise the full communication flow throughout the software stack, involving:

   -  A Secure-EL0 test partition as the Trusted World agent.

   -  TFTF as the Normal World agent.

   -  The Secure Partition Manager (SPM) in TF-A.

-  Various stability improvements, code refactoring and clean ups.

TFTF
~~~~

-  Reorganize tests build infrastructure to allow the selection of a subset of
   tests.

-  Reorganize the platform layer for improved clarity and simplicity.

-  Sanitise inclusion of drivers header files.

-  Enhance the test report format for improved clarity and conciseness.

-  Dump CPU registers when hitting an unexpected exception. Previously, this
   would silently loop forever.

-  Import libc from TF-A to better align the two code bases.

-  New tests:

   -  SPM tests for exercising communication through either the MM or SPCI/SPRT
      interfaces.

   -  SMC calling convention tests.

   -  Initial tests for Armv8.3 Pointer Authentication support (experimental).

-  New platform ports:

   - `Arm SGI-575`_  FVP.

   - Hikey960 board (experimental).

   - `Arm Neoverse Reference Design N1 Edge (RD-N1-Edge)`_ FVP (experimental).

Secure partitions
~~~~~~~~~~~~~~~~~

We now have 3 Secure Partitions to test the SPM implementation in TF-A.

Cactus-MM
'''''''''

The Cactus test secure partition provided in version 2.0 has been renamed into
"*Cactus-MM*". It is still responsible for testing the SPM implementation based
on the Arm Management Mode Interface.

Cactus
''''''

This is a new test secure partition (as the former "*Cactus*" has been renamed
into "*Cactus-MM*", see above).

Unlike *Cactus-MM*, this image tests the SPM implementation based on the SPCI
and SPRT draft specifications.

It runs in Secure-EL0 and performs the following tasks:

-  Test that TF-A has correctly setup the secure partition environment (access
   to cache maintenance operations, to floating point registers, etc.)

-  Test that TF-A accepts to change data access permissions and instruction
   permissions on behalf of Cactus for memory regions the latter owns.

-  Test communication with SPM through SPCI/SPRT interfaces.

Ivy
'''

This is also a new test secure partition. It is provided in order to test
multiple partitions support in TF-A. It is derived from Cactus and essentially
provides the same services but with different identifiers at the moment.

EL3 payload
~~~~~~~~~~~

-  New platform ports:

   - `Arm SGI-575`_  FVP.

   - `Arm Neoverse Reference Design N1 Edge (RD-N1-Edge)`_ FVP (experimental).

Issues resolved since last release
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

-  The GICv2 spurious IRQ test is no longer Juno-specific. It is now only
   GICv2-specific.

-  The manual tests in AArch32 state now work properly. After investigation,
   we identified that this issue was not AArch32 specific but concerned any
   test relying on state information persisting across reboots. It was due to
   an incorrect build configuration.

-  Cactus-MM now successfully links with GNU toolchain 7.3.1.

Known issues and limitations
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The sections below lists the known issues and limitations of each test image
provided in this repository.

TFTF
~~~~

The TFTF test image might be conceptually sub-divided further in 2 parts: the
tests themselves, and the test framework they are based upon.

Test framework
~~~~~~~~~~~~~~

-  Some stability issues.

-  No mechanism to abort tests when they time out (e.g. this could be
   implemented using a watchdog).

-  No convenient way to include or exclude tests on a per-platform basis.

-  Power domains and affinity levels are considered equivalent but they may
   not necessarily be.

-  Need to provide better support to alleviate duplication of test code. There
   are some recurrent test patterns for which helper functions should be
   provided. For example, bringing up all CPUs on the platform and executing the
   same function on all of them, or programming an interrupt and waiting for it
   to trigger.

-  Every CPU that participates in a test must return from the test function. If
   it does not - e.g. because it powered itself off for testing purposes - then
   the test framework will wait forever for this CPU. This limitation is too
   restrictive for some tests.

-  No protection against interrupted flash operations. If the target is reset
   while some data is written to flash, the test framework might behave
   incorrectly on reset.

-  When compiling the code, if the generation of the ``tests_list.c`` and/or
   ``tests_list.h`` files fails, the build process is not aborted immediately
   and will only fail later on.

-  The directory layout requires further improvements. Most of the test
   framework code has been moved under the ``tftf/`` directory to better isolate
   it but this effort is not complete. As a result, there are still some TFTF
   files scattered around.

-  Pointer Authentication testing is experimental and incomplete at this stage.
   It is only enabled on the primary CPU on the cold boot.

Tests
~~~~~

-  Some tests are implemented for AArch64 only and are skipped on AArch32.

-  Some tests are not robust enough:

   -  Some tests might hang in some circumstances. For example, they might wait
      forever for a condition to become true.

   -  Some tests rely on arbitrary time delays instead of proper synchronization
      when executing order-sensitive steps.

   -  Some tests have been implemented in a practical manner: they seem to work
      on actual hardware but they make assumptions that are not guaranteed by
      the Arm architecture. Therefore, they might fail on some other platforms.

-  PSCI stress tests are very unreliable and will often hang. The root cause is
   not known for sure but this might be due to bad synchronization between CPUs.

-  The GICv2 spurious IRQ test sometimes fails with the following error message:

   ``SMC @ lead CPU returned 0xFFFFFFFF 0x8 0xC``

   The root cause is unknown.

-  The FWU tests take a long time to complete. This is because they wait for the
   watchdog to reset the system. On FVP, TF-A configures the watchdog period to
   about 4 min. This limit is excessive for an automated testing context and
   leaves the user without feedback and unable to determine if the tests are
   proceeding properly.

-  The test "Target timer to a power down cpu" sometimes fails with the
   following error message:

   ``Expected timer switch: 4 Actual: 3``

   The root cause is unknown.

FWU images
~~~~~~~~~~

-  The FWU tests do not work on the revC of the Base AEM FVP. They only work on
   the revB.

-  NS-BL1U and NS-BL2U images reuse TFTF-specific code for legacy reasons. This
   is not a clean design and may cause confusion.

Test secure partitions (Cactus, Cactus-MM, Ivy)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

-  This is experimental code. It's likely to change a lot as the secure
   partition software architecture evolves.

-  Supported on AArch64 FVP platform only.

All test images
~~~~~~~~~~~~~~~

-  TF-A Tests are derived from a fork of TF-A so:

    -  they've got some code in common but lag behind on some features.

    -  there might still be some irrelevant references to TF-A.

-  Some design issues.
   E.g. TF-A Tests inherited from the I/O layer of TF-A, which still needs a
   major rework.

-  Cannot build TF-A Tests with Clang. Only GCC is supported.

-  The build system does not cope well with parallel building. The user should
   not attempt to run multiple jobs in parallel with the ``-j`` option of `GNU
   make`.

-  The build system does not properly track build options. A clean build must be
   performed every time a build option changes.

-  UUIDs are not compliant to RFC 4122.

-  No floating point support. The code is compiled with GCC flag
   ``-mgeneral-regs-only``, which prevents the compiler from generating code
   that accesses floating point registers. This might limit some test scenarios.

-  The documentation is too lightweight.

-  Missing instruction barriers in some places before reading the system counter
   value. As a result, the CPU could speculatively read it and any delay loop
   calculations might be off (because based on stale values). We need to examine
   all such direct reads of the ``CNTPCT_EL0`` register and replace them with a
   call to ``syscounter_read()`` where appropriate.

Version 2.0
-----------

New features
^^^^^^^^^^^^

This is the first public release of the Trusted Firmware-A Tests source code.

TFTF
~~~~

-  Provides a baremetal test framework to exercise TF-A features through its
   ``SMC`` interface.

-  Integrates easily with TF-A: the TFTF binary is packaged in the FIP image
   as a ``BL33`` component.

-  Standalone binary that runs on the target without human intervention (except
   for some specific tests that require a manual target reset).

-  Designed for multi-core testing. The various sub-frameworks allow maximum
   parallelism in order to stress the firmware.

-  Displays test results on the UART output. This may then be parsed by an
   external tool and integrated in a continuous integration system.

-  Supports running in AArch64 (NS-EL2 or NS-EL1) and AArch32 states.

-  Supports parsing a tests manifest (XML file) listing the tests to include in
   the binary.

-  Detects most platform features at run time (e.g. topology, GIC version, ...).

-  Provides a topology enumeration framework. Allows tests to easily go through
   affinity levels and power domain nodes.

-  Provides an event framework to synchronize CPU operations in a multi-core
   context.

-  Provides a timer framework. Relies on a single global timer to generate
   interrupts for all CPUs in the system. This allows tests to easily program
   interrupts on demand to use as a wake-up event source to come out of CPU
   suspend state for example.

-  Provides a power-state enumeration framework. Abstracts the valid power
   states supported on the platform.

-  Provides helper functions for power management operations (CPU hotplug,
   CPU suspend, system suspend, ...) with proper saving of the hardware state.

-  Supports rebooting the platform at the end of each test for greater
   independence between tests.

-  Supports interrupting and resuming a test session. This relies on storing
   test results in non-volatile memory (e.g. flash).

FWU images
~~~~~~~~~~

-  Provides example code to exercise the Firmware Update feature of TF-A.

-  Tests the robustness of the FWU state machine implemented in the TF-A by
   sending valid and invalid authentication, copy and image execution requests
   to the TF-A BL1 image.

EL3 test payload
~~~~~~~~~~~~~~~~

-  Tests the ability of TF-A to load an EL3 payload.

Cactus test secure partition
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

-  Tests that TF-A has correctly setup the secure partition environment: it
   should be allowed to perform cache maintenance operations, access floating
   point registers, etc.

-  Tests the ability of a secure partition to request changing data access
   permissions and instruction permissions of memory regions it owns.

-  Tests the ability of a secure partition to handle StandaloneMM requests.

Known issues and limitations
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The sections below lists the known issues and limitations of each test image
provided in this repository.

TFTF
~~~~

The TFTF test image might be conceptually sub-divided further in 2 parts: the
tests themselves, and the test framework they are based upon.

Test framework
~~~~~~~~~~~~~~

-  Some stability issues.

-  No mechanism to abort tests when they time out (e.g. this could be
   implemented using a watchdog).

-  No convenient way to include or exclude tests on a per-platform basis.

-  Power domains and affinity levels are considered equivalent but they may
   not necessarily be.

-  Need to provide better support to alleviate duplication of test code. There
   are some recurrent test patterns for which helper functions should be
   provided. For example, bringing up all CPUs on the platform and executing the
   same function on all of them, or programming an interrupt and waiting for it
   to trigger.

-  Every CPU that participates in a test must return from the test function. If
   it does not - e.g. because it powered itself off for testing purposes - then
   the test framework will wait forever for this CPU. This limitation is too
   restrictive for some tests.

-  No protection against interrupted flash operations. If the target is reset
   while some data is written to flash, the test framework might behave
   incorrectly on reset.

-  When compiling the code, if the generation of the tests_list.c and/or
   tests_list.h files fails, the build process is not aborted immediately and
   will only fail later on.

-  The directory layout is confusing. Most of the test framework code has been
   moved under the ``tftf/`` directory to better isolate it but this effort is
   not complete. As a result, there are still some TFTF files scattered around.

Tests
~~~~~

-  Some tests are implemented for AArch64 only and are skipped on AArch32.

-  Some tests are not robust enough:

   -  Some tests might hang in some circumstances. For example, they might wait
      forever for a condition to become true.

   -  Some tests rely on arbitrary time delays instead of proper synchronization
      when executing order-sensitive steps.

   -  Some tests have been implemented in a practical manner: they seem to work
      on actual hardware but they make assumptions that are not guaranteed by
      the Arm architecture. Therefore, they might fail on some other platforms.

-  PSCI stress tests are very unreliable and will often hang. The root cause is
   not known for sure but this might be due to bad synchronization between CPUs.

-  The GICv2 spurious IRQ test is Juno-specific. In reality, it should only be
   GICv2-specific. It should be reworked to remove any platform-specific
   assumption.

-  The GICv2 spurious IRQ test sometimes fails with the following error message:

   ``SMC @ lead CPU returned 0xFFFFFFFF 0x8 0xC``

   The root cause is unknown.

-  The manual tests in AArch32 mode do not work properly. They save some state
   information into non-volatile memory in order to detect the reset reason but
   this state does not appear to be retained. As a result, these tests keep
   resetting infinitely.

-  The FWU tests take a long time to complete. This is because they wait for the
   watchdog to reset the system. On FVP, TF-A configures the watchdog period to
   about 4 min. This is way too long in an automated testing context. Besides,
   the user gets not feedback, which may let them think that the tests are not
   working properly.

-  The test "Target timer to a power down cpu" sometimes fails with the
   following error message:

   ``Expected timer switch: 4 Actual: 3``

   The root cause is unknown.

FWU images
~~~~~~~~~~

-  The FWU tests do not work on the revC of the Base AEM FVP. They only work on
   the revB.

-  NS-BL1U and NS-BL2U images reuse TFTF-specific code for legacy reasons. This
   is not a clean design and may cause confusion.

Cactus test secure partition
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

-  Cactus is experimental code. It's likely to change a lot as the secure
   partition software architecture evolves.

-  Fails to link with GNU toolchain 7.3.1.

-  Cactus is supported on AArch64 FVP platform only.

All test images
~~~~~~~~~~~~~~~

-  TF-A Tests are derived from a fork of TF-A so:

    -  they've got some code in common but lag behind on some features.

    -  there might still be some irrelevant references to TF-A.

-  Some design issues.
   E.g. TF-A Tests inherited from the I/O layer of TF-A, which still needs a
   major rework.

-  Cannot build TF-A Tests with Clang. Only GCC is supported.

-  The build system does not cope well with parallel building. The user should
   not attempt to run multiple jobs in parallel with the ``-j`` option of `GNU
   make`.

-  The build system does not properly track build options. A clean build must be
   performed every time a build option changes.

-  SMCCC v2 is not properly supported.

-  UUIDs are not compliant to RFC 4122.

-  No floating point support. The code is compiled with GCC flag
   ``-mgeneral-regs-only``, which prevents the compiler from generating code
   that accesses floating point registers. This might limit some test scenarios.

-  The documentation is too lightweight.

--------------

*Copyright (c) 2018-2022, Arm Limited. All rights reserved.*

.. _Arm Neoverse Reference Design N1 Edge (RD-N1-Edge): https://developer.arm.com/products/system-design/reference-design/neoverse-reference-design
.. _Arm SGI-575: https://developer.arm.com/products/system-design/fixed-virtual-platforms
