clocksource: qcom: Move clocksource code out of mach-msm
[deliverable/linux.git] / arch / arm / mach-msm / platsmp.c
index f10a1f58fde96a0cb70b6cfc43ae4b5203f67466..251a91eb102ac9ec4248d13d9a2e05af86881ce8 100644 (file)
 #include <linux/errno.h>
 #include <linux/delay.h>
 #include <linux/device.h>
-#include <linux/jiffies.h>
 #include <linux/smp.h>
 #include <linux/io.h>
 
-#include <asm/cacheflush.h>
 #include <asm/cputype.h>
-#include <asm/mach-types.h>
 #include <asm/smp_plat.h>
 
 #include "scm-boot.h"
 #define SCSS_CPU1CORE_RESET 0xD80
 #define SCSS_DBG_STATUS_CORE_PWRDUP 0xE64
 
-extern void msm_secondary_startup(void);
+extern void secondary_startup(void);
 
 static DEFINE_SPINLOCK(boot_lock);
 
+#ifdef CONFIG_HOTPLUG_CPU
+static void __ref msm_cpu_die(unsigned int cpu)
+{
+       wfi();
+}
+#endif
+
 static inline int get_core_count(void)
 {
        /* 1 + the PART[1:0] field of MIDR */
@@ -40,13 +44,6 @@ static inline int get_core_count(void)
 
 static void msm_secondary_init(unsigned int cpu)
 {
-       /*
-        * let the primary processor know we're out of the
-        * pen, then head off into the C entry point
-        */
-       pen_release = -1;
-       smp_wmb();
-
        /*
         * Synchronise with the boot thread.
         */
@@ -57,7 +54,7 @@ static void msm_secondary_init(unsigned int cpu)
 static void prepare_cold_cpu(unsigned int cpu)
 {
        int ret;
-       ret = scm_set_boot_addr(virt_to_phys(msm_secondary_startup),
+       ret = scm_set_boot_addr(virt_to_phys(secondary_startup),
                                SCM_FLAG_COLDBOOT_CPU1);
        if (ret == 0) {
                void __iomem *sc1_base_ptr;
@@ -75,7 +72,6 @@ static void prepare_cold_cpu(unsigned int cpu)
 
 static int msm_boot_secondary(unsigned int cpu, struct task_struct *idle)
 {
-       unsigned long timeout;
        static int cold_boot_done;
 
        /* Only need to bring cpu out of reset this way once */
@@ -90,17 +86,6 @@ static int msm_boot_secondary(unsigned int cpu, struct task_struct *idle)
         */
        spin_lock(&boot_lock);
 
-       /*
-        * The secondary processor is waiting to be released from
-        * the holding pen - release it, then wait for it to flag
-        * that it has been released by resetting pen_release.
-        *
-        * Note that "pen_release" is the hardware CPU ID, whereas
-        * "cpu" is Linux's internal ID.
-        */
-       pen_release = cpu_logical_map(cpu);
-       sync_cache_w(&pen_release);
-
        /*
         * Send the secondary CPU a soft interrupt, thereby causing
         * the boot monitor to read the system wide flags register,
@@ -108,22 +93,13 @@ static int msm_boot_secondary(unsigned int cpu, struct task_struct *idle)
         */
        arch_send_wakeup_ipi_mask(cpumask_of(cpu));
 
-       timeout = jiffies + (1 * HZ);
-       while (time_before(jiffies, timeout)) {
-               smp_rmb();
-               if (pen_release == -1)
-                       break;
-
-               udelay(10);
-       }
-
        /*
         * now the secondary core is starting up let it run its
         * calibrations, then wait for it to finish
         */
        spin_unlock(&boot_lock);
 
-       return pen_release != -1 ? -ENOSYS : 0;
+       return 0;
 }
 
 /*
This page took 0.030442 seconds and 5 git commands to generate.