162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef __MMU_H 362306a36Sopenharmony_ci#define __MMU_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci/* 662306a36Sopenharmony_ci * Privileged Space Mapping Buffer (PMB) definitions 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci#define PMB_PASCR 0xff000070 962306a36Sopenharmony_ci#define PMB_IRMCR 0xff000078 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#define PASCR_SE 0x80000000 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#define PMB_ADDR 0xf6100000 1462306a36Sopenharmony_ci#define PMB_DATA 0xf7100000 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#define NR_PMB_ENTRIES 16 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#define PMB_E_MASK 0x0000000f 1962306a36Sopenharmony_ci#define PMB_E_SHIFT 8 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci#define PMB_PFN_MASK 0xff000000 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#define PMB_SZ_16M 0x00000000 2462306a36Sopenharmony_ci#define PMB_SZ_64M 0x00000010 2562306a36Sopenharmony_ci#define PMB_SZ_128M 0x00000080 2662306a36Sopenharmony_ci#define PMB_SZ_512M 0x00000090 2762306a36Sopenharmony_ci#define PMB_SZ_MASK PMB_SZ_512M 2862306a36Sopenharmony_ci#define PMB_C 0x00000008 2962306a36Sopenharmony_ci#define PMB_WT 0x00000001 3062306a36Sopenharmony_ci#define PMB_UB 0x00000200 3162306a36Sopenharmony_ci#define PMB_CACHE_MASK (PMB_C | PMB_WT | PMB_UB) 3262306a36Sopenharmony_ci#define PMB_V 0x00000100 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci#define PMB_NO_ENTRY (-1) 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci#ifndef __ASSEMBLY__ 3762306a36Sopenharmony_ci#include <linux/errno.h> 3862306a36Sopenharmony_ci#include <linux/threads.h> 3962306a36Sopenharmony_ci#include <asm/page.h> 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci/* Default "unsigned long" context */ 4262306a36Sopenharmony_citypedef unsigned long mm_context_id_t[NR_CPUS]; 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_citypedef struct { 4562306a36Sopenharmony_ci#ifdef CONFIG_MMU 4662306a36Sopenharmony_ci mm_context_id_t id; 4762306a36Sopenharmony_ci void *vdso; 4862306a36Sopenharmony_ci#else 4962306a36Sopenharmony_ci unsigned long end_brk; 5062306a36Sopenharmony_ci#endif 5162306a36Sopenharmony_ci#ifdef CONFIG_BINFMT_ELF_FDPIC 5262306a36Sopenharmony_ci unsigned long exec_fdpic_loadmap; 5362306a36Sopenharmony_ci unsigned long interp_fdpic_loadmap; 5462306a36Sopenharmony_ci#endif 5562306a36Sopenharmony_ci} mm_context_t; 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci#ifdef CONFIG_PMB 5862306a36Sopenharmony_ci/* arch/sh/mm/pmb.c */ 5962306a36Sopenharmony_cibool __in_29bit_mode(void); 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_civoid pmb_init(void); 6262306a36Sopenharmony_ciint pmb_bolt_mapping(unsigned long virt, phys_addr_t phys, 6362306a36Sopenharmony_ci unsigned long size, pgprot_t prot); 6462306a36Sopenharmony_civoid __iomem *pmb_remap_caller(phys_addr_t phys, unsigned long size, 6562306a36Sopenharmony_ci pgprot_t prot, void *caller); 6662306a36Sopenharmony_ciint pmb_unmap(void __iomem *addr); 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci#else 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_cistatic inline int 7162306a36Sopenharmony_cipmb_bolt_mapping(unsigned long virt, phys_addr_t phys, 7262306a36Sopenharmony_ci unsigned long size, pgprot_t prot) 7362306a36Sopenharmony_ci{ 7462306a36Sopenharmony_ci return -EINVAL; 7562306a36Sopenharmony_ci} 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_cistatic inline void __iomem * 7862306a36Sopenharmony_cipmb_remap_caller(phys_addr_t phys, unsigned long size, 7962306a36Sopenharmony_ci pgprot_t prot, void *caller) 8062306a36Sopenharmony_ci{ 8162306a36Sopenharmony_ci return NULL; 8262306a36Sopenharmony_ci} 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_cistatic inline int pmb_unmap(void __iomem *addr) 8562306a36Sopenharmony_ci{ 8662306a36Sopenharmony_ci return -EINVAL; 8762306a36Sopenharmony_ci} 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci#define pmb_init(addr) do { } while (0) 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci#ifdef CONFIG_29BIT 9262306a36Sopenharmony_ci#define __in_29bit_mode() (1) 9362306a36Sopenharmony_ci#else 9462306a36Sopenharmony_ci#define __in_29bit_mode() (0) 9562306a36Sopenharmony_ci#endif 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci#endif /* CONFIG_PMB */ 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_cistatic inline void __iomem * 10062306a36Sopenharmony_cipmb_remap(phys_addr_t phys, unsigned long size, pgprot_t prot) 10162306a36Sopenharmony_ci{ 10262306a36Sopenharmony_ci return pmb_remap_caller(phys, size, prot, __builtin_return_address(0)); 10362306a36Sopenharmony_ci} 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci#endif /* __ASSEMBLY__ */ 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci#endif /* __MMU_H */ 108