1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Copyright IBM Corp. 2017
12 #define ESSA_GET_STATE 0
13 #define ESSA_SET_STABLE 1
14 #define ESSA_SET_UNUSED 2
15 #define ESSA_SET_VOLATILE 3
16 #define ESSA_SET_POT_VOLATILE 4
17 #define ESSA_SET_STABLE_RESIDENT 5
18 #define ESSA_SET_STABLE_IF_RESIDENT 6
19 #define ESSA_SET_STABLE_NODAT 7
21 #define ESSA_MAX ESSA_SET_STABLE_NODAT
25 static __always_inline unsigned long essa(unsigned long paddr, unsigned char cmd)
30 " .insn rrf,0xb9ab0000,%[rc],%[paddr],%[cmd],0"
32 : [paddr] "d" (paddr),
37 static __always_inline void __set_page_state(void *addr, unsigned long num_pages, unsigned char cmd)
39 unsigned long paddr = __pa(addr) & PAGE_MASK;
47 static inline void __set_page_unused(void *addr, unsigned long num_pages)
49 __set_page_state(addr, num_pages, ESSA_SET_UNUSED);
52 static inline void __set_page_stable_dat(void *addr, unsigned long num_pages)
54 __set_page_state(addr, num_pages, ESSA_SET_STABLE);
57 static inline void __set_page_stable_nodat(void *addr, unsigned long num_pages)
59 __set_page_state(addr, num_pages, ESSA_SET_STABLE_NODAT);
62 static inline void __arch_set_page_nodat(void *addr, unsigned long num_pages)
67 __set_page_stable_dat(addr, num_pages);
69 __set_page_stable_nodat(addr, num_pages);
72 static inline void __arch_set_page_dat(void *addr, unsigned long num_pages)
76 __set_page_stable_dat(addr, num_pages);