2010-08-02 14:18:19 +04:00
/*
* OMAP4 SMP cpu - hotplug support
*
* Copyright ( C ) 2010 Texas Instruments , Inc .
* Author :
* Santosh Shilimkar < santosh . shilimkar @ ti . com >
*
* Platform file needed for the OMAP4 SMP . This file is based on arm
* realview smp platform .
* Copyright ( c ) 2002 ARM Limited .
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# include <linux/kernel.h>
# include <linux/errno.h>
# include <linux/smp.h>
# include <asm/cacheflush.h>
2011-11-11 01:45:17 +04:00
# include "common.h"
2010-08-02 14:18:19 +04:00
2010-06-16 20:49:48 +04:00
# include "powerdomain.h"
2010-08-02 14:18:19 +04:00
int platform_cpu_kill ( unsigned int cpu )
{
2010-11-30 14:07:35 +03:00
return 1 ;
2010-08-02 14:18:19 +04:00
}
/*
* platform - specific code to shutdown a CPU
* Called with IRQs disabled
*/
2012-02-22 14:40:04 +04:00
void __ref platform_cpu_die ( unsigned int cpu )
2010-08-02 14:18:19 +04:00
{
2010-06-16 20:49:48 +04:00
unsigned int this_cpu ;
2010-08-02 14:18:19 +04:00
flush_cache_all ( ) ;
dsb ( ) ;
/*
* we ' re ready for shutdown now , so do it
*/
if ( omap_modify_auxcoreboot0 ( 0x0 , 0x200 ) ! = 0x0 )
2010-06-16 20:49:48 +04:00
pr_err ( " Secure clear status failed \n " ) ;
2010-08-02 14:18:19 +04:00
for ( ; ; ) {
/*
2010-06-16 20:49:48 +04:00
* Enter into low power state
2010-08-02 14:18:19 +04:00
*/
2010-06-16 20:49:48 +04:00
omap4_hotplug_cpu ( cpu , PWRDM_POWER_OFF ) ;
this_cpu = smp_processor_id ( ) ;
if ( omap_read_auxcoreboot0 ( ) = = this_cpu ) {
2010-08-02 14:18:19 +04:00
/*
* OK , proper wakeup , we ' re done
*/
break ;
}
pr_debug ( " CPU%u: spurious wakeup call \n " , cpu ) ;
}
}
int platform_cpu_disable ( unsigned int cpu )
{
/*
* we don ' t allow CPU 0 to be shutdown ( it is still too special
* e . g . clock tick interrupts )
*/
return cpu = = 0 ? - EPERM : 0 ;
}