aboutsummaryrefslogtreecommitdiffstats
path: root/package/boot/uboot-layerscape/patches/0016-ARM-asm-types-Introduce-DMA_ADDR_T_64BIT.patch
diff options
context:
space:
mode:
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.patch80
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
+