xref: /kvm-unit-tests/s390x/snippets/asm/pv-diag-308.S (revision 90cacd85c6ad50f032a3fe95586fab4f2335b93d)
1*fb357e8fSJanosch Frank/* SPDX-License-Identifier: GPL-2.0-only */
2*fb357e8fSJanosch Frank/*
3*fb357e8fSJanosch Frank * Diagnose 0x308 snippet used for PV IPL and reset testing
4*fb357e8fSJanosch Frank *
5*fb357e8fSJanosch Frank * Copyright (c) 2023 IBM Corp
6*fb357e8fSJanosch Frank *
7*fb357e8fSJanosch Frank * Authors:
8*fb357e8fSJanosch Frank *  Janosch Frank <frankja@linux.ibm.com>
9*fb357e8fSJanosch Frank */
10*fb357e8fSJanosch Frank#include <asm/asm-offsets.h>
11*fb357e8fSJanosch Frank.section .text
12*fb357e8fSJanosch Frank
13*fb357e8fSJanosch Frank/*
14*fb357e8fSJanosch Frank * Entry
15*fb357e8fSJanosch Frank * Execute the diag500 which will set the diag 308 subcode in gr2
16*fb357e8fSJanosch Frank */
17*fb357e8fSJanosch Frankdiag	0, 0, 0x500
18*fb357e8fSJanosch Frank
19*fb357e8fSJanosch Frank/*
20*fb357e8fSJanosch Frank * A valid PGM new PSW can be a real problem since we never fall out
21*fb357e8fSJanosch Frank * of SIE and therefore effectively loop forever. 0 is a valid PSW
22*fb357e8fSJanosch Frank * therefore we re-use the reset_psw as this has the short PSW
23*fb357e8fSJanosch Frank * bit set which is invalid for a long PSW like the exception new
24*fb357e8fSJanosch Frank * PSWs.
25*fb357e8fSJanosch Frank *
26*fb357e8fSJanosch Frank * For subcode 0/1 there are no PGMs to consider.
27*fb357e8fSJanosch Frank */
28*fb357e8fSJanosch Franklgrl   %r5, reset_psw
29*fb357e8fSJanosch Frankstg    %r5, GEN_LC_PGM_NEW_PSW
30*fb357e8fSJanosch Frank
31*fb357e8fSJanosch Frank/* Set up the reset psw at 0x0 */
32*fb357e8fSJanosch Franklgrl	%r5, reset_psw
33*fb357e8fSJanosch Franklarl	%r6, done
34*fb357e8fSJanosch Frankogr	%r5, %r6
35*fb357e8fSJanosch Frankstg	%r5, 0
36*fb357e8fSJanosch Frank
37*fb357e8fSJanosch Frank/* Diag 308, subcode is in gr2 */
38*fb357e8fSJanosch Frankdiag	%r0, %r2, 0x308
39*fb357e8fSJanosch Frank
40*fb357e8fSJanosch Frank/* Should never be executed because of the reset PSW */
41*fb357e8fSJanosch Frankdiag	0, 0, 0x44
42*fb357e8fSJanosch Frank
43*fb357e8fSJanosch Frank/* Pass on a special value indicating success */
44*fb357e8fSJanosch Frankdone:
45*fb357e8fSJanosch Franklghi	%r1, 42
46*fb357e8fSJanosch Frankdiag	%r1, 0, 0x9c
47*fb357e8fSJanosch Frank
48*fb357e8fSJanosch Frank
49*fb357e8fSJanosch Frank	.align	8
50*fb357e8fSJanosch Frankreset_psw:
51*fb357e8fSJanosch Frank	.quad	0x0008000180000000
52