|
@@ -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);
|