Linux Audio

Check our new training course

Loading...
v4.17
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/*
  3 *  arch/s390/kernel/base.S
  4 *
  5 *    Copyright IBM Corp. 2006, 2007
  6 *    Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>
  7 *		 Michael Holzheu <holzheu@de.ibm.com>
  8 */
  9
 10#include <linux/linkage.h>
 11#include <asm/asm-offsets.h>
 12#include <asm/nospec-insn.h>
 13#include <asm/ptrace.h>
 14#include <asm/sigp.h>
 15
 16	GEN_BR_THUNK %r9
 17	GEN_BR_THUNK %r14
 18
 19ENTRY(s390_base_mcck_handler)
 20	basr	%r13,0
 210:	lg	%r15,__LC_PANIC_STACK	# load panic stack
 22	aghi	%r15,-STACK_FRAME_OVERHEAD
 23	larl	%r1,s390_base_mcck_handler_fn
 24	lg	%r9,0(%r1)
 25	ltgr	%r9,%r9
 26	jz	1f
 27	BASR_EX	%r14,%r9
 281:	la	%r1,4095
 29	lmg	%r0,%r15,__LC_GPREGS_SAVE_AREA-4095(%r1)
 30	lpswe	__LC_MCK_OLD_PSW
 31
 32	.section .bss
 33	.align 8
 34	.globl	s390_base_mcck_handler_fn
 35s390_base_mcck_handler_fn:
 36	.quad	0
 37	.previous
 38
 39ENTRY(s390_base_ext_handler)
 40	stmg	%r0,%r15,__LC_SAVE_AREA_ASYNC
 41	basr	%r13,0
 420:	aghi	%r15,-STACK_FRAME_OVERHEAD
 43	larl	%r1,s390_base_ext_handler_fn
 44	lg	%r9,0(%r1)
 45	ltgr	%r9,%r9
 46	jz	1f
 47	BASR_EX	%r14,%r9
 481:	lmg	%r0,%r15,__LC_SAVE_AREA_ASYNC
 49	ni	__LC_EXT_OLD_PSW+1,0xfd	# clear wait state bit
 50	lpswe	__LC_EXT_OLD_PSW
 51
 52	.section .bss
 53	.align 8
 54	.globl s390_base_ext_handler_fn
 55s390_base_ext_handler_fn:
 56	.quad	0
 57	.previous
 58
 59ENTRY(s390_base_pgm_handler)
 60	stmg	%r0,%r15,__LC_SAVE_AREA_SYNC
 61	basr	%r13,0
 620:	aghi	%r15,-STACK_FRAME_OVERHEAD
 63	larl	%r1,s390_base_pgm_handler_fn
 64	lg	%r9,0(%r1)
 65	ltgr	%r9,%r9
 66	jz	1f
 67	BASR_EX	%r14,%r9
 68	lmg	%r0,%r15,__LC_SAVE_AREA_SYNC
 69	lpswe	__LC_PGM_OLD_PSW
 701:	lpswe	disabled_wait_psw-0b(%r13)
 71
 72	.align	8
 73disabled_wait_psw:
 74	.quad	0x0002000180000000,0x0000000000000000 + s390_base_pgm_handler
 75
 76	.section .bss
 77	.align 8
 78	.globl s390_base_pgm_handler_fn
 79s390_base_pgm_handler_fn:
 80	.quad	0
 81	.previous
 82
 83#
 84# Calls diag 308 subcode 1 and continues execution
 85#
 
 
 
 
 86ENTRY(diag308_reset)
 87	larl	%r4,.Lctlregs		# Save control registers
 88	stctg	%c0,%c15,0(%r4)
 89	lg	%r2,0(%r4)		# Disable lowcore protection
 90	nilh	%r2,0xefff
 91	larl	%r4,.Lctlreg0
 92	stg	%r2,0(%r4)
 93	lctlg	%c0,%c0,0(%r4)
 94	larl	%r4,.Lfpctl		# Floating point control register
 95	stfpc	0(%r4)
 96	larl	%r4,.Lprefix		# Save prefix register
 97	stpx	0(%r4)
 98	larl	%r4,.Lprefix_zero	# Set prefix register to 0
 99	spx	0(%r4)
100	larl	%r4,.Lcontinue_psw	# Save PSW flags
101	epsw	%r2,%r3
102	stm	%r2,%r3,0(%r4)
103	larl	%r4,.Lrestart_psw	# Setup restart PSW at absolute 0
104	lghi	%r3,0
105	lg	%r4,0(%r4)		# Save PSW
106	sturg	%r4,%r3			# Use sturg, because of large pages
107	lghi	%r1,1
108	lghi	%r0,0
109	diag	%r0,%r1,0x308
110.Lrestart_part2:
111	lhi	%r0,0			# Load r0 with zero
112	lhi	%r1,2			# Use mode 2 = ESAME (dump)
113	sigp	%r1,%r0,SIGP_SET_ARCHITECTURE	# Switch to ESAME mode
114	sam64				# Switch to 64 bit addressing mode
115	larl	%r4,.Lctlregs		# Restore control registers
116	lctlg	%c0,%c15,0(%r4)
117	larl	%r4,.Lfpctl		# Restore floating point ctl register
118	lfpc	0(%r4)
119	larl	%r4,.Lprefix		# Restore prefix register
120	spx	0(%r4)
121	larl	%r4,.Lcontinue_psw	# Restore PSW flags
122	lpswe	0(%r4)
123.Lcontinue:
124	BR_EX	%r14
125.align 16
126.Lrestart_psw:
127	.long	0x00080000,0x80000000 + .Lrestart_part2
128
129	.section .data..nosave,"aw",@progbits
130.align 8
131.Lcontinue_psw:
132	.quad	0,.Lcontinue
133	.previous
134
135	.section .bss
136.align 8
137.Lctlreg0:
138	.quad	0
139.Lctlregs:
140	.rept	16
141	.quad	0
142	.endr
143.Lfpctl:
144	.long	0
145.Lprefix:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
146	.long	0
147.Lprefix_zero:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148	.long	0
149	.previous
v3.15
 
  1/*
  2 *  arch/s390/kernel/base.S
  3 *
  4 *    Copyright IBM Corp. 2006, 2007
  5 *    Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>
  6 *		 Michael Holzheu <holzheu@de.ibm.com>
  7 */
  8
  9#include <linux/linkage.h>
 10#include <asm/asm-offsets.h>
 
 11#include <asm/ptrace.h>
 12#include <asm/sigp.h>
 13
 14#ifdef CONFIG_64BIT
 
 15
 16ENTRY(s390_base_mcck_handler)
 17	basr	%r13,0
 180:	lg	%r15,__LC_PANIC_STACK	# load panic stack
 19	aghi	%r15,-STACK_FRAME_OVERHEAD
 20	larl	%r1,s390_base_mcck_handler_fn
 21	lg	%r1,0(%r1)
 22	ltgr	%r1,%r1
 23	jz	1f
 24	basr	%r14,%r1
 251:	la	%r1,4095
 26	lmg	%r0,%r15,__LC_GPREGS_SAVE_AREA-4095(%r1)
 27	lpswe	__LC_MCK_OLD_PSW
 28
 29	.section .bss
 30	.align 8
 31	.globl	s390_base_mcck_handler_fn
 32s390_base_mcck_handler_fn:
 33	.quad	0
 34	.previous
 35
 36ENTRY(s390_base_ext_handler)
 37	stmg	%r0,%r15,__LC_SAVE_AREA_ASYNC
 38	basr	%r13,0
 390:	aghi	%r15,-STACK_FRAME_OVERHEAD
 40	larl	%r1,s390_base_ext_handler_fn
 41	lg	%r1,0(%r1)
 42	ltgr	%r1,%r1
 43	jz	1f
 44	basr	%r14,%r1
 451:	lmg	%r0,%r15,__LC_SAVE_AREA_ASYNC
 46	ni	__LC_EXT_OLD_PSW+1,0xfd	# clear wait state bit
 47	lpswe	__LC_EXT_OLD_PSW
 48
 49	.section .bss
 50	.align 8
 51	.globl s390_base_ext_handler_fn
 52s390_base_ext_handler_fn:
 53	.quad	0
 54	.previous
 55
 56ENTRY(s390_base_pgm_handler)
 57	stmg	%r0,%r15,__LC_SAVE_AREA_SYNC
 58	basr	%r13,0
 590:	aghi	%r15,-STACK_FRAME_OVERHEAD
 60	larl	%r1,s390_base_pgm_handler_fn
 61	lg	%r1,0(%r1)
 62	ltgr	%r1,%r1
 63	jz	1f
 64	basr	%r14,%r1
 65	lmg	%r0,%r15,__LC_SAVE_AREA_SYNC
 66	lpswe	__LC_PGM_OLD_PSW
 671:	lpswe	disabled_wait_psw-0b(%r13)
 68
 69	.align	8
 70disabled_wait_psw:
 71	.quad	0x0002000180000000,0x0000000000000000 + s390_base_pgm_handler
 72
 73	.section .bss
 74	.align 8
 75	.globl s390_base_pgm_handler_fn
 76s390_base_pgm_handler_fn:
 77	.quad	0
 78	.previous
 79
 80#
 81# Calls diag 308 subcode 1 and continues execution
 82#
 83# The following conditions must be ensured before calling this function:
 84# * Prefix register = 0
 85# * Lowcore protection is disabled
 86#
 87ENTRY(diag308_reset)
 88	larl	%r4,.Lctlregs		# Save control registers
 89	stctg	%c0,%c15,0(%r4)
 
 
 
 
 
 90	larl	%r4,.Lfpctl		# Floating point control register
 91	stfpc	0(%r4)
 
 
 
 
 92	larl	%r4,.Lcontinue_psw	# Save PSW flags
 93	epsw	%r2,%r3
 94	stm	%r2,%r3,0(%r4)
 95	larl	%r4,.Lrestart_psw	# Setup restart PSW at absolute 0
 96	lghi	%r3,0
 97	lg	%r4,0(%r4)		# Save PSW
 98	sturg	%r4,%r3			# Use sturg, because of large pages
 99	lghi	%r1,1
100	diag	%r1,%r1,0x308
 
101.Lrestart_part2:
102	lhi	%r0,0			# Load r0 with zero
103	lhi	%r1,2			# Use mode 2 = ESAME (dump)
104	sigp	%r1,%r0,SIGP_SET_ARCHITECTURE	# Switch to ESAME mode
105	sam64				# Switch to 64 bit addressing mode
106	larl	%r4,.Lctlregs		# Restore control registers
107	lctlg	%c0,%c15,0(%r4)
108	larl	%r4,.Lfpctl		# Restore floating point ctl register
109	lfpc	0(%r4)
 
 
110	larl	%r4,.Lcontinue_psw	# Restore PSW flags
111	lpswe	0(%r4)
112.Lcontinue:
113	br	%r14
114.align 16
115.Lrestart_psw:
116	.long	0x00080000,0x80000000 + .Lrestart_part2
117
118	.section .data..nosave,"aw",@progbits
119.align 8
120.Lcontinue_psw:
121	.quad	0,.Lcontinue
122	.previous
123
124	.section .bss
125.align 8
 
 
126.Lctlregs:
127	.rept	16
128	.quad	0
129	.endr
130.Lfpctl:
131	.long	0
132	.previous
133
134#else /* CONFIG_64BIT */
135
136ENTRY(s390_base_mcck_handler)
137	basr	%r13,0
1380:	l	%r15,__LC_PANIC_STACK	# load panic stack
139	ahi	%r15,-STACK_FRAME_OVERHEAD
140	l	%r1,2f-0b(%r13)
141	l	%r1,0(%r1)
142	ltr	%r1,%r1
143	jz	1f
144	basr	%r14,%r1
1451:	lm	%r0,%r15,__LC_GPREGS_SAVE_AREA
146	lpsw	__LC_MCK_OLD_PSW
147
1482:	.long	s390_base_mcck_handler_fn
149
150	.section .bss
151	.align 4
152	.globl	s390_base_mcck_handler_fn
153s390_base_mcck_handler_fn:
154	.long	0
155	.previous
156
157ENTRY(s390_base_ext_handler)
158	stm	%r0,%r15,__LC_SAVE_AREA_ASYNC
159	basr	%r13,0
1600:	ahi	%r15,-STACK_FRAME_OVERHEAD
161	l	%r1,2f-0b(%r13)
162	l	%r1,0(%r1)
163	ltr	%r1,%r1
164	jz	1f
165	basr	%r14,%r1
1661:	lm	%r0,%r15,__LC_SAVE_AREA_ASYNC
167	ni	__LC_EXT_OLD_PSW+1,0xfd	# clear wait state bit
168	lpsw	__LC_EXT_OLD_PSW
169
1702:	.long	s390_base_ext_handler_fn
171
172	.section .bss
173	.align 4
174	.globl	s390_base_ext_handler_fn
175s390_base_ext_handler_fn:
176	.long	0
177	.previous
178
179ENTRY(s390_base_pgm_handler)
180	stm	%r0,%r15,__LC_SAVE_AREA_SYNC
181	basr	%r13,0
1820:	ahi	%r15,-STACK_FRAME_OVERHEAD
183	l	%r1,2f-0b(%r13)
184	l	%r1,0(%r1)
185	ltr	%r1,%r1
186	jz	1f
187	basr	%r14,%r1
188	lm	%r0,%r15,__LC_SAVE_AREA_SYNC
189	lpsw	__LC_PGM_OLD_PSW
190
1911:	lpsw	disabled_wait_psw-0b(%r13)
192
1932:	.long	s390_base_pgm_handler_fn
194
195disabled_wait_psw:
196	.align	8
197	.long	0x000a0000,0x00000000 + s390_base_pgm_handler
198
199	.section .bss
200	.align 4
201	.globl	s390_base_pgm_handler_fn
202s390_base_pgm_handler_fn:
203	.long	0
204	.previous
205
206#endif /* CONFIG_64BIT */