diff options
| -rw-r--r-- | arch/powerpc/include/asm/dma-mapping.h | 14 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/machdep.h | 3 | ||||
| -rw-r--r-- | arch/powerpc/kernel/dma.c | 18 | 
3 files changed, 22 insertions, 13 deletions
diff --git a/arch/powerpc/include/asm/dma-mapping.h b/arch/powerpc/include/asm/dma-mapping.h index 8c9c6ad2004..6d2416a8570 100644 --- a/arch/powerpc/include/asm/dma-mapping.h +++ b/arch/powerpc/include/asm/dma-mapping.h @@ -127,19 +127,7 @@ static inline int dma_supported(struct device *dev, u64 mask)  	return dma_ops->dma_supported(dev, mask);  } -static inline int dma_set_mask(struct device *dev, u64 dma_mask) -{ -	struct dma_map_ops *dma_ops = get_dma_ops(dev); - -	if (unlikely(dma_ops == NULL)) -		return -EIO; -	if (dma_ops->set_dma_mask != NULL) -		return dma_ops->set_dma_mask(dev, dma_mask); -	if (!dev->dma_mask || !dma_supported(dev, dma_mask)) -		return -EIO; -	*dev->dma_mask = dma_mask; -	return 0; -} +extern int dma_set_mask(struct device *dev, u64 dma_mask);  static inline void *dma_alloc_coherent(struct device *dev, size_t size,  				       dma_addr_t *dma_handle, gfp_t flag) diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h index adc8e6cdf33..d045b014553 100644 --- a/arch/powerpc/include/asm/machdep.h +++ b/arch/powerpc/include/asm/machdep.h @@ -102,6 +102,9 @@ struct machdep_calls {  	void		(*pci_dma_dev_setup)(struct pci_dev *dev);  	void		(*pci_dma_bus_setup)(struct pci_bus *bus); +	/* Platform set_dma_mask override */ +	int		(*dma_set_mask)(struct device *dev, u64 dma_mask); +  	int		(*probe)(void);  	void		(*setup_arch)(void); /* Optional, may be NULL */  	void		(*init_early)(void); diff --git a/arch/powerpc/kernel/dma.c b/arch/powerpc/kernel/dma.c index 84d6367ec00..f368c075c90 100644 --- a/arch/powerpc/kernel/dma.c +++ b/arch/powerpc/kernel/dma.c @@ -12,6 +12,7 @@  #include <linux/memblock.h>  #include <asm/bug.h>  #include <asm/abs_addr.h> +#include <asm/machdep.h>  /*   * Generic direct DMA implementation @@ -154,6 +155,23 @@ EXPORT_SYMBOL(dma_direct_ops);  #define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16) +int dma_set_mask(struct device *dev, u64 dma_mask) +{ +	struct dma_map_ops *dma_ops = get_dma_ops(dev); + +	if (ppc_md.dma_set_mask) +		return ppc_md.dma_set_mask(dev, dma_mask); +	if (unlikely(dma_ops == NULL)) +		return -EIO; +	if (dma_ops->set_dma_mask != NULL) +		return dma_ops->set_dma_mask(dev, dma_mask); +	if (!dev->dma_mask || !dma_supported(dev, dma_mask)) +		return -EIO; +	*dev->dma_mask = dma_mask; +	return 0; +} +EXPORT_SYMBOL(dma_set_mask); +  static int __init dma_init(void)  {         dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);  |