/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * This file contains low-level assembler routines for managing * the PowerPC 603 tlb invalidation. */ #include #include #include /* * Flush an entry from the TLB */ #ifdef CONFIG_SMP _GLOBAL(_tlbie) lwz r8,TASK_CPU(r2) oris r8,r8,11 mfmsr r10 rlwinm r0,r10,0,17,15 /* clear bit 16 (MSR_EE) */ rlwinm r0,r0,0,28,26 /* clear DR */ mtmsr r0 isync lis r9,mmu_hash_lock@h ori r9,r9,mmu_hash_lock@l tophys(r9,r9) 10: lwarx r7,0,r9 cmpwi 0,r7,0 bne- 10b stwcx. r8,0,r9 bne- 10b eieio tlbie r3 sync TLBSYNC li r0,0 stw r0,0(r9) /* clear mmu_hash_lock */ mtmsr r10 isync blr _ASM_NOKPROBE_SYMBOL(_tlbie) #endif /* CONFIG_SMP */ /* * Flush the entire TLB. 603/603e only */ _GLOBAL(_tlbia) #if defined(CONFIG_SMP) lwz r8,TASK_CPU(r2) oris r8,r8,10 mfmsr r10 rlwinm r0,r10,0,17,15 /* clear bit 16 (MSR_EE) */ rlwinm r0,r0,0,28,26 /* clear DR */ mtmsr r0 isync lis r9,mmu_hash_lock@h ori r9,r9,mmu_hash_lock@l tophys(r9,r9) 10: lwarx r7,0,r9 cmpwi 0,r7,0 bne- 10b stwcx. r8,0,r9 bne- 10b #endif /* CONFIG_SMP */ li r5, 32 lis r4, KERNELBASE@h mtctr r5 sync 0: tlbie r4 addi r4, r4, 0x1000 bdnz 0b sync #ifdef CONFIG_SMP TLBSYNC li r0,0 stw r0,0(r9) /* clear mmu_hash_lock */ mtmsr r10 isync #endif /* CONFIG_SMP */ blr _ASM_NOKPROBE_SYMBOL(_tlbia)