v2025020003.0.0
What's Changed
-
ArmPlatformPkg: Remove DXE Core FV placement assumption in PeilessSec @makubacki (#465)
Change Details
## Description
Instead of failing to boot if the DXE Core is not placed in the first FV instance found, decompress and search all firmware volumes that have been installed.
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
- Boot with DXE Core placed in a compressed FV in different orders to other FVs
Integration Instructions
- N/A - Backward compatible
-
Update ArmSetMemoryAttributes to avoid setting invalid states during transitions @kuqin12 (#463)
Change Details
## Description
The current
ArmSetMemoryAttributeswould cycle through the input memory attributes bit by bit and could lead the memory in an invalid transient state during transitions. i.e. setting the memory to be code type (read only and executable), if the RP flag is set, it will make the memory region as data region first and then enable the executable bit, which could cause page fault on the next instruction.This again resolves #454, more properly.
For details on how to complete these options and their meaning refer to CONTRIBUTING.md.
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
This was tested on both QEMU SBSA platform and physical hardware platform.
Integration Instructions
N/A
</blockquote> <hr> </details>
-
ArmPkg: Also disable translation when setting global abort for SmmuDxe EBS behavior @eeshanl (#453)
Change Details
## Description
ArmPkg: Also disable translation when setting global abort for SmmuDxe EBS behavior
SMMUv3 honors the Global Abort bit only when CR0.SMMUEN == 0. SmmuV3DisableTranslation() handles this.
For details on how to complete these options and their meaning refer to CONTRIBUTING.md.
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
Tested on physical device
Integration Instructions
N/A
-
ArmPkg: Change default EBS behavior for SMMU(s) to be abort @eeshanl (#449)
Change Details
## Description
ArmPkg: Change default EBS behavior for SMMU(s) to be abort.
The default behavior of the EBS callback for all SMMU's will be global abort.
If there is an associated RMR node with that SMMU, then we will bypass.For details on how to complete these options and their meaning refer to CONTRIBUTING.md.
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
Tested on physical platform.
Integration Instructions
N/A
-
ArmPkg: Switch to TLBI All @eeshanl (#447)
Change Details
## Description
ArmPkg: Switch to TLBI All
Currently TLBI Range invalidation requires unecessary computation of Num and Scale values to construct the command.
Instead, we will simply issue a TLBI All. Has no impact on performance during high I/O scenarios.For details on how to complete these options and their meaning refer to CONTRIBUTING.md.
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
Tested on physical platform.
Integration Instructions
N/A
</blockquote> <hr> </details>
-
Carve out the mm buffer region from the bulk system memory hob @kuqin12 (#431)
Change Details
## Description
The MM communication buffer memory is being added in MM communication DXE driver through gDS calls. This means that the region should not be reported as available through resource descriptor hob.
This change will carve out the MM communication buffer from the system memory.
For details on how to complete these options and their meaning refer to CONTRIBUTING.md.
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
This was tested on QEMU SBSA and booted to OS desktop.
Integration Instructions
N/A
</blockquote> <hr> </details>
⚠️ Breaking Changes
-
[CHERRY-PICK] ArmPlatformPkg : Move RealTimeClockLib header @Flickdm (#458)
Change Details
## Description
RealTimeClockLib is an architectural implementation that is not restricted to the embedded segment or any platform in particular.
So the header has been moved to MdeModulePkg.
And the package has been added to the relevant INF files.Additional Notes:
This is backporting from EDK2 a change to move RealTimeClockLib from EmbeddedPkg to MdeModulePkg.
Upstream commit: tianocore/edk2@57230ff
Split up commits:
Dependency: microsoft/mu_basecore#1612
microsoft/mu_tiano_plus#490For details on how to complete these options and their meaning refer to CONTRIBUTING.md.
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
Built Locally
Integration Instructions
Needs cross submodule updates - depends on microsoft/mu_basecore#1612
And for ARM may depend on microsoft/mu_tiano_plus#490</blockquote> <hr> </details>
-
[CHERRY-PICK] ArmPkg/Driver: use ArmFfaGetPartitionInfo() in Mmcommunication @kuqin12 (#457)
Change Details
## Description
This patch adds ArmFfaLibPartitionInfoGetRegs() in ArmFfaLib
As ArmFfaLibPartitionInfoGetRegs() is added, Normal world ArmFfLib Rx/Tx buffer is not a madatory.
That's why return EFI_UNSUPPORTED while Rx/Tx buffer mapping in ArmFfaLib constructor
can be consider as valid return If ARM_FFA_PARTITION_INFO_GET_REGS is supported by SPMC.For details on how to complete these options and their meaning refer to CONTRIBUTING.md.
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
This is tested on physical ARM64 platform.
Integration Instructions
Need to rely on the
MdeModulePkgto have the corresponding interface change.</blockquote> <hr> </details>
🚀 Features & ✨ Enhancements
-
ArmPkg: Switch to Invalidate by range TLBI commands to improve SmmuDxe performance @eeshanl (#445)
Change Details
## Description
ArmPkg: Switch to Invalidate by range TLBI commands to improve SmmuDxe performance
Improves performance of high I/O scenarios like hibernate/resume.
Improves hibernate/resume speeds by ~5 seconds.For details on how to complete these options and their meaning refer to CONTRIBUTING.md.
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
Tested on physical platform with hibernate/resume. Improves hibernate/resume speeds by ~5 seconds.
Integration Instructions
N/A
</blockquote> <hr> </details>
-
ArmPkg: Improve SmmuDxe performance @eeshanl (#444)
Change Details
## Description
ArmPkg: Improve SmmuDxe performance
- Moves all mapping logic to SetAttribute() so that we don't redundantly update page table bits
- Improves scope of TPL locks in SmmuV3SendCommand() to reduce time spent waiting on lock
- Improves logic for waiting for command to complete in Command Queue
Improves hibernate/resume speeds by over 2x.
For details on how to complete these options and their meaning refer to CONTRIBUTING.md.
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
Tested on physical platform with hibernate/resume to stress test a high I/O scenario.
Integration Instructions
N/A
</blockquote> <hr> </details>
🐛 Bug Fixes
-
[Rebase \& FF] Consolidates memory initialization mechanism for pre-DXE environment @kuqin12 (#456)
Change Details
## Description
This change is a preparation PR for the platform to switch to PEI less based SEC model.
Specifically, this removes the previous change where the logic will try to poke holes in the main system memory. Instead, we will move to PEI less SEC phase, because the current PEI core is incapable of handling the static carveouts gracefully.
Accordingly, the MM communication driver also needs to handle the case when the system already added the MM communication buffer to GCD.
For details on how to complete these options and their meaning refer to CONTRIBUTING.md.
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
This was tested on QEMU SBSA after switching over to PEI less SEC model.
Integration Instructions
N/A
</blockquote> <hr> </details>
-
Do not set attributes if the incoming attributes is outside of the mask @kuqin12 (#455)
Change Details
## Description
The current code will set all RO, RP and XP attributes after using the attribute mask. This could cause the system to trip on unwanted attributes getting set even when the mask does not set on certain bits.
The change will check on the attribute masks before apply the bits.
resolves #454.
For details on how to complete these options and their meaning refer to CONTRIBUTING.md.
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
This was tested on QEMU SBSA and successfully relocated the image.
Integration Instructions
N/A
</blockquote> <hr> </details>
🔐 Security Impacting
-
ArmPkg: Add bounce buffering to IoMmu SmmuDxe implementation @eeshanl (#451)
Change Details
## Description
ArmPkg: Add bounce buffering to IoMmu SmmuDxe implementation
For the cases where we have:
- Non-aligned DMA buffer when we are not using CommonBuffer operations
- An address above 4G for the DMA buffer when the operation only supports below 4G
We need to bounce buffer the original DMA buffer to a newly allocated one under the above conditions. On a Read operation Map() will copy the contents of the DMA buffer into the newly allocated buffer. On a Write operation Unmap() will copy the contents of the newly allocated buffer back to the original DMA buffer.
For details on how to complete these options and their meaning refer to CONTRIBUTING.md.
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
Tested on physical platform
Integration Instructions
N/A
📖 Documentation Updates
-
ArmPkg: Add bounce buffering to IoMmu SmmuDxe implementation @eeshanl (#451)
Change Details
## Description
ArmPkg: Add bounce buffering to IoMmu SmmuDxe implementation
For the cases where we have:
- Non-aligned DMA buffer when we are not using CommonBuffer operations
- An address above 4G for the DMA buffer when the operation only supports below 4G
We need to bounce buffer the original DMA buffer to a newly allocated one under the above conditions. On a Read operation Map() will copy the contents of the DMA buffer into the newly allocated buffer. On a Write operation Unmap() will copy the contents of the newly allocated buffer back to the original DMA buffer.
For details on how to complete these options and their meaning refer to CONTRIBUTING.md.
- Impacts functionality?
- Impacts security?
- Breaking change?
- Includes tests?
- Includes documentation?
How This Was Tested
Tested on physical platform
Integration Instructions
N/A
Full Changelog: v2025020002.0.0...v2025020003.0.0