cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

uncached.h (1372B)


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