blob: 70aea5898cc892e22ee9373d135be8441213ec82 [file] [log] [blame]
/* 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 <frankja@linux.ibm.com>
*/
#include <asm/asm-offsets.h>
.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