Merge remote-tracking branches 'asoc/topic/ac97', 'asoc/topic/ac97-mfd', 'asoc/topic...
[sfrench/cifs-2.6.git] / arch / sh / include / asm / uncached.h
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
8 extern unsigned long cached_to_uncached;
9 extern unsigned long uncached_size;
10 extern unsigned long uncached_start, uncached_end;
11
12 extern int virt_addr_uncached(unsigned long kaddr);
13 extern void uncached_init(void);
14 extern 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()                      \
21 do {                                            \
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()                                \
39 do {                                                    \
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 */