diff options
author | David S. Miller <davem@sunset.davemloft.net> | 2006-02-11 13:56:43 -0500 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-03-20 04:12:21 -0500 |
commit | 6cebb52094baddd4c167bb5100a7cf6f7bee6910 (patch) | |
tree | 5fef397fbb773f7d8aa40aecc303d18ddf88803e /arch/sparc64/kernel/head.S | |
parent | 0d4bc95b9c205a7374afbe93b38d9c2757a45862 (diff) |
[SPARC64]: Fix sun4v early bootup.
prom_sun4v_name should be "sun4v" not "SUNW,sun4v"
Also, this is too early to make use of the
.sun4v_Xinsn_patch code patching, so just check
things manually.
This gets us at least to prom_init() on Niagara.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64/kernel/head.S')
-rw-r--r-- | arch/sparc64/kernel/head.S | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/arch/sparc64/kernel/head.S b/arch/sparc64/kernel/head.S index f581f0e917f7..3222c8205b57 100644 --- a/arch/sparc64/kernel/head.S +++ b/arch/sparc64/kernel/head.S | |||
@@ -123,7 +123,7 @@ prom_map_name: | |||
123 | prom_unmap_name: | 123 | prom_unmap_name: |
124 | .asciz "unmap" | 124 | .asciz "unmap" |
125 | prom_sun4v_name: | 125 | prom_sun4v_name: |
126 | .asciz "SUNW,sun4v" | 126 | .asciz "sun4v" |
127 | .align 4 | 127 | .align 4 |
128 | prom_root_compatible: | 128 | prom_root_compatible: |
129 | .skip 64 | 129 | .skip 64 |
@@ -300,7 +300,7 @@ sparc64_boot_after_remap: | |||
300 | or %g1, %lo(prom_root_compatible), %g1 | 300 | or %g1, %lo(prom_root_compatible), %g1 |
301 | sethi %hi(prom_sun4v_name), %g7 | 301 | sethi %hi(prom_sun4v_name), %g7 |
302 | or %g7, %lo(prom_sun4v_name), %g7 | 302 | or %g7, %lo(prom_sun4v_name), %g7 |
303 | mov 10, %g3 | 303 | mov 5, %g3 |
304 | 1: ldub [%g7], %g2 | 304 | 1: ldub [%g7], %g2 |
305 | ldub [%g1], %g4 | 305 | ldub [%g1], %g4 |
306 | cmp %g2, %g4 | 306 | cmp %g2, %g4 |
@@ -380,28 +380,33 @@ jump_to_sun4u_init: | |||
380 | nop | 380 | nop |
381 | 381 | ||
382 | sun4u_init: | 382 | sun4u_init: |
383 | BRANCH_IF_SUN4V(g1, sun4v_init) | ||
384 | |||
383 | /* Set ctx 0 */ | 385 | /* Set ctx 0 */ |
384 | mov PRIMARY_CONTEXT, %g7 | 386 | mov PRIMARY_CONTEXT, %g7 |
385 | 387 | stxa %g0, [%g7] ASI_DMMU | |
386 | 661: stxa %g0, [%g7] ASI_DMMU | ||
387 | .section .sun4v_1insn_patch, "ax" | ||
388 | .word 661b | ||
389 | stxa %g0, [%g7] ASI_MMU | ||
390 | .previous | ||
391 | |||
392 | membar #Sync | 388 | membar #Sync |
393 | 389 | ||
394 | mov SECONDARY_CONTEXT, %g7 | 390 | mov SECONDARY_CONTEXT, %g7 |
391 | stxa %g0, [%g7] ASI_DMMU | ||
392 | membar #Sync | ||
395 | 393 | ||
396 | 661: stxa %g0, [%g7] ASI_DMMU | 394 | ba,pt %xcc, sun4u_continue |
397 | .section .sun4v_1insn_patch, "ax" | 395 | nop |
398 | .word 661b | 396 | |
397 | sun4v_init: | ||
398 | /* Set ctx 0 */ | ||
399 | mov PRIMARY_CONTEXT, %g7 | ||
399 | stxa %g0, [%g7] ASI_MMU | 400 | stxa %g0, [%g7] ASI_MMU |
400 | .previous | 401 | membar #Sync |
401 | 402 | ||
402 | membar #Sync | 403 | mov SECONDARY_CONTEXT, %g7 |
404 | stxa %g0, [%g7] ASI_MMU | ||
405 | membar #Sync | ||
406 | ba,pt %xcc, niagara_tlb_fixup | ||
407 | nop | ||
403 | 408 | ||
404 | BRANCH_IF_SUN4V(g1, niagara_tlb_fixup) | 409 | sun4u_continue: |
405 | BRANCH_IF_ANY_CHEETAH(g1, g7, cheetah_tlb_fixup) | 410 | BRANCH_IF_ANY_CHEETAH(g1, g7, cheetah_tlb_fixup) |
406 | 411 | ||
407 | ba,pt %xcc, spitfire_tlb_fixup | 412 | ba,pt %xcc, spitfire_tlb_fixup |