1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Copyright IBM Corp. 2017
4 * Author(s): Claudio Imbrenda <imbrenda@linux.vnet.ibm.com>
10 #include <asm/sections.h>
13 #define ESSA_GET_STATE 0
14 #define ESSA_SET_STABLE 1
15 #define ESSA_SET_UNUSED 2
16 #define ESSA_SET_VOLATILE 3
17 #define ESSA_SET_POT_VOLATILE 4
18 #define ESSA_SET_STABLE_RESIDENT 5
19 #define ESSA_SET_STABLE_IF_RESIDENT 6
20 #define ESSA_SET_STABLE_NODAT 7
22 #define ESSA_MAX ESSA_SET_STABLE_NODAT
24 extern int __bootdata_preserved(cmma_flag);
26 static __always_inline unsigned long essa(unsigned long paddr, unsigned char cmd)
31 " .insn rrf,0xb9ab0000,%[rc],%[paddr],%[cmd],0"
33 : [paddr] "d" (paddr),
38 static __always_inline void __set_page_state(void *addr, unsigned long num_pages, unsigned char cmd)
40 unsigned long paddr = __pa(addr) & PAGE_MASK;
48 static inline void __set_page_unused(void *addr, unsigned long num_pages)
50 __set_page_state(addr, num_pages, ESSA_SET_UNUSED);
53 static inline void __set_page_stable_dat(void *addr, unsigned long num_pages)
55 __set_page_state(addr, num_pages, ESSA_SET_STABLE);
58 static inline void __set_page_stable_nodat(void *addr, unsigned long num_pages)
60 __set_page_state(addr, num_pages, ESSA_SET_STABLE_NODAT);