xref: /openbmc/linux/arch/ia64/kernel/mca_drv_asm.S (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1*b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds/*
31da177e4SLinus Torvalds * File:        mca_drv_asm.S
41da177e4SLinus Torvalds * Purpose:     Assembly portion of Generic MCA handling
51da177e4SLinus Torvalds *
61da177e4SLinus Torvalds * Copyright (C) 2004 FUJITSU LIMITED
7fe77efb8SHidetoshi Seto * Copyright (C) 2004 Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
81da177e4SLinus Torvalds */
91da177e4SLinus Torvalds#include <linux/threads.h>
101da177e4SLinus Torvalds
111da177e4SLinus Torvalds#include <asm/asmmacro.h>
121da177e4SLinus Torvalds#include <asm/processor.h>
13b1b901c2SRuss Anderson#include <asm/ptrace.h>
141da177e4SLinus Torvalds
151da177e4SLinus TorvaldsGLOBAL_ENTRY(mca_handler_bhhook)
161da177e4SLinus Torvalds	invala				// clear RSE ?
1720305e59SHidetoshi Seto	cover
1820305e59SHidetoshi Seto	;;
1920305e59SHidetoshi Seto	clrrrb
201da177e4SLinus Torvalds	;;
21d2a28ad9SRuss Anderson	alloc	r16=ar.pfs,0,2,3,0	// make a new frame
22b1b901c2SRuss Anderson	mov	ar.rsc=0
231da177e4SLinus Torvalds	mov	r13=IA64_KR(CURRENT)	// current task pointer
241da177e4SLinus Torvalds	;;
25b1b901c2SRuss Anderson	mov	r2=r13
261da177e4SLinus Torvalds	;;
27b1b901c2SRuss Anderson	addl	r22=IA64_RBS_OFFSET,r2
281da177e4SLinus Torvalds	;;
29b1b901c2SRuss Anderson	mov	ar.bspstore=r22
30b1b901c2SRuss Anderson	addl	sp=IA64_STK_OFFSET-IA64_PT_REGS_SIZE,r2
31b1b901c2SRuss Anderson	;;
32b1b901c2SRuss Anderson	adds	r2=IA64_TASK_THREAD_ON_USTACK_OFFSET,r13
33b1b901c2SRuss Anderson	;;
34b1b901c2SRuss Anderson	st1	[r2]=r0		// clear current->thread.on_ustack flag
351da177e4SLinus Torvalds	mov	loc0=r16
361da177e4SLinus Torvalds	movl	loc1=mca_handler_bh	// recovery C function
371da177e4SLinus Torvalds	;;
381da177e4SLinus Torvalds	mov	out0=r8			// poisoned address
39d2a28ad9SRuss Anderson	mov	out1=r9			// iip
40d2a28ad9SRuss Anderson	mov	out2=r10		// psr
411da177e4SLinus Torvalds	mov	b6=loc1
421da177e4SLinus Torvalds	;;
431da177e4SLinus Torvalds	mov	loc1=rp
4483ce6ef8STony Luck	ssm	psr.ic
4583ce6ef8STony Luck	;;
4683ce6ef8STony Luck	srlz.i
4783ce6ef8STony Luck	;;
4883ce6ef8STony Luck	ssm	psr.i
49b1b901c2SRuss Anderson	br.call.sptk.many rp=b6		// does not return ...
501da177e4SLinus Torvalds	;;
511da177e4SLinus Torvalds	mov	ar.pfs=loc0
521da177e4SLinus Torvalds	mov 	rp=loc1
531da177e4SLinus Torvalds	;;
541da177e4SLinus Torvalds	mov	r8=r0
551da177e4SLinus Torvalds	br.ret.sptk.many rp
561da177e4SLinus TorvaldsEND(mca_handler_bhhook)
57