[U-Boot] [PATCH v2 1/2] MIPS: add empty arch/clk.h

The file is needed for compilation of various drivers (IE. macb). Add empty implementation so compilation succeeds.
Signed-off-by: Ramon Fried rfried.dev@gmail.com --- v2: Moved the new file to the correct location.
arch/mips/include/asm/arch/clk.h | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 arch/mips/include/asm/arch/clk.h
diff --git a/arch/mips/include/asm/arch/clk.h b/arch/mips/include/asm/arch/clk.h new file mode 100644 index 0000000000..c01e0973cd --- /dev/null +++ b/arch/mips/include/asm/arch/clk.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright (c) Ramon Fried rfried.dev@gmail.com + */ + +#ifndef __ASM_MIPS_ARCH_CLK_H +#define __ASM_MIPS_ARCH_CLK_H + +/* Note: This is a placeholder header for driver compilation. */ + +#endif

add implementation for dma_alloc_coherent(), dma_free_coherent(), dma_map_single() and dma_free_single()
Signed-off-by: Ramon Fried rfried.dev@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.dev@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 */

Am Mo., 10. Juni 2019 um 20:05 Uhr schrieb Ramon Fried rfried.dev@gmail.com:
add implementation for dma_alloc_coherent(), dma_free_coherent(), dma_map_single() and dma_free_single()
Signed-off-by: Ramon Fried rfried.dev@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.dev@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.

If configuration is set to skip low level init, automatic probe of L2 cache size is not performed and the size is set to 0. Flushing or invalidating the L2 cache will fail in this case.
Add a static configuration (SYS_DCACHE_LINE_SIZE) with default set to 0.
Signed-off-by: Ramon Fried rfried.dev@gmail.com --- arch/mips/Kconfig | 10 +++++++++- arch/mips/lib/cache.c | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 5cb9bdf2ee..235bb5b7e6 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -408,9 +408,17 @@ config SYS_ICACHE_LINE_SIZE help The size of L1 Icache lines, if known at compile time.
+config SYS_SCACHE_LINE_SIZE + int + default 0 + help + The size of L2 cache lines, if known at compile time. + + config SYS_CACHE_SIZE_AUTO def_bool y if SYS_DCACHE_SIZE = 0 && SYS_ICACHE_SIZE = 0 && \ - SYS_DCACHE_LINE_SIZE = 0 && SYS_ICACHE_LINE_SIZE = 0 + SYS_DCACHE_LINE_SIZE = 0 && SYS_ICACHE_LINE_SIZE = 0 && \ + SYS_SCACHE_LINE_SIZE = 0 help Select this (or let it be auto-selected by not defining any cache sizes) in order to allow U-Boot to automatically detect the sizes diff --git a/arch/mips/lib/cache.c b/arch/mips/lib/cache.c index d56fd1e0f4..0ddae30f2c 100644 --- a/arch/mips/lib/cache.c +++ b/arch/mips/lib/cache.c @@ -87,7 +87,7 @@ static inline unsigned long scache_line_size(void) #ifdef CONFIG_MIPS_L2_CACHE return gd->arch.l2_line_size; #else - return 0; + return CONFIG_SYS_SCACHE_LINE_SIZE; #endif }

Am 10.06.19 um 20:05 schrieb Ramon Fried:
If configuration is set to skip low level init, automatic probe of L2 cache size is not performed and the size is set to 0. Flushing or invalidating the L2 cache will fail in this case.
Add a static configuration (SYS_DCACHE_LINE_SIZE) with default set to 0.
Signed-off-by: Ramon Fried rfried.dev@gmail.com
arch/mips/Kconfig | 10 +++++++++- arch/mips/lib/cache.c | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 5cb9bdf2ee..235bb5b7e6 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -408,9 +408,17 @@ config SYS_ICACHE_LINE_SIZE help The size of L1 Icache lines, if known at compile time.
+config SYS_SCACHE_LINE_SIZE
- int
- default 0
- help
The size of L2 cache lines, if known at compile time.
config SYS_CACHE_SIZE_AUTO def_bool y if SYS_DCACHE_SIZE = 0 && SYS_ICACHE_SIZE = 0 && \
SYS_DCACHE_LINE_SIZE = 0 && SYS_ICACHE_LINE_SIZE = 0
SYS_DCACHE_LINE_SIZE = 0 && SYS_ICACHE_LINE_SIZE = 0 && \
help Select this (or let it be auto-selected by not defining any cache sizes) in order to allow U-Boot to automatically detect the sizesSYS_SCACHE_LINE_SIZE = 0
diff --git a/arch/mips/lib/cache.c b/arch/mips/lib/cache.c index d56fd1e0f4..0ddae30f2c 100644 --- a/arch/mips/lib/cache.c +++ b/arch/mips/lib/cache.c @@ -87,7 +87,7 @@ static inline unsigned long scache_line_size(void) #ifdef CONFIG_MIPS_L2_CACHE return gd->arch.l2_line_size; #else
- return 0;
- return CONFIG_SYS_SCACHE_LINE_SIZE;
#endif }
applied to u-boot-mips, thanks.

Am Mo., 10. Juni 2019 um 20:05 Uhr schrieb Ramon Fried rfried.dev@gmail.com:
The file is needed for compilation of various drivers (IE. macb). Add empty implementation so compilation succeeds.
Signed-off-by: Ramon Fried rfried.dev@gmail.com
v2: Moved the new file to the correct location.
arch/mips/include/asm/arch/clk.h | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 arch/mips/include/asm/arch/clk.h
diff --git a/arch/mips/include/asm/arch/clk.h b/arch/mips/include/asm/arch/clk.h new file mode 100644 index 0000000000..c01e0973cd --- /dev/null +++ b/arch/mips/include/asm/arch/clk.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/*
- Copyright (c) Ramon Fried rfried.dev@gmail.com
- */
+#ifndef __ASM_MIPS_ARCH_CLK_H +#define __ASM_MIPS_ARCH_CLK_H
+/* Note: This is a placeholder header for driver compilation. */
+#endif
2.21.0
the macb driver pulls only some SoC specific enums or functions. This shouldn't be required anymore with driver model or clock framework. Especially if this driver is shared between different SoCs and architectures. Maybe you should rather fix the macb driver to not force asm/arch/clk.h e.g. by wrapping it with #ifndef CONFIG_CLK.

On Mon, Jun 17, 2019 at 2:42 PM Daniel Schwierzeck < daniel.schwierzeck@gmail.com> wrote:
Am Mo., 10. Juni 2019 um 20:05 Uhr schrieb Ramon Fried < rfried.dev@gmail.com>:
The file is needed for compilation of various drivers (IE. macb). Add empty implementation so compilation succeeds.
Signed-off-by: Ramon Fried rfried.dev@gmail.com
v2: Moved the new file to the correct location.
arch/mips/include/asm/arch/clk.h | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 arch/mips/include/asm/arch/clk.h
diff --git a/arch/mips/include/asm/arch/clk.h
b/arch/mips/include/asm/arch/clk.h
new file mode 100644 index 0000000000..c01e0973cd --- /dev/null +++ b/arch/mips/include/asm/arch/clk.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/*
- Copyright (c) Ramon Fried rfried.dev@gmail.com
- */
+#ifndef __ASM_MIPS_ARCH_CLK_H +#define __ASM_MIPS_ARCH_CLK_H
+/* Note: This is a placeholder header for driver compilation. */
+#endif
2.21.0
the macb driver pulls only some SoC specific enums or functions. This shouldn't be required anymore with driver model or clock framework. Especially if this driver is shared between different SoCs and architectures. Maybe you should rather fix the macb driver to not force asm/arch/clk.h e.g. by wrapping it with #ifndef CONFIG_CLK.
I totally agree with you, I created this patch as I thought this is what I was expected to do: I followed what RISCV did: /arch/riscv/include/asm/arch-generic/clk.h Thanks, Ramon.
--
- Daniel
participants (2)
-
Daniel Schwierzeck
-
Ramon Fried