lkml.org 
[lkml]   [2012]   [Feb]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH 3/3] x86: introduce CONFIG_X86_DMA_REMAP
The default functions phys_to_dma, dma_to_phys implement identity
mapping as fast inline functions. Some systems, however, need a
custom function to implement its own mapping between CPU addresses and
device addresses. This option is needed to support the sta2x11 I/O Hub,
whose support has been accepted but won't compile without this patch.

Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
Acked-by: Giancarlo Asnaghi <giancarlo.asnaghi@st.com>
Cc: Alan Cox <alan@linux.intel.com>
---
arch/x86/Kconfig | 5 +++++
arch/x86/include/asm/dma-mapping.h | 7 +++++++
2 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 5bb23c3..5426833 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -512,6 +512,7 @@ config STA2X11
depends on X86_32_NON_STANDARD && PCI
select SWIOTLB
select X86_DEV_DMA_OPS
+ select X86_DMA_REMAP
select MFD_STA2X11
select ARCH_REQUIRE_GPIOLIB
default n
@@ -2255,6 +2256,10 @@ config X86_DEV_DMA_OPS
bool
depends on X86_64 || STA2X11

+config X86_DMA_REMAP
+ bool
+ depends on STA2X11
+
source "net/Kconfig"

source "drivers/Kconfig"
diff --git a/arch/x86/include/asm/dma-mapping.h b/arch/x86/include/asm/dma-mapping.h
index 09aa473..61c0bd2 100644
--- a/arch/x86/include/asm/dma-mapping.h
+++ b/arch/x86/include/asm/dma-mapping.h
@@ -62,6 +62,12 @@ extern void *dma_generic_alloc_coherent(struct device *dev, size_t size,
dma_addr_t *dma_addr, gfp_t flag,
struct dma_attrs *attrs);

+#ifdef CONFIG_X86_DMA_REMAP /* Platform code defines bridge-specific code */
+extern bool dma_capable(struct device *dev, dma_addr_t addr, size_t size);
+extern dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr);
+extern phys_addr_t dma_to_phys(struct device *dev, dma_addr_t daddr);
+#else
+
static inline bool dma_capable(struct device *dev, dma_addr_t addr, size_t size)
{
if (!dev->dma_mask)
@@ -79,6 +85,7 @@ static inline phys_addr_t dma_to_phys(struct device *dev, dma_addr_t daddr)
{
return daddr;
}
+#endif /* CONFIG_X86_DMA_REMAP */

static inline void
dma_cache_sync(struct device *dev, void *vaddr, size_t size,
--
1.7.7.2

\
 
 \ /
  Last update: 2012-02-16 11:43    [W:0.051 / U:0.020 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site