audk/MdeModulePkg/Universal
Ard Biesheuvel e077a93dc6 MdeModulePkg/CapsuleRuntimeDxe: clean the capsule payload to DRAM
When capsule updates are staged for processing after a warm reboot,
they are copied into memory with the MMU and caches enabled. When
the capsule PEI gets around to coalescing the capsule, the MMU and
caches may still be disabled, and so on architectures where uncached
accesses are incoherent with the caches (such as ARM and AARCH64),
we need to ensure that the data passed into UpdateCapsule() is
written back to main memory before performing the warm reboot.

Unfortunately, on ARM, the only type of cache maintenance instructions
that are suitable for this purpose operate on virtual addresses only,
and given that the UpdateCapsule() prototype includes the physical
address of a linked list of scatter/gather data structures that are
mapped at an address that is unknown to the firmware (and may not even
be mapped at all when UpdateCapsule() is invoked), we can only perform
this cache maintenance at boot time. Fortunately, both Windows and Linux
only invoke UpdateCapsule() before calling ExitBootServices(), so this
is not a problem in practice.

In the future, we may propose adding a secure firmware service that
permits performing the cache maintenance at OS runtime, in which case
this code may be enhanced to call that service if available. For now,
we just fail any UpdateCapsule() calls performed at OS runtime on ARM.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
2018-06-15 18:17:44 +02:00
..
Acpi MdeModulePkg: Remove X86 ASM and S files 2018-06-07 15:26:27 +08:00
BdsDxe MdeModulePkg/BdsDxe: Remove useless perf Code 2018-02-12 11:36:14 +08:00
BootManagerPolicyDxe MdeModulePkg: Convert all .uni files to utf-8 2015-12-15 04:56:23 +00:00
CapsulePei MdeModulePkg: Remove X86 ASM and S files 2018-06-07 15:26:27 +08:00
CapsuleRuntimeDxe MdeModulePkg/CapsuleRuntimeDxe: clean the capsule payload to DRAM 2018-06-15 18:17:44 +02:00
Console MdeModulePkg/Terminal: Check status of OpenProtocol in BindingStart 2018-05-03 11:29:49 +08:00
DebugPortDxe MdeModulePkg: Refine type cast for pointer subtraction 2017-03-06 14:14:09 +08:00
DebugSupportDxe MdeModulePkg: Remove X86 ASM and S files 2018-06-07 15:26:27 +08:00
DevicePathDxe MdeModulePkg: Convert all .uni files to utf-8 2015-12-15 04:56:23 +00:00
Disk MdeModulePkg/RamDiskDxe: Update RouteConfig function 2018-05-03 10:49:44 +08:00
DisplayEngineDxe MdeModulePkg/DisplayEngineDxe: Remove unnecessary parentheses in 'if' 2017-12-06 08:47:56 +08:00
DriverHealthManagerDxe MdeModulePkg/DriverHealthManagerDxe: Update RouteConfig function 2018-05-03 10:49:46 +08:00
DriverSampleDxe MdeModulePkg/DriverSampleDxe: Refine the sample case for UNION type 2018-03-08 08:58:47 +08:00
EbcDxe MdeModulePkg: Remove X86 ASM and S files 2018-06-07 15:26:27 +08:00
EsrtDxe MdeModulePkg: Update Ppi/Protocol/Guid usage in INF files 2017-10-10 18:10:25 +08:00
EsrtFmpDxe MdeModulePkg EsrtFmpDxe: Use EfiBootServicesData for ESRT table 2018-04-25 15:50:55 +08:00
FaultTolerantWriteDxe MdeModulePkg: Refine casting expression result to bigger size 2017-03-06 14:33:20 +08:00
FaultTolerantWritePei MdeModulePkg: Convert all .uni files to utf-8 2015-12-15 04:56:23 +00:00
FileExplorerDxe MdeModulePkg FileExplorerDxe: Change file format which has mixed file format. 2015-12-16 03:22:39 +00:00
FvSimpleFileSystemDxe MdeModulePkg: Fix misuses of AllocateCopyPool 2017-11-08 17:13:03 +08:00
HiiDatabaseDxe MdeModulePkg HiiDataBase: Fix the potential NULL pointer access 2017-12-28 13:34:34 +08:00
HiiResourcesSampleDxe MdeModulePkg: Convert all .uni files to utf-8 2015-12-15 04:56:23 +00:00
LegacyRegion2Dxe MdeModulePkg: Convert all .uni files to utf-8 2015-12-15 04:56:23 +00:00
LoadFileOnFv2 MdeModulePkg LoadFileOnFv2: Correct the parameter name in function comment 2016-10-25 11:53:59 +08:00
LockBox/SmmLockBox MdeModulePkg SmmLockBox: Return updated Length for EFI_BUFFER_TOO_SMALL 2018-02-26 14:03:23 +08:00
MemoryTest MdeModulePkg/NullMemoryTest: Fix bug in CompatibleRangeTest 2018-03-07 12:36:14 +08:00
Metronome MdeModulePkg: Convert all .uni files to utf-8 2015-12-15 04:56:23 +00:00
MonotonicCounterRuntimeDxe MdeModulePkg: Minor comments update to GetNextHighMonotonicCount() 2016-01-29 09:26:49 +00:00
Network MdeModulePkg/Mtftp4Dxe: Fix the incorrect return status. 2018-03-13 16:55:18 +08:00
PCD MdeModulePkg PCD: Remove unused PCD attribute PCD_TYPE_SKU_ENABLED 2018-03-13 15:57:05 +08:00
PcatSingleSegmentPciCfg2Pei MdeModulePkg: Convert all .uni files to utf-8 2015-12-15 04:56:23 +00:00
PlatformDriOverrideDxe MdeModulePkg: Error Level is not used correctly 2017-04-12 08:56:12 +08:00
PrintDxe MdeModulePkg/PrintDxe: Handle the deprecation of [A|U]ValueToString 2017-03-02 09:59:06 +08:00
PropertiesTableAttributesDxe MdeModulePkg: Convert all .uni files to utf-8 2015-12-15 04:56:23 +00:00
RegularExpressionDxe MdeModulePkg: Delete useless case code 2017-08-16 16:55:22 +08:00
ReportStatusCodeRouter MdeModulePkg: Convert all .uni files to utf-8 2015-12-15 04:56:23 +00:00
ResetSystemPei MdeModulePkg/ResetSystemPei: Add reset notifications in PEI 2018-02-09 15:30:01 +08:00
ResetSystemRuntimeDxe MdeModulePkg/ResetSystemRuntimeDxe: Add more debug message 2018-02-09 15:29:57 +08:00
SectionExtractionDxe MdeModulePkg: Convert all .uni files to utf-8 2015-12-15 04:56:23 +00:00
SectionExtractionPei MdeModulePkg SectionExtractionPei: remove the hard code alignment adjustment 2018-01-19 13:20:20 +08:00
SecurityStubDxe MdeModulePkg: Update Ppi/Protocol/Guid usage in INF files 2017-10-10 18:10:25 +08:00
SerialDxe MdeModulePkg/SerialDxe: Do not fail reset when SetAttributes is not supported 2017-11-30 09:11:53 +08:00
SetupBrowserDxe MdeModulePkg: Fix MSFT C4255 warning 2017-11-14 18:18:43 +08:00
SmbiosDxe MdeModulePkg: Refine casting expression result to bigger size 2017-03-06 14:33:20 +08:00
SmbiosMeasurementDxe MdeModulePkg SmbiosMeasurementDxe: Skip measurement for OEM type 2017-09-18 10:19:40 +08:00
SmmCommunicationBufferDxe MdeModulePkg: Add new driver to publish EDKII_PI_SMM_COMMUNICATION_REGION_TABLE. 2016-04-29 12:49:09 +08:00
StatusCodeHandler MdeModulePkg/MemoryStatusCode: Expose the DXE memory status code table. 2016-06-29 09:46:51 +08:00
TimestampDxe MdeModulePkg: Convert all .uni files to utf-8 2015-12-15 04:56:23 +00:00
Variable MdeModulePkg Variable: Use comparison logic to check UINTN parameter 2018-06-12 09:23:14 +08:00
WatchdogTimerDxe MdeModulePkg/Universal: Fix typos in comments 2016-10-27 09:11:19 +08:00