Skip to content

RFC: Patina UEFI Variables - #1760

Draft
makubacki wants to merge 1 commit into
OpenDevicePartnership:mainfrom
makubacki:patina_uefi_variables_rfc
Draft

RFC: Patina UEFI Variables#1760
makubacki wants to merge 1 commit into
OpenDevicePartnership:mainfrom
makubacki:patina_uefi_variables_rfc

Conversation

@makubacki

Copy link
Copy Markdown
Collaborator

Description

Initial RFC for UEFI variables in Patina.

Still a work in progress. PR is in draft while implementation is completed so any changes can be captured in the RFC.

  • Impacts functionality?
  • Impacts security?
  • Breaking change?
  • Includes tests?
  • Includes documentation?

How This Was Tested

  • cargo make all

Integration Instructions

  • N/A

@makubacki makubacki added the rfc A request-for-change proposal label Aug 29, 2026
@patina-automation

patina-automation Bot commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

✅ QEMU Validation Passed

All QEMU validation jobs completed successfully.

Note: Q35 is only built on Windows hosts (QEMU boot is disabled due to a QEMU vfat issue).

Workflow run: https://github.com/OpenDevicePartnership/patina/actions/runs/33235072897

Boot Time to EFI Shell

Platform Elapsed
ArmVirt (Linux Host) 26.3s
Q35 (Linux Host) 26.3s

Dependencies

Repository Ref
patina b340f3a
patina-dxe-core-qemu 2ba7486
patina-fw-patcher c28ab7d
patina-qemu firmware v4.0.5
patina-qemu build script a8b6551

This comment was automatically generated by the Patina QEMU PR Validation Post workflow.

@github-actions github-actions Bot added impact:non-functional Does not have a functional impact type:documentation Improvements or additions to documentation labels Aug 29, 2026
@codecov

codecov Bot commented Aug 29, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

Initial RFC for UEFI variables in Patina.

Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
@makubacki
makubacki force-pushed the patina_uefi_variables_rfc branch from eee2da4 to b340f3a Compare August 29, 2026 04:47
Comment thread docs/src/uefi_variables/uefi_variables_design.md

Ext ==>|"input flow (Zone Gasket)"| A
R ==>|"routed data"| G
R ==>|"cache check"| Ca

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

It seems odd that the router, part of the front-end, would explicitly check the cache in the back end. In my mind either the cache is part of the front-end and the router maintains it, or the cache is part of the backend, and the router is agnostic to its existence.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

The main reason is that the backend is expected to maintain its cache outside of high-cost entry/exit environments like MM while the main I/O operations (e.g., read and write) are expected/allowed to be within those environments. Does that make sense? If so, I can clarify this in the RFC.

completely decoupled from other design areas. Control only transfers between zones across well-defined APIs. All data
transferred across zones is considered external and untrusted.

- `External` - Code outside the front-end and back-end.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Concrete examples of the zones would be helpful in digesting this. E.g. Front end: EDK2' Variable DXE driver, Back End: Standalone MM's variable driver, etc.

Some elements may perform the same actions regardless of flow. In other cases, flow will completely change how the
component behaves.

## Stages

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Perhaps I'm missing the point, but as a note. I think the transition between implementation boundary definitions and implementation specific definitions is a bit confusing. Zones, Gaskets, etc. all relate to well defines ABIs and connecting physically different entities where Stages gets into the specific implementation within a single binary. I wonder if it would be helpful to define this in layers such that you talk about the high-level connection between Zones and then the layering within the Zone. At least in my readthrough that would have helped me get a mental model faster.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

impact:non-functional Does not have a functional impact rfc A request-for-change proposal type:documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants