
From: Christoph Müllner christoph.muellner@theobroma-systems.com
Patches on the U-Boot mailing list from Rockchip engineers indicate, that the RK3399's DMA engines are not able to use addresses in high-memory (above 0xf8000000).
This patch models this restriction in an RK3399 specific mach_addr_is_dmaable() function.
Signed-off-by: Christoph Müllner christoph.muellner@theobroma-systems.com Signed-off-by: Christoph Muellner christoph.muellner@theobroma-systems.com ---
Changes in v2: - Convert argument type from unsigned long to void pointer.
arch/arm/mach-rockchip/rk3399/rk3399.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
diff --git a/arch/arm/mach-rockchip/rk3399/rk3399.c b/arch/arm/mach-rockchip/rk3399/rk3399.c index a7ccd4f3ed..8895417bda 100644 --- a/arch/arm/mach-rockchip/rk3399/rk3399.c +++ b/arch/arm/mach-rockchip/rk3399/rk3399.c @@ -109,3 +109,16 @@ void board_debug_uart_init(void) #endif } #endif + +int mach_addr_is_dmaable(void __iomem *ptr) +{ + uintptr_t addr = (uintptr_t)ptr; + + /* + * The RK3399 cannot cope with high-memory DMA targets/sources. + */ + if (addr < 0xf8000000UL) + return 1; + + return 0; +}