Linux Audio

Check our new training course

Linux debugging, profiling, tracing and performance analysis training

Apr 14-17, 2025
Register
Loading...
v3.5.6
 
 1#ifndef __ASM_SH_UNCACHED_H
 2#define __ASM_SH_UNCACHED_H
 3
 4#include <linux/bug.h>
 5
 6#ifdef CONFIG_UNCACHED_MAPPING
 7extern unsigned long cached_to_uncached;
 8extern unsigned long uncached_size;
 9extern unsigned long uncached_start, uncached_end;
10
11extern int virt_addr_uncached(unsigned long kaddr);
12extern void uncached_init(void);
13extern void uncached_resize(unsigned long size);
14
15/*
16 * Jump to uncached area.
17 * When handling TLB or caches, we need to do it from an uncached area.
18 */
19#define jump_to_uncached()			\
20do {						\
21	unsigned long __dummy;			\
22						\
23	__asm__ __volatile__(			\
24		"mova	1f, %0\n\t"		\
25		"add	%1, %0\n\t"		\
26		"jmp	@%0\n\t"		\
27		" nop\n\t"			\
28		".balign 4\n"			\
29		"1:"				\
30		: "=&z" (__dummy)		\
31		: "r" (cached_to_uncached));	\
32} while (0)
33
34/*
35 * Back to cached area.
36 */
37#define back_to_cached()				\
38do {							\
39	unsigned long __dummy;				\
40	ctrl_barrier();					\
41	__asm__ __volatile__(				\
42		"mov.l	1f, %0\n\t"			\
43		"jmp	@%0\n\t"			\
44		" nop\n\t"				\
45		".balign 4\n"				\
46		"1:	.long 2f\n"			\
47		"2:"					\
48		: "=&r" (__dummy));			\
49} while (0)
50#else
51#define virt_addr_uncached(kaddr)	(0)
52#define uncached_init()			do { } while (0)
53#define uncached_resize(size)		BUG()
54#define jump_to_uncached()		do { } while (0)
55#define back_to_cached()		do { } while (0)
56#endif
57
58#endif /* __ASM_SH_UNCACHED_H */
v5.9
 1/* SPDX-License-Identifier: GPL-2.0 */
 2#ifndef __ASM_SH_UNCACHED_H
 3#define __ASM_SH_UNCACHED_H
 4
 5#include <linux/bug.h>
 6
 7#ifdef CONFIG_UNCACHED_MAPPING
 8extern unsigned long cached_to_uncached;
 9extern unsigned long uncached_size;
10extern unsigned long uncached_start, uncached_end;
11
12extern int virt_addr_uncached(unsigned long kaddr);
13extern void uncached_init(void);
14extern void uncached_resize(unsigned long size);
15
16/*
17 * Jump to uncached area.
18 * When handling TLB or caches, we need to do it from an uncached area.
19 */
20#define jump_to_uncached()			\
21do {						\
22	unsigned long __dummy;			\
23						\
24	__asm__ __volatile__(			\
25		"mova	1f, %0\n\t"		\
26		"add	%1, %0\n\t"		\
27		"jmp	@%0\n\t"		\
28		" nop\n\t"			\
29		".balign 4\n"			\
30		"1:"				\
31		: "=&z" (__dummy)		\
32		: "r" (cached_to_uncached));	\
33} while (0)
34
35/*
36 * Back to cached area.
37 */
38#define back_to_cached()				\
39do {							\
40	unsigned long __dummy;				\
41	ctrl_barrier();					\
42	__asm__ __volatile__(				\
43		"mov.l	1f, %0\n\t"			\
44		"jmp	@%0\n\t"			\
45		" nop\n\t"				\
46		".balign 4\n"				\
47		"1:	.long 2f\n"			\
48		"2:"					\
49		: "=&r" (__dummy));			\
50} while (0)
51#else
52#define virt_addr_uncached(kaddr)	(0)
53#define uncached_init()			do { } while (0)
54#define uncached_resize(size)		BUG()
55#define jump_to_uncached()		do { } while (0)
56#define back_to_cached()		do { } while (0)
57#endif
58
59#endif /* __ASM_SH_UNCACHED_H */