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

mmu.h (2231B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __MMU_H
      3#define __MMU_H
      4
      5/*
      6 * Privileged Space Mapping Buffer (PMB) definitions
      7 */
      8#define PMB_PASCR		0xff000070
      9#define PMB_IRMCR		0xff000078
     10
     11#define PASCR_SE		0x80000000
     12
     13#define PMB_ADDR		0xf6100000
     14#define PMB_DATA		0xf7100000
     15
     16#define NR_PMB_ENTRIES		16
     17
     18#define PMB_E_MASK		0x0000000f
     19#define PMB_E_SHIFT		8
     20
     21#define PMB_PFN_MASK		0xff000000
     22
     23#define PMB_SZ_16M		0x00000000
     24#define PMB_SZ_64M		0x00000010
     25#define PMB_SZ_128M		0x00000080
     26#define PMB_SZ_512M		0x00000090
     27#define PMB_SZ_MASK		PMB_SZ_512M
     28#define PMB_C			0x00000008
     29#define PMB_WT			0x00000001
     30#define PMB_UB			0x00000200
     31#define PMB_CACHE_MASK		(PMB_C | PMB_WT | PMB_UB)
     32#define PMB_V			0x00000100
     33
     34#define PMB_NO_ENTRY		(-1)
     35
     36#ifndef __ASSEMBLY__
     37#include <linux/errno.h>
     38#include <linux/threads.h>
     39#include <asm/page.h>
     40
     41/* Default "unsigned long" context */
     42typedef unsigned long mm_context_id_t[NR_CPUS];
     43
     44typedef struct {
     45#ifdef CONFIG_MMU
     46	mm_context_id_t		id;
     47	void			*vdso;
     48#else
     49	unsigned long		end_brk;
     50#endif
     51#ifdef CONFIG_BINFMT_ELF_FDPIC
     52	unsigned long		exec_fdpic_loadmap;
     53	unsigned long		interp_fdpic_loadmap;
     54#endif
     55} mm_context_t;
     56
     57#ifdef CONFIG_PMB
     58/* arch/sh/mm/pmb.c */
     59bool __in_29bit_mode(void);
     60
     61void pmb_init(void);
     62int pmb_bolt_mapping(unsigned long virt, phys_addr_t phys,
     63		     unsigned long size, pgprot_t prot);
     64void __iomem *pmb_remap_caller(phys_addr_t phys, unsigned long size,
     65			       pgprot_t prot, void *caller);
     66int pmb_unmap(void __iomem *addr);
     67
     68#else
     69
     70static inline int
     71pmb_bolt_mapping(unsigned long virt, phys_addr_t phys,
     72		 unsigned long size, pgprot_t prot)
     73{
     74	return -EINVAL;
     75}
     76
     77static inline void __iomem *
     78pmb_remap_caller(phys_addr_t phys, unsigned long size,
     79		 pgprot_t prot, void *caller)
     80{
     81	return NULL;
     82}
     83
     84static inline int pmb_unmap(void __iomem *addr)
     85{
     86	return -EINVAL;
     87}
     88
     89#define pmb_init(addr)		do { } while (0)
     90
     91#ifdef CONFIG_29BIT
     92#define __in_29bit_mode()	(1)
     93#else
     94#define __in_29bit_mode()	(0)
     95#endif
     96
     97#endif /* CONFIG_PMB */
     98
     99static inline void __iomem *
    100pmb_remap(phys_addr_t phys, unsigned long size, pgprot_t prot)
    101{
    102	return pmb_remap_caller(phys, size, prot, __builtin_return_address(0));
    103}
    104
    105#endif /* __ASSEMBLY__ */
    106
    107#endif /* __MMU_H */