1b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */ 24bfc86ceSHeiko Carstens/* 34bfc86ceSHeiko Carstens * Copyright IBM Corp 2000, 2011 44bfc86ceSHeiko Carstens * Author(s): Holger Smolinski <Holger.Smolinski@de.ibm.com>, 54bfc86ceSHeiko Carstens * Denis Joseph Barrow, 64bfc86ceSHeiko Carstens */ 74bfc86ceSHeiko Carstens 84bfc86ceSHeiko Carstens#include <linux/linkage.h> 94bfc86ceSHeiko Carstens#include <asm/asm-offsets.h> 10c50c84c3SMartin Schwidefsky#include <asm/nospec-insn.h> 114bfc86ceSHeiko Carstens#include <asm/sigp.h> 124bfc86ceSHeiko Carstens 13c50c84c3SMartin Schwidefsky GEN_BR_THUNK %r9 14c50c84c3SMartin Schwidefsky 154bfc86ceSHeiko Carstens# 161a36a39eSMartin Schwidefsky# Issue "store status" for the current CPU to its prefix page 171a36a39eSMartin Schwidefsky# and call passed function afterwards 184bfc86ceSHeiko Carstens# 191a36a39eSMartin Schwidefsky# r2 = Function to be called after store status 201a36a39eSMartin Schwidefsky# r3 = Parameter for function 214bfc86ceSHeiko Carstens# 22*26d14299SHeiko CarstensSYM_CODE_START(store_status) 234bfc86ceSHeiko Carstens /* Save register one and load save area base */ 244bfc86ceSHeiko Carstens stg %r1,__LC_SAVE_AREA_RESTART 254bfc86ceSHeiko Carstens /* General purpose registers */ 26f08b8414SMartin Schwidefsky lghi %r1,__LC_GPREGS_SAVE_AREA 27f08b8414SMartin Schwidefsky stmg %r0,%r15,0(%r1) 28f08b8414SMartin Schwidefsky mvc 8(8,%r1),__LC_SAVE_AREA_RESTART 294bfc86ceSHeiko Carstens /* Control registers */ 30f08b8414SMartin Schwidefsky lghi %r1,__LC_CREGS_SAVE_AREA 31f08b8414SMartin Schwidefsky stctg %c0,%c15,0(%r1) 324bfc86ceSHeiko Carstens /* Access registers */ 33f08b8414SMartin Schwidefsky lghi %r1,__LC_AREGS_SAVE_AREA 34f08b8414SMartin Schwidefsky stam %a0,%a15,0(%r1) 354bfc86ceSHeiko Carstens /* Floating point registers */ 36f08b8414SMartin Schwidefsky lghi %r1,__LC_FPREGS_SAVE_AREA 37f08b8414SMartin Schwidefsky std %f0, 0x00(%r1) 38f08b8414SMartin Schwidefsky std %f1, 0x08(%r1) 39f08b8414SMartin Schwidefsky std %f2, 0x10(%r1) 40f08b8414SMartin Schwidefsky std %f3, 0x18(%r1) 41f08b8414SMartin Schwidefsky std %f4, 0x20(%r1) 42f08b8414SMartin Schwidefsky std %f5, 0x28(%r1) 43f08b8414SMartin Schwidefsky std %f6, 0x30(%r1) 44f08b8414SMartin Schwidefsky std %f7, 0x38(%r1) 45f08b8414SMartin Schwidefsky std %f8, 0x40(%r1) 46f08b8414SMartin Schwidefsky std %f9, 0x48(%r1) 47f08b8414SMartin Schwidefsky std %f10,0x50(%r1) 48f08b8414SMartin Schwidefsky std %f11,0x58(%r1) 49f08b8414SMartin Schwidefsky std %f12,0x60(%r1) 50f08b8414SMartin Schwidefsky std %f13,0x68(%r1) 51f08b8414SMartin Schwidefsky std %f14,0x70(%r1) 52f08b8414SMartin Schwidefsky std %f15,0x78(%r1) 534bfc86ceSHeiko Carstens /* Floating point control register */ 54f08b8414SMartin Schwidefsky lghi %r1,__LC_FP_CREG_SAVE_AREA 55f08b8414SMartin Schwidefsky stfpc 0(%r1) 564bfc86ceSHeiko Carstens /* CPU timer */ 57f08b8414SMartin Schwidefsky lghi %r1,__LC_CPU_TIMER_SAVE_AREA 58f08b8414SMartin Schwidefsky stpt 0(%r1) 591a36a39eSMartin Schwidefsky /* Store prefix register */ 60f08b8414SMartin Schwidefsky lghi %r1,__LC_PREFIX_SAVE_AREA 611a36a39eSMartin Schwidefsky stpx 0(%r1) 624bfc86ceSHeiko Carstens /* Clock comparator - seven bytes */ 63f08b8414SMartin Schwidefsky lghi %r1,__LC_CLOCK_COMP_SAVE_AREA 64*26d14299SHeiko Carstens larl %r4,clkcmp 651a36a39eSMartin Schwidefsky stckc 0(%r4) 661a36a39eSMartin Schwidefsky mvc 1(7,%r1),1(%r4) 674bfc86ceSHeiko Carstens /* Program status word */ 68f08b8414SMartin Schwidefsky lghi %r1,__LC_PSW_SAVE_AREA 691a36a39eSMartin Schwidefsky epsw %r4,%r5 701a36a39eSMartin Schwidefsky st %r4,0(%r1) 711a36a39eSMartin Schwidefsky st %r5,4(%r1) 72f08b8414SMartin Schwidefsky stg %r2,8(%r1) 73c50c84c3SMartin Schwidefsky lgr %r9,%r2 741a36a39eSMartin Schwidefsky lgr %r2,%r3 75c50c84c3SMartin Schwidefsky BR_EX %r9 76*26d14299SHeiko CarstensSYM_CODE_END(store_status) 774bfc86ceSHeiko Carstens 784bfc86ceSHeiko Carstens .section .bss 79*26d14299SHeiko Carstens .balign 8 80*26d14299SHeiko CarstensSYM_DATA_LOCAL(clkcmp, .quad 0x0000000000000000) 814bfc86ceSHeiko Carstens .previous 82