idle.c (963B)
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * The idle loop for all SuperH platforms. 4 * 5 * Copyright (C) 2002 - 2009 Paul Mundt 6 */ 7#include <linux/module.h> 8#include <linux/init.h> 9#include <linux/mm.h> 10#include <linux/pm.h> 11#include <linux/tick.h> 12#include <linux/preempt.h> 13#include <linux/thread_info.h> 14#include <linux/irqflags.h> 15#include <linux/smp.h> 16#include <linux/atomic.h> 17#include <asm/smp.h> 18#include <asm/bl_bit.h> 19 20static void (*sh_idle)(void); 21 22void default_idle(void) 23{ 24 set_bl_bit(); 25 raw_local_irq_enable(); 26 /* Isn't this racy ? */ 27 cpu_sleep(); 28 clear_bl_bit(); 29} 30 31void arch_cpu_idle_dead(void) 32{ 33 play_dead(); 34} 35 36void arch_cpu_idle(void) 37{ 38 sh_idle(); 39} 40 41void __init select_idle_routine(void) 42{ 43 /* 44 * If a platform has set its own idle routine, leave it alone. 45 */ 46 if (!sh_idle) 47 sh_idle = default_idle; 48} 49 50void stop_this_cpu(void *unused) 51{ 52 local_irq_disable(); 53 set_cpu_online(smp_processor_id(), false); 54 55 for (;;) 56 cpu_sleep(); 57}