#define EMEV2_SMU_BASE 0xe0110000
  #define SMU_GENERAL_REG0 0x7c0
  
 -static int __cpuinit emev2_boot_secondary(unsigned int cpu, struct task_struct *idle)
 +static int emev2_boot_secondary(unsigned int cpu, struct task_struct *idle)
  {
+       int ret;
+ 
+       ret = shmobile_smp_scu_boot_secondary(cpu, idle);
+       if (ret)
+               return ret;
+ 
        arch_send_wakeup_ipi_mask(cpumask_of(cpu_logical_map(cpu)));
        return 0;
  }
 
        return ret ? ret : 1;
  }
  
 -static int __cpuinit r8a7779_boot_secondary(unsigned int cpu, struct task_struct *idle)
 +static int r8a7779_boot_secondary(unsigned int cpu, struct task_struct *idle)
  {
        struct r8a7779_pm_ch *ch = NULL;
-       int ret = -EIO;
+       unsigned int lcpu = cpu_logical_map(cpu);
+       int ret;
  
-       cpu = cpu_logical_map(cpu);
+       ret = shmobile_smp_scu_boot_secondary(cpu, idle);
+       if (ret)
+               return ret;
  
-       if (cpu < ARRAY_SIZE(r8a7779_ch_cpu))
-               ch = r8a7779_ch_cpu[cpu];
+       if (lcpu < ARRAY_SIZE(r8a7779_ch_cpu))
+               ch = r8a7779_ch_cpu[lcpu];
  
        if (ch)
                ret = r8a7779_sysc_power_up(ch);
 
  }
  #endif
  
 -static int __cpuinit sh73a0_boot_secondary(unsigned int cpu, struct task_struct *idle)
 +static int sh73a0_boot_secondary(unsigned int cpu, struct task_struct *idle)
  {
-       cpu = cpu_logical_map(cpu);
+       unsigned int lcpu = cpu_logical_map(cpu);
+       int ret;
  
-       if (((__raw_readl(PSTR) >> (4 * cpu)) & 3) == 3)
-               __raw_writel(1 << cpu, WUPCR);  /* wake up */
+       ret = shmobile_smp_scu_boot_secondary(cpu, idle);
+       if (ret)
+               return ret;
+ 
+       if (((__raw_readl(PSTR) >> (4 * lcpu)) & 3) == 3)
+               __raw_writel(1 << lcpu, WUPCR); /* wake up */
        else
-               __raw_writel(1 << cpu, SRESCR); /* reset */
+               __raw_writel(1 << lcpu, SRESCR);        /* reset */
  
        return 0;
  }