Skip to content

Add patina_sre crate (System Recovery Environment boot orchestrator)#97

Open
kat-perez wants to merge 1 commit into
OpenDevicePartnership:mainfrom
kat-perez:feature/patina-sre-crate
Open

Add patina_sre crate (System Recovery Environment boot orchestrator)#97
kat-perez wants to merge 1 commit into
OpenDevicePartnership:mainfrom
kat-perez:feature/patina-sre-crate

Conversation

@kat-perez
Copy link
Copy Markdown
Contributor

@kat-perez kat-perez commented May 27, 2026

Summary

Adds patina_sre at uefi/crates/patina_sre/ — implements patina_boot::BootOrchestrator for platforms shipping a System Recovery Environment alongside the main OS.

The skeleton implements the normal boot path:

  1. interleave connect+dispatch (10-round cap)
  2. extra connect_all before EndOfDxe so PartitionDxe can bind GPT child handles during the open driver-binding window
  3. signal EndOfDxe
  4. discover console devices
  5. boot-partition write-lock (currently a log::warn! stub pending Add partition write-lock helper to patina-boot #61's patina_boot::partition helper)
  6. discover_boot_options + iterate each Boot#### entry through signal_ready_to_boot + boot_from_device_path; logs the device path and underlying error on each failure
  7. fall back to the constructor-provided main_os_path if discovery yields no entries OR fails
  8. return EfiError::NotFound once every attempt is exhausted

The crate re-exports DevicePathBuf + EndEntire from its own patina source so callers (e.g. surface_patina_intel/patina_bin) can construct the constructor's device-path arguments without picking up a different patina (which would break trait coherence).

Hotkey-to-SRE entry, WIM-to-RAM-disk boot, and capsule pre-boot hook are tracked separately (#50–53, #63–73) and layer onto this skeleton.

Verification

End-to-end on Maa Intel Surface hardware (Kioxia KBG8 NVMe, NVMe 2.0, CAP.BPS=1, BPSZ=8192×128KiB) via paired surface_patina_intel feature branch:

  • BootDispatcher dispatches
  • SreBootManager::execute() runs the full BDS phase
  • discover_boot_options finds the Windows Boot Manager Boot####
  • expand_device_path resolves the short-form HD(GPT,GUID) path against the live device topology
  • bootmgfw.efi loads + starts cleanly → Windows boots

cargo test 6/6 passing.

Test plan

  • Unit tests pass on host (cargo test)
  • Compiles for x86_64-unknown-uefi
  • End-to-end Windows boot on real Maa hardware
  • CI on this branch (will run on PR creation)

Follow-ups

Closes #91.

Adds patina_sre at uefi/crates/patina_sre/ — implements
patina_boot::BootOrchestrator for platforms shipping a System Recovery
Environment alongside the main OS. The skeleton implements the normal
boot path:

  1. interleave connect+dispatch (10-round cap)
  2. extra connect_all before EndOfDxe so PartitionDxe can bind GPT
     child handles during the open driver-binding window
  3. signal EndOfDxe
  4. discover console devices
  5. boot-partition write-lock (currently a log::warn! stub pending
     odp-platform-common#61's patina_boot::partition helper)
  6. discover_boot_options + iterate each Boot#### entry through
     signal_ready_to_boot + boot_from_device_path; logs the device path
     and underlying error on each failure
  7. fall back to the constructor-provided main_os_path if discovery
     yields no entries OR fails
  8. return EfiError::NotFound once every attempt is exhausted

The crate re-exports DevicePathBuf + EndEntire from its own patina
source so callers (e.g. surface_patina_intel/patina_bin) can construct
the constructor's device-path arguments without picking up a different
patina (which would break trait coherence).

Hotkey-to-SRE entry, WIM-to-RAM-disk boot, and capsule pre-boot hook
are tracked separately and will layer onto this skeleton.

Verified end-to-end on Maa Intel Surface hardware (Kioxia KBG8 NVMe,
NVMe 2.0, CAP.BPS=1) via the paired surface_patina_intel feature
branch: BootDispatcher dispatches, SreBootManager.execute() runs the
full BDS phase, discover_boot_options finds the Windows Boot Manager
Boot####, expand_device_path resolves the short-form HD(GPT,GUID) path
against the live device topology, and bootmgfw.efi loads + starts
cleanly.

Closes OpenDevicePartnership#91.
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds a new patina_sre crate that implements patina_boot::BootOrchestrator to drive the normal boot path on platforms that ship a System Recovery Environment. The crate covers controller-connect/dispatch interleaving, EndOfDxe + ReadyToBoot signalling, console discovery, Boot#### enumeration with a main_os_path fallback, and a stub for the boot-partition write-lock pending issue #61. Re-exports DevicePathBuf/EndEntire ensure callers share trait coherence with the patina source used internally.

Changes:

  • Introduce SreBootManager orchestrator with interleaved connect+dispatch, BDS signalling, Boot#### iteration, and main_os_path fallback.
  • Re-export DevicePathBuf/EndEntire from patina_sre so downstream consumers stay on the same patina source.
  • Add crate scaffolding (Cargo.toml, README, rust-toolchain.toml, rustfmt.toml, .gitignore) and host-side unit tests for the interleave loop and trait bounds.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated no comments.

Show a summary per file
File Description
uefi/crates/patina_sre/src/sre_boot_manager.rs Core orchestrator implementation + unit tests for interleave loop and trait conformance.
uefi/crates/patina_sre/src/lib.rs Crate root with no_std/feature flags and re-exports.
uefi/crates/patina_sre/README.md Crate description and usage snippet.
uefi/crates/patina_sre/Cargo.toml Package manifest with git deps for patina/patina_boot.
uefi/crates/patina_sre/rust-toolchain.toml Pinned nightly-2025-12-12 with UEFI targets.
uefi/crates/patina_sre/rustfmt.toml max_width = 120.
uefi/crates/patina_sre/.gitignore Ignore target/ and Cargo.lock.

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