1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (C) 2019 SiFive 4 */ 5 6 #ifndef _ASM_RISCV_SET_MEMORY_H 7 #define _ASM_RISCV_SET_MEMORY_H 8 9 #ifndef __ASSEMBLY__ 10 /* 11 * Functions to change memory attributes. 12 */ 13 #ifdef CONFIG_MMU 14 int set_memory_ro(unsigned long addr, int numpages); 15 int set_memory_rw(unsigned long addr, int numpages); 16 int set_memory_x(unsigned long addr, int numpages); 17 int set_memory_nx(unsigned long addr, int numpages); 18 int set_memory_rw_nx(unsigned long addr, int numpages); 19 static __always_inline int set_kernel_memory(char *startp, char *endp, 20 int (*set_memory)(unsigned long start, 21 int num_pages)) 22 { 23 unsigned long start = (unsigned long)startp; 24 unsigned long end = (unsigned long)endp; 25 int num_pages = PAGE_ALIGN(end - start) >> PAGE_SHIFT; 26 27 return set_memory(start, num_pages); 28 } 29 #else 30 static inline int set_memory_ro(unsigned long addr, int numpages) { return 0; } 31 static inline int set_memory_rw(unsigned long addr, int numpages) { return 0; } 32 static inline int set_memory_x(unsigned long addr, int numpages) { return 0; } 33 static inline int set_memory_nx(unsigned long addr, int numpages) { return 0; } 34 static inline int set_memory_rw_nx(unsigned long addr, int numpages) { return 0; } 35 static inline int set_kernel_memory(char *startp, char *endp, 36 int (*set_memory)(unsigned long start, 37 int num_pages)) 38 { 39 return 0; 40 } 41 #endif 42 43 int set_direct_map_invalid_noflush(struct page *page); 44 int set_direct_map_default_noflush(struct page *page); 45 int set_direct_map_valid_noflush(struct page *page, unsigned nr, bool valid); 46 bool kernel_page_present(struct page *page); 47 48 #endif /* __ASSEMBLY__ */ 49 50 #if defined(CONFIG_STRICT_KERNEL_RWX) || defined(CONFIG_XIP_KERNEL) 51 #ifdef CONFIG_64BIT 52 #define SECTION_ALIGN (1 << 21) 53 #else 54 #define SECTION_ALIGN (1 << 22) 55 #endif 56 #else /* !CONFIG_STRICT_KERNEL_RWX */ 57 #define SECTION_ALIGN L1_CACHE_BYTES 58 #endif /* CONFIG_STRICT_KERNEL_RWX */ 59 60 #define PECOFF_SECTION_ALIGNMENT 0x1000 61 #define PECOFF_FILE_ALIGNMENT 0x200 62 63 #endif /* _ASM_RISCV_SET_MEMORY_H */ 64