xref: /linux/arch/sparc/kernel/misctrap.S (revision b77e0ce62d63a761ffb7f7245a215a49f5921c2f)
1/* SPDX-License-Identifier: GPL-2.0 */
2#ifdef CONFIG_KGDB
3	.globl		arch_kgdb_breakpoint
4	.type		arch_kgdb_breakpoint,#function
5arch_kgdb_breakpoint:
6	ta		0x72
7	retl
8	 nop
9	.size		arch_kgdb_breakpoint,.-arch_kgdb_breakpoint
10#endif
11
12	.type		__do_privact,#function
13__do_privact:
14	mov		TLB_SFSR, %g3
15	stxa		%g0, [%g3] ASI_DMMU	! Clear FaultValid bit
16	membar		#Sync
17	sethi		%hi(109f), %g7
18	ba,pt		%xcc, etrap
19109:	or		%g7, %lo(109b), %g7
20	call		do_privact
21	 add		%sp, PTREGS_OFF, %o0
22	ba,a,pt		%xcc, rtrap
23	.size		__do_privact,.-__do_privact
24
25	.type		do_mna,#function
26do_mna:
27	rdpr		%tl, %g3
28	cmp		%g3, 1
29
30	/* Setup %g4/%g5 now as they are used in the
31	 * winfixup code.
32	 */
33	mov		TLB_SFSR, %g3
34	mov		DMMU_SFAR, %g4
35	ldxa		[%g4] ASI_DMMU, %g4
36	ldxa		[%g3] ASI_DMMU, %g5
37	stxa		%g0, [%g3] ASI_DMMU	! Clear FaultValid bit
38	membar		#Sync
39	bgu,pn		%icc, winfix_mna
40	 rdpr		%tpc, %g3
41
421:	sethi		%hi(109f), %g7
43	ba,pt		%xcc, etrap
44109:	 or		%g7, %lo(109b), %g7
45	mov		%l4, %o1
46	mov		%l5, %o2
47	call		mem_address_unaligned
48	 add		%sp, PTREGS_OFF, %o0
49	ba,a,pt		%xcc, rtrap
50	.size		do_mna,.-do_mna
51
52	.type		do_lddfmna,#function
53do_lddfmna:
54	sethi		%hi(109f), %g7
55	mov		TLB_SFSR, %g4
56	ldxa		[%g4] ASI_DMMU, %g5
57	stxa		%g0, [%g4] ASI_DMMU	! Clear FaultValid bit
58	membar		#Sync
59	mov		DMMU_SFAR, %g4
60	ldxa		[%g4] ASI_DMMU, %g4
61	ba,pt		%xcc, etrap
62109:	 or		%g7, %lo(109b), %g7
63	mov		%l4, %o1
64	mov		%l5, %o2
65	call		handle_lddfmna
66	 add		%sp, PTREGS_OFF, %o0
67	ba,a,pt		%xcc, rtrap
68	.size		do_lddfmna,.-do_lddfmna
69
70	.type		do_stdfmna,#function
71do_stdfmna:
72	sethi		%hi(109f), %g7
73	mov		TLB_SFSR, %g4
74	ldxa		[%g4] ASI_DMMU, %g5
75	stxa		%g0, [%g4] ASI_DMMU	! Clear FaultValid bit
76	membar		#Sync
77	mov		DMMU_SFAR, %g4
78	ldxa		[%g4] ASI_DMMU, %g4
79	ba,pt		%xcc, etrap
80109:	 or		%g7, %lo(109b), %g7
81	mov		%l4, %o1
82	mov		%l5, %o2
83	call		handle_stdfmna
84	 add		%sp, PTREGS_OFF, %o0
85	ba,a,pt		%xcc, rtrap
86	 nop
87	.size		do_stdfmna,.-do_stdfmna
88
89	.type		breakpoint_trap,#function
90breakpoint_trap:
91	call		sparc_breakpoint
92	 add		%sp, PTREGS_OFF, %o0
93	ba,pt		%xcc, rtrap
94	 nop
95	.size		breakpoint_trap,.-breakpoint_trap
96