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