Thread (63 messages) 63 messages, 10 authors, 2014-06-02

[PATCH v3 5/7] ARM: dma: Use dma_pfn_offset for dma address translation

From: Russell King - ARM Linux <hidden>
Date: 2014-05-05 19:51:52
Also in: linux-devicetree, lkml

On Fri, May 02, 2014 at 11:05:16AM -0400, Santosh Shilimkar wrote:
On Friday 02 May 2014 10:58 AM, Russell King - ARM Linux wrote:
quoted
On Thu, Apr 24, 2014 at 11:30:05AM -0400, Santosh Shilimkar wrote:
quoted
 static inline void *dma_to_virt(struct device *dev, dma_addr_t addr)
 {
-	return (void *)__bus_to_virt((unsigned long)addr);
+	if (!dev)
+		return (void *)__bus_to_virt((unsigned long)addr);
+	else
+		return (void *)__bus_to_virt(__pfn_to_bus(dma_to_pfn(dev, addr)));
This is quite horrendous.  There's easier ways to do this...  I assume
you haven't looked at the assembler resulting from this at all with
stuff like the p2v patching enabled?
I haven't. Will check.
	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);
quoted
quoted
 static inline dma_addr_t virt_to_dma(struct device *dev, void *addr)
 {
-	return (dma_addr_t)__virt_to_bus((unsigned long)(addr));
+	if (!dev)
+		return (dma_addr_t)__virt_to_bus((unsigned long)(addr));
+	else
+		return pfn_to_dma(dev,
+				__bus_to_pfn(__virt_to_bus((unsigned long)(addr))));
Same here.
ok.

	if (dev)
		return pfn_to_dma(dev, virt_to_pfn(addr));

	return (dma_addr_t)__virt_to_bus((unsigned long)(addr));

-- 
FTTC broadband for 0.8mile line: now at 9.7Mbps down 460kbps up... slowly
improving, and getting towards what was expected from it.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help