mirror of https://github.com/acidanthera/audk.git
ArmPkg: Changed Uncached System Memory from EFI_MEMORY_UC to EFI_MEMORY_WC
EFI_MEMORY_UC is mapped to Strongly Ordered memory while EFI_MEMORY_WC is mapped to Uncached Normal/System memory. This change improve performance while accessing uncached regions in the System Memory. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Eugene Cohen <eugene@hp.com> Reviewed-by: Olivier Martin <oliviermartin@arm.com git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13693 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
f1660263de
commit
3f5aa1932f
|
@ -102,7 +102,9 @@ DmaMap (
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the mapped buffer is not an uncached buffer
|
// If the mapped buffer is not an uncached buffer
|
||||||
if (GcdDescriptor.Attributes != EFI_MEMORY_UC) {
|
if ( (GcdDescriptor.Attributes != EFI_MEMORY_WC) &&
|
||||||
|
(GcdDescriptor.Attributes != EFI_MEMORY_UC) )
|
||||||
|
{
|
||||||
//
|
//
|
||||||
// If the buffer does not fill entire cache lines we must double buffer into
|
// If the buffer does not fill entire cache lines we must double buffer into
|
||||||
// uncached memory. Device (PCI) address becomes uncached page.
|
// uncached memory. Device (PCI) address becomes uncached page.
|
||||||
|
@ -129,7 +131,7 @@ DmaMap (
|
||||||
|
|
||||||
if ((Operation == MapOperationBusMasterRead) || (Operation == MapOperationBusMasterCommonBuffer)) {
|
if ((Operation == MapOperationBusMasterRead) || (Operation == MapOperationBusMasterCommonBuffer)) {
|
||||||
// In case the buffer is used for instance to send command to a PCI controller, we must ensure the memory is uncached
|
// In case the buffer is used for instance to send command to a PCI controller, we must ensure the memory is uncached
|
||||||
Status = gDS->SetMemorySpaceAttributes (ALIGN_VALUE(*DeviceAddress - BASE_4KB - 1,BASE_4KB), ALIGN_VALUE(*NumberOfBytes,BASE_4KB), EFI_MEMORY_UC);
|
Status = gDS->SetMemorySpaceAttributes (ALIGN_VALUE(*DeviceAddress - BASE_4KB - 1,BASE_4KB), ALIGN_VALUE(*NumberOfBytes,BASE_4KB), EFI_MEMORY_WC);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -245,7 +245,7 @@ UncachedInternalAllocateAlignedPages (
|
||||||
gAttributes = Descriptor.Attributes;
|
gAttributes = Descriptor.Attributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = gDS->SetMemorySpaceAttributes (Memory, EFI_PAGES_TO_SIZE (Pages), EFI_MEMORY_UC);
|
Status = gDS->SetMemorySpaceAttributes (Memory, EFI_PAGES_TO_SIZE (Pages), EFI_MEMORY_WC);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
return (VOID *)(UINTN)Memory;
|
return (VOID *)(UINTN)Memory;
|
||||||
|
|
Loading…
Reference in New Issue