diff options
author | David S. Miller <davem@sunset.davemloft.net> | 2006-02-07 02:44:37 -0500 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-03-20 04:11:52 -0500 |
commit | d257d5da39a78b32721ca84b2ba7f461f2f7ed7f (patch) | |
tree | ac28d377688ebe13a4d38e05f4ff65ba73d8652a /arch/sparc64/kernel/ktlb.S | |
parent | 840aaef8db32572b6d11e0d5cb5e6efcbc812000 (diff) |
[SPARC64]: Initial sun4v TLB miss handling infrastructure.
Things are a little tricky because, unlike sun4u, we have
to:
1) do a hypervisor trap to do the TLB load.
2) do the TSB lookup calculations by hand
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64/kernel/ktlb.S')
-rw-r--r-- | arch/sparc64/kernel/ktlb.S | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/arch/sparc64/kernel/ktlb.S b/arch/sparc64/kernel/ktlb.S index c1335432124e..2e55084a0c12 100644 --- a/arch/sparc64/kernel/ktlb.S +++ b/arch/sparc64/kernel/ktlb.S | |||
@@ -16,12 +16,16 @@ | |||
16 | .text | 16 | .text |
17 | .align 32 | 17 | .align 32 |
18 | 18 | ||
19 | .globl kvmap_itlb | ||
20 | kvmap_itlb: | 19 | kvmap_itlb: |
21 | /* g6: TAG TARGET */ | 20 | /* g6: TAG TARGET */ |
22 | mov TLB_TAG_ACCESS, %g4 | 21 | mov TLB_TAG_ACCESS, %g4 |
23 | ldxa [%g4] ASI_IMMU, %g4 | 22 | ldxa [%g4] ASI_IMMU, %g4 |
24 | 23 | ||
24 | /* sun4v_itlb_miss branches here with the missing virtual | ||
25 | * address already loaded into %g4 | ||
26 | */ | ||
27 | kvmap_itlb_4v: | ||
28 | |||
25 | kvmap_itlb_nonlinear: | 29 | kvmap_itlb_nonlinear: |
26 | /* Catch kernel NULL pointer calls. */ | 30 | /* Catch kernel NULL pointer calls. */ |
27 | sethi %hi(PAGE_SIZE), %g5 | 31 | sethi %hi(PAGE_SIZE), %g5 |
@@ -94,11 +98,15 @@ kvmap_dtlb_obp: | |||
94 | nop | 98 | nop |
95 | 99 | ||
96 | .align 32 | 100 | .align 32 |
97 | .globl kvmap_dtlb | ||
98 | kvmap_dtlb: | 101 | kvmap_dtlb: |
99 | /* %g6: TAG TARGET */ | 102 | /* %g6: TAG TARGET */ |
100 | mov TLB_TAG_ACCESS, %g4 | 103 | mov TLB_TAG_ACCESS, %g4 |
101 | ldxa [%g4] ASI_DMMU, %g4 | 104 | ldxa [%g4] ASI_DMMU, %g4 |
105 | |||
106 | /* sun4v_dtlb_miss branches here with the missing virtual | ||
107 | * address already loaded into %g4 | ||
108 | */ | ||
109 | kvmap_dtlb_4v: | ||
102 | brgez,pn %g4, kvmap_dtlb_nonlinear | 110 | brgez,pn %g4, kvmap_dtlb_nonlinear |
103 | nop | 111 | nop |
104 | 112 | ||