1/* 2 * CPU hotplug support for CSR Marco dual-core SMP SoCs 3 * 4 * Copyright (c) 2012 Cambridge Silicon Radio Limited, a CSR plc group company. 5 * 6 * Licensed under GPLv2 or later. 7 */ 8 9#include <linux/kernel.h> 10#include <linux/errno.h> 11#include <linux/smp.h> 12 13#include <asm/cacheflush.h> 14#include <asm/smp_plat.h> 15 16static inline void platform_do_lowpower(unsigned int cpu) 17{ 18 flush_cache_all(); 19 20 /* we put the platform to just WFI */ 21 for (;;) { 22 __asm__ __volatile__("dsb\n\t" "wfi\n\t" 23 : : : "memory"); 24 if (pen_release == cpu_logical_map(cpu)) { 25 /* 26 * OK, proper wakeup, we're done 27 */ 28 break; 29 } 30 } 31} 32 33/* 34 * platform-specific code to shutdown a CPU 35 * 36 * Called with IRQs disabled 37 */ 38void __ref sirfsoc_cpu_die(unsigned int cpu) 39{ 40 platform_do_lowpower(cpu); 41} 42