ARM: keystone: override dma address conversion helpers
This patch adds keystone specific overrides for helper functions that convert
back and forth between dma_addr_t and physical/virtual addresses.
diff --git a/arch/arm/mach-keystone/include/mach/memory.h b/arch/arm/mach-keystone/include/mach/memory.h
index a5f7a1a..872183f5 100644
--- a/arch/arm/mach-keystone/include/mach/memory.h
+++ b/arch/arm/mach-keystone/include/mach/memory.h
@@ -40,6 +40,17 @@
#define virt_to_idmap(x) __virt_to_idmap((unsigned long)(x))
+extern unsigned long __arch_dma_pfn_offset;
+
+#define __arch_pfn_to_dma(dev, pfn) \
+ PFN_PHYS(pfn - __arch_dma_pfn_offset)
+#define __arch_dma_to_pfn(dev, addr) \
+ (PFN_DOWN(addr) + __arch_dma_pfn_offset)
+#define __arch_dma_to_virt(dev, addr) \
+ phys_to_virt(addr + PFN_PHYS(__arch_dma_pfn_offset))
+#define __arch_virt_to_dma(dev, addr) \
+ (virt_to_phys(addr) - PFN_PHYS(__arch_dma_pfn_offset))
+
#endif /* __ASSEMBLY__ */
#endif /* CONFIG_ARM_LPAE */
diff --git a/arch/arm/mach-keystone/keystone.c b/arch/arm/mach-keystone/keystone.c
index c4be7a7..fac8fae 100644
--- a/arch/arm/mach-keystone/keystone.c
+++ b/arch/arm/mach-keystone/keystone.c
@@ -74,6 +74,8 @@
NULL,
};
+unsigned long __arch_dma_pfn_offset;
+
static void __init keystone_init_meminfo(void)
{
bool lpae = IS_ENABLED(CONFIG_ARM_LPAE);
@@ -107,6 +109,9 @@
pr_info("switching to high address space at 0x%llx\n", offset);
__pv_phys_offset = offset;
__pv_offset = offset - PAGE_OFFSET;
+
+ __arch_dma_pfn_offset = PFN_DOWN(KEYSTONE_HIGH_PHYS_START -
+ KEYSTONE_LOW_PHYS_START);
}
DT_MACHINE_START(KEYSTONE, "Keystone")