]> err.no Git - linux-2.6/blobdiff - arch/powerpc/kernel/setup_64.c
[POWERPC] Make sure smp_processor_id works very early in boot
[linux-2.6] / arch / powerpc / kernel / setup_64.c
index 78f3a5fd43f635b37a1186d056d11c78fb0897c2..175539c9afa066c9b3d2b3596423b0cda5e63a0c 100644 (file)
@@ -149,6 +149,13 @@ early_param("smt-enabled", early_smt_enabled);
 #define check_smt_enabled()
 #endif /* CONFIG_SMP */
 
+/* Put the paca pointer into r13 and SPRG3 */
+void __init setup_paca(int cpu)
+{
+       local_paca = &paca[cpu];
+       mtspr(SPRN_SPRG3, local_paca);
+}
+
 /*
  * Early initialization entry point. This is called by head.S
  * with MMU translation disabled. We rely on the "feature" of
@@ -170,6 +177,9 @@ early_param("smt-enabled", early_smt_enabled);
 
 void __init early_setup(unsigned long dt_ptr)
 {
+       /* Assume we're on cpu 0 for now. Don't write to the paca yet! */
+       setup_paca(0);
+
        /* Enable early debugging if any specified (see udbg.h) */
        udbg_early_init();
 
@@ -183,7 +193,7 @@ void __init early_setup(unsigned long dt_ptr)
        early_init_devtree(__va(dt_ptr));
 
        /* Now we know the logical id of our boot cpu, setup the paca. */
-       setup_boot_paca();
+       setup_paca(boot_cpuid);
 
        /* Fix up paca fields required for the boot cpu */
        get_paca()->cpu_start = 1;
@@ -350,19 +360,11 @@ void __init setup_system(void)
         */
        unflatten_device_tree();
 
-#ifdef CONFIG_KEXEC
-       kexec_setup();  /* requires unflattened device tree. */
-#endif
-
        /*
         * Fill the ppc64_caches & systemcfg structures with informations
         * retrieved from the device-tree. Need to be called before
         * finish_device_tree() since the later requires some of the
-        * informations filled up here to properly parse the interrupt
-        * tree.
-        * It also sets up the cache line sizes which allows to call
-        * routines like flush_icache_range (used by the hash init
-        * later on).
+        * informations filled up here to properly parse the interrupt tree.
         */
        initialize_cache_info();