Am Mo., 10. Juni 2019 um 20:05 Uhr schrieb Ramon Fried <rfried....@gmail.com>: > > add implementation for dma_alloc_coherent(), > dma_free_coherent(), dma_map_single() and dma_free_single() > > Signed-off-by: Ramon Fried <rfried....@gmail.com> > --- > v2: fix warning caused by missing casts. > > arch/mips/include/asm/dma-mapping.h | 48 +++++++++++++++++++++++++++++ > 1 file changed, 48 insertions(+) > create mode 100644 arch/mips/include/asm/dma-mapping.h > > diff --git a/arch/mips/include/asm/dma-mapping.h > b/arch/mips/include/asm/dma-mapping.h > new file mode 100644 > index 0000000000..387427c13b > --- /dev/null > +++ b/arch/mips/include/asm/dma-mapping.h > @@ -0,0 +1,48 @@ > +/* SPDX-License-Identifier: GPL-2.0+ */ > +/* > + * (C) Copyright 2019 > + * Ramon Fried <rfried....@gmail.com> > + */ > + > +#ifndef __ASM_MIPS_DMA_MAPPING_H > +#define __ASM_MIPS_DMA_MAPPING_H > + > +#include <linux/dma-direction.h> > +#include <asm/addrspace.h> > +#define dma_mapping_error(x, y) 0 > + > +static inline void *dma_alloc_coherent(size_t len, unsigned long *handle) > +{ > + void *vaddr = memalign(ARCH_DMA_MINALIGN, > + ROUND(len, ARCH_DMA_MINALIGN)); > + > + *handle = CPHYSADDR((unsigned long)vaddr); > + return (void *)(CKSEG1ADDR((unsigned long)vaddr)); > +} > + > +static inline void dma_free_coherent(void *addr) > +{ > + free((void *)CPHYSADDR((unsigned long)addr)); > +} > + > +static inline unsigned long dma_map_single(volatile void *vaddr, size_t len, > + enum dma_data_direction dir) > +{ > + unsigned long dma_addr = CPHYSADDR((unsigned long)vaddr); > + > + if (dir == DMA_TO_DEVICE) > + flush_dcache_range((unsigned long)vaddr, > + (unsigned long)vaddr + len); > + if (dir == DMA_FROM_DEVICE) > + invalidate_dcache_range((unsigned long)vaddr, > + (unsigned long)vaddr + len); > + > + return dma_addr; > +} > + > +static inline void dma_unmap_single(volatile void *vaddr, size_t len, > + unsigned long paddr) > +{ > +} > + > +#endif /* __ASM_MIPS_DMA_MAPPING_H */ > -- > 2.21.0 >
this doesn't match all requirements for a generic MIPS DMA interface. It doesn't handle 64 Bit, coherent DMA or different kinds of memory mapping. I would rather fix the macb driver to use existing U-Boot API. Alternatively you could port the generic dma-mapping.h from Linux so you could either have empty function bodies or an architecture can optionally provide an implementation. -- - Daniel _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot