summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoralf Trønnes <noralf@tronnes.org>2015-05-15 20:20:26 +0200
committerpopcornmix <popcornmix@gmail.com>2015-05-18 14:13:32 +0100
commit3048b2ee0cb7710595443e2bf748235d43fdb47b (patch)
treedd3bff8e1969fccc8b33e71df908487140ad533e
parentd54112e7c36831a5c1033135f10b4c228e6165fa (diff)
downloadlinux-3048b2ee0cb7710595443e2bf748235d43fdb47b.tar.gz
fixup: restore dma-mapping.h
dwc_otg has been fixed, so no need to revert 6ce0d20: ARM: dma: Use dma_pfn_offset for dma address translation The pfn_to_dma/dma_to_pfn changes that came with that commit is needed to use the 'dma-ranges' DT property on ARCH_BCM2835. dma-ranges is needed by bcm2708_fb and vchiq on ARCH_BCM2835. If not the mailbox call fails to hand over the correct bus address to videocore. Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
-rw-r--r--arch/arm/include/asm/dma-mapping.h18
1 files changed, 17 insertions, 1 deletions
diff --git a/arch/arm/include/asm/dma-mapping.h b/arch/arm/include/asm/dma-mapping.h
index f5572d94a69a..b52101d37ec7 100644
--- a/arch/arm/include/asm/dma-mapping.h
+++ b/arch/arm/include/asm/dma-mapping.h
@@ -58,21 +58,37 @@ static inline int dma_set_mask(struct device *dev, u64 mask)
#ifndef __arch_pfn_to_dma
static inline dma_addr_t pfn_to_dma(struct device *dev, unsigned long pfn)
{
+ if (dev)
+ pfn -= dev->dma_pfn_offset;
return (dma_addr_t)__pfn_to_bus(pfn);
}
static inline unsigned long dma_to_pfn(struct device *dev, dma_addr_t addr)
{
- return __bus_to_pfn(addr);
+ unsigned long pfn = __bus_to_pfn(addr);
+
+ if (dev)
+ pfn += dev->dma_pfn_offset;
+
+ return pfn;
}
static inline void *dma_to_virt(struct device *dev, dma_addr_t addr)
{
+ if (dev) {
+ unsigned long pfn = dma_to_pfn(dev, addr);
+
+ return phys_to_virt(__pfn_to_phys(pfn));
+ }
+
return (void *)__bus_to_virt((unsigned long)addr);
}
static inline dma_addr_t virt_to_dma(struct device *dev, void *addr)
{
+ if (dev)
+ return pfn_to_dma(dev, virt_to_pfn(addr));
+
return (dma_addr_t)__virt_to_bus((unsigned long)(addr));
}