1bb04ffe8SClaudio Carvalho /* SPDX-License-Identifier: GPL-2.0 */
2bb04ffe8SClaudio Carvalho /*
3bb04ffe8SClaudio Carvalho  * Ultravisor definitions
4bb04ffe8SClaudio Carvalho  *
5bb04ffe8SClaudio Carvalho  * Copyright 2019, IBM Corporation.
6bb04ffe8SClaudio Carvalho  *
7bb04ffe8SClaudio Carvalho  */
8bb04ffe8SClaudio Carvalho #ifndef _ASM_POWERPC_ULTRAVISOR_H
9bb04ffe8SClaudio Carvalho #define _ASM_POWERPC_ULTRAVISOR_H
10bb04ffe8SClaudio Carvalho 
11139a1d28SMichael Anderson #include <asm/asm-prototypes.h>
12139a1d28SMichael Anderson #include <asm/ultravisor-api.h>
1352231340SClaudio Carvalho #include <asm/firmware.h>
14139a1d28SMichael Anderson 
15bb04ffe8SClaudio Carvalho int early_init_dt_scan_ultravisor(unsigned long node, const char *uname,
16bb04ffe8SClaudio Carvalho 				  int depth, void *data);
17bb04ffe8SClaudio Carvalho 
1852231340SClaudio Carvalho /*
1952231340SClaudio Carvalho  * In ultravisor enabled systems, PTCR becomes ultravisor privileged only for
2052231340SClaudio Carvalho  * writing and an attempt to write to it will cause a Hypervisor Emulation
2152231340SClaudio Carvalho  * Assistance interrupt.
2252231340SClaudio Carvalho  */
set_ptcr_when_no_uv(u64 val)2352231340SClaudio Carvalho static inline void set_ptcr_when_no_uv(u64 val)
2452231340SClaudio Carvalho {
2552231340SClaudio Carvalho 	if (!firmware_has_feature(FW_FEATURE_ULTRAVISOR))
2652231340SClaudio Carvalho 		mtspr(SPRN_PTCR, val);
2752231340SClaudio Carvalho }
2852231340SClaudio Carvalho 
uv_register_pate(u64 lpid,u64 dw0,u64 dw1)29139a1d28SMichael Anderson static inline int uv_register_pate(u64 lpid, u64 dw0, u64 dw1)
30139a1d28SMichael Anderson {
31139a1d28SMichael Anderson 	return ucall_norets(UV_WRITE_PATE, lpid, dw0, dw1);
32139a1d28SMichael Anderson }
33139a1d28SMichael Anderson 
uv_share_page(u64 pfn,u64 npages)34f7777e00SRam Pai static inline int uv_share_page(u64 pfn, u64 npages)
35f7777e00SRam Pai {
36f7777e00SRam Pai 	return ucall_norets(UV_SHARE_PAGE, pfn, npages);
37f7777e00SRam Pai }
38f7777e00SRam Pai 
uv_unshare_page(u64 pfn,u64 npages)39f7777e00SRam Pai static inline int uv_unshare_page(u64 pfn, u64 npages)
40f7777e00SRam Pai {
41f7777e00SRam Pai 	return ucall_norets(UV_UNSHARE_PAGE, pfn, npages);
42f7777e00SRam Pai }
43f7777e00SRam Pai 
uv_unshare_all_pages(void)44256ba2c1SRam Pai static inline int uv_unshare_all_pages(void)
45256ba2c1SRam Pai {
46256ba2c1SRam Pai 	return ucall_norets(UV_UNSHARE_ALL_PAGES);
47256ba2c1SRam Pai }
48256ba2c1SRam Pai 
uv_page_in(u64 lpid,u64 src_ra,u64 dst_gpa,u64 flags,u64 page_shift)49ca9f4942SBharata B Rao static inline int uv_page_in(u64 lpid, u64 src_ra, u64 dst_gpa, u64 flags,
50ca9f4942SBharata B Rao 			     u64 page_shift)
51ca9f4942SBharata B Rao {
52ca9f4942SBharata B Rao 	return ucall_norets(UV_PAGE_IN, lpid, src_ra, dst_gpa, flags,
53ca9f4942SBharata B Rao 			    page_shift);
54ca9f4942SBharata B Rao }
55ca9f4942SBharata B Rao 
uv_page_out(u64 lpid,u64 dst_ra,u64 src_gpa,u64 flags,u64 page_shift)56ca9f4942SBharata B Rao static inline int uv_page_out(u64 lpid, u64 dst_ra, u64 src_gpa, u64 flags,
57ca9f4942SBharata B Rao 			      u64 page_shift)
58ca9f4942SBharata B Rao {
59ca9f4942SBharata B Rao 	return ucall_norets(UV_PAGE_OUT, lpid, dst_ra, src_gpa, flags,
60ca9f4942SBharata B Rao 			    page_shift);
61ca9f4942SBharata B Rao }
62ca9f4942SBharata B Rao 
uv_register_mem_slot(u64 lpid,u64 start_gpa,u64 size,u64 flags,u64 slotid)63ca9f4942SBharata B Rao static inline int uv_register_mem_slot(u64 lpid, u64 start_gpa, u64 size,
64ca9f4942SBharata B Rao 				       u64 flags, u64 slotid)
65ca9f4942SBharata B Rao {
66ca9f4942SBharata B Rao 	return ucall_norets(UV_REGISTER_MEM_SLOT, lpid, start_gpa,
67ca9f4942SBharata B Rao 			    size, flags, slotid);
68ca9f4942SBharata B Rao }
69ca9f4942SBharata B Rao 
uv_unregister_mem_slot(u64 lpid,u64 slotid)70c3262257SBharata B Rao static inline int uv_unregister_mem_slot(u64 lpid, u64 slotid)
71c3262257SBharata B Rao {
72c3262257SBharata B Rao 	return ucall_norets(UV_UNREGISTER_MEM_SLOT, lpid, slotid);
73c3262257SBharata B Rao }
74c3262257SBharata B Rao 
uv_page_inval(u64 lpid,u64 gpa,u64 page_shift)75008e359cSBharata B Rao static inline int uv_page_inval(u64 lpid, u64 gpa, u64 page_shift)
76008e359cSBharata B Rao {
77008e359cSBharata B Rao 	return ucall_norets(UV_PAGE_INVAL, lpid, gpa, page_shift);
78008e359cSBharata B Rao }
79008e359cSBharata B Rao 
uv_svm_terminate(u64 lpid)8022945688SBharata B Rao static inline int uv_svm_terminate(u64 lpid)
8122945688SBharata B Rao {
8222945688SBharata B Rao 	return ucall_norets(UV_SVM_TERMINATE, lpid);
8322945688SBharata B Rao }
8422945688SBharata B Rao 
85bb04ffe8SClaudio Carvalho #endif	/* _ASM_POWERPC_ULTRAVISOR_H */
86