diff options
author | Ard Biesheuvel <ard.biesheuvel@linaro.org> | 2016-04-19 16:19:02 +0200 |
---|---|---|
committer | Ard Biesheuvel <ard.biesheuvel@linaro.org> | 2016-05-10 14:44:39 +0200 |
commit | 885d57ef091fd58916163e79ee694ddaf8fcc25e (patch) | |
tree | bc9bab8f8f3ff5a41b836557ef1f5e2d59abdcf0 | |
parent | 80e5a33da1fcbe54cbcc178f1880e80e297d5fd4 (diff) | |
download | edk2-885d57ef091fd58916163e79ee694ddaf8fcc25e.tar.gz edk2-885d57ef091fd58916163e79ee694ddaf8fcc25e.tar.bz2 edk2-885d57ef091fd58916163e79ee694ddaf8fcc25e.zip |
ArmPkg/ArmDmaLib: interpret GCD attributes as a bit field
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>
-rw-r--r-- | ArmPkg/Library/ArmDmaLib/ArmDmaLib.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/ArmPkg/Library/ArmDmaLib/ArmDmaLib.c b/ArmPkg/Library/ArmDmaLib/ArmDmaLib.c index 66f3469eb1..2144699c08 100644 --- a/ArmPkg/Library/ArmDmaLib/ArmDmaLib.c +++ b/ArmPkg/Library/ArmDmaLib/ArmDmaLib.c @@ -102,9 +102,7 @@ DmaMap ( }
// If the mapped buffer is not an uncached buffer
- if ( (GcdDescriptor.Attributes != EFI_MEMORY_WC) &&
- (GcdDescriptor.Attributes != EFI_MEMORY_UC) )
- {
+ if ((GcdDescriptor.Attributes & (EFI_MEMORY_WB | EFI_MEMORY_WT)) != 0) {
//
// If the buffer does not fill entire cache lines we must double buffer into
// uncached memory. Device (PCI) address becomes uncached page.
|