Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/powerpc/mm/book3s32/nohash_low.S
26481 views
1
/* SPDX-License-Identifier: GPL-2.0-or-later */
2
/*
3
* This file contains low-level assembler routines for managing
4
* the PowerPC 603 tlb invalidation.
5
*/
6
7
#include <asm/page.h>
8
#include <asm/ppc_asm.h>
9
#include <asm/asm-offsets.h>
10
11
/*
12
* Flush an entry from the TLB
13
*/
14
#ifdef CONFIG_SMP
15
_GLOBAL(_tlbie)
16
lwz r8,TASK_CPU(r2)
17
oris r8,r8,11
18
mfmsr r10
19
rlwinm r0,r10,0,17,15 /* clear bit 16 (MSR_EE) */
20
rlwinm r0,r0,0,28,26 /* clear DR */
21
mtmsr r0
22
isync
23
lis r9,mmu_hash_lock@h
24
ori r9,r9,mmu_hash_lock@l
25
tophys(r9,r9)
26
10: lwarx r7,0,r9
27
cmpwi 0,r7,0
28
bne- 10b
29
stwcx. r8,0,r9
30
bne- 10b
31
eieio
32
tlbie r3
33
sync
34
TLBSYNC
35
li r0,0
36
stw r0,0(r9) /* clear mmu_hash_lock */
37
mtmsr r10
38
isync
39
blr
40
_ASM_NOKPROBE_SYMBOL(_tlbie)
41
#endif /* CONFIG_SMP */
42
43
/*
44
* Flush the entire TLB. 603/603e only
45
*/
46
_GLOBAL(_tlbia)
47
#if defined(CONFIG_SMP)
48
lwz r8,TASK_CPU(r2)
49
oris r8,r8,10
50
mfmsr r10
51
rlwinm r0,r10,0,17,15 /* clear bit 16 (MSR_EE) */
52
rlwinm r0,r0,0,28,26 /* clear DR */
53
mtmsr r0
54
isync
55
lis r9,mmu_hash_lock@h
56
ori r9,r9,mmu_hash_lock@l
57
tophys(r9,r9)
58
10: lwarx r7,0,r9
59
cmpwi 0,r7,0
60
bne- 10b
61
stwcx. r8,0,r9
62
bne- 10b
63
#endif /* CONFIG_SMP */
64
li r5, 32
65
lis r4, KERNELBASE@h
66
mtctr r5
67
sync
68
0: tlbie r4
69
addi r4, r4, 0x1000
70
bdnz 0b
71
sync
72
#ifdef CONFIG_SMP
73
TLBSYNC
74
li r0,0
75
stw r0,0(r9) /* clear mmu_hash_lock */
76
mtmsr r10
77
isync
78
#endif /* CONFIG_SMP */
79
blr
80
_ASM_NOKPROBE_SYMBOL(_tlbia)
81
82