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