summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/nios2/Kconfig1
-rw-r--r--arch/nios2/include/asm/page.h6
-rw-r--r--arch/nios2/mm/dma-mapping.c34
3 files changed, 16 insertions, 25 deletions
diff --git a/arch/nios2/Kconfig b/arch/nios2/Kconfig
index 26a9c760a98b..44b5da37e8bd 100644
--- a/arch/nios2/Kconfig
+++ b/arch/nios2/Kconfig
@@ -4,6 +4,7 @@ config NIOS2
4 select ARCH_32BIT_OFF_T 4 select ARCH_32BIT_OFF_T
5 select ARCH_HAS_SYNC_DMA_FOR_CPU 5 select ARCH_HAS_SYNC_DMA_FOR_CPU
6 select ARCH_HAS_SYNC_DMA_FOR_DEVICE 6 select ARCH_HAS_SYNC_DMA_FOR_DEVICE
7 select ARCH_HAS_UNCACHED_SEGMENT
7 select ARCH_NO_SWAP 8 select ARCH_NO_SWAP
8 select TIMER_OF 9 select TIMER_OF
9 select GENERIC_ATOMIC64 10 select GENERIC_ATOMIC64
diff --git a/arch/nios2/include/asm/page.h b/arch/nios2/include/asm/page.h
index f1fbdc47bdaf..79fcac61f6ef 100644
--- a/arch/nios2/include/asm/page.h
+++ b/arch/nios2/include/asm/page.h
@@ -101,12 +101,6 @@ static inline bool pfn_valid(unsigned long pfn)
101# define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | \ 101# define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | \
102 VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 102 VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
103 103
104# define UNCAC_ADDR(addr) \
105 ((void *)((unsigned)(addr) | CONFIG_NIOS2_IO_REGION_BASE))
106# define CAC_ADDR(addr) \
107 ((void *)(((unsigned)(addr) & ~CONFIG_NIOS2_IO_REGION_BASE) | \
108 CONFIG_NIOS2_KERNEL_REGION_BASE))
109
110#include <asm-generic/memory_model.h> 104#include <asm-generic/memory_model.h>
111 105
112#include <asm-generic/getorder.h> 106#include <asm-generic/getorder.h>
diff --git a/arch/nios2/mm/dma-mapping.c b/arch/nios2/mm/dma-mapping.c
index 4af9e5b5ba1c..9cb238664584 100644
--- a/arch/nios2/mm/dma-mapping.c
+++ b/arch/nios2/mm/dma-mapping.c
@@ -60,32 +60,28 @@ void arch_sync_dma_for_cpu(struct device *dev, phys_addr_t paddr,
60 } 60 }
61} 61}
62 62
63void *arch_dma_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle, 63void arch_dma_prep_coherent(struct page *page, size_t size)
64 gfp_t gfp, unsigned long attrs)
65{ 64{
66 void *ret; 65 unsigned long start = (unsigned long)page_address(page);
67 66
68 /* optimized page clearing */ 67 flush_dcache_range(start, start + size);
69 gfp |= __GFP_ZERO; 68}
70 69
71 if (dev == NULL || (dev->coherent_dma_mask < 0xffffffff)) 70void *uncached_kernel_address(void *ptr)
72 gfp |= GFP_DMA; 71{
72 unsigned long addr = (unsigned long)ptr;
73 73
74 ret = (void *) __get_free_pages(gfp, get_order(size)); 74 addr |= CONFIG_NIOS2_IO_REGION_BASE;
75 if (ret != NULL) {
76 *dma_handle = virt_to_phys(ret);
77 flush_dcache_range((unsigned long) ret,
78 (unsigned long) ret + size);
79 ret = UNCAC_ADDR(ret);
80 }
81 75
82 return ret; 76 return (void *)ptr;
83} 77}
84 78
85void arch_dma_free(struct device *dev, size_t size, void *vaddr, 79void *cached_kernel_address(void *ptr)
86 dma_addr_t dma_handle, unsigned long attrs)
87{ 80{
88 unsigned long addr = (unsigned long) CAC_ADDR((unsigned long) vaddr); 81 unsigned long addr = (unsigned long)ptr;
82
83 addr &= ~CONFIG_NIOS2_IO_REGION_BASE;
84 addr |= CONFIG_NIOS2_KERNEL_REGION_BASE;
89 85
90 free_pages(addr, get_order(size)); 86 return (void *)ptr;
91} 87}