Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
419 commits
Select commit Hold shift + click to select a range
350e776
Record the memory attributes the relayer maps borrowers with
aidangarske Sep 23, 2026
aaf3cbb
Check a Normal-world direct request at the SPMD before forwarding it
aidangarske Sep 23, 2026
2af87bc
Forward the Normal world's FFA_VERSION to the SPMC as a framework mes…
aidangarske Sep 23, 2026
aa8d654
Encode partition information descriptors at the caller's negotiated F…
aidangarske Sep 23, 2026
14a9469
Hold only a v1.1 or later partition to the NS-bit request in FFA_FEAT…
aidangarske Sep 23, 2026
023c620
Refuse FFA_RUN for a vCPU other than the endpoint's one execution con…
aidangarske Sep 23, 2026
a6bf97c
Return x8-x17 zero in replies to SMC64 FF-A calls
aidangarske Sep 23, 2026
e054aec
Route a declared Secure interrupt taken at S-EL1 like one taken from …
aidangarske Sep 23, 2026
1270575
Note why the ACS partition image band is mapped read and execute only
aidangarske Sep 23, 2026
a8f8c08
Hand SMC32 calls to the monitor handlers and the SPMC with w1-w7 only
aidangarske Sep 23, 2026
54a3e1e
Sign-extend the unknown-function result for an unimplemented SMC64 PS…
aidangarske Sep 23, 2026
1edf733
Give the EL2 controls a Normal world at EL1 runs under known values a…
aidangarske Sep 23, 2026
154fc96
Fail an AArch64 build whose table pool is smaller than its manifest n…
aidangarske Sep 23, 2026
f98c899
Emit the FF-A partition accessor for every 64-bit manifest
aidangarske Sep 23, 2026
7a870c4
Count the parked secondaries again after a warm reset
aidangarske Sep 23, 2026
868bce2
Restore the whole FF-A ACS checkout before patching it for a rebuild
aidangarske Sep 23, 2026
6443617
Fail an FF-A ACS scenario that reports any SIM ERROR
aidangarske Sep 23, 2026
d977d03
Prove the locked-lifecycle vault recovery keeps attestation closed
aidangarske Sep 23, 2026
5e25457
Report SMCCC 1.2 through SMCCC_VERSION and preserve x4-x7 across PSCI…
aidangarske Sep 23, 2026
cce3001
Program ICC_SRE_EL2 so NS-EL1 keeps the GIC system-register interface
aidangarske Sep 23, 2026
089f9d3
Zero x8-x17 of an SMC64 Normal-world call the SPMC answers in x0-x7
aidangarske Sep 23, 2026
de5c278
Clear stale x8-x17 when delivering a reply into a blocked partition
aidangarske Sep 23, 2026
928ccb6
Describe what the Normal-world SMC dispatcher serves
aidangarske Sep 23, 2026
36e51ae
Answer FFA_VERSION from a later caller with the callee version and se…
aidangarske Sep 23, 2026
5518178
Ignore the SBZ bits above the FFA_RXTX_MAP page count
aidangarske Sep 23, 2026
6613f14
Refuse an FFA_FEATURES retrieve query without the NS-bit request as N…
aidangarske Sep 23, 2026
df94a19
Read and answer a v1.0 caller's memory transaction descriptors in the…
aidangarske Sep 23, 2026
4341aef
Donate a region with no more data access than its owner had on every …
aidangarske Sep 24, 2026
4c0aef7
Give a lender back each page's exact permissions, execution included,…
aidangarske Sep 24, 2026
a19af4b
Map the Normal-world window non-global and never grant EL0 over a glo…
aidangarske Sep 24, 2026
cdba0a6
Keep mapped RX/TX buffers out of memory transactions and transaction …
aidangarske Sep 24, 2026
abb5daf
Accept memory donation from the Normal world and track the donated pa…
aidangarske Sep 24, 2026
a2cf726
Let a share name the lender itself with the lower data access it keep…
aidangarske Sep 24, 2026
443be45
Refuse a retrieve request that names another borrower's instruction a…
aidangarske Sep 24, 2026
7044e96
Refuse FFA_MEM_PERM_GET for an address off its translation granule
aidangarske Sep 24, 2026
22eaf91
Cite the clauses behind the retrieve access flags and the alignment hint
aidangarske Sep 24, 2026
77ff78d
Resume the Normal world only on FFA_NORMAL_WORLD_RESUME, else deny it
aidangarske Sep 24, 2026
ae62679
Report FFA_NORMAL_WORLD_RESUME in the SPMD's FFA_FEATURES
aidangarske Sep 24, 2026
c10eb12
Raise no schedule-receiver interrupt for already pending notifications
aidangarske Sep 24, 2026
1220035
Clear the receiver RX bytes an indirect message does not populate
aidangarske Sep 24, 2026
2771e49
Leave the Secure interrupt that preempts the Normal world to the SPMC
aidangarske Sep 24, 2026
17a1fa2
Queue every pending Secure interrupt instead of only the last
aidangarske Sep 24, 2026
b5bc9ab
Record the id of every delivered Secure interrupt for the get call
aidangarske Sep 24, 2026
8de69ed
Finish the init of a partition preempted before its first wait
aidangarske Sep 24, 2026
9b067e5
Keep Non-secure interrupts queued in a callee whose caller queues them
aidangarske Sep 24, 2026
658d002
Let a partition resume its own callee after a Non-secure interrupt
aidangarske Sep 24, 2026
1df6216
Limit test partitions' interrupt claims and timers to declared interr…
aidangarske Sep 24, 2026
2a0e976
Deny a send of the sender's own Device pages
aidangarske Sep 24, 2026
470e4cc
Report no access from FFA_MEM_PERM_GET for a page a memory transactio…
aidangarske Sep 24, 2026
c89c458
Describe the donor's lost access and the unmodelled fault rule in the…
aidangarske Sep 24, 2026
8a7a4ea
Signal Secure interrupts to S-EL0 partitions with w1 and w2 zero
aidangarske Sep 24, 2026
da2df31
Keep Non-secure interrupts queued while a partition runs for a Secure…
aidangarske Sep 24, 2026
d030602
Audit the EL3 archive before linking so a failed audit leaves no image
aidangarske Sep 24, 2026
5ed659c
Reject FF-A manifest policies the SPMC does not implement
aidangarske Sep 24, 2026
67f5a78
Order memmove's copy direction by address, not by pointer comparison
aidangarske Sep 24, 2026
8782d77
Skip the AArch64 guest1 scenario, which has no second NS endpoint
aidangarske Sep 24, 2026
3390b0d
Stop the EL3 boot when parking, the redistributor, or the tick fails
aidangarske Sep 24, 2026
516f301
Treat parked secondaries as outside the Normal world's PSCI machine view
aidangarske Sep 24, 2026
0833d38
Cold-reset the machine on PSCI SYSTEM_RESET and fail closed without one
aidangarske Sep 24, 2026
b865a66
Refuse SMC64 ids from AArch32 callers and keep an EL2 world's HCR_EL2
aidangarske Sep 24, 2026
766dcf6
Run the reset, park, and EL2 entry negatives in the AArch64 CI matrix
aidangarske Sep 24, 2026
6066592
Re-audit the EL3 image on a policy change and drop it on a failed audit
aidangarske Sep 24, 2026
17e77c7
Allow only monitor definitions in the EL3 archive
aidangarske Sep 24, 2026
59453ef
Catch every C spelling of an FF-A function-id literal in the split guard
aidangarske Sep 24, 2026
4568779
Clean the Normal-world AArch64 payload with the top-level clean
aidangarske Sep 24, 2026
cabda95
Route each GICv3 SPI to the boot PE when it is enabled
aidangarske Sep 24, 2026
9334313
Answer the SMCCC architecture calls for Secure-world callers
aidangarske Sep 24, 2026
5871d6c
Refuse a PSCI MIGRATE to an MPIDR outside the Normal world's machine …
aidangarske Sep 24, 2026
6ee90c1
Pin the AArch64 crypto conformance gates at 64 passed and 13 skipped
aidangarske Sep 24, 2026
4ecdeb7
Fail an FF-A ACS scenario whose emulator does not exit cleanly
aidangarske Sep 24, 2026
ee75fe3
Record the xlnx-versal-virt warm SYSTEM_RESET as an emulator limitation
aidangarske Sep 24, 2026
22b99c9
Grant a borrower only pages its table already maps for the SPMC
aidangarske Sep 24, 2026
ed05ef5
Give a reclaiming owner its access back before the relayer wipes the …
aidangarske Sep 24, 2026
9423be4
Leave a terminated owner's memory with the SPM instead of handing it …
aidangarske Sep 24, 2026
c774031
Refuse FFA_MEM_PERM_SET read-only on memory the SPMC writes for the p…
aidangarske Sep 24, 2026
99244f3
Accept the no-access encoding in FFA_MEM_PERM_SET
aidangarske Sep 24, 2026
381a4c1
Let a partition read and change the data access of its own Device pages
aidangarske Sep 24, 2026
c3404b7
Treat pages a donate gave a partition as its own in its permission an…
aidangarske Sep 24, 2026
9a0eeeb
Refuse FFA_MEM_PERM_SET over memory a transaction still covers
aidangarske Sep 24, 2026
cbdc067
Ignore the SBZ bits above the FFA_MEM_PERM_SET permissions
aidangarske Sep 24, 2026
e875f53
Ignore the SBZ flag bits of a lend, share, or donate instead of refus…
aidangarske Sep 24, 2026
efe8a9b
Ignore the SBZ fields of memory transaction descriptors instead of re…
aidangarske Sep 24, 2026
9e6a25e
Ignore the SBZ bits of the retrieve, relinquish, and reclaim flags
aidangarske Sep 24, 2026
e542112
Write memory access descriptors in the size of the reader's FF-A version
aidangarske Sep 24, 2026
7e466f8
Map a retrieve at the address ranges a borrower names when they are t…
aidangarske Sep 24, 2026
731fd54
Ignore the SBZ low half of the endpoint word in a Normal-world FFA_ME…
aidangarske Sep 24, 2026
bad7e70
Cite the clause that lets a partition outside the relayer be named a …
aidangarske Sep 24, 2026
b3aa15c
Record the memory relayer's permission, range, and SBZ rules in the F…
aidangarske Sep 24, 2026
c47a931
Answer FFA_MEM_PERM_SET region refusals with INVALID_PARAMETERS and k…
aidangarske Sep 24, 2026
e45e247
Deliver an indirect message's header from the fields the SPMC validated
aidangarske Sep 24, 2026
339c6b3
Ignore the SBZ fields of FFA_MSG_SEND2 and its partition message header
aidangarske Sep 24, 2026
ad5ea54
Ignore the SBZ bits of direct message flags and clear them when relaying
aidangarske Sep 24, 2026
320d604
Ignore the SBZ flag bits of FFA_NOTIFICATION_BIND
aidangarske Sep 24, 2026
4e319f0
Ignore the SBZ flag bits of FFA_PARTITION_INFO_GET
aidangarske Sep 24, 2026
0b1b580
Ignore the SBZ bits above the FFA_CONSOLE_LOG character count
aidangarske Sep 24, 2026
48317cc
Refuse a direct request from a partition discovery does not list
aidangarske Sep 24, 2026
acc5d95
Bind each test timer to the partition that armed it
aidangarske Sep 24, 2026
d8d3c86
Hold a Normal-world test timer to its requested timeout
aidangarske Sep 24, 2026
62e6a6a
Read a partition's SVC32 FF-A call from w1-w7 alone
aidangarske Sep 24, 2026
0f69cb2
End a partition's initialization only at FFA_MSG_WAIT and refuse its …
aidangarske Sep 24, 2026
5d427bd
Let an initializing partition send a direct request to an initialized…
aidangarske Sep 24, 2026
fa2783a
Take a partition that reports failed initialization with FFA_ERROR ou…
aidangarske Sep 24, 2026
b652eee
Let a partition complete a direct request with FFA_SUCCESS
aidangarske Sep 24, 2026
0a017c2
Declare that manifest partitions take no FF-A messages
aidangarske Sep 24, 2026
d959b40
Carry the mandatory FF-A version in each partition manifest
aidangarske Sep 24, 2026
820a92a
Apply one FFA_CONSOLE_LOG count rule at the SPMD and the SPMC
aidangarske Sep 24, 2026
d5d1d09
Ignore the SBZ bits above the FFA_PARTITION_INFO_GET_REGS start index…
aidangarske Sep 24, 2026
9b3ebc2
Ignore the SBZ bits above the VM id of FFA_NOTIFICATION_BITMAP_DESTROY
aidangarske Sep 24, 2026
f042475
Refuse FFA_MSG_SEND2 from a partition that does not advertise indirec…
aidangarske Sep 24, 2026
547604c
Check a partition's FFA_SUCCESS and FFA_ERROR encodings in the runtim…
aidangarske Sep 24, 2026
48e9f72
Cover the SBZ and indirect-header rules at both FF-A instances in the…
aidangarske Sep 24, 2026
8f7e011
Declare that manifest partitions are handed no FF-A boot information
aidangarske Sep 24, 2026
074245c
Record the SP initialization model, FFA_SUCCESS completion, and SBZ h…
aidangarske Sep 24, 2026
7bdfc75
Give each conformance test partition its own writable data segment
aidangarske Sep 24, 2026
5016414
Read and write FFA_MSG_SEND2 headers in each endpoint's negotiated la…
aidangarske Sep 24, 2026
044acbd
Hand the RX buffer back on every FFA_MSG_WAIT
aidangarske Sep 24, 2026
c9492bb
Refuse a partition's FFA_YIELD that names an endpoint or a timeout
aidangarske Sep 24, 2026
db8fd95
Walk a retrieve fragment's access array only at a valid descriptor size
aidangarske Sep 24, 2026
2df1803
Lay out a v1.0 retrieve request in the v1.0 transaction header
aidangarske Sep 24, 2026
828fec1
Keep manifest-shared memory out of RX/TX mapping and FFA_MEM_PERM_SET
aidangarske Sep 24, 2026
be36d63
Let a relayer endpoint make its writable manifest memory read-only
aidangarske Sep 24, 2026
0beea50
Record the relayer's shared-memory and read-only permission rules in …
aidangarske Sep 24, 2026
dad2350
Size the serial AArch64 CI job timeouts to the measured suite runtime
aidangarske Sep 24, 2026
6c6a392
Show every AArch64 scenario log in CI, not a stale list
aidangarske Sep 24, 2026
e656c3c
Ignore every output the target runners and the ACS cache leave in the…
aidangarske Sep 24, 2026
cbcbfe7
Sign-extend every SMC64 PSCI function's int32 result across X0
aidangarske Sep 24, 2026
28a15aa
Power-cycle xlnx-versal-virt on a system reset, not a warm re-entry
aidangarske Sep 24, 2026
d1616f0
Take a retrieve request's first fragment before every composite offse…
aidangarske Sep 24, 2026
cdfea44
Refuse the zero-before-retrieval flag on a borrower's repeated retrieval
aidangarske Sep 24, 2026
e4841aa
Let a partition re-permission Non-secure memory donated to it, never …
aidangarske Sep 24, 2026
0a58ded
Refuse a partition's FFA_RXTX_UNMAP or FFA_RX_RELEASE that names an e…
aidangarske Sep 24, 2026
628a143
Abort a fragmented memory transfer when its sender unmaps its RX/TX pair
aidangarske Sep 24, 2026
0825454
Refuse PSA vectors in Normal-world memory lent, donated, or owned by …
aidangarske Sep 24, 2026
0f7393f
Honor the FFA_MSG_WAIT retain RX buffer flag from a v1.2 caller
aidangarske Sep 24, 2026
9b3b3f2
Fail a target scenario whose emulator times out or exits the wrong way
aidangarske Sep 24, 2026
ec1a552
Answer an SMC taken on the lower-AArch32 vector instead of faulting
aidangarske Sep 24, 2026
b75bef1
Leave a partition that reports failed initialization waiting, not fau…
aidangarske Sep 24, 2026
2a6e385
Cite the REL0 table that defines the FFA_MSG_WAIT retain RX flag at i…
aidangarske Sep 24, 2026
61f7f9a
Ignore the SBZ VM and Hypervisor flags of a Normal-world FFA_NOTIFICA…
aidangarske Sep 24, 2026
393b0da
Cite REL0 Table 7.2 for the 40-byte partition message header
aidangarske Sep 24, 2026
c680421
Advertise only the conformance NVMEM the driver partition actually st…
aidangarske Sep 24, 2026
1fb759e
Report a conformance trap the gate refuses as a failure, not success
aidangarske Sep 24, 2026
aff369c
Note why FFA_FEATURES reports no RX/TX buffer size limit at the Norma…
aidangarske Sep 24, 2026
c82b204
Map every partition resource the SPMC writes whole and fail closed on…
aidangarske Sep 24, 2026
127068a
Let a partition take over a shareable band only when it is that band'…
aidangarske Sep 24, 2026
6f31c3f
Refuse a new fragmented transfer while the sender's last one is unfin…
aidangarske Sep 24, 2026
fc7a490
Release what a partition out of service held and answer ABORTED for o…
aidangarske Sep 24, 2026
d34f241
Make the EL3 and core-port symbol guards fail closed on bad patterns
aidangarske Sep 24, 2026
6c028d6
Read the retrieve alignment hint as a 2^n x 4 KB boundary
aidangarske Sep 24, 2026
a21500d
Wipe reclaimed memory before the owner's mapping comes back
aidangarske Sep 24, 2026
36e6fbb
Make instructions fetchable when a partition page becomes executable
aidangarske Sep 24, 2026
b9e8f8c
Cite why a wipe several borrowers ask for waits for the last to let go
aidangarske Sep 24, 2026
0ff7e4a
Let only global definitions resolve references in the EL3 symbol guard
aidangarske Sep 25, 2026
d872722
Claim no isolation level on an AArch64 port without a Normal-world me…
aidangarske Sep 25, 2026
55255f1
Cite the clause that leaves the SPMC and SPMD ids implementation defined
aidangarske Sep 25, 2026
7b2ed7c
Say the Versal model port claims no isolation level where the runner …
aidangarske Sep 25, 2026
fb468d4
Drop the notifications a retired sender pended along with its bindings
aidangarske Sep 25, 2026
92543fd
Refuse an indirect message to a VM without a notification bitmap
aidangarske Sep 25, 2026
34a38ef
Refuse notification calls from and signals to partitions that take none
aidangarske Sep 25, 2026
d8d40ac
Record the notification rules for retired senders, VM bitmaps, and PS…
aidangarske Sep 25, 2026
298d12f
Deny an indirect message to a PSA partition instead of refusing its i…
aidangarske Sep 25, 2026
63862ed
Open the ACS image initializer on its macro line for the bare-scope scan
aidangarske Sep 25, 2026
fc2a9dc
Bring the AArch64 host suites under the C99 compliance check
aidangarske Sep 25, 2026
fb62f4d
Bound the AArch64 guest bind loop by an object so gcc accepts it
aidangarske Sep 25, 2026
bfad426
Keep the AArch64 images out of link-time optimization
aidangarske Sep 25, 2026
df9fee9
Parse a Normal-world memory descriptor only from a Secure copy
aidangarske Sep 25, 2026
8d6f860
Accept only the fence's data abort on the probe load as the Secure-RA…
aidangarske Sep 25, 2026
b939d3c
Probe PSCI targets with Must-be-zero affinity bits set
aidangarske Sep 25, 2026
ab1fee0
Cite the clauses that let a retrieve leave its access permissions uns…
aidangarske Sep 25, 2026
0adb711
Add the upstream PSA patches as prerequisites of the fetch stamp
aidangarske Sep 25, 2026
33415fa
Stop expect_once aborting silently under set -euo pipefail
aidangarske Sep 25, 2026
2d88c78
Require timeout and truncate in the QEMU scenario preflight check
aidangarske Sep 25, 2026
0f86000
Cite the real ACS test-line format next to the deviation parser
aidangarske Sep 25, 2026
5c57eff
End the boot share proof's transaction on every path before partition…
aidangarske Sep 25, 2026
77ad64f
Require a lend or share borrower to state the data access it retrieve…
aidangarske Sep 25, 2026
8e89c22
Make a retrieve with the bypass flag name only the retrieving borrower
aidangarske Sep 25, 2026
b66b42f
Record that a partition cannot send memory to the Normal world
aidangarske Sep 25, 2026
3b2ef01
Hand a posted partition message's RX buffer to its receiver only on n…
aidangarske Sep 25, 2026
f7a228c
Cite the tables that leave a 64-bit direct message's x8-x17 reserved
aidangarske Sep 25, 2026
3ddb8b9
Queue Normal-world interrupts while a PSA framework request runs its …
aidangarske Sep 25, 2026
cd40899
Refuse to build the reset budget for a port that is not emulated
aidangarske Sep 25, 2026
eb39805
Record the shared keystore band as a known isolation level 3 gap
aidangarske Sep 25, 2026
a5583ef
Check the VM id and the buffer pair before FFA_RX_RELEASE releases an…
aidangarske Sep 25, 2026
f376bd2
Refuse memory calls from an endpoint the handle was not sent to with …
aidangarske Sep 25, 2026
e1bb6fb
Classify external aborts on translation-table walks and parity errors…
aidangarske Sep 25, 2026
1679e40
Reject an explicitly null FF-A manifest section
aidangarske Sep 25, 2026
2d7bdd3
Stop the script self-tests when mktemp fails instead of writing besid…
aidangarske Sep 25, 2026
224b885
Saturate LP64 PSA vector counts and lengths at the 32-bit veneer
aidangarske Sep 25, 2026
79fa655
Refuse guest heap requests the alignment rounding would wrap
aidangarske Sep 25, 2026
a2e6012
Compare every byte read back in the storage scenario
aidangarske Sep 25, 2026
7274477
Set a fail-closed debug and PMU policy in MDCR_EL3 before either worl…
aidangarske Sep 25, 2026
898ebc2
Refuse ABIs introduced after a caller's negotiated FF-A version
aidangarske Sep 25, 2026
6b3077f
Record the SPMD's RX_RELEASE scope and the NS-bit request's SP scope
aidangarske Sep 25, 2026
27faba7
Fetch an advanced FF-A ACS pin into a reused checkout from the source…
aidangarske Sep 25, 2026
562e262
Answer a locked FFA_VERSION with the version the caller settled on
aidangarske Sep 26, 2026
da25a4e
Refuse a feature id query whose input properties are not zero
aidangarske Sep 26, 2026
7653341
Reject a memory registration whose operation is not share, lend, or d…
aidangarske Sep 26, 2026
9fa3427
Deliver every ERET-bound event to the SPMC with its unused registers …
aidangarske Sep 26, 2026
aadce15
Size the domain table cache for every partition plus the retained boo…
aidangarske Sep 26, 2026
0a04eec
Hold local wolfTrust symbols in the EL3 archive to the monitor namesp…
aidangarske Sep 26, 2026
673023f
Assert the EL3 load image ends before the SPMC image behind it
aidangarske Sep 26, 2026
e66a449
Keep the conformance NVM shadow to what the backend has loaded and st…
aidangarske Sep 26, 2026
5e741c7
Record donated memory across a restart and the conformance isolation …
aidangarske Sep 26, 2026
ce4a9f4
Let anyone resume an endpoint yielded to a requester that left service
aidangarske Sep 26, 2026
6929af1
Orphan a callee preempted mid-request when its requester leaves service
aidangarske Sep 26, 2026
65b7a61
Bound the guest heap walk with integer addresses
aidangarske Sep 26, 2026
8b8a195
Require a bypass retrieve request to name the caller as its only rece…
aidangarske Sep 26, 2026
4067a7c
Cap an RX/TX pair at the 63 pages the map call can name
aidangarske Sep 26, 2026
b4647d4
Hold the monitor's extended console path to the SPMC's negotiated ver…
aidangarske Sep 26, 2026
70fda17
Allow only the FF-A symbol families the monitor builds in the EL3 arc…
aidangarske Sep 26, 2026
2e8fcd3
Require an FF-A record for every partition when the section is present
aidangarske Sep 26, 2026
cc2f476
Record the unnegotiated-caller and empty boot-information interpretat…
aidangarske Sep 26, 2026
b661648
Let any partition resume an endpoint orphaned by a requester that lef…
aidangarske Sep 28, 2026
edccfaa
Reconcile ACS failures with each group's by-design set by name and by…
aidangarske Sep 28, 2026
ffa67ab
Release an ACS platform page only by its own base and span
aidangarske Sep 28, 2026
0fb4b00
Require a donate's receiver and a lend's one borrower to state their …
aidangarske Sep 28, 2026
fd476a9
Clear the partition marker while the SPMC handles a lower-EL exception
aidangarske Sep 28, 2026
b3c814f
Stop the SPMC before its partitions start when a boot self-test fails
aidangarske Sep 28, 2026
9aada2b
Resume a preempted echo partition by the id FFA_INTERRUPT names
aidangarske Sep 28, 2026
6b773f8
Grant EL0 only over an EL1 page a revoke puts back exactly
aidangarske Sep 28, 2026
ae177c7
Refuse a boot core count the EL3 parking state cannot hold
aidangarske Sep 28, 2026
36284ac
Give an ACS partition with no devices an empty device map without a z…
aidangarske Sep 28, 2026
c12bd99
Describe the three CI lanes and the six FF-A ACS groups
aidangarske Sep 28, 2026
eca456e
Record the power management messages and Normal-world lent memory as …
aidangarske Sep 28, 2026
8ac60a4
Let the echo partition wait again when FFA_RUN gives it cycles with n…
aidangarske Sep 28, 2026
7ea4d6a
Run the idle echo FFA_RUN probe on GICv2 and expect its preemption pr…
aidangarske Sep 28, 2026
6115555
Run an AArch64 smoke tier on pull requests and gate the full matrix o…
aidangarske Sep 30, 2026
7d55cfd
Match the renamed ci:stm32h563 and ci:imxrt700 labels in the scenario…
aidangarske Sep 30, 2026
e19ab60
Reconcile the AArch64 branch with main's CI, host tests and scenario …
aidangarske Oct 2, 2026
99928b3
Declare the AArch64 partitions unprivileged and claim no isolation le…
aidangarske Oct 2, 2026
3399be6
Carry the level 3 hooks and the SP-to-SP vault door onto the AArch64 …
aidangarske Oct 2, 2026
243387f
Split the AArch64 keystore band into private vault, attestation and c…
aidangarske Oct 2, 2026
f5d35dc
Claim AArch64 secure interrupts fail closed with clear-pending and re…
aidangarske Oct 2, 2026
ef73584
Keep the read-only wolfCrypt globals in the AArch64 constant data
aidangarske Oct 2, 2026
f7735be
Validate partition-to-partition separation on every AArch64 boot
aidangarske Oct 2, 2026
374e650
Expect the FF-A ACS partitions at the same ids on both engines
aidangarske Oct 2, 2026
967233a
Match the attestation status line across guest console interleave
aidangarske Oct 2, 2026
b04d5cb
Harden the AArch64 SPMC stack, SVC and FP paths and add their negatives
aidangarske Oct 2, 2026
8f7465c
Run the attestation conformance suite under the reference QCBOR decod…
aidangarske Oct 2, 2026
51f222f
Add QEMU twins of the peripheral isolation negatives
aidangarske Oct 2, 2026
1f87878
Add a QEMU twin of the level 2 manifest refusal negative
aidangarske Oct 2, 2026
18d916b
Add a QEMU twin of the HSM server pointer pin negative
aidangarske Oct 2, 2026
ab5d92d
Add QEMU twins of the band reset on restart negatives
aidangarske Oct 2, 2026
e87bbed
Add a QEMU twin of the overlapping partition tables refusal negative
aidangarske Oct 2, 2026
0a62e7f
Document the QEMU AArch64 isolation twins
aidangarske Oct 2, 2026
1f63313
Declare isolation level 3 in the QEMU virt manifests
aidangarske Oct 3, 2026
b3587f0
Tell the SPMC of each PSCI power operation before the monitor complet…
aidangarske Oct 3, 2026
eaee062
State the isolation level 3 claim for the Cortex-A port on QEMU virt
aidangarske Oct 3, 2026
d96e98f
Share the isolation level 3 layout and platform hooks across AArch64 …
aidangarske Oct 3, 2026
bb85a14
Read the AArch64 level 3 layout only when a target names its port
aidangarske Oct 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 39 additions & 5 deletions .github/workflows/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# wolfTrust CI

CI has a fast per-PR host lane, the tiered M33MU emulator matrix, and static
analysis. M33MU runs a per-port smoke set on every pull request and the full
Three lanes, modeled on wolfProvider's CI: a fast per-PR host lane, the M33MU
emulator matrix, and the AArch64 QEMU matrix, plus static analysis. Both
emulator lanes are tiered: a smoke set on every pull request, and the full
matrix on labels, main pushes, and nightly.

`codeql.yml` runs C security queries. `coverity.yml` runs on Sundays at
Expand All @@ -22,7 +23,9 @@ An accepted upload queues analysis; results appear after Coverity processes it.
|------|---------|---------|
| **Fast (per-PR)** | every PR; push to main | host unit suites, ISO C99, house style, bare-scope scan, Arm PSA-FF conformance, cross-compile, compiler matrix, sanitizers, valgrind, integrations, core/port split guard |
| **M33MU smoke** | every PR | per port, on both crypto engines: STM32H563 `positive gtzcneg crossdomain bothpsa confboot devcrypto`; MIMXRT700 `positive ahbscneg crossdomain bothpsa confboot devcrypto` |
| **M33MU full** | PR labels `ci:all`, `ci:h5`, `ci:rt700`; push to main; `cron: 0 8 * * *`; `workflow_dispatch` (port input) | every scenario of that port on both engines (see below) |
| **M33MU full** | PR labels `ci:all`, `ci:stm32h563`, `ci:imxrt700`; push to main; `cron: 0 8 * * *`; `workflow_dispatch` (port input) | every scenario of that port on both engines (see below) |
| **AArch64 smoke** | every PR | a representative subset: `virt-gicv3-a72` `smoke boot positive crossdomain ffa-direct confboot devcrypto` on both crypto engines, and `versal-virt` the same on the native engine |
| **AArch64 full** | PR labels `ci:all`, `ci:aarch64`, `ci:qemu-virt`, `ci:qemu-versal`; push to main; nightly; `workflow_dispatch` (cell input) | every AArch64 scenario and the Arm FF-A ACS groups on three QEMU cells under both crypto engines (see below) |

The M33MU workflow (`m33mu.yml`) is label-selected the way wolfProvider's
`pr-osp-select.yml` is: a `select` job checks the routing table
Expand All @@ -33,8 +36,8 @@ groups it picked, so a job that is not selected never appears as skipped.
| Label | Effect |
|-------|--------|
| (no label) | each port's smoke tier on both engines |
| `ci:h5` | the STM32H563 full matrix (the change touched only that port) |
| `ci:rt700` | the MIMXRT700 full matrix (the change touched only that port) |
| `ci:stm32h563` | the STM32H563 full matrix (the change touched only that port) |
| `ci:imxrt700` | the MIMXRT700 full matrix (the change touched only that port) |
| `ci:all` / `ci:m33mu` | every scenario of every port (a core change) |

A label keeps applying on later pushes to the PR. Pushes to
Expand Down Expand Up @@ -86,6 +89,37 @@ full matrix on a PR, add its `ci:` label; off-PR against a branch,
The local box gate `run_m33mu.sh` (a Zephyr+FreeRTOS lifecycle) and the
`make test-target` loop remain the pre-push mirror of the M33MU jobs.

## AArch64 QEMU

`aarch64-cross-compile.yml` (workflow name **AArch64 cross compilation**) is
label-selected the same way `m33mu.yml` is: a `select` job self-tests the
matrix, reads the PR's `ci:*` labels, the event, and the dispatch input, and
one matrix job runs exactly the cells it picked. It runs in
`ghcr.io/wolfssl/wolfboot-ci-aarch64` on three cells, `virt-gicv2-a35`,
`virt-gicv3-a72`, and `versal-virt`.

| Label | Effect |
|-------|--------|
| (no label) | the smoke tier: `virt-gicv3-a72` (both engines) and `versal-virt` (native) run the catch-most subset |
| `ci:qemu-virt` | the two `virt` cells' full suite and FF-A ACS (the change touched only that family) |
| `ci:qemu-versal` | the `versal-virt` full suite and FF-A ACS |
| `ci:aarch64` | every cell's full suite and FF-A ACS (a core AArch64 change) |
| `ci:all` | this plus the full M33MU matrix |

A label keeps applying on later pushes to the PR. Pushes to `main`, the nightly
schedule (via `nightly.yml`), and manual dispatch (with a `cell` input) run the
full matrix. The cells and the smoke subset live in
`tests/target/lib/scenario_matrix.py`, which `make test-target-a` also reads
(`WT_TIER=full` for the whole suite).

| Check name | What it proves |
|------------|----------------|
| `el3_<cell>_<engine>` | the EL3 image links under the symbol guard, then the tier's QEMU AArch64 scenarios run through `tests/target/run_suite.sh qemu-a` |
| `ffa_acs_<cell>_<engine>` | the Arm FF-A ACS groups (discovery, direct and indirect messaging, memory, notifications, interrupts) at their asserted floors (full tier only) |

To run a scenario locally, use `tests/target/run_qemu_a_scenario.sh <key>`
with `MACHINE`, `GIC`, `CPU`, and `WT_ENGINE` set as in the workflow.

## Host unit suites (per-suite checks)

`unit-tests.yml` reads `UNIT_SUITES` from `tests/host/Makefile` (via
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/_resolve-wolfssl.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ permissions:

jobs:
resolve:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
timeout-minutes: 5
outputs:
matrix: ${{ steps.refs.outputs.matrix }}
Expand Down
113 changes: 113 additions & 0 deletions .github/workflows/aarch64-cross-compile.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
name: AArch64 cross compilation

on:
# Pull requests run the AArch64 smoke tier; the ci:all, ci:aarch64,
# ci:qemu-virt, and ci:qemu-versal labels, pushes to main, the nightly
# schedule (workflow_call from nightly.yml), and manual dispatch run the full
# cell matrix and the FF-A ACS.
pull_request:
types: [opened, synchronize, reopened, labeled]
push:
branches: [main]
workflow_dispatch:
inputs:
cell:
description: AArch64 cell or family whose full matrix to run
type: choice
options: [all, qemu-virt, qemu-versal, virt-gicv2-a35, virt-gicv3-a72, versal-virt]
default: all
workflow_call:

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
# Label-selected the same way m33mu.yml is: one select job reads the ci:*
# labels (ci:qemu-virt or ci:qemu-versal for a family's full matrix, ci:all
# or ci:aarch64 for every cell, no label for the smoke tier), the event, and
# the dispatch input, then one matrix job runs exactly those cells.
select:
name: qemu_a_select
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.p.outputs.matrix }}
steps:
- uses: actions/checkout@v4

- id: p
env:
PR_LABELS: ${{ join(github.event.pull_request.labels.*.name, ' ') }}
CELL_INPUT: ${{ inputs.cell }}
run: |
python3 tests/target/lib/scenario_matrix.py --selftest
matrix=$(python3 tests/target/lib/scenario_matrix.py --aarch64-plan)
echo "matrix=$matrix" >> "$GITHUB_OUTPUT"
printf '%s' "$matrix" | python3 -c 'import json, sys
for e in json.load(sys.stdin):
print(e["job"], "(" + e["engine"] + ")")'

qemu-a:
name: ${{ matrix.job }}
needs: select
runs-on: ubuntu-latest
# The serial suite takes 15-18 min per cell on the reference box; the
# per-scenario QEMU budgets are hang detectors, not expected runtimes.
timeout-minutes: 75
container:
image: ${{ matrix.image }}
strategy:
fail-fast: false
matrix:
include: ${{ fromJSON(needs.select.outputs.matrix) }}
env:
WT_ENGINE: ${{ matrix.engine }}
MACHINE: ${{ matrix.machine }}
GIC: ${{ matrix.gic }}
CPU: ${{ matrix.cpu }}
SMP: ${{ matrix.smp }}
steps:
- uses: actions/checkout@v4

- name: Trust the checked-out workspace
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"

- name: Initialize wolfTrust dependencies
run: |
git config --global url."https://github.com/".insteadOf "git@github.com:"
git submodule update --init --single-branch lib/wolfSSL lib/wolfHSM lib/wolfCOSE lib/wolfPSA

- name: Toolchain and emulator versions
run: |
aarch64-none-elf-gcc --version | head -1
qemu-system-aarch64 --version | head -1

- name: Self-test the EL3 symbol guard and the expect library
if: matrix.kind == 'suite'
run: |
tools/check-el3-symbols.sh --selftest
tests/target/lib/expect.sh --selftest

- name: Cross-build the EL3 monitor image (the symbol guard runs at link)
if: matrix.kind == 'suite'
run: make ARCH=aarch64 TARGET=${{ matrix.target }} WT_GIC_VERSION="$GIC" WT_CPU="$CPU" BUILD_DIR=build-aarch64-guard el3-image

- name: Fetch the pinned Arm FF-A ACS once for the six groups
if: matrix.kind == 'acs'
run: |
tests/upstream/fetch_ffa_acs.sh "$GITHUB_WORKSPACE/.acs-cache"
echo "WT_FFA_ACS_CACHE=$GITHUB_WORKSPACE/.acs-cache" >> "$GITHUB_ENV"

- name: Run the AArch64 scenarios
run: tests/target/run_suite.sh qemu-a ${{ matrix.scenarios }}

- name: Show the boot logs
if: always()
run: |
for f in logs/target-*.log; do
echo "== $f"
cat "$f" || true
done
2 changes: 1 addition & 1 deletion .github/workflows/auto-pin-dependencies.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ permissions:

jobs:
pin:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/core-port-split.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,13 @@ jobs:
git config --global --add safe.directory "$GITHUB_WORKSPACE"
git config --global url."https://github.com/".insteadOf git@github.com:

- name: Self-test the split and port-only-diff guards
- name: Self-test the guards and the scenario assertion library
run: |
tools/check-core-port-split.sh --selftest
tools/check-port-only-diff.sh --selftest
tools/check-docs-no-internal-links.sh --selftest
tools/check-el3-symbols.sh --selftest
tests/target/lib/expect.sh --selftest

- name: Enforce the core/port split (strict)
run: WT_SPLIT_STRICT=1 tools/check-core-port-split.sh
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/fuzz.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
# type here: schedule / manual dispatch get the full 600s soak; PR pushes and
# merges get the 60s smoke that keeps the required checks fast.
select:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
outputs:
matrix: ${{ steps.pick.outputs.matrix }}
steps:
Expand All @@ -39,7 +39,7 @@ jobs:
fuzz:
name: fuzz_${{ matrix.name }}
needs: select
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
timeout-minutes: 20
strategy:
fail-fast: false
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/integration-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
wolfcose:
name: wolfcose_integration_${{ matrix.name }}
needs: resolve
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
container:
image: ghcr.io/wolfssl/wolftrust-ci:latest-beb806af7628e02acee729632a74a7a3630f21fd
timeout-minutes: 30
Expand Down Expand Up @@ -69,7 +69,7 @@ jobs:
wolfpsa:
name: wolfpsa_integration_${{ matrix.name }}
needs: resolve
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
container:
image: ghcr.io/wolfssl/wolftrust-ci:latest-beb806af7628e02acee729632a74a7a3630f21fd
timeout-minutes: 30
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/m33mu.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: M33MU

on:
# Pull requests run each port's smoke tier; the ci:all, ci:h5, and ci:rt700
# Pull requests run each port's smoke tier; the ci:all, ci:stm32h563, and ci:imxrt700
# labels, pushes to main, the nightly schedule (workflow_call from
# nightly.yml), and manual dispatch run a port's full matrix.
pull_request:
Expand Down Expand Up @@ -280,7 +280,7 @@ jobs:
fi

# Label-selected, the wolfProvider way: one select job reads the ci:* labels
# (ci:h5 or ci:rt700 for that port's full matrix when only that port
# (ci:stm32h563 or ci:imxrt700 for that port's full matrix when only that port
# changed, ci:all or ci:m33mu for everything after a core change, no label
# for each port's smoke tier), the event, and the dispatch input, then one
# matrix job runs exactly those scenario groups, so nothing shows up skipped.
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ jobs:
cross_compile:
uses: ./.github/workflows/cross-compile.yml

aarch64_cross_compile:
uses: ./.github/workflows/aarch64-cross-compile.yml

core_port_split:
uses: ./.github/workflows/core-port-split.yml

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/unit-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
host-unit-tests:
name: ${{ matrix.suite }}
needs: discover
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
container:
image: ghcr.io/wolfssl/wolftrust-ci:latest-beb806af7628e02acee729632a74a7a3630f21fd
timeout-minutes: 20
Expand All @@ -52,7 +52,7 @@ jobs:
name: arm_psa_ff_conformance
# Bare runner, not the CI image: the image inherits m33mu, and
# make test-conformance takes the emulator path when m33mu is on PATH.
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/wiki-sync.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ concurrency:

jobs:
sync:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Publish docs/ to wiki
Expand Down
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
# Build outputs
/build/
/build-aarch64-*/
tests/firmware/stm32h563/build/
tests/firmware/stm32h563-vnet/build/
tests/firmware/mimxrt700-baremetal/build/
tests/firmware/aarch64-smoke/build/
tests/firmware/aarch64-ns-smoke/build/
tests/firmware/stm32h563-vnet/stm32h563_OTP.bin
*.o
/wolftrust
Expand All @@ -22,6 +25,11 @@ tests/fuzz/crash-*
tests/fuzz/oom-*
tests/fuzz/timeout-*

# Target runner logs and the CI's FF-A ACS clone cache
/ci-*.log
/h5-uart-capture.log
/.acs-cache/

# Stray duplicate at repo root
/stm32h563_OTP.bin

Expand Down
18 changes: 17 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ include mk/common.mk

.DEFAULT_GOAL := all

.PHONY: all secure-image size-report test c99-check test-conformance test-target test-hardware fetch-psa-ff-tests \
.PHONY: all secure-image size-report test c99-check test-conformance test-target test-target-a test-hardware fetch-psa-ff-tests \
clean firmware-stm32h563 run-stm32h563 run-stm32h563-tui run-stm32h563-uarts \
test-domain-host test-domain-compilers test-domain-sanitize \
test-domain-valgrind test-manifest-host test-manifest-compilers \
Expand Down Expand Up @@ -83,6 +83,20 @@ else
fi
endif

# AArch64 twin of test-target on QEMU (virt GICv2/GICv3, xlnx-versal-virt);
# auto-detect qemu-system-aarch64 + aarch64-none-elf (or WT_TARGET_SCENARIOS=1),
# skip explicitly otherwise. MACHINE/GIC/CPU/SMP pass through to the runner.
# WT_TIER=smoke (default) runs the per-PR subset, WT_TIER=full the whole suite,
# both from tests/target/lib/scenario_matrix.py (the FF-A ACS stays in CI).
WT_QEMU_A_SCENARIOS ?= $(shell python3 tests/target/lib/scenario_matrix.py --aarch64-flat --tier $(WT_TIER))
test-target-a:
@if ! tests/target/detect_qemu_a.sh >/dev/null 2>&1; then \
echo "SKIP: AArch64 QEMU scenarios ($$(tests/target/detect_qemu_a.sh 2>&1))"; \
else \
MACHINE="$(MACHINE)" GIC="$(GIC)" CPU="$(CPU)" SMP="$(SMP)" \
tests/target/run_suite.sh qemu-a $(WT_QEMU_A_SCENARIOS); \
fi

# Real STM32H563 hardware equivalence suite: positive lifecycle + restart
# recovery + cross-domain isolation on a Nucleo-H563ZI, the on-silicon
# counterpart of test-target. Needs the ST-Link + board (detect_h5.sh) and a
Expand Down Expand Up @@ -147,6 +161,8 @@ clean:
rm -rf $(BUILD_DIR)
$(MAKE) -C tests/firmware/stm32h563 clean
$(MAKE) -C tests/firmware/stm32h563-vnet clean
$(MAKE) -C tests/firmware/aarch64-smoke clean
$(MAKE) -C tests/firmware/aarch64-ns-smoke clean
$(MAKE) -C tests/host/domain clean
$(MAKE) -C tests/host/manifest clean
$(MAKE) -C tests/host/lifecycle clean
Expand Down
Loading
Loading