81 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0-or-later */
 | |
| /*
 | |
|  *  This file contains low-level assembler routines for managing
 | |
|  *  the PowerPC 603 tlb invalidation.
 | |
|  */
 | |
| 
 | |
| #include <asm/page.h>
 | |
| #include <asm/ppc_asm.h>
 | |
| #include <asm/asm-offsets.h>
 | |
| 
 | |
| /*
 | |
|  * 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)
 |