Skip to content

Commit 2e96e04

Browse files
author
Christoph Hellwig
committed
MIPS: use the generic uncached segment support in dma-direct
Stop providing the arch alloc/free hooks and just expose the segment offset instead. Signed-off-by: Christoph Hellwig <[email protected]> Acked-by: Paul Burton <[email protected]>
1 parent c30700d commit 2e96e04

File tree

4 files changed

+10
-26
lines changed

4 files changed

+10
-26
lines changed

arch/mips/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ config MIPS
88
select ARCH_HAS_ELF_RANDOMIZE
99
select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
1010
select ARCH_HAS_UBSAN_SANITIZE_ALL
11+
select ARCH_HAS_UNCACHED_SEGMENT
1112
select ARCH_SUPPORTS_UPROBES
1213
select ARCH_USE_BUILTIN_BSWAP
1314
select ARCH_USE_CMPXCHG_LOCKREF if 64BIT

arch/mips/include/asm/page.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -258,9 +258,6 @@ extern int __virt_addr_valid(const volatile void *kaddr);
258258
((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0) | \
259259
VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
260260

261-
#define UNCAC_ADDR(addr) (UNCAC_BASE + __pa(addr))
262-
#define CAC_ADDR(addr) ((unsigned long)__va((addr) - UNCAC_BASE))
263-
264261
#include <asm-generic/memory_model.h>
265262
#include <asm-generic/getorder.h>
266263

arch/mips/jazz/jazzdma.c

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -575,19 +575,13 @@ static void *jazz_dma_alloc(struct device *dev, size_t size,
575575
return NULL;
576576
}
577577

578-
if (!(attrs & DMA_ATTR_NON_CONSISTENT)) {
579-
dma_cache_wback_inv((unsigned long)ret, size);
580-
ret = (void *)UNCAC_ADDR(ret);
581-
}
582578
return ret;
583579
}
584580

585581
static void jazz_dma_free(struct device *dev, size_t size, void *vaddr,
586582
dma_addr_t dma_handle, unsigned long attrs)
587583
{
588584
vdma_free(dma_handle);
589-
if (!(attrs & DMA_ATTR_NON_CONSISTENT))
590-
vaddr = (void *)CAC_ADDR((unsigned long)vaddr);
591585
dma_direct_free_pages(dev, size, vaddr, dma_handle, attrs);
592586
}
593587

arch/mips/mm/dma-noncoherent.c

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -44,33 +44,25 @@ static inline bool cpu_needs_post_dma_flush(struct device *dev)
4444
}
4545
}
4646

47-
void *arch_dma_alloc(struct device *dev, size_t size,
48-
dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs)
47+
void arch_dma_prep_coherent(struct page *page, size_t size)
4948
{
50-
void *ret;
51-
52-
ret = dma_direct_alloc_pages(dev, size, dma_handle, gfp, attrs);
53-
if (ret && !(attrs & DMA_ATTR_NON_CONSISTENT)) {
54-
dma_cache_wback_inv((unsigned long) ret, size);
55-
ret = (void *)UNCAC_ADDR(ret);
56-
}
49+
dma_cache_wback_inv((unsigned long)page_address(page), size);
50+
}
5751

58-
return ret;
52+
void *uncached_kernel_address(void *addr)
53+
{
54+
return (void *)(__pa(addr) + UNCAC_BASE);
5955
}
6056

61-
void arch_dma_free(struct device *dev, size_t size, void *cpu_addr,
62-
dma_addr_t dma_addr, unsigned long attrs)
57+
void *cached_kernel_address(void *addr)
6358
{
64-
if (!(attrs & DMA_ATTR_NON_CONSISTENT))
65-
cpu_addr = (void *)CAC_ADDR((unsigned long)cpu_addr);
66-
dma_direct_free_pages(dev, size, cpu_addr, dma_addr, attrs);
59+
return __va(addr) - UNCAC_BASE;
6760
}
6861

6962
long arch_dma_coherent_to_pfn(struct device *dev, void *cpu_addr,
7063
dma_addr_t dma_addr)
7164
{
72-
unsigned long addr = CAC_ADDR((unsigned long)cpu_addr);
73-
return page_to_pfn(virt_to_page((void *)addr));
65+
return page_to_pfn(virt_to_page(cached_kernel_address(cpu_addr)));
7466
}
7567

7668
pgprot_t arch_dma_mmap_pgprot(struct device *dev, pgprot_t prot,

0 commit comments

Comments
 (0)