]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - arch/arm/mach-tegra/platsmp.c
Merge tag 'v2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / arch / arm / mach-tegra / platsmp.c
index 1c0fd92cab39e44779a3823e89d5248997163a72..ec1f68924edf354127c1466b25587cb078197460 100644 (file)
@@ -22,7 +22,6 @@
 #include <asm/cacheflush.h>
 #include <mach/hardware.h>
 #include <asm/mach-types.h>
-#include <asm/localtimer.h>
 #include <asm/smp_scu.h>
 
 #include <mach/iomap.h>
@@ -41,14 +40,12 @@ static void __iomem *scu_base = IO_ADDRESS(TEGRA_ARM_PERIF_BASE);
 
 void __cpuinit platform_secondary_init(unsigned int cpu)
 {
-       trace_hardirqs_off();
-
        /*
         * if any interrupts are already enabled for the primary
         * core (e.g. timer irq), then they will not have been enabled
         * for us: do so
         */
-       gic_cpu_init(0, IO_ADDRESS(TEGRA_ARM_PERIF_BASE) + 0x100);
+       gic_secondary_init(0);
 
        /*
         * Synchronise with the boot thread.
@@ -117,24 +114,20 @@ void __init smp_init_cpus(void)
 {
        unsigned int i, ncores = scu_get_core_count(scu_base);
 
+       if (ncores > NR_CPUS) {
+               printk(KERN_ERR "Tegra: no. of cores (%u) greater than configured (%u), clipping\n",
+                       ncores, NR_CPUS);
+               ncores = NR_CPUS;
+       }
+
        for (i = 0; i < ncores; i++)
                cpu_set(i, cpu_possible_map);
 }
 
-void __init smp_prepare_cpus(unsigned int max_cpus)
+void __init platform_smp_prepare_cpus(unsigned int max_cpus)
 {
-       unsigned int ncores = scu_get_core_count(scu_base);
-       unsigned int cpu = smp_processor_id();
        int i;
 
-       smp_store_cpu_info(cpu);
-
-       /*
-        * are we trying to boot more cores than exist?
-        */
-       if (max_cpus > ncores)
-               max_cpus = ncores;
-
        /*
         * Initialise the present map, which describes the set of CPUs
         * actually populated at the present time.
@@ -142,15 +135,5 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
        for (i = 0; i < max_cpus; i++)
                set_cpu_present(i, true);
 
-       /*
-        * Initialise the SCU if there are more than one CPU and let
-        * them know where to start. Note that, on modern versions of
-        * MILO, the "poke" doesn't actually do anything until each
-        * individual core is sent a soft interrupt to get it out of
-        * WFI
-        */
-       if (max_cpus > 1) {
-               percpu_timer_setup();
-               scu_enable(scu_base);
-       }
+       scu_enable(scu_base);
 }