1 /* 2 * Copyright 2011 Calxeda, Inc. 3 * 4 * This program is free software; you can redistribute it and/or modify it 5 * under the terms and conditions of the GNU General Public License, 6 * version 2, as published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope it will be useful, but WITHOUT 9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * more details. 12 * 13 * You should have received a copy of the GNU General Public License along with 14 * this program. If not, see <http://www.gnu.org/licenses/>. 15 */ 16 #include <linux/kernel.h> 17 #include <linux/errno.h> 18 #include <linux/smp.h> 19 20 #include <asm/smp_scu.h> 21 #include <asm/cacheflush.h> 22 23 #include "core.h" 24 25 extern void secondary_startup(void); 26 platform_cpu_kill(unsigned int cpu)27int platform_cpu_kill(unsigned int cpu) 28 { 29 return 1; 30 } 31 32 /* 33 * platform-specific code to shutdown a CPU 34 * 35 */ platform_cpu_die(unsigned int cpu)36void platform_cpu_die(unsigned int cpu) 37 { 38 flush_cache_all(); 39 40 highbank_set_cpu_jump(cpu, secondary_startup); 41 scu_power_mode(scu_base_addr, SCU_PM_POWEROFF); 42 43 cpu_do_idle(); 44 45 /* We should never return from idle */ 46 panic("highbank: cpu %d unexpectedly exit from shutdown\n", cpu); 47 } 48 platform_cpu_disable(unsigned int cpu)49int platform_cpu_disable(unsigned int cpu) 50 { 51 /* 52 * CPU0 should not be shut down via hotplug. cpu_idle can WFI 53 * or a proper shutdown or hibernate should be used. 54 */ 55 return cpu == 0 ? -EPERM : 0; 56 } 57