mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.3 KiB
59 lines
1.3 KiB
/* SPDX-License-Identifier: GPL-2.0 */ |
|
#ifndef __ASM_SH_UNCACHED_H |
|
#define __ASM_SH_UNCACHED_H |
|
|
|
#include <linux/bug.h> |
|
|
|
#ifdef CONFIG_UNCACHED_MAPPING |
|
extern unsigned long cached_to_uncached; |
|
extern unsigned long uncached_size; |
|
extern unsigned long uncached_start, uncached_end; |
|
|
|
extern int virt_addr_uncached(unsigned long kaddr); |
|
extern void uncached_init(void); |
|
extern void uncached_resize(unsigned long size); |
|
|
|
/* |
|
* Jump to uncached area. |
|
* When handling TLB or caches, we need to do it from an uncached area. |
|
*/ |
|
#define jump_to_uncached() \ |
|
do { \ |
|
unsigned long __dummy; \ |
|
\ |
|
__asm__ __volatile__( \ |
|
"mova 1f, %0\n\t" \ |
|
"add %1, %0\n\t" \ |
|
"jmp @%0\n\t" \ |
|
" nop\n\t" \ |
|
".balign 4\n" \ |
|
"1:" \ |
|
: "=&z" (__dummy) \ |
|
: "r" (cached_to_uncached)); \ |
|
} while (0) |
|
|
|
/* |
|
* Back to cached area. |
|
*/ |
|
#define back_to_cached() \ |
|
do { \ |
|
unsigned long __dummy; \ |
|
ctrl_barrier(); \ |
|
__asm__ __volatile__( \ |
|
"mov.l 1f, %0\n\t" \ |
|
"jmp @%0\n\t" \ |
|
" nop\n\t" \ |
|
".balign 4\n" \ |
|
"1: .long 2f\n" \ |
|
"2:" \ |
|
: "=&r" (__dummy)); \ |
|
} while (0) |
|
#else |
|
#define virt_addr_uncached(kaddr) (0) |
|
#define uncached_init() do { } while (0) |
|
#define uncached_resize(size) BUG() |
|
#define jump_to_uncached() do { } while (0) |
|
#define back_to_cached() do { } while (0) |
|
#endif |
|
|
|
#endif /* __ASM_SH_UNCACHED_H */
|
|
|