diff options
Diffstat (limited to 'arch/sparc/kernel/head_64.S')
-rw-r--r-- | arch/sparc/kernel/head_64.S | 40 |
1 files changed, 4 insertions, 36 deletions
diff --git a/arch/sparc/kernel/head_64.S b/arch/sparc/kernel/head_64.S index 4fdeb8040d4d..3d61fcae7ee3 100644 --- a/arch/sparc/kernel/head_64.S +++ b/arch/sparc/kernel/head_64.S | |||
@@ -672,14 +672,12 @@ tlb_fixup_done: | |||
672 | sethi %hi(init_thread_union), %g6 | 672 | sethi %hi(init_thread_union), %g6 |
673 | or %g6, %lo(init_thread_union), %g6 | 673 | or %g6, %lo(init_thread_union), %g6 |
674 | ldx [%g6 + TI_TASK], %g4 | 674 | ldx [%g6 + TI_TASK], %g4 |
675 | mov %sp, %l6 | ||
676 | 675 | ||
677 | wr %g0, ASI_P, %asi | 676 | wr %g0, ASI_P, %asi |
678 | mov 1, %g1 | 677 | mov 1, %g1 |
679 | sllx %g1, THREAD_SHIFT, %g1 | 678 | sllx %g1, THREAD_SHIFT, %g1 |
680 | sub %g1, (STACKFRAME_SZ + STACK_BIAS), %g1 | 679 | sub %g1, (STACKFRAME_SZ + STACK_BIAS), %g1 |
681 | add %g6, %g1, %sp | 680 | add %g6, %g1, %sp |
682 | mov 0, %fp | ||
683 | 681 | ||
684 | /* Set per-cpu pointer initially to zero, this makes | 682 | /* Set per-cpu pointer initially to zero, this makes |
685 | * the boot-cpu use the in-kernel-image per-cpu areas | 683 | * the boot-cpu use the in-kernel-image per-cpu areas |
@@ -706,44 +704,14 @@ tlb_fixup_done: | |||
706 | nop | 704 | nop |
707 | #endif | 705 | #endif |
708 | 706 | ||
709 | mov %l6, %o1 ! OpenPROM stack | ||
710 | call prom_init | 707 | call prom_init |
711 | mov %l7, %o0 ! OpenPROM cif handler | 708 | mov %l7, %o0 ! OpenPROM cif handler |
712 | 709 | ||
713 | /* Initialize current_thread_info()->cpu as early as possible. | 710 | /* To create a one-register-window buffer between the kernel's |
714 | * In order to do that accurately we have to patch up the get_cpuid() | 711 | * initial stack and the last stack frame we use from the firmware, |
715 | * assembler sequences. And that, in turn, requires that we know | 712 | * do the rest of the boot from a C helper function. |
716 | * if we are on a Starfire box or not. While we're here, patch up | ||
717 | * the sun4v sequences as well. | ||
718 | */ | 713 | */ |
719 | call check_if_starfire | 714 | call start_early_boot |
720 | nop | ||
721 | call per_cpu_patch | ||
722 | nop | ||
723 | call sun4v_patch | ||
724 | nop | ||
725 | |||
726 | #ifdef CONFIG_SMP | ||
727 | call hard_smp_processor_id | ||
728 | nop | ||
729 | cmp %o0, NR_CPUS | ||
730 | blu,pt %xcc, 1f | ||
731 | nop | ||
732 | call boot_cpu_id_too_large | ||
733 | nop | ||
734 | /* Not reached... */ | ||
735 | |||
736 | 1: | ||
737 | #else | ||
738 | mov 0, %o0 | ||
739 | #endif | ||
740 | sth %o0, [%g6 + TI_CPU] | ||
741 | |||
742 | call prom_init_report | ||
743 | nop | ||
744 | |||
745 | /* Off we go.... */ | ||
746 | call start_kernel | ||
747 | nop | 715 | nop |
748 | /* Not reached... */ | 716 | /* Not reached... */ |
749 | 717 | ||