/* SPDX-License-Identifier: GPL-2.0-only */ /* * Diagnose 0x308 snippet used for PV IPL and reset testing * * Copyright (c) 2023 IBM Corp * * Authors: * Janosch Frank */ #include .section .text /* * Entry * Execute the diag500 which will set the diag 308 subcode in gr2 */ diag 0, 0, 0x500 /* * A valid PGM new PSW can be a real problem since we never fall out * of SIE and therefore effectively loop forever. 0 is a valid PSW * therefore we re-use the reset_psw as this has the short PSW * bit set which is invalid for a long PSW like the exception new * PSWs. * * For subcode 0/1 there are no PGMs to consider. */ lgrl %r5, reset_psw stg %r5, GEN_LC_PGM_NEW_PSW /* Set up the reset psw at 0x0 */ lgrl %r5, reset_psw larl %r6, done ogr %r5, %r6 stg %r5, 0 /* Diag 308, subcode is in gr2 */ diag %r0, %r2, 0x308 /* Should never be executed because of the reset PSW */ diag 0, 0, 0x44 /* Pass on a special value indicating success */ done: lghi %r1, 42 diag %r1, 0, 0x9c .align 8 reset_psw: .quad 0x0008000180000000