diff options
| author | David S. Miller <davem@sunset.davemloft.net> | 2006-02-08 01:13:05 -0500 |
|---|---|---|
| committer | David S. Miller <davem@sunset.davemloft.net> | 2006-03-20 04:11:56 -0500 |
| commit | 8b11bd12aff76e02cdc2cbc9e439bba88d281223 (patch) | |
| tree | 903ab8830616bfbe5a821e4359f642842c8060a4 | |
| parent | 481295f982b21b1dbe71cbf41d3a93028fee30d1 (diff) | |
[SPARC64]: Patch up mmu context register writes for sun4v.
sun4v uses ASI_MMU instead of ASI_DMMU
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | arch/sparc64/kernel/entry.S | 80 | ||||
| -rw-r--r-- | arch/sparc64/kernel/etrap.S | 8 | ||||
| -rw-r--r-- | arch/sparc64/kernel/head.S | 33 | ||||
| -rw-r--r-- | arch/sparc64/kernel/rtrap.S | 24 | ||||
| -rw-r--r-- | arch/sparc64/kernel/setup.c | 30 | ||||
| -rw-r--r-- | arch/sparc64/kernel/trampoline.S | 32 | ||||
| -rw-r--r-- | arch/sparc64/mm/init.c | 9 | ||||
| -rw-r--r-- | arch/sparc64/prom/p1275.c | 11 | ||||
| -rw-r--r-- | include/asm-sparc64/mmu_context.h | 15 |
9 files changed, 176 insertions, 66 deletions
diff --git a/arch/sparc64/kernel/entry.S b/arch/sparc64/kernel/entry.S index 4ca3ea0beaf9..f51b66a1687a 100644 --- a/arch/sparc64/kernel/entry.S +++ b/arch/sparc64/kernel/entry.S | |||
| @@ -97,10 +97,22 @@ do_fpdis: | |||
| 97 | add %g6, TI_FPREGS + 0x80, %g1 | 97 | add %g6, TI_FPREGS + 0x80, %g1 |
| 98 | faddd %f0, %f2, %f4 | 98 | faddd %f0, %f2, %f4 |
| 99 | fmuld %f0, %f2, %f6 | 99 | fmuld %f0, %f2, %f6 |
| 100 | ldxa [%g3] ASI_DMMU, %g5 | 100 | |
| 101 | 661: ldxa [%g3] ASI_DMMU, %g5 | ||
| 102 | .section .sun4v_1insn_patch, "ax" | ||
| 103 | .word 661b | ||
| 104 | ldxa [%g3] ASI_MMU, %g5 | ||
| 105 | .previous | ||
| 106 | |||
| 101 | sethi %hi(sparc64_kern_sec_context), %g2 | 107 | sethi %hi(sparc64_kern_sec_context), %g2 |
| 102 | ldx [%g2 + %lo(sparc64_kern_sec_context)], %g2 | 108 | ldx [%g2 + %lo(sparc64_kern_sec_context)], %g2 |
| 103 | stxa %g2, [%g3] ASI_DMMU | 109 | |
| 110 | 661: stxa %g2, [%g3] ASI_DMMU | ||
| 111 | .section .sun4v_1insn_patch, "ax" | ||
| 112 | .word 661b | ||
| 113 | stxa %g2, [%g3] ASI_MMU | ||
| 114 | .previous | ||
| 115 | |||
| 104 | membar #Sync | 116 | membar #Sync |
| 105 | add %g6, TI_FPREGS + 0xc0, %g2 | 117 | add %g6, TI_FPREGS + 0xc0, %g2 |
| 106 | faddd %f0, %f2, %f8 | 118 | faddd %f0, %f2, %f8 |
| @@ -126,11 +138,23 @@ do_fpdis: | |||
| 126 | fzero %f32 | 138 | fzero %f32 |
| 127 | mov SECONDARY_CONTEXT, %g3 | 139 | mov SECONDARY_CONTEXT, %g3 |
| 128 | fzero %f34 | 140 | fzero %f34 |
| 129 | ldxa [%g3] ASI_DMMU, %g5 | 141 | |
| 142 | 661: ldxa [%g3] ASI_DMMU, %g5 | ||
| 143 | .section .sun4v_1insn_patch, "ax" | ||
| 144 | .word 661b | ||
| 145 | ldxa [%g3] ASI_MMU, %g5 | ||
| 146 | .previous | ||
| 147 | |||
| 130 | add %g6, TI_FPREGS, %g1 | 148 | add %g6, TI_FPREGS, %g1 |
| 131 | sethi %hi(sparc64_kern_sec_context), %g2 | 149 | sethi %hi(sparc64_kern_sec_context), %g2 |
| 132 | ldx [%g2 + %lo(sparc64_kern_sec_context)], %g2 | 150 | ldx [%g2 + %lo(sparc64_kern_sec_context)], %g2 |
| 133 | stxa %g2, [%g3] ASI_DMMU | 151 | |
| 152 | 661: stxa %g2, [%g3] ASI_DMMU | ||
| 153 | .section .sun4v_1insn_patch, "ax" | ||
| 154 | .word 661b | ||
| 155 | stxa %g2, [%g3] ASI_MMU | ||
| 156 | .previous | ||
| 157 | |||
| 134 | membar #Sync | 158 | membar #Sync |
| 135 | add %g6, TI_FPREGS + 0x40, %g2 | 159 | add %g6, TI_FPREGS + 0x40, %g2 |
| 136 | faddd %f32, %f34, %f36 | 160 | faddd %f32, %f34, %f36 |
| @@ -155,10 +179,22 @@ do_fpdis: | |||
| 155 | nop | 179 | nop |
| 156 | 3: mov SECONDARY_CONTEXT, %g3 | 180 | 3: mov SECONDARY_CONTEXT, %g3 |
| 157 | add %g6, TI_FPREGS, %g1 | 181 | add %g6, TI_FPREGS, %g1 |
| 158 | ldxa [%g3] ASI_DMMU, %g5 | 182 | |
| 183 | 661: ldxa [%g3] ASI_DMMU, %g5 | ||
| 184 | .section .sun4v_1insn_patch, "ax" | ||
| 185 | .word 661b | ||
| 186 | ldxa [%g3] ASI_MMU, %g5 | ||
| 187 | .previous | ||
| 188 | |||
| 159 | sethi %hi(sparc64_kern_sec_context), %g2 | 189 | sethi %hi(sparc64_kern_sec_context), %g2 |
| 160 | ldx [%g2 + %lo(sparc64_kern_sec_context)], %g2 | 190 | ldx [%g2 + %lo(sparc64_kern_sec_context)], %g2 |
| 161 | stxa %g2, [%g3] ASI_DMMU | 191 | |
| 192 | 661: stxa %g2, [%g3] ASI_DMMU | ||
| 193 | .section .sun4v_1insn_patch, "ax" | ||
| 194 | .word 661b | ||
| 195 | stxa %g2, [%g3] ASI_MMU | ||
| 196 | .previous | ||
| 197 | |||
| 162 | membar #Sync | 198 | membar #Sync |
| 163 | mov 0x40, %g2 | 199 | mov 0x40, %g2 |
| 164 | membar #Sync | 200 | membar #Sync |
| @@ -169,7 +205,13 @@ do_fpdis: | |||
| 169 | ldda [%g1 + %g2] ASI_BLK_S, %f48 | 205 | ldda [%g1 + %g2] ASI_BLK_S, %f48 |
| 170 | membar #Sync | 206 | membar #Sync |
| 171 | fpdis_exit: | 207 | fpdis_exit: |
| 172 | stxa %g5, [%g3] ASI_DMMU | 208 | |
| 209 | 661: stxa %g5, [%g3] ASI_DMMU | ||
| 210 | .section .sun4v_1insn_patch, "ax" | ||
| 211 | .word 661b | ||
| 212 | stxa %g5, [%g3] ASI_MMU | ||
| 213 | .previous | ||
| 214 | |||
| 173 | membar #Sync | 215 | membar #Sync |
| 174 | fpdis_exit2: | 216 | fpdis_exit2: |
| 175 | wr %g7, 0, %gsr | 217 | wr %g7, 0, %gsr |
| @@ -323,10 +365,22 @@ do_fptrap_after_fsr: | |||
| 323 | rd %gsr, %g3 | 365 | rd %gsr, %g3 |
| 324 | stx %g3, [%g6 + TI_GSR] | 366 | stx %g3, [%g6 + TI_GSR] |
| 325 | mov SECONDARY_CONTEXT, %g3 | 367 | mov SECONDARY_CONTEXT, %g3 |
| 326 | ldxa [%g3] ASI_DMMU, %g5 | 368 | |
| 369 | 661: ldxa [%g3] ASI_DMMU, %g5 | ||
| 370 | .section .sun4v_1insn_patch, "ax" | ||
| 371 | .word 661b | ||
| 372 | ldxa [%g3] ASI_MMU, %g5 | ||
| 373 | .previous | ||
| 374 | |||
| 327 | sethi %hi(sparc64_kern_sec_context), %g2 | 375 | sethi %hi(sparc64_kern_sec_context), %g2 |
| 328 | ldx [%g2 + %lo(sparc64_kern_sec_context)], %g2 | 376 | ldx [%g2 + %lo(sparc64_kern_sec_context)], %g2 |
| 329 | stxa %g2, [%g3] ASI_DMMU | 377 | |
| 378 | 661: stxa %g2, [%g3] ASI_DMMU | ||
| 379 | .section .sun4v_1insn_patch, "ax" | ||
| 380 | .word 661b | ||
| 381 | stxa %g2, [%g3] ASI_MMU | ||
| 382 | .previous | ||
| 383 | |||
| 330 | membar #Sync | 384 | membar #Sync |
| 331 | add %g6, TI_FPREGS, %g2 | 385 | add %g6, TI_FPREGS, %g2 |
| 332 | andcc %g1, FPRS_DL, %g0 | 386 | andcc %g1, FPRS_DL, %g0 |
| @@ -341,7 +395,13 @@ do_fptrap_after_fsr: | |||
| 341 | stda %f48, [%g2 + %g3] ASI_BLK_S | 395 | stda %f48, [%g2 + %g3] ASI_BLK_S |
| 342 | 5: mov SECONDARY_CONTEXT, %g1 | 396 | 5: mov SECONDARY_CONTEXT, %g1 |
| 343 | membar #Sync | 397 | membar #Sync |
| 344 | stxa %g5, [%g1] ASI_DMMU | 398 | |
| 399 | 661: stxa %g5, [%g1] ASI_DMMU | ||
| 400 | .section .sun4v_1insn_patch, "ax" | ||
| 401 | .word 661b | ||
| 402 | stxa %g5, [%g1] ASI_MMU | ||
| 403 | .previous | ||
| 404 | |||
| 345 | membar #Sync | 405 | membar #Sync |
| 346 | ba,pt %xcc, etrap | 406 | ba,pt %xcc, etrap |
| 347 | wr %g0, 0, %fprs | 407 | wr %g0, 0, %fprs |
diff --git a/arch/sparc64/kernel/etrap.S b/arch/sparc64/kernel/etrap.S index d8c062a1700c..a0e7d480e5dc 100644 --- a/arch/sparc64/kernel/etrap.S +++ b/arch/sparc64/kernel/etrap.S | |||
| @@ -95,7 +95,13 @@ etrap_save: save %g2, -STACK_BIAS, %sp | |||
| 95 | wrpr %g2, 0, %wstate | 95 | wrpr %g2, 0, %wstate |
| 96 | sethi %hi(sparc64_kern_pri_context), %g2 | 96 | sethi %hi(sparc64_kern_pri_context), %g2 |
| 97 | ldx [%g2 + %lo(sparc64_kern_pri_context)], %g3 | 97 | ldx [%g2 + %lo(sparc64_kern_pri_context)], %g3 |
| 98 | stxa %g3, [%l4] ASI_DMMU | 98 | |
| 99 | 661: stxa %g3, [%l4] ASI_DMMU | ||
| 100 | .section .sun4v_1insn_patch, "ax" | ||
| 101 | .word 661b | ||
| 102 | stxa %g3, [%l4] ASI_MMU | ||
| 103 | .previous | ||
| 104 | |||
| 99 | sethi %hi(KERNBASE), %l4 | 105 | sethi %hi(KERNBASE), %l4 |
| 100 | flush %l4 | 106 | flush %l4 |
| 101 | mov ASI_AIUS, %l7 | 107 | mov ASI_AIUS, %l7 |
diff --git a/arch/sparc64/kernel/head.S b/arch/sparc64/kernel/head.S index f04f7391f236..a304845f8c56 100644 --- a/arch/sparc64/kernel/head.S +++ b/arch/sparc64/kernel/head.S | |||
| @@ -303,12 +303,24 @@ jump_to_sun4u_init: | |||
| 303 | 303 | ||
| 304 | sun4u_init: | 304 | sun4u_init: |
| 305 | /* Set ctx 0 */ | 305 | /* Set ctx 0 */ |
| 306 | mov PRIMARY_CONTEXT, %g7 | 306 | mov PRIMARY_CONTEXT, %g7 |
| 307 | stxa %g0, [%g7] ASI_DMMU | 307 | |
| 308 | membar #Sync | 308 | 661: stxa %g0, [%g7] ASI_DMMU |
| 309 | .section .sun4v_1insn_patch, "ax" | ||
| 310 | .word 661b | ||
| 311 | stxa %g0, [%g7] ASI_MMU | ||
| 312 | .previous | ||
| 313 | |||
| 314 | membar #Sync | ||
| 315 | |||
| 316 | mov SECONDARY_CONTEXT, %g7 | ||
| 317 | |||
| 318 | 661: stxa %g0, [%g7] ASI_DMMU | ||
| 319 | .section .sun4v_1insn_patch, "ax" | ||
| 320 | .word 661b | ||
| 321 | stxa %g0, [%g7] ASI_MMU | ||
| 322 | .previous | ||
| 309 | 323 | ||
| 310 | mov SECONDARY_CONTEXT, %g7 | ||
| 311 | stxa %g0, [%g7] ASI_DMMU | ||
| 312 | membar #Sync | 324 | membar #Sync |
| 313 | 325 | ||
| 314 | BRANCH_IF_ANY_CHEETAH(g1,g7,cheetah_tlb_fixup) | 326 | BRANCH_IF_ANY_CHEETAH(g1,g7,cheetah_tlb_fixup) |
| @@ -436,8 +448,15 @@ setup_trap_table: | |||
| 436 | /* Start using proper page size encodings in ctx register. */ | 448 | /* Start using proper page size encodings in ctx register. */ |
| 437 | sethi %hi(sparc64_kern_pri_context), %g3 | 449 | sethi %hi(sparc64_kern_pri_context), %g3 |
| 438 | ldx [%g3 + %lo(sparc64_kern_pri_context)], %g2 | 450 | ldx [%g3 + %lo(sparc64_kern_pri_context)], %g2 |
| 439 | mov PRIMARY_CONTEXT, %g1 | 451 | |
| 440 | stxa %g2, [%g1] ASI_DMMU | 452 | mov PRIMARY_CONTEXT, %g1 |
| 453 | |||
| 454 | 661: stxa %g2, [%g1] ASI_DMMU | ||
| 455 | .section .sun4v_1insn_patch, "ax" | ||
| 456 | .word 661b | ||
| 457 | stxa %g2, [%g1] ASI_MMU | ||
| 458 | .previous | ||
| 459 | |||
| 441 | membar #Sync | 460 | membar #Sync |
| 442 | 461 | ||
| 443 | /* Kill PROM timer */ | 462 | /* Kill PROM timer */ |
diff --git a/arch/sparc64/kernel/rtrap.S b/arch/sparc64/kernel/rtrap.S index a55d517e76aa..551f71982008 100644 --- a/arch/sparc64/kernel/rtrap.S +++ b/arch/sparc64/kernel/rtrap.S | |||
| @@ -264,11 +264,23 @@ rt_continue: ldx [%sp + PTREGS_OFF + PT_V9_G1], %g1 | |||
| 264 | 264 | ||
| 265 | brnz,pn %l3, kern_rtt | 265 | brnz,pn %l3, kern_rtt |
| 266 | mov PRIMARY_CONTEXT, %l7 | 266 | mov PRIMARY_CONTEXT, %l7 |
| 267 | ldxa [%l7 + %l7] ASI_DMMU, %l0 | 267 | |
| 268 | 661: ldxa [%l7 + %l7] ASI_DMMU, %l0 | ||
| 269 | .section .sun4v_1insn_patch, "ax" | ||
| 270 | .word 661b | ||
| 271 | ldxa [%l7 + %l7] ASI_MMU, %l0 | ||
| 272 | .previous | ||
| 273 | |||
| 268 | sethi %hi(sparc64_kern_pri_nuc_bits), %l1 | 274 | sethi %hi(sparc64_kern_pri_nuc_bits), %l1 |
| 269 | ldx [%l1 + %lo(sparc64_kern_pri_nuc_bits)], %l1 | 275 | ldx [%l1 + %lo(sparc64_kern_pri_nuc_bits)], %l1 |
| 270 | or %l0, %l1, %l0 | 276 | or %l0, %l1, %l0 |
| 271 | stxa %l0, [%l7] ASI_DMMU | 277 | |
| 278 | 661: stxa %l0, [%l7] ASI_DMMU | ||
| 279 | .section .sun4v_1insn_patch, "ax" | ||
| 280 | .word 661b | ||
| 281 | stxa %l0, [%l7] ASI_MMU | ||
| 282 | .previous | ||
| 283 | |||
| 272 | sethi %hi(KERNBASE), %l7 | 284 | sethi %hi(KERNBASE), %l7 |
| 273 | flush %l7 | 285 | flush %l7 |
| 274 | rdpr %wstate, %l1 | 286 | rdpr %wstate, %l1 |
| @@ -303,7 +315,13 @@ user_rtt_fill_fixup: | |||
| 303 | sethi %hi(sparc64_kern_pri_context), %g2 | 315 | sethi %hi(sparc64_kern_pri_context), %g2 |
| 304 | ldx [%g2 + %lo(sparc64_kern_pri_context)], %g2 | 316 | ldx [%g2 + %lo(sparc64_kern_pri_context)], %g2 |
| 305 | mov PRIMARY_CONTEXT, %g1 | 317 | mov PRIMARY_CONTEXT, %g1 |
| 306 | stxa %g2, [%g1] ASI_DMMU | 318 | |
| 319 | 661: stxa %g2, [%g1] ASI_DMMU | ||
| 320 | .section .sun4v_1insn_patch, "ax" | ||
| 321 | .word 661b | ||
| 322 | stxa %g2, [%g1] ASI_MMU | ||
| 323 | .previous | ||
| 324 | |||
| 307 | sethi %hi(KERNBASE), %g1 | 325 | sethi %hi(KERNBASE), %g1 |
| 308 | flush %g1 | 326 | flush %g1 |
| 309 | 327 | ||
diff --git a/arch/sparc64/kernel/setup.c b/arch/sparc64/kernel/setup.c index 6d6178efd587..2d64320d3a4d 100644 --- a/arch/sparc64/kernel/setup.c +++ b/arch/sparc64/kernel/setup.c | |||
| @@ -189,26 +189,30 @@ int prom_callback(long *args) | |||
| 189 | } | 189 | } |
| 190 | 190 | ||
| 191 | if ((va >= KERNBASE) && (va < (KERNBASE + (4 * 1024 * 1024)))) { | 191 | if ((va >= KERNBASE) && (va < (KERNBASE + (4 * 1024 * 1024)))) { |
| 192 | extern unsigned long sparc64_kern_pri_context; | 192 | if (tlb_type == spitfire) { |
| 193 | 193 | extern unsigned long sparc64_kern_pri_context; | |
| 194 | /* Spitfire Errata #32 workaround */ | 194 | |
| 195 | __asm__ __volatile__("stxa %0, [%1] %2\n\t" | 195 | /* Spitfire Errata #32 workaround */ |
| 196 | "flush %%g6" | 196 | __asm__ __volatile__( |
| 197 | : /* No outputs */ | 197 | "stxa %0, [%1] %2\n\t" |
| 198 | : "r" (sparc64_kern_pri_context), | 198 | "flush %%g6" |
| 199 | "r" (PRIMARY_CONTEXT), | 199 | : /* No outputs */ |
| 200 | "i" (ASI_DMMU)); | 200 | : "r" (sparc64_kern_pri_context), |
| 201 | "r" (PRIMARY_CONTEXT), | ||
| 202 | "i" (ASI_DMMU)); | ||
| 203 | } | ||
| 201 | 204 | ||
| 202 | /* | 205 | /* |
| 203 | * Locked down tlb entry. | 206 | * Locked down tlb entry. |
| 204 | */ | 207 | */ |
| 205 | 208 | ||
| 206 | if (tlb_type == spitfire) | 209 | if (tlb_type == spitfire) { |
| 207 | tte = spitfire_get_dtlb_data(SPITFIRE_HIGHEST_LOCKED_TLBENT); | 210 | tte = spitfire_get_dtlb_data(SPITFIRE_HIGHEST_LOCKED_TLBENT); |
| 208 | else if (tlb_type == cheetah || tlb_type == cheetah_plus) | 211 | res = PROM_TRUE; |
| 212 | } else if (tlb_type == cheetah || tlb_type == cheetah_plus) { | ||
| 209 | tte = cheetah_get_ldtlb_data(CHEETAH_HIGHEST_LOCKED_TLBENT); | 213 | tte = cheetah_get_ldtlb_data(CHEETAH_HIGHEST_LOCKED_TLBENT); |
| 210 | 214 | res = PROM_TRUE; | |
| 211 | res = PROM_TRUE; | 215 | } |
| 212 | goto done; | 216 | goto done; |
| 213 | } | 217 | } |
| 214 | 218 | ||
diff --git a/arch/sparc64/kernel/trampoline.S b/arch/sparc64/kernel/trampoline.S index 18c333f841e3..d9e2af35158d 100644 --- a/arch/sparc64/kernel/trampoline.S +++ b/arch/sparc64/kernel/trampoline.S | |||
| @@ -272,10 +272,22 @@ do_unlock: | |||
| 272 | wr %g0, ASI_P, %asi | 272 | wr %g0, ASI_P, %asi |
| 273 | 273 | ||
| 274 | mov PRIMARY_CONTEXT, %g7 | 274 | mov PRIMARY_CONTEXT, %g7 |
| 275 | stxa %g0, [%g7] ASI_DMMU | 275 | |
| 276 | 661: stxa %g0, [%g7] ASI_DMMU | ||
| 277 | .section .sun4v_1insn_patch, "ax" | ||
| 278 | .word 661b | ||
| 279 | stxa %g0, [%g7] ASI_MMU | ||
| 280 | .previous | ||
| 281 | |||
| 276 | membar #Sync | 282 | membar #Sync |
| 277 | mov SECONDARY_CONTEXT, %g7 | 283 | mov SECONDARY_CONTEXT, %g7 |
| 278 | stxa %g0, [%g7] ASI_DMMU | 284 | |
| 285 | 661: stxa %g0, [%g7] ASI_DMMU | ||
| 286 | .section .sun4v_1insn_patch, "ax" | ||
| 287 | .word 661b | ||
| 288 | stxa %g0, [%g7] ASI_MMU | ||
| 289 | .previous | ||
| 290 | |||
| 279 | membar #Sync | 291 | membar #Sync |
| 280 | 292 | ||
| 281 | mov 1, %g5 | 293 | mov 1, %g5 |
| @@ -301,11 +313,17 @@ do_unlock: | |||
| 301 | nop | 313 | nop |
| 302 | 314 | ||
| 303 | /* Start using proper page size encodings in ctx register. */ | 315 | /* Start using proper page size encodings in ctx register. */ |
| 304 | sethi %hi(sparc64_kern_pri_context), %g3 | 316 | sethi %hi(sparc64_kern_pri_context), %g3 |
| 305 | ldx [%g3 + %lo(sparc64_kern_pri_context)], %g2 | 317 | ldx [%g3 + %lo(sparc64_kern_pri_context)], %g2 |
| 306 | mov PRIMARY_CONTEXT, %g1 | 318 | mov PRIMARY_CONTEXT, %g1 |
| 307 | stxa %g2, [%g1] ASI_DMMU | 319 | |
| 308 | membar #Sync | 320 | 661: stxa %g2, [%g1] ASI_DMMU |
| 321 | .section .sun4v_1insn_patch, "ax" | ||
| 322 | .word 661b | ||
| 323 | stxa %g2, [%g1] ASI_MMU | ||
| 324 | .previous | ||
| 325 | |||
| 326 | membar #Sync | ||
| 309 | 327 | ||
| 310 | rdpr %pstate, %o1 | 328 | rdpr %pstate, %o1 |
| 311 | or %o1, PSTATE_IE, %o1 | 329 | or %o1, PSTATE_IE, %o1 |
diff --git a/arch/sparc64/mm/init.c b/arch/sparc64/mm/init.c index 4c95cf34075b..6504d6eb5372 100644 --- a/arch/sparc64/mm/init.c +++ b/arch/sparc64/mm/init.c | |||
| @@ -792,15 +792,6 @@ void sparc_ultra_dump_dtlb(void) | |||
| 792 | } | 792 | } |
| 793 | } | 793 | } |
| 794 | 794 | ||
| 795 | static inline void spitfire_errata32(void) | ||
| 796 | { | ||
| 797 | __asm__ __volatile__("stxa %0, [%1] %2\n\t" | ||
| 798 | "flush %%g6" | ||
| 799 | : /* No outputs */ | ||
| 800 | : "r" (0), | ||
| 801 | "r" (PRIMARY_CONTEXT), "i" (ASI_DMMU)); | ||
| 802 | } | ||
| 803 | |||
| 804 | extern unsigned long cmdline_memory_size; | 795 | extern unsigned long cmdline_memory_size; |
| 805 | 796 | ||
| 806 | unsigned long __init bootmem_init(unsigned long *pages_avail) | 797 | unsigned long __init bootmem_init(unsigned long *pages_avail) |
diff --git a/arch/sparc64/prom/p1275.c b/arch/sparc64/prom/p1275.c index a5a7c5712028..2b32c489860c 100644 --- a/arch/sparc64/prom/p1275.c +++ b/arch/sparc64/prom/p1275.c | |||
| @@ -30,16 +30,6 @@ extern void prom_world(int); | |||
| 30 | extern void prom_cif_interface(void); | 30 | extern void prom_cif_interface(void); |
| 31 | extern void prom_cif_callback(void); | 31 | extern void prom_cif_callback(void); |
| 32 | 32 | ||
| 33 | static inline unsigned long spitfire_get_primary_context(void) | ||
| 34 | { | ||
| 35 | unsigned long ctx; | ||
| 36 | |||
| 37 | __asm__ __volatile__("ldxa [%1] %2, %0" | ||
| 38 | : "=r" (ctx) | ||
| 39 | : "r" (PRIMARY_CONTEXT), "i" (ASI_DMMU)); | ||
| 40 | return ctx; | ||
| 41 | } | ||
| 42 | |||
| 43 | /* | 33 | /* |
| 44 | * This provides SMP safety on the p1275buf. prom_callback() drops this lock | 34 | * This provides SMP safety on the p1275buf. prom_callback() drops this lock |
| 45 | * to allow recursuve acquisition. | 35 | * to allow recursuve acquisition. |
| @@ -55,7 +45,6 @@ long p1275_cmd(const char *service, long fmt, ...) | |||
| 55 | long attrs, x; | 45 | long attrs, x; |
| 56 | 46 | ||
| 57 | p = p1275buf.prom_buffer; | 47 | p = p1275buf.prom_buffer; |
| 58 | BUG_ON((spitfire_get_primary_context() & CTX_NR_MASK) != 0); | ||
| 59 | 48 | ||
| 60 | spin_lock_irqsave(&prom_entry_lock, flags); | 49 | spin_lock_irqsave(&prom_entry_lock, flags); |
| 61 | 50 | ||
diff --git a/include/asm-sparc64/mmu_context.h b/include/asm-sparc64/mmu_context.h index 1d232678821d..2760353591ab 100644 --- a/include/asm-sparc64/mmu_context.h +++ b/include/asm-sparc64/mmu_context.h | |||
| @@ -41,11 +41,16 @@ extern void smp_tsb_sync(struct mm_struct *mm); | |||
| 41 | 41 | ||
| 42 | /* Set MMU context in the actual hardware. */ | 42 | /* Set MMU context in the actual hardware. */ |
| 43 | #define load_secondary_context(__mm) \ | 43 | #define load_secondary_context(__mm) \ |
| 44 | __asm__ __volatile__("stxa %0, [%1] %2\n\t" \ | 44 | __asm__ __volatile__( \ |
| 45 | "flush %%g6" \ | 45 | "\n661: stxa %0, [%1] %2\n" \ |
| 46 | : /* No outputs */ \ | 46 | " .section .sun4v_1insn_patch, \"ax\"\n" \ |
| 47 | : "r" (CTX_HWBITS((__mm)->context)), \ | 47 | " .word 661b\n" \ |
| 48 | "r" (SECONDARY_CONTEXT), "i" (ASI_DMMU)) | 48 | " stxa %0, [%1] %3\n" \ |
| 49 | " .previous\n" \ | ||
| 50 | " flush %%g6\n" \ | ||
| 51 | : /* No outputs */ \ | ||
| 52 | : "r" (CTX_HWBITS((__mm)->context)), \ | ||
| 53 | "r" (SECONDARY_CONTEXT), "i" (ASI_DMMU), "i" (ASI_MMU)) | ||
| 49 | 54 | ||
| 50 | extern void __flush_tlb_mm(unsigned long, unsigned long); | 55 | extern void __flush_tlb_mm(unsigned long, unsigned long); |
| 51 | 56 | ||
