xref: /openbmc/linux/arch/sparc/kernel/dtlb_prot.S (revision b2441318)
1b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */
2a88b5ba8SSam Ravnborg/*
3a88b5ba8SSam Ravnborg * dtlb_prot.S: DTLB protection trap strategy.
4a88b5ba8SSam Ravnborg *              This is included directly into the trap table.
5a88b5ba8SSam Ravnborg *
6a88b5ba8SSam Ravnborg * Copyright (C) 1996,1998 David S. Miller (davem@redhat.com)
7a88b5ba8SSam Ravnborg * Copyright (C) 1997,1998 Jakub Jelinek   (jj@ultra.linux.cz)
8a88b5ba8SSam Ravnborg */
9a88b5ba8SSam Ravnborg
10a88b5ba8SSam Ravnborg/* Ways we can get here:
11a88b5ba8SSam Ravnborg *
12a88b5ba8SSam Ravnborg * [TL == 0] 1) User stores to readonly pages.
13a88b5ba8SSam Ravnborg * [TL == 0] 2) Nucleus stores to user readonly pages.
14a88b5ba8SSam Ravnborg * [TL >  0] 3) Nucleus stores to user readonly stack frame.
15a88b5ba8SSam Ravnborg */
16a88b5ba8SSam Ravnborg
17a88b5ba8SSam Ravnborg/* PROT ** ICACHE line 1: User DTLB protection trap	*/
18a88b5ba8SSam Ravnborg	mov		TLB_SFSR, %g1
19a88b5ba8SSam Ravnborg	stxa		%g0, [%g1] ASI_DMMU		! Clear FaultValid bit
20a88b5ba8SSam Ravnborg	membar		#Sync				! Synchronize stores
21a88b5ba8SSam Ravnborg	rdpr		%pstate, %g5			! Move into alt-globals
22a88b5ba8SSam Ravnborg	wrpr		%g5, PSTATE_AG|PSTATE_MG, %pstate
23a88b5ba8SSam Ravnborg	rdpr		%tl, %g1			! Need a winfixup?
24a88b5ba8SSam Ravnborg	cmp		%g1, 1				! Trap level >1?
25a88b5ba8SSam Ravnborg	mov		TLB_TAG_ACCESS, %g4		! For reload of vaddr
26a88b5ba8SSam Ravnborg
27a88b5ba8SSam Ravnborg/* PROT ** ICACHE line 2: More real fault processing */
28a88b5ba8SSam Ravnborg	ldxa		[%g4] ASI_DMMU, %g5		! Put tagaccess in %g5
294f6deb8cSDavid S. Miller	srlx		%g5, PAGE_SHIFT, %g5
304f6deb8cSDavid S. Miller	sllx		%g5, PAGE_SHIFT, %g5		! Clear context ID bits
3184bd6d8bSDavid S. Miller	bgu,pn		%xcc, winfix_trampoline		! Yes, perform winfixup
32a88b5ba8SSam Ravnborg	 mov		FAULT_CODE_DTLB | FAULT_CODE_WRITE, %g4
3384bd6d8bSDavid S. Miller	ba,pt		%xcc, sparc64_realfault_common	! Nope, normal fault
34a88b5ba8SSam Ravnborg	 nop
35a88b5ba8SSam Ravnborg	nop
36a88b5ba8SSam Ravnborg
37a88b5ba8SSam Ravnborg/* PROT ** ICACHE line 3: Unused...	*/
38a88b5ba8SSam Ravnborg	nop
39a88b5ba8SSam Ravnborg	nop
40a88b5ba8SSam Ravnborg	nop
41a88b5ba8SSam Ravnborg	nop
42a88b5ba8SSam Ravnborg	nop
43a88b5ba8SSam Ravnborg	nop
44a88b5ba8SSam Ravnborg	nop
45a88b5ba8SSam Ravnborg	nop
46a88b5ba8SSam Ravnborg
47a88b5ba8SSam Ravnborg/* PROT ** ICACHE line 4: Unused...	*/
48a88b5ba8SSam Ravnborg	nop
49a88b5ba8SSam Ravnborg	nop
50a88b5ba8SSam Ravnborg	nop
51a88b5ba8SSam Ravnborg	nop
52a88b5ba8SSam Ravnborg	nop
53a88b5ba8SSam Ravnborg	nop
54a88b5ba8SSam Ravnborg	nop
55a88b5ba8SSam Ravnborg	nop
56