diff options
Diffstat (limited to 'package/boot/uboot-layerscape/patches/0016-ARM-asm-types-Introduce-DMA_ADDR_T_64BIT.patch')
-rw-r--r-- | package/boot/uboot-layerscape/patches/0016-ARM-asm-types-Introduce-DMA_ADDR_T_64BIT.patch | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/package/boot/uboot-layerscape/patches/0016-ARM-asm-types-Introduce-DMA_ADDR_T_64BIT.patch b/package/boot/uboot-layerscape/patches/0016-ARM-asm-types-Introduce-DMA_ADDR_T_64BIT.patch new file mode 100644 index 0000000000..7f39efc017 --- /dev/null +++ b/package/boot/uboot-layerscape/patches/0016-ARM-asm-types-Introduce-DMA_ADDR_T_64BIT.patch @@ -0,0 +1,80 @@ +From 4aa3d79020aeca3780ea113a495d18662d593761 Mon Sep 17 00:00:00 2001 +From: Lokesh Vutla <lokeshvutla@ti.com> +Date: Thu, 24 Mar 2016 16:02:00 +0530 +Subject: [PATCH 16/93] ARM: asm: types: Introduce DMA_ADDR_T_64BIT + +dma_addr_t holds any valid DMA address. If the DMA API only uses 32-bit +addresses, dma_addr_t need only be 32 bits wide. Bus addresses, e.g., PCI BARs, +may be wider than 32 bits, but drivers do memory-mapped I/O to ioremapped +kernel virtual addresses, so they don't care about the size of the actual +bus addresses. +Also 32 bit ARM systems with LPAE enabled can use 64bit address space, but +DMA still use 32bit address like in case of DRA7 and Keystone platforms. + +This is inspired from the Linux kernel types implementation[1] + +[1] https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/linux/types.h#n142 + +Acked-by: Lukasz Majewski <l.majewski@samsung.com> +Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com> +Reviewed-by: Tom Rini <trini@konsulko.com> +Signed-off-by: Prabhakar Kushwaha <prabhakar.kushwaha@nxp.com> +--- + arch/arm/Kconfig | 4 ++++ + arch/arm/include/asm/types.h | 17 +++++++++++++++-- + 2 files changed, 19 insertions(+), 2 deletions(-) + +diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig +index 5c20801..b536684 100644 +--- a/arch/arm/Kconfig ++++ b/arch/arm/Kconfig +@@ -7,6 +7,10 @@ config SYS_ARCH + config ARM64 + bool + ++config DMA_ADDR_T_64BIT ++ bool ++ default y if ARM64 ++ + config HAS_VBAR + bool + +diff --git a/arch/arm/include/asm/types.h b/arch/arm/include/asm/types.h +index 388058e..d108915 100644 +--- a/arch/arm/include/asm/types.h ++++ b/arch/arm/include/asm/types.h +@@ -46,16 +46,29 @@ typedef unsigned long long u64; + #endif /* CONFIG_ARM64 */ + + #ifdef CONFIG_PHYS_64BIT +-typedef unsigned long long dma_addr_t; + typedef unsigned long long phys_addr_t; + typedef unsigned long long phys_size_t; + #else + /* DMA addresses are 32-bits wide */ +-typedef u32 dma_addr_t; + typedef unsigned long phys_addr_t; + typedef unsigned long phys_size_t; + #endif + ++/* ++ * A dma_addr_t can hold any valid DMA address, i.e., any address returned ++ * by the DMA API. ++ * ++ * If the DMA API only uses 32-bit addresses, dma_addr_t need only be 32 ++ * bits wide. Bus addresses, e.g., PCI BARs, may be wider than 32 bits, ++ * but drivers do memory-mapped I/O to ioremapped kernel virtual addresses, ++ * so they don't care about the size of the actual bus addresses. ++ */ ++#ifdef CONFIG_DMA_ADDR_T_64BIT ++typedef unsigned long long dma_addr_t; ++#else ++typedef u32 dma_addr_t; ++#endif ++ + #endif /* __KERNEL__ */ + + typedef unsigned long resource_size_t; +-- +1.7.9.5 + |