]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPkg/ArmDmaLib: interpret GCD attributes as a bit field
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Tue, 19 Apr 2016 14:19:02 +0000 (16:19 +0200)
committerArd Biesheuvel <ard.biesheuvel@linaro.org>
Tue, 10 May 2016 12:44:39 +0000 (14:44 +0200)
Comparing a GCD attribute field directly against EFI_MEMORY_UC and
EFI_MEMORY_WT is incorrect, since it may have other bits set as well
which are not related to the cacheability of the region. So instead,
test explicitly against the flags EFI_MEMORY_WB and EFI_MEMORY_WT,
which must be set if the region may be mapped with cacheable attributes.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
ArmPkg/Library/ArmDmaLib/ArmDmaLib.c

index 66f3469eb1b5805e6211233bff48b02341111f4e..2144699c08b94008f5cd20d56c79b74bb024720a 100644 (file)
@@ -102,9 +102,7 @@ DmaMap (
     }\r
 \r
     // If the mapped buffer is not an uncached buffer\r
-    if ( (GcdDescriptor.Attributes != EFI_MEMORY_WC) &&\r
-         (GcdDescriptor.Attributes != EFI_MEMORY_UC) )\r
-    {\r
+    if ((GcdDescriptor.Attributes & (EFI_MEMORY_WB | EFI_MEMORY_WT)) != 0) {\r
       //\r
       // If the buffer does not fill entire cache lines we must double buffer into\r
       // uncached memory. Device (PCI) address becomes uncached page.\r