1*fa594892SNico Boehr /* SPDX-License-Identifier: GPL-2.0-only */ 2*fa594892SNico Boehr /* 3*fa594892SNico Boehr * Program interrupt loop test 4*fa594892SNico Boehr * 5*fa594892SNico Boehr * Copyright IBM Corp. 2022 6*fa594892SNico Boehr * 7*fa594892SNico Boehr * Authors: 8*fa594892SNico Boehr * Nico Boehr <nrb@linux.ibm.com> 9*fa594892SNico Boehr */ 10*fa594892SNico Boehr #include <libcflat.h> 11*fa594892SNico Boehr #include <bitops.h> 12*fa594892SNico Boehr #include <asm/interrupt.h> 13*fa594892SNico Boehr #include <asm/barrier.h> 14*fa594892SNico Boehr #include <hardware.h> 15*fa594892SNico Boehr main(void)16*fa594892SNico Boehrint main(void) 17*fa594892SNico Boehr { 18*fa594892SNico Boehr report_prefix_push("panic-loop-pgm"); 19*fa594892SNico Boehr 20*fa594892SNico Boehr if (!host_is_qemu() || host_is_tcg()) { 21*fa594892SNico Boehr report_skip("QEMU-KVM-only test"); 22*fa594892SNico Boehr goto out; 23*fa594892SNico Boehr } 24*fa594892SNico Boehr 25*fa594892SNico Boehr expect_pgm_int(); 26*fa594892SNico Boehr /* bit 12 set is invalid */ 27*fa594892SNico Boehr lowcore.pgm_new_psw.mask = extract_psw_mask() | BIT(63 - 12); 28*fa594892SNico Boehr mb(); 29*fa594892SNico Boehr 30*fa594892SNico Boehr /* cause a pgm int */ 31*fa594892SNico Boehr psw_mask_set_bits(BIT(63 - 12)); 32*fa594892SNico Boehr 33*fa594892SNico Boehr report_fail("survived pgm int loop"); 34*fa594892SNico Boehr 35*fa594892SNico Boehr out: 36*fa594892SNico Boehr report_prefix_pop(); 37*fa594892SNico Boehr return report_summary(); 38*fa594892SNico Boehr } 39