Conversation
There was a problem hiding this comment.
Pull request overview
Warning
Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.
Adds an i.MX95 “post-quantum on both clusters” demo that pairs Linux-side wolfCrypt PQC benchmarks (A55) with wolfBoot ML-DSA-87 verified boot and console relay from the Cortex-M7.
Changes:
- Add a
/dev/memmmap-basedmemtoolutility for staging payloads and dumping the M7 shared-memory console. - Add a Zephyr OpenAMP/RPMsg payload for M7 that relays wolfBoot’s shared-memory console to Linux as an RPMsg TTY.
- Add board orchestration scripts, a two-pane console renderer, and a benchmark container build/runtime setup.
Reviewed changes
Copilot reviewed 18 out of 20 changed files in this pull request and generated 15 comments.
Show a summary per file
| File | Description |
|---|---|
| imx95-pqc-demo/tools/memtool.c | Adds /dev/mem mmap read/write/load/fill and M7 console ring dump tooling. |
| imx95-pqc-demo/m7/zephyr-app/src/main.c | Implements the M7-side OpenAMP/RPMsg endpoint and wolfBoot console relay logic. |
| imx95-pqc-demo/m7/zephyr-app/prj.conf | Configures Zephyr for OpenAMP + minimal logging and documents MPU constraints. |
| imx95-pqc-demo/m7/zephyr-app/CMakeLists.txt | Defines the Zephyr application build. |
| imx95-pqc-demo/m7/imx95_wolfboot.overlay | Relocates the Zephyr image, enables MU, and declares MPU-accessible console/status region. |
| imx95-pqc-demo/m7/build.sh | Provides a reproducible Zephyr build producing a raw binary payload. |
| imx95-pqc-demo/demo/twopane.py | Renders the two-pane demo view on a console without tmux/screen dependencies. |
| imx95-pqc-demo/demo/stage.sh | Stages demo artifacts to the board and builds/stages memtool. |
| imx95-pqc-demo/demo/m7-start.sh | Starts remoteproc and stages the signed payload into the M7 boot partition region. |
| imx95-pqc-demo/demo/m7-console-tail.sh | Provides a console-ring tailer for the M7 pane (alternative to RPMsg TTY). |
| imx95-pqc-demo/demo/demo-run.sh | Orchestrates container start, M7 start, and launches the renderer to a target TTY. |
| imx95-pqc-demo/container/entrypoint.sh | Runs benchmark cycles and selects baseline vs sha3-crypto build at runtime. |
| imx95-pqc-demo/container/docker-compose.yml | Defines the benchmark container service for on-board execution/logging. |
| imx95-pqc-demo/container/build-image.sh | Builds (and optionally pushes) the arm64 demo container image. |
| imx95-pqc-demo/container/build-aarch64.sh | Cross-builds wolfSSL for aarch64 in baseline and sha3-crypto configs. |
| imx95-pqc-demo/container/Dockerfile | Multi-stage image build that cross-compiles wolfSSL and ships benchmarks. |
| imx95-pqc-demo/README.md | Documents the demo purpose, measurements, build steps, and key gotchas. |
| README.md | Adds the new i.MX95 PQC demo to the repository’s example list. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
dgarske
force-pushed
the
imx95_pqc_demo
branch
3 times, most recently
from
August 21, 2026 03:56
486acd5 to
68e60a7
Compare
dgarske
marked this pull request as ready for review
September 16, 2026 21:52
dgarske
force-pushed
the
imx95_pqc_demo
branch
from
September 16, 2026 23:26
156b272 to
7ee98cc
Compare
dgarske
force-pushed
the
imx95_pqc_demo
branch
from
September 17, 2026 23:16
7ee98cc to
237c447
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A demo running entirely on a Toradex SMARC iMX95: wolfBoot verifies and boots Linux on the Cortex-A55 cluster with ML-DSA-87, a second wolfBoot verifies and boots Zephyr on the Cortex-M7 with the same algorithm, and both cores then run wolfCrypt ML-KEM and ML-DSA benchmarks. Output is a single stream on the board's serial console, tagged by core.
Depends on wolfBoot wolfSSL/wolfBoot#888 for the
imx95_a55target, including the stage 1 that replaces U-Boot SPL. Theimx95_m7target it also uses is already merged.What it adds
demo/- board-side orchestration, the console stream, and its systemd unitsm7/- the Zephyr payload wolfBoot verifies, and its overlaycontainer/- the wolfCrypt benchmark container for the A55 clustertools/- AHAB container packaging, eMMC boot-partition write and select, andmemtoolfor reading the two cores' consolesdocs/BUILD.md- building the whole demo from a stock moduledocs/BOOT-WALKTHROUGH.md- the boot explained stage by stage, and how to switch between the stock and wolfBoot chainsNotes
samples/subsys/ipc/openamp_rsc_table. That sample assumes Linux loaded its ELF and resolved its vring addresses, but here Linux loads wolfBoot, so the sample would wait forever for a resource table that is not the one being polled. This payload uses fixed vring addresses matching wolfBoot's table.echo stop > .../statefails on this BSP while the core is running, so replaying the boot means a power cycle.Hardware / test status
Validated on a Toradex SMARC iMX95 (LPUART1, 115200 8N1): cold boot to Torizon userspace with both cores verified, over repeated power cycles. The build path in
docs/BUILD.mdwas reproduced end to end from a stock module - both AHAB containers and the kernel FIT it produces come out byte-identical to the ones running on the board.Scope
The A55 benchmark runs in a container; a native build is not provided. The serial console is the demo; the DisplayPort two-pane renderer is still in
demo/and is opt-in viainstall-autostart.sh --display.