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")