Skip to content

Conversation

@AlexJones0
Copy link
Contributor

This PR makes the minimal necessary changes to the provisioning flow to provide the support required to be able to run the end-to-end orchestrator tests in QEMU, to emulate provisioning flows. The 1st commit resolves a bug that does not cause a problem on FPGA/silicon but does start to cause issues on QEMU, and the 2nd adds special case handling for reading uninitialized flash on QEMU (different to FPGA). See the commit messages and comments for more details.

Aside: to be able to build the orchestrator zip for QEMU we will need to have signed ft_personalize_sival and rom_ext_dice_x509_prod binaries present in the repo (currently exist only for silicon & FPGAs). I would assume for non-silicon environments these are generated and signed with fake keys, but I cannot find any documentation on how these are produced for non-silicon environments. It also isn't clear to me what online/manual intervention is required to run the E2E orchestrator tests for the SiVal SKU (or whether this is even possible for me to perform locally / for QEMU). I can't find any supporting documentation for these tests aside from some guidance for running the orchestrator. Any more information / suggestions would be appreciated.

When sending the final hash of all personalization objects to the host
to confirm the integrity of provisioning, the current implementation
manually toggles the GPIO TX Ready indicator used with the SPI console
for the transmission to high before the transmission, and low after.

In reality, the ujson serialization of the hash will call through to the
OTTF SPI console via `base_print` which will handle all of the logic for
toggling the pin for you when the data is ready in the SPI read buffer.
The current logic in fact makes timing assumptions: it assumes that the
data will be ready in the SPI read buffer by the time the host tries to
read the frame header based on the GPIO pin going high . This works now
because silicon & FPGAs are fast enough, but might not be true if the
SPI console becomes more complicated / slower, or at different clock
speeds, or in sim/emulation environments (e.g. QEMU, which does not
synchronize I/O and guest SW well, sometimes errors on this case).

The fix is simple: let the SPI console handle the GPIO pin for us, and
stop trying to manually handle it ourselves.

Signed-off-by: Alex Jones <[email protected]>
@AlexJones0 AlexJones0 requested a review from a team as a code owner December 8, 2025 20:34
@AlexJones0 AlexJones0 requested review from cfrantz, jwnrt, pamaury and timothytrippel and removed request for a team December 8, 2025 20:34
Copy link
Contributor

@pamaury pamaury left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The change looks good to me, though I don't have all the context of the provisioning flow to really understand everything.

@AlexJones0 AlexJones0 added the CI:Rerun Rerun failed CI jobs label Dec 10, 2025
@github-actions github-actions bot removed the CI:Rerun Rerun failed CI jobs label Dec 10, 2025
See the relevant comments. Only changes the provisioning code path for
the QEMU case, to handle assumptions already built in for FPGAs.

Signed-off-by: Alex Jones <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants