Loading...
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 */
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 */