blob: 136bbd49473b8decfc068b8234658c9481c11277 [file] [log] [blame]
Paul Beesleyec7988c2019-10-24 11:57:00 +00001Change Log & Release Notes
2==========================
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +02003
4Please note that the Trusted Firmware-A Tests version follows the Trusted
5Firmware-A version for simplicity. At any point in time, TF-A Tests version
6`x.y` aims at testing TF-A version `x.y`. Different versions of TF-A and TF-A
7Tests are not guaranteed to be compatible. This also means that a version
8upgrade on the TF-A-Tests side might not necessarily introduce any new feature.
9
Bipin Ravi024685e2021-05-06 14:32:52 -050010Version 2.5
11-----------
12
13New features
14^^^^^^^^^^^^
15- More tests are made available in this release to help validate the
16 functionalities in the following areas:
17 - True Random Number Generator (TRNG) test scenarios.
18 - Multicore / Power State Controller Interface (PSCI) tests.
19 - v8.6 Activity Monitors Unit (AMU) enhancements test scenarios.
20 - Secure Partition Manager (SPM) / Firmware Framework (FF-A) v1.0 testing.
21 - Interrupt Handling between Non-secure and Secure world.
22 - Direct messages and memory sharing between Secure Partitions(SP).
23 - Many tests to exercise FF-A v1.0 ABIs.
24 - SPM saving/restoring the NS SIMD context enabling a normal world FF-A
25 endpoint (TFTF) and a secure partition to use SIMD vectors and
26 instructions independently.
27
28TFTF
29~~~~
30
31- SPM / FF-A v1.0 testing.
32 - Refactor FF-A memory sharing tests
33 - Created helper functions to initialize ffa_memory_region and to send
34 the respective memory region to the SP, making it possible to reuse
35 the logic in SP-to-SP memory share tests.
36 - Added comments to document relevant aspects about memory sharing.
37
38 - Trigger direct messaging between SPs.
39 - Use cactus command 'CACTUS_REQ_ECHO_SEND_CMD' to make cactus SPs
40 communicate with each other using direct message interfaces.
41
42 - Added helpers for SPM tests.
43 - Checking SPMC has expected FFA_VERSION.
44 - Checking that expected FF-A endpoints are deployed in the system.
45 - Getting global TFTF mailbox.
46
47- Replace '.inst' AArch64 machine directives with CPU Memory Tagging Extension
48 instructions in 'test_mte_instructions' function.
49
50- Add build option for Arm Feature Modifiers.
51 - This patch adds a new ARM_ARCH_FEATURE build option to add support
52 for compiler's feature modifiers.
53
54- Enable 8 cores support for Theodul DSU(DynamIQ Shared Unit) for the
55 Total Compute (TC0) platform.
56
57- New tests:
58
59 - Remove redundant code and add better tests for TRNG SMCs.
60 - Tests that the Version, Features, and RND calls conform to the spec.
61
62 - New tests for v8.6 AMU enhancements (FEAT_AMUv1p1)
63 - Make sure AMU offsets are being saved and restored properly.
64
65 - Tests to request SP-to-SP memory share.
66
67 - SP-to-SP direct messaging deadlock test.
68 - TFTF sends CACTUS_REQ_DEADLOCK_CMD to cactus SP.
69
70Cactus(Secure-EL1 test partition)
71~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
72
73- Enable managed exit for primary cactus secure partition.
74
75- Helper commands needed for interrupt testing.
76
77- Add handler from managed exit FIQ interrupt.
78
79- Make ffa_id global.
80
81- Implement HF_INTERRUPT_ENABLE Hafnium hypervisor call wrapper. With this
82 service, a secure partition calls into the SPMC to enable/disable a
83 particular virtual interrupt.
84
85- Invalidate the data cache for the cactus image.
86
87- Helper commands needed for interrupt testing.
88 - CACTUS_SLEEP_CMD & CACTUS_INTERRUPT_CMD added.
89
90- Decouple exception handling from tftf framework.
91 - With new interrupt related tests coming up in Cactus, added separate
92 exception handler code for irq/fiq in Cactus.
93
94- Hypervisor calls moved to a separate module.
95
96- Add secondary entry point register function.
97
98- Declare third SP instance as UP SP.
99
100- Provision a cold boot path for secondary cores (or secondary pinned
101 execution contexts).
102
103- Tidy message loop, commands definitions, direct messaging API definitions.
104
105- Helpers for error logging after FF-A calls.
106
107- Properly placing Cactus test files.
108
109- Tidying FF-A Memory Sharing tests.
110
111- Use CACTUS_ECHO_CMD in direct message tests.
112
113- Refactor handling of commands.
114 - Added helper macros to define a command handler, build a command table
115 in which each element is a pair of the handler and respective command
116 ID. Available tests have been moved to their own command handler.
117
118- Extend arguments in commands responses.
119 - In the test commands framework, added template to extend number of
120 values to include in a command response.
121
122- Check FF-A return is a valid direct response.
123 - Added a helper function to check if return of FFA_MSG_SEND_DIRECT_REQ
124 is FFA_MSG_SEND_DIRECT_RESP.
125
126- FFA_MSG_DIRECT_RESP call extended to use 5 registers.
127
128- Added accessors for arguments from FF-A calls.
129 - Some accessors for arguments from FF-A calls, namely for func id, error
130 code, and direct message destination/source.
131
132- Use virtual counter for sp_sleep.
133 - Changes sp_sleep() to use virtual counter instead of physical counter.
134
135- Checks if SIMD vectors are preserved in the normal world while transitioning
136 from normal world to secure world and back to normal world.
137
138- Tidying common code to tftf and cactus.
139
140- Refactor cactus_test_cmds.h to incorporate static inline functions instead
141 of macros to enforce type checking.
142
143- Removed reference to Hafnium in name from helper function and macro to
144 make them generic.
145
146- For consistency added the cmd id 'CACTUS_MEM_SEND_CMD'.
147
148- Add command to request memory sharing between SPs.
149
150- Add & handle commands 'CACTUS_REQ_ECHO_CMD' and 'CACTUS_ECHO_CMD'.
151
152- Update README with list of sample partitions.
153
154- Remove reference to PSA from xml test file.
155
156- Reduce tests verbosity in release mode.
157 - Update few NOTICE messages to VERBOSE/INFO.
158
159- Fix conversion issues on cactus responses.
160
161- Create RXTX map/configure helper macros and use them.
162
163- Update OP-TEE version used for testing to 3.10.
164 - SPMC as S-EL1 tests using OP-TEE depend on a static binary stored as
165 a CI file. This binary corresponds to a build of OP-TEE v3.10.
166
167- Add uart2 to device-regions node.
168 - First SP no longer has an open access to the full system peripheral
169 range and devices must be explicitly declared in the SP manifest.
170
171- New tests:
172
173 - Test for exercising SMMUv3 driver to perform stage2 translation.
174
175 - Test handling of non-secure interrupt while running SP.
176
177 - Add secondary cores direct messaging test for SPM.
178
179 - Testing deadlock by FF-A direct message.
180 - Added command CACTUS_DEADLOCK_CMD to file cactus_test_cmds.h to create
181 a deadlock scenario using FF-A direct message interfaces.
182
183 - Test SP-to-SP memory share operations
184 - Handle 'CACTUS_REQ_MEM_SEND_CMD' by sending memory to the receiver SP.
185
186 - Implemented test to validate FFA_RXTX_MAP ABI.
187
Manish V Badarkhe983f1952020-10-04 18:33:44 +0100188Version 2.4
189-----------
190
191New features
192^^^^^^^^^^^^
193- More tests are made available in this release to help validate the
194 functionalities in the following areas:
195 - SMCCC.
196 - New architecture specific features.
197 - FF-A features.
198 - New platform ports.
199
200- Various improvements to test framework and test suite such as documentation,
201 removing un-necessary dependencies, etc.
202
203TFTF
204~~~~
205
206- Remove dependencies from FVP to generic code by converting some FVP platform
207 specific macros to the common macros.
208
209- Remove make as a package dependency to compile TF-A test code.
210
211- Move defaults values and macro defs in a separate folder from Makefile.
212
213- Allow alternate stdout to be used apart from pl011 UART.
214
215- Get FVP platform's topology from build options to make FVP platform
216 configuration more flexible and eliminate test errors when the platform
217 is configured with number of CPUs less than default values in the makefile.
218
219- Update the FIP corrupt address which is used to corrupt BL2 image that helps
220 to trigger firmware update process.
221
222- Add explicit barrier before sev() in tftf_send_event_common API to avoid
223 core hang.
224
225- Align output properly on issuing make help_tests by removing dashes
226 and sort tests.
227
228- Moved a few FVP and Juno specific defined from common header files to platform
229 specific header files.
230
231- Replace SPCI with PSA FF-A in code as SPCI is now called as FF-A.
232
233- Add owner field to sp_layout generation to differentiate owner of SP which
234 could either be Silicon Provider or Platform provider.
235
236- Add v8.5 Branch Target Identifier(BTI) support in TFTF.
237
238- Remove dependency on SYS_CNT_BASE1 to read the memory mapped timers.
239
240- Enables SError aborts for all CPUs, during their power on sequence.
241
242- Documentation:
243
244 - Use conditional assignment on sphinx variables so that they can be
245 overwritten by environment and/or command line.
246
247 - Add support for documentation build as a target in Makefile.
248
249 - Update list of maintainers.
250
251 - Update documentation to explain how to locally build the documentation.
252
253 - Add .editorconfig from TF-A to define the coding style.
254
255 - Fix documentation to include 'path/to' prefix when specifying tftf.bin on
256 make fip cmd.
257
258 - Use docker to build documentation.
259
260 - Replace SPCI with PSA FF-A in documentation as SPCI is now called
261 as FF-A.
262
263- NVIDIA Tegra194:
264
265 - Skip CPU suspend tests requiring SGI as wake source as Tegra194 platforms
266 do not support CPU suspend power down and cannot be woken up with an SGI.
267
268 - Disable some system suspend test cases.
269
270 - Create dummy SMMU context for system resume to allow the System Resume
271 Firmware to complete without any errors or warnings.
272
273 - Increase RTC step value to 5ms as RTC consumes 250us for each register
274 read/write. Increase the step value to 5ms to cover all the register
275 read/write in program_timer().
276
277 - Skip some timer framework validation tests as CPUs on Tegra194 platforms
278 cannot be woken up with the RTC timer interrupt after power off.
279
280 - Introduce per-CPU Hypervisor Timer Interrupt ID.
281
282 - Skip PSCI STAT tests requiring PSTATE_TYPE_POWERDOWN as Tegra194 platforms
283 do not support CPU suspend with state type as PSTATE_TYPE_POWERDOWN.
284
285 - Disable boot requirement tests as Tegra194 platforms do not support memory
286 mapped timers.
287
288 - Skips the test "Create all power states and validate EL3 power state parsing"
289 from the "EL3 power state parser validation" test suite as it is not in
290 sync with this expectation.
291
292 - Moved reset, timers. wake, watchdog drivers from Tegra194 specific folder to
293 common driver folder so that these drivers can be used for other NVIDIA platforms.
294
295- New tests:
296
297 - Add test for SDEI RM_ANY routing mode.
298
299 - Add initial platform support for TC0.
300
301 - Add SMC fuzzing module test.
302
303 - Add test case for SMCCC_ARCH_SOC_ID feature.
304
305 - Add test that supports ARMv8.6-FGT in TF-A.
306
307 - Add test that supports ARMv8.6-ECV in TF-A.
308
309 - Add test for FFA_VERSION interface.
310
311 - Add test for FFA_FEATURES interface.
312
313 - Add console driver for the TI UART 16550.
314
315 - Add tests for FF-A memory sharing interfaces between tftf
316 and cactus secure partitions.
317
318 - NVIDIA Tegra194:
319
320 - Introduce platform port for Tegra194 to to initialize the tftf
321 framework and execute tests on the CPUs.
322
323 - Introduce power management support.
324
325 - Introduce support for RTC as wake source.
326
327 - Introduce system reset functionality test.
328
329 - Introduce watchdog timer test.
330
331 - Introduce support for NVIDIA Denver CPUs.
332
333 - Introduce RAS uncorrectable error injection test.
334
335 - Introduce tests to verify the Video Memory resize interface.
336
337 - Introduce test to inject RAS corrected errors for all supported
338 nodes from all CPUs.
339
340 - Introduce a test to get return value from SMC SiP function
341 TEGRA_SIP_GET_SMMU_PER.
342
343 - NVIDIA Tegra196:
344
345 - Introduce initial support for Tegra186 platforms.
346
347 - NVIDIA Tegra210:
348
349 - Introduce initial support for Tegra210 platforms.
350
351Secure partition - Cactus
352~~~~~~~~~~~~~~~~~~~~~~~~~
353
354- TFTF doesn't need to boot Secondary Cactus as Hafnium now boots all
355 partitions according to "boot-order" field value in the partition
356 manifests.
357
358- Remove test files related to deprecated SPCI Alpha specification and
359 SPRT interface.
360
361- Select different stdout device at runtime as primary VM can access
362 to UART while secondary VM's use hypervisor call to SPM for debug
363 logging.
364
365- An SP maps its RX/TX buffers in its EL1&0 Stage-1 translation regime.
366 The same RX/TX buffers are mapped by the SPMC in the SP's EL1&0
367 Stage-2 translation regime during boot time.
368
369- Update memory/device region nodes in manifest. Memory region has 3
370 entries such as RX buffer, TX buffer and dummy. These memory region
371 entries are mapped with attributes as "RX buffer: read-only",
372 "TX buffer: read-write" and "dummy: read-write-execute".
373 Device region mapped with read-write attribute.
374
375- Create tertiary partition without RX_TX region specified to test the
376 RXTX_MAP API.
377
378- Add third partition to ffa_partition_info_get test to test that a
379 partition can successfully get information about the third cactus
380 partition.
381
382- Map RXTX region to third partition to point the mailbox to this RXTX
383 region.
384
385- Adjust the number of EC context to max number of PEs as per the FF-A
386 specification mandating that a SP must either "Implement as many ECs
387 as the number of PEs (in case of a "multi-processor" SP with pinned
388 contexts)" or "Implement a single EC (in case of a migratable
389 "uni-processor" SP).
390
391- Updated cactus test payload and TFTF ids as it is decided to have
392 secure partition FF-A ids in the range from 0x8001 to 0xfffe, 0x8000
393 and 0xffff FF-A ids are reserved for the SPMC and the SPMD respectively
394 and in the non-secure worlds, FF-A id 0 is reserved for the hypervisor
395 and 1 to 0x7fff FF-A ids are reserved for VMs.
396
397- Break the message loop on bad message request instead of replying
398 with the FF-A error ABI to the SPMC.
399
400- Remove deprecated hypervisor calls spm_vm_get_count and spm_vcpu_get_count.
401 Instead use FFA_PARTITION_INFO_GET discovery ABI.
402
403- Implement hvc call 'SPM_INTERRUPT_GET' to get interrupt id.
404
405- Re-structure platform dependent files by moving platform dependent files
406 and macros to platform specific folder.
407
408- Adjust partition info get properties to support receipt of direct
409 message request.
410
411- New tests:
412
413 - Add FFA Version Test.
414
415 - Add FFA_FEATURES test.
416
417 - Add FFA_MEM_SHARE test
418
419 - Add FFA_MEM_LEND test.
420
421 - Add FFA_MEM_DONATE test.
422
423 - Add FFA_PARTITION_INFO_GET test.
424
425 - Add exception/interrupt framework.
426
427 - Add cactus support for TC0 platform.
428
429Issues resolved since last release
430^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
431
432- Update link to SMCCC specification.
433
434- Trim down the top-level readme file to give brief overview of the project
435 and also fix/update a number of broken/out-dated links in it.
436
437- Bug fix in Multicore IRQ spurious test.
438
439- Fix memory regions mapping with no NS bit set.
440
441- Reenable PSCI NODE_HW_STATE test which was disabled earlier due to
442 outdated SCP firmware.
443
444- Fix Aarch32 zeromem() function by avoiding infinite loop in 'zeromem'
445 function and optimizing 'memcpy4' function.
446
447- Add missing help_tests info on help target in the top-level Makefile.
448
449- Trim down the readme file as it does not need to provide detailed
450 information, instead it can simply be a landing page providing a brief
451 overview of the project and redirecting the reader to RTD for further
452 information.
453
454- Fix maximum number of CPUs in DSU cluster by setting maximum number of CPUs
455 in DSU cluster to 8.
456
Madhukar Pappireddy6ec644e2020-04-08 15:44:38 -0500457Version 2.3
458-----------
459
460New features
461^^^^^^^^^^^^
462
463- More tests are made available in this release to help validate
464 the functionality of TF-A.
465
466- CI upgraded to use GCC 9.2-2019.12 toolchain for tf-a-tests.
467
468- Various improvements to test framework and test suite.
469
470TFTF
471~~~~
472
473- Support for extended register usage as per SMCCC v1.2 specification.
474
475- Support for FVP platforms with SMT capabilities.
476
477- Improved support for documentation through addition of basic Sphinx
478 configuration and Makefile similar to TF-A repository.
479
480- Enhancement to libc library synchronous to TF-A code base.
481
482- ARMv8.3-PAuth enabled for all FWU tests in TFTF.
483
484- TFTF made RFC 4122 compliant by converting UUIDs to network order format.
485
486- Build improvement by deprecating custom AARCH64/AARCH32 macros in favor of
487 __arch64__ macro provided by compiler.
488
489- Support for HVC as a SMCCC conduit in TFTF.
490
491- New tests:
492
493 - AArch32 tests for checking if PMU counters leak in secure world.
494
495 - Add new debug filesystem (debugfs) test.
496
497 - Add a SPCI direct messaging test targeting bare-metal cactus SP.
498
499
500Secure partitions
501~~~~~~~~~~~~~~~~~
502
503Cactus
504~~~~~~
505
506- Several build improvements and symbol relocation fixup to make it position
507 independent executable.
508
509- Update of sample manifest to SPCI Beta1 format.
510
511- Support for generating JSON file as required by TF-A.
512
513Issues resolved since last release
514^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
515
516- Makefile bug fix for performing parallel builds.
517
518- Add missing D-cache invalidation of RW memory in tftf_entrypoint to safeguard
519 against possible corruption.
520
521- Fixes in GIC drivers to support base addresses beyond 4G range.
522
523- Fix build with XML::LibXML 2.0202 Perl module
524
525Known issues and limitations
526^^^^^^^^^^^^^^^^^^^^^^^^^^^^
527
528The sections below list the known issues and limitations of each test image
529provided in this repository. Unless and otherwise stated, issues and limitations
530stated in previous release continue to exist in this release.
531
532TFTF
533~~~~
534- NODE_HW_STATE test has been temporarily disabled for sgi575 platform due to a
535 dependency on SCP binaries version 2.5
536
Paul Beesleyec7988c2019-10-24 11:57:00 +0000537Version 2.2
538-----------
Madhukar Pappireddy0468ac02019-10-10 02:30:40 -0500539
540New features
Paul Beesleyec7988c2019-10-24 11:57:00 +0000541^^^^^^^^^^^^
Madhukar Pappireddy0468ac02019-10-10 02:30:40 -0500542
543- A wide range of tests are made available in this release to help validate
544 the functionality of TF-A.
545
546- Various improvements to test framework and test suite.
547
548TFTF
Paul Beesleyec7988c2019-10-24 11:57:00 +0000549~~~~
Madhukar Pappireddy0468ac02019-10-10 02:30:40 -0500550
551- Enhancement to xlat table library synchronous to TF-A code base.
552
553- Enabled strict alignment checks (SCTLR.A & SCTLR.SA) in all images.
554
555- Support for a simple console driver. Currently it serves as a placeholder
556 with empty functions.
557
558- A topology helper API is added in the framework to get parent node info.
559
560- Support for FVP with clusters having upto 8 CPUs.
561
562- Enhanced linker script to separate code and RO data sections.
563
564- Relax SMC calls tests. The SMCCC specification recommends Trusted OSes to
565 mitigate the risk of leaking information by either preserving the register
566 state over the call, or returning a constant value, such as zero, in each
567 register. Tests only allowed the former behaviour and have been extended to
568 allow the latter as well.
569
570- Pointer Authentication enabled on warm boot path with individual APIAKey
571 generation for each CPU.
572
573- New tests:
574
575 - Basic unit tests for xlat table library v2.
576
577 - Tests for validating SVE support in TF-A.
578
579 - Stress tests for dynamic xlat table library.
580
581 - PSCI test to measure latencies when turning ON a cluster.
582
583 - Series of AArch64 tests that stress the secure world to leak sensitive
584 counter values.
585
586 - Test to validate PSCI SYSTEM_RESET call.
587
588 - Basic tests to validate Memory Tagging Extensions are being enabled and
589 ensuring no undesired leak of sensitive data occurs.
590
591- Enhanced tests:
592
593 - Improved tests for Pointer Authentication support. Checks are performed
594 to see if pointer authentication keys are accessible as well as validate
595 if secure keys are being leaked after a PSCI version call or TSP call.
596
597 - Improved AMU test to remove unexecuted code iterating over Group1 counters
598 and fix the conditional check of AMU Group0 counter value.
599
600Secure partitions
Paul Beesleyec7988c2019-10-24 11:57:00 +0000601~~~~~~~~~~~~~~~~~
Madhukar Pappireddy0468ac02019-10-10 02:30:40 -0500602
603A new Secure Partition Quark is introduced in this release.
604
605Quark
Paul Beesleyec7988c2019-10-24 11:57:00 +0000606~~~~~
Madhukar Pappireddy0468ac02019-10-10 02:30:40 -0500607
608The Quark test secure partition provided is a simple service which returns a
609magic number. Further, a simple test is added to test if Quark is functional.
610
611Issues resolved since last release
Paul Beesleyec7988c2019-10-24 11:57:00 +0000612^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Madhukar Pappireddy0468ac02019-10-10 02:30:40 -0500613
614- Bug fix in libc memchr implementation.
615
616- Bug fix in calculation of number of CPUs.
617
618- Streamlined SMC WORKAROUND_2 test and fixed a false fail on Cortex-A76 CPU.
619
620- Pointer Authentication support is now available for secondary CPUs and the
621 corresponding tests are stable in this release.
622
623Known issues and limitations
Paul Beesleyec7988c2019-10-24 11:57:00 +0000624^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Madhukar Pappireddy0468ac02019-10-10 02:30:40 -0500625
626The sections below list the known issues and limitations of each test image
627provided in this repository. Unless and otherwise stated, issues and limitations
628stated in previous release continue to exist in this release.
629
630TFTF
Paul Beesleyec7988c2019-10-24 11:57:00 +0000631~~~~
Madhukar Pappireddy0468ac02019-10-10 02:30:40 -0500632- Multicore spurious interrupt test is observed to have unstable behavior. As a
633 temporary solution, this test is skipped for AArch64 Juno configurations.
634
635- Generating SVE instructions requires `O3` compilation optimization. Since the
636 current build structure does not allow compilation flag modification for
637 specific files, the function which tests support for SVE has been pre-compiled
638 and added as an assembly file.
639
640
Sandrine Bailleux34da0662019-03-28 09:34:55 +0100641
Paul Beesleyec7988c2019-10-24 11:57:00 +0000642Version 2.1
643-----------
Sandrine Bailleux34da0662019-03-28 09:34:55 +0100644
645New features
Paul Beesleyec7988c2019-10-24 11:57:00 +0000646^^^^^^^^^^^^
Sandrine Bailleux34da0662019-03-28 09:34:55 +0100647
648- Add initial support for testing Secure Partition Client Interface (SPCI)
649 and Secure Partition Run-Time (SPRT) standards.
650
651 Exercise the full communication flow throughout the software stack, involving:
652
653 - A Secure-EL0 test partition as the Trusted World agent.
654
655 - TFTF as the Normal World agent.
656
657 - The Secure Partition Manager (SPM) in TF-A.
658
659- Various stability improvements, code refactoring and clean ups.
660
661TFTF
Paul Beesleyec7988c2019-10-24 11:57:00 +0000662~~~~
Sandrine Bailleux34da0662019-03-28 09:34:55 +0100663
664- Reorganize tests build infrastructure to allow the selection of a subset of
665 tests.
666
667- Reorganize the platform layer for improved clarity and simplicity.
668
669- Sanitise inclusion of drivers header files.
670
671- Enhance the test report format for improved clarity and conciseness.
672
673- Dump CPU registers when hitting an unexpected exception. Previously, this
674 would silently loop forever.
675
676- Import libc from TF-A to better align the two code bases.
677
678- New tests:
679
680 - SPM tests for exercising communication through either the MM or SPCI/SPRT
681 interfaces.
682
683 - SMC calling convention tests.
684
685 - Initial tests for Armv8.3 Pointer Authentication support (experimental).
686
687- New platform ports:
688
689 - `Arm SGI-575`_ FVP.
690
691 - Hikey960 board (experimental).
692
693 - `Arm Neoverse Reference Design N1 Edge (RD-N1-Edge)`_ FVP (experimental).
694
695Secure partitions
Paul Beesleyec7988c2019-10-24 11:57:00 +0000696~~~~~~~~~~~~~~~~~
Sandrine Bailleux34da0662019-03-28 09:34:55 +0100697
698We now have 3 Secure Partitions to test the SPM implementation in TF-A.
699
700Cactus-MM
701'''''''''
702
703The Cactus test secure partition provided in version 2.0 has been renamed into
704"*Cactus-MM*". It is still responsible for testing the SPM implementation based
705on the Arm Management Mode Interface.
706
707Cactus
708''''''
709
710This is a new test secure partition (as the former "*Cactus*" has been renamed
711into "*Cactus-MM*", see above).
712
713Unlike *Cactus-MM*, this image tests the SPM implementation based on the SPCI
714and SPRT draft specifications.
715
716It runs in Secure-EL0 and performs the following tasks:
717
718- Test that TF-A has correctly setup the secure partition environment (access
719 to cache maintenance operations, to floating point registers, etc.)
720
721- Test that TF-A accepts to change data access permissions and instruction
722 permissions on behalf of Cactus for memory regions the latter owns.
723
724- Test communication with SPM through SPCI/SPRT interfaces.
725
726Ivy
727'''
728
729This is also a new test secure partition. It is provided in order to test
730multiple partitions support in TF-A. It is derived from Cactus and essentially
731provides the same services but with different identifiers at the moment.
732
733EL3 payload
Paul Beesleyec7988c2019-10-24 11:57:00 +0000734~~~~~~~~~~~
Sandrine Bailleux34da0662019-03-28 09:34:55 +0100735
736- New platform ports:
737
738 - `Arm SGI-575`_ FVP.
739
740 - `Arm Neoverse Reference Design N1 Edge (RD-N1-Edge)`_ FVP (experimental).
741
742Issues resolved since last release
Paul Beesleyec7988c2019-10-24 11:57:00 +0000743^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sandrine Bailleux34da0662019-03-28 09:34:55 +0100744
745- The GICv2 spurious IRQ test is no longer Juno-specific. It is now only
746 GICv2-specific.
747
748- The manual tests in AArch32 state now work properly. After investigation,
749 we identified that this issue was not AArch32 specific but concerned any
750 test relying on state information persisting across reboots. It was due to
751 an incorrect build configuration.
752
753- Cactus-MM now successfully links with GNU toolchain 7.3.1.
754
755Known issues and limitations
Paul Beesleyec7988c2019-10-24 11:57:00 +0000756^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sandrine Bailleux34da0662019-03-28 09:34:55 +0100757
758The sections below lists the known issues and limitations of each test image
759provided in this repository.
760
761TFTF
Paul Beesleyec7988c2019-10-24 11:57:00 +0000762~~~~
Sandrine Bailleux34da0662019-03-28 09:34:55 +0100763
764The TFTF test image might be conceptually sub-divided further in 2 parts: the
765tests themselves, and the test framework they are based upon.
766
767Test framework
Paul Beesleyec7988c2019-10-24 11:57:00 +0000768~~~~~~~~~~~~~~
Sandrine Bailleux34da0662019-03-28 09:34:55 +0100769
770- Some stability issues.
771
772- No mechanism to abort tests when they time out (e.g. this could be
773 implemented using a watchdog).
774
775- No convenient way to include or exclude tests on a per-platform basis.
776
777- Power domains and affinity levels are considered equivalent but they may
778 not necessarily be.
779
780- Need to provide better support to alleviate duplication of test code. There
781 are some recurrent test patterns for which helper functions should be
782 provided. For example, bringing up all CPUs on the platform and executing the
783 same function on all of them, or programming an interrupt and waiting for it
784 to trigger.
785
786- Every CPU that participates in a test must return from the test function. If
787 it does not - e.g. because it powered itself off for testing purposes - then
788 the test framework will wait forever for this CPU. This limitation is too
789 restrictive for some tests.
790
791- No protection against interrupted flash operations. If the target is reset
792 while some data is written to flash, the test framework might behave
793 incorrectly on reset.
794
795- When compiling the code, if the generation of the ``tests_list.c`` and/or
796 ``tests_list.h`` files fails, the build process is not aborted immediately
797 and will only fail later on.
798
799- The directory layout requires further improvements. Most of the test
800 framework code has been moved under the ``tftf/`` directory to better isolate
801 it but this effort is not complete. As a result, there are still some TFTF
802 files scattered around.
803
804- Pointer Authentication testing is experimental and incomplete at this stage.
805 It is only enabled on the primary CPU on the cold boot.
806
807Tests
Paul Beesleyec7988c2019-10-24 11:57:00 +0000808~~~~~
Sandrine Bailleux34da0662019-03-28 09:34:55 +0100809
810- Some tests are implemented for AArch64 only and are skipped on AArch32.
811
812- Some tests are not robust enough:
813
814 - Some tests might hang in some circumstances. For example, they might wait
815 forever for a condition to become true.
816
817 - Some tests rely on arbitrary time delays instead of proper synchronization
818 when executing order-sensitive steps.
819
820 - Some tests have been implemented in a practical manner: they seem to work
821 on actual hardware but they make assumptions that are not guaranteed by
822 the Arm architecture. Therefore, they might fail on some other platforms.
823
824- PSCI stress tests are very unreliable and will often hang. The root cause is
825 not known for sure but this might be due to bad synchronization between CPUs.
826
827- The GICv2 spurious IRQ test sometimes fails with the following error message:
828
829 ``SMC @ lead CPU returned 0xFFFFFFFF 0x8 0xC``
830
831 The root cause is unknown.
832
833- The FWU tests take a long time to complete. This is because they wait for the
834 watchdog to reset the system. On FVP, TF-A configures the watchdog period to
835 about 4 min. This limit is excessive for an automated testing context and
836 leaves the user without feedback and unable to determine if the tests are
837 proceeding properly.
838
839- The test "Target timer to a power down cpu" sometimes fails with the
840 following error message:
841
842 ``Expected timer switch: 4 Actual: 3``
843
844 The root cause is unknown.
845
846FWU images
Paul Beesleyec7988c2019-10-24 11:57:00 +0000847~~~~~~~~~~
Sandrine Bailleux34da0662019-03-28 09:34:55 +0100848
849- The FWU tests do not work on the revC of the Base AEM FVP. They only work on
850 the revB.
851
852- NS-BL1U and NS-BL2U images reuse TFTF-specific code for legacy reasons. This
853 is not a clean design and may cause confusion.
854
855Test secure partitions (Cactus, Cactus-MM, Ivy)
Paul Beesleyec7988c2019-10-24 11:57:00 +0000856~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sandrine Bailleux34da0662019-03-28 09:34:55 +0100857
858- This is experimental code. It's likely to change a lot as the secure
859 partition software architecture evolves.
860
861- Supported on AArch64 FVP platform only.
862
863All test images
Paul Beesleyec7988c2019-10-24 11:57:00 +0000864~~~~~~~~~~~~~~~
Sandrine Bailleux34da0662019-03-28 09:34:55 +0100865
866- TF-A Tests are derived from a fork of TF-A so:
867
868 - they've got some code in common but lag behind on some features.
869
870 - there might still be some irrelevant references to TF-A.
871
872- Some design issues.
873 E.g. TF-A Tests inherited from the I/O layer of TF-A, which still needs a
874 major rework.
875
876- Cannot build TF-A Tests with Clang. Only GCC is supported.
877
878- The build system does not cope well with parallel building. The user should
879 not attempt to run multiple jobs in parallel with the ``-j`` option of `GNU
880 make`.
881
882- The build system does not properly track build options. A clean build must be
883 performed every time a build option changes.
884
885- UUIDs are not compliant to RFC 4122.
886
887- No floating point support. The code is compiled with GCC flag
888 ``-mgeneral-regs-only``, which prevents the compiler from generating code
889 that accesses floating point registers. This might limit some test scenarios.
890
891- The documentation is too lightweight.
892
893- Missing instruction barriers in some places before reading the system counter
894 value. As a result, the CPU could speculatively read it and any delay loop
895 calculations might be off (because based on stale values). We need to examine
896 all such direct reads of the ``CNTPCT_EL0`` register and replace them with a
897 call to ``syscounter_read()`` where appropriate.
898
Paul Beesleyec7988c2019-10-24 11:57:00 +0000899Version 2.0
900-----------
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +0200901
902New features
Paul Beesleyec7988c2019-10-24 11:57:00 +0000903^^^^^^^^^^^^
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +0200904
905This is the first public release of the Trusted Firmware-A Tests source code.
906
907TFTF
Paul Beesleyec7988c2019-10-24 11:57:00 +0000908~~~~
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +0200909
910- Provides a baremetal test framework to exercise TF-A features through its
911 ``SMC`` interface.
912
913- Integrates easily with TF-A: the TFTF binary is packaged in the FIP image
914 as a ``BL33`` component.
915
916- Standalone binary that runs on the target without human intervention (except
917 for some specific tests that require a manual target reset).
918
919- Designed for multi-core testing. The various sub-frameworks allow maximum
920 parallelism in order to stress the firmware.
921
922- Displays test results on the UART output. This may then be parsed by an
923 external tool and integrated in a continuous integration system.
924
925- Supports running in AArch64 (NS-EL2 or NS-EL1) and AArch32 states.
926
927- Supports parsing a tests manifest (XML file) listing the tests to include in
928 the binary.
929
930- Detects most platform features at run time (e.g. topology, GIC version, ...).
931
932- Provides a topology enumeration framework. Allows tests to easily go through
933 affinity levels and power domain nodes.
934
935- Provides an event framework to synchronize CPU operations in a multi-core
936 context.
937
938- Provides a timer framework. Relies on a single global timer to generate
939 interrupts for all CPUs in the system. This allows tests to easily program
940 interrupts on demand to use as a wake-up event source to come out of CPU
941 suspend state for example.
942
943- Provides a power-state enumeration framework. Abstracts the valid power
944 states supported on the platform.
945
946- Provides helper functions for power management operations (CPU hotplug,
947 CPU suspend, system suspend, ...) with proper saving of the hardware state.
948
949- Supports rebooting the platform at the end of each test for greater
950 independence between tests.
951
952- Supports interrupting and resuming a test session. This relies on storing
953 test results in non-volatile memory (e.g. flash).
954
955FWU images
Paul Beesleyec7988c2019-10-24 11:57:00 +0000956~~~~~~~~~~
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +0200957
958- Provides example code to exercise the Firmware Update feature of TF-A.
959
960- Tests the robustness of the FWU state machine implemented in the TF-A by
961 sending valid and invalid authentication, copy and image execution requests
962 to the TF-A BL1 image.
963
964EL3 test payload
Paul Beesleyec7988c2019-10-24 11:57:00 +0000965~~~~~~~~~~~~~~~~
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +0200966
967- Tests the ability of TF-A to load an EL3 payload.
968
969Cactus test secure partition
Paul Beesleyec7988c2019-10-24 11:57:00 +0000970~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +0200971
972- Tests that TF-A has correctly setup the secure partition environment: it
973 should be allowed to perform cache maintenance operations, access floating
974 point registers, etc.
975
976- Tests the ability of a secure partition to request changing data access
977 permissions and instruction permissions of memory regions it owns.
978
979- Tests the ability of a secure partition to handle StandaloneMM requests.
980
981Known issues and limitations
Paul Beesleyec7988c2019-10-24 11:57:00 +0000982^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +0200983
984The sections below lists the known issues and limitations of each test image
985provided in this repository.
986
987TFTF
Paul Beesleyec7988c2019-10-24 11:57:00 +0000988~~~~
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +0200989
990The TFTF test image might be conceptually sub-divided further in 2 parts: the
991tests themselves, and the test framework they are based upon.
992
993Test framework
Paul Beesleyec7988c2019-10-24 11:57:00 +0000994~~~~~~~~~~~~~~
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +0200995
996- Some stability issues.
997
998- No mechanism to abort tests when they time out (e.g. this could be
999 implemented using a watchdog).
1000
1001- No convenient way to include or exclude tests on a per-platform basis.
1002
1003- Power domains and affinity levels are considered equivalent but they may
1004 not necessarily be.
1005
1006- Need to provide better support to alleviate duplication of test code. There
1007 are some recurrent test patterns for which helper functions should be
1008 provided. For example, bringing up all CPUs on the platform and executing the
1009 same function on all of them, or programming an interrupt and waiting for it
1010 to trigger.
1011
1012- Every CPU that participates in a test must return from the test function. If
1013 it does not - e.g. because it powered itself off for testing purposes - then
1014 the test framework will wait forever for this CPU. This limitation is too
1015 restrictive for some tests.
1016
1017- No protection against interrupted flash operations. If the target is reset
1018 while some data is written to flash, the test framework might behave
1019 incorrectly on reset.
1020
1021- When compiling the code, if the generation of the tests_list.c and/or
1022 tests_list.h files fails, the build process is not aborted immediately and
1023 will only fail later on.
1024
1025- The directory layout is confusing. Most of the test framework code has been
1026 moved under the ``tftf/`` directory to better isolate it but this effort is
1027 not complete. As a result, there are still some TFTF files scattered around.
1028
1029Tests
Paul Beesleyec7988c2019-10-24 11:57:00 +00001030~~~~~
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +02001031
1032- Some tests are implemented for AArch64 only and are skipped on AArch32.
1033
1034- Some tests are not robust enough:
1035
1036 - Some tests might hang in some circumstances. For example, they might wait
1037 forever for a condition to become true.
1038
1039 - Some tests rely on arbitrary time delays instead of proper synchronization
1040 when executing order-sensitive steps.
1041
1042 - Some tests have been implemented in a practical manner: they seem to work
1043 on actual hardware but they make assumptions that are not guaranteed by
1044 the Arm architecture. Therefore, they might fail on some other platforms.
1045
1046- PSCI stress tests are very unreliable and will often hang. The root cause is
1047 not known for sure but this might be due to bad synchronization between CPUs.
1048
1049- The GICv2 spurious IRQ test is Juno-specific. In reality, it should only be
1050 GICv2-specific. It should be reworked to remove any platform-specific
1051 assumption.
1052
1053- The GICv2 spurious IRQ test sometimes fails with the following error message:
1054
1055 ``SMC @ lead CPU returned 0xFFFFFFFF 0x8 0xC``
1056
1057 The root cause is unknown.
1058
1059- The manual tests in AArch32 mode do not work properly. They save some state
1060 information into non-volatile memory in order to detect the reset reason but
1061 this state does not appear to be retained. As a result, these tests keep
1062 resetting infinitely.
1063
1064- The FWU tests take a long time to complete. This is because they wait for the
1065 watchdog to reset the system. On FVP, TF-A configures the watchdog period to
1066 about 4 min. This is way too long in an automated testing context. Besides,
1067 the user gets not feedback, which may let them think that the tests are not
1068 working properly.
1069
1070- The test "Target timer to a power down cpu" sometimes fails with the
1071 following error message:
1072
1073 ``Expected timer switch: 4 Actual: 3``
1074
1075 The root cause is unknown.
1076
1077FWU images
Paul Beesleyec7988c2019-10-24 11:57:00 +00001078~~~~~~~~~~
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +02001079
Sandrine Bailleux7af6c6d2018-10-22 17:09:07 +02001080- The FWU tests do not work on the revC of the Base AEM FVP. They only work on
1081 the revB.
1082
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +02001083- NS-BL1U and NS-BL2U images reuse TFTF-specific code for legacy reasons. This
1084 is not a clean design and may cause confusion.
1085
1086Cactus test secure partition
Paul Beesleyec7988c2019-10-24 11:57:00 +00001087~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +02001088
1089- Cactus is experimental code. It's likely to change a lot as the secure
1090 partition software architecture evolves.
1091
1092- Fails to link with GNU toolchain 7.3.1.
1093
1094- Cactus is supported on AArch64 FVP platform only.
1095
1096All test images
Paul Beesleyec7988c2019-10-24 11:57:00 +00001097~~~~~~~~~~~~~~~
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +02001098
1099- TF-A Tests are derived from a fork of TF-A so:
1100
1101 - they've got some code in common but lag behind on some features.
1102
1103 - there might still be some irrelevant references to TF-A.
1104
1105- Some design issues.
1106 E.g. TF-A Tests inherited from the I/O layer of TF-A, which still needs a
1107 major rework.
1108
1109- Cannot build TF-A Tests with Clang. Only GCC is supported.
1110
1111- The build system does not cope well with parallel building. The user should
1112 not attempt to run multiple jobs in parallel with the ``-j`` option of `GNU
1113 make`.
1114
1115- The build system does not properly track build options. A clean build must be
1116 performed every time a build option changes.
1117
1118- SMCCC v2 is not properly supported.
1119
1120- UUIDs are not compliant to RFC 4122.
1121
1122- No floating point support. The code is compiled with GCC flag
1123 ``-mgeneral-regs-only``, which prevents the compiler from generating code
1124 that accesses floating point registers. This might limit some test scenarios.
1125
1126- The documentation is too lightweight.
1127
1128--------------
1129
Madhukar Pappireddy6ec644e2020-04-08 15:44:38 -05001130*Copyright (c) 2018-2020, Arm Limited. All rights reserved.*
Sandrine Bailleux34da0662019-03-28 09:34:55 +01001131
1132.. _Arm Neoverse Reference Design N1 Edge (RD-N1-Edge): https://developer.arm.com/products/system-design/reference-design/neoverse-reference-design
1133.. _Arm SGI-575: https://developer.arm.com/products/system-design/fixed-virtual-platforms