diff options
author | Ard Biesheuvel <ard.biesheuvel@linaro.org> | 2016-11-12 14:02:26 +0100 |
---|---|---|
committer | Leif Lindholm <leif.lindholm@linaro.org> | 2016-11-30 16:42:59 +0000 |
commit | 0a99a65d2c8a68b72accfa636fe2633900269128 (patch) | |
tree | 75c4b33fe5e9ddca2b748fac6aef478689fe8088 | |
parent | de2ec785e2b11798a3ca7aaf653bc76576d947b0 (diff) | |
download | edk2-platforms-0a99a65d2c8a68b72accfa636fe2633900269128.tar.xz |
ArmPkg/ArmDmaLib: fix incorrect device address of double buffer
If double buffering is not required in DmaMap(), the returned device
address is passed through ConvertToPhysicalAddress () to convert the
host address (which in case of DebugUncachedMemoryAllocationLib is not
1:1 mapped) to a physical address, which is what a device would expect
to be able to perform DMA.
By the same reasoning, a double buffer allocated using DmaAllocateBuffer ()
should be converted in the same way, considering that the buffer is allocated
using UncachedAllocatePages (), to which the above equally applies.
So add the missing ConvertToPhysicalAddress () invocation.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Tested-by: Ryan Harkin <ryan.harkin@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
-rw-r--r-- | ArmPkg/Library/ArmDmaLib/ArmDmaLib.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/ArmPkg/Library/ArmDmaLib/ArmDmaLib.c b/ArmPkg/Library/ArmDmaLib/ArmDmaLib.c index e836feff1e..6afce87024 100644 --- a/ArmPkg/Library/ArmDmaLib/ArmDmaLib.c +++ b/ArmPkg/Library/ArmDmaLib/ArmDmaLib.c @@ -126,7 +126,7 @@ DmaMap ( CopyMem (Buffer, HostAddress, *NumberOfBytes);
}
- *DeviceAddress = (PHYSICAL_ADDRESS)(UINTN)Buffer;
+ *DeviceAddress = ConvertToPhysicalAddress ((UINTN)Buffer);
} else {
Map->DoubleBuffer = FALSE;
}
|