1*dcb58231SJanosch Frank /* SPDX-License-Identifier: GPL-2.0-only */
2*dcb58231SJanosch Frank /*
3*dcb58231SJanosch Frank * Snippet used by the mvpg-sie.c test to check SIE PEI intercepts.
4*dcb58231SJanosch Frank *
5*dcb58231SJanosch Frank * Copyright (c) 2021 IBM Corp
6*dcb58231SJanosch Frank *
7*dcb58231SJanosch Frank * Authors:
8*dcb58231SJanosch Frank * Janosch Frank <frankja@linux.ibm.com>
9*dcb58231SJanosch Frank */
1068200001SJanosch Frank
force_exit(void)1168200001SJanosch Frank static inline void force_exit(void)
1268200001SJanosch Frank {
1368200001SJanosch Frank asm volatile(" diag 0,0,0x44\n");
1468200001SJanosch Frank }
1568200001SJanosch Frank
mvpg(unsigned long r0,void * dest,void * src)1668200001SJanosch Frank static inline int mvpg(unsigned long r0, void *dest, void *src)
1768200001SJanosch Frank {
1868200001SJanosch Frank register unsigned long reg0 asm ("0") = r0;
1968200001SJanosch Frank int cc;
2068200001SJanosch Frank
2168200001SJanosch Frank asm volatile(" mvpg %1,%2\n"
2268200001SJanosch Frank " ipm %0\n"
2368200001SJanosch Frank " srl %0,28"
2468200001SJanosch Frank : "=d" (cc) : "a" (dest), "a" (src), "d" (reg0)
2568200001SJanosch Frank : "memory", "cc");
2668200001SJanosch Frank return cc;
2768200001SJanosch Frank }
2868200001SJanosch Frank
test_mvpg_real(void)2968200001SJanosch Frank static void test_mvpg_real(void)
3068200001SJanosch Frank {
3168200001SJanosch Frank mvpg(0, (void *)0x5000, (void *)0x6000);
3268200001SJanosch Frank force_exit();
3368200001SJanosch Frank }
3468200001SJanosch Frank
main(void)3568200001SJanosch Frank __attribute__((section(".text"))) int main(void)
3668200001SJanosch Frank {
3768200001SJanosch Frank test_mvpg_real();
3868200001SJanosch Frank test_mvpg_real();
3968200001SJanosch Frank test_mvpg_real();
4068200001SJanosch Frank return 0;
4168200001SJanosch Frank }
42