Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 01426478 authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

avr32: Use generic idle loop



Also replace the idle poll enforcement by the generic functionality.

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Paul McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Reviewed-by: default avatarCc: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Cc: Magnus Damm <magnus.damm@gmail.com>
Cc: Hans-Christian Egtvedt <egtvedt@samfundet.no>
Link: http://lkml.kernel.org/r/20130321215233.950290809@linutronix.de


Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 0087298f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ config AVR32
	select VIRT_TO_BUS
	select GENERIC_IRQ_PROBE
	select GENERIC_ATOMIC64
	select GENERIC_IDLE_LOOP
	select HARDIRQS_SW_RESEND
	select GENERIC_IRQ_SHOW
	select ARCH_HAVE_CUSTOM_GPIO_H
+2 −11
Original line number Diff line number Diff line
@@ -30,18 +30,9 @@ EXPORT_SYMBOL(pm_power_off);
 * This file handles the architecture-dependent parts of process handling..
 */

void cpu_idle(void)
void arch_cpu_idle(void)
{
	/* endless idle loop with no priority at all */
	while (1) {
		tick_nohz_idle_enter();
		rcu_idle_enter();
		while (!need_resched())
			cpu_idle_sleep();
		rcu_idle_exit();
		tick_nohz_idle_exit();
		schedule_preempt_disabled();
	}
	cpu_enter_idle();
}

void machine_halt(void)
+7 −2
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
#include <linux/irq.h>
#include <linux/kernel.h>
#include <linux/time.h>
#include <linux/cpu.h>

#include <asm/sysreg.h>

@@ -87,13 +88,17 @@ static void comparator_mode(enum clock_event_mode mode,
		pr_debug("%s: start\n", evdev->name);
		/* FALLTHROUGH */
	case CLOCK_EVT_MODE_RESUME:
		cpu_disable_idle_sleep();
		/*
		 * If we're using the COUNT and COMPARE registers we
		 * need to force idle poll.
		 */
		cpu_idle_poll_ctrl(true);
		break;
	case CLOCK_EVT_MODE_UNUSED:
	case CLOCK_EVT_MODE_SHUTDOWN:
		sysreg_write(COMPARE, 0);
		pr_debug("%s: stop\n", evdev->name);
		cpu_enable_idle_sleep();
		cpu_idle_poll_ctrl(false);
		break;
	default:
		BUG();
+0 −24
Original line number Diff line number Diff line
@@ -21,30 +21,6 @@
extern void cpu_enter_idle(void);
extern void cpu_enter_standby(unsigned long sdramc_base);

extern bool disable_idle_sleep;

static inline void cpu_disable_idle_sleep(void)
{
	disable_idle_sleep = true;
}

static inline void cpu_enable_idle_sleep(void)
{
	disable_idle_sleep = false;
}

static inline void cpu_idle_sleep(void)
{
	/*
	 * If we're using the COUNT and COMPARE registers for
	 * timekeeping, we can't use the IDLE state.
	 */
	if (disable_idle_sleep)
		cpu_relax();
	else
		cpu_enter_idle();
}

void intc_set_suspend_handler(unsigned long offset);
#endif

+0 −7
Original line number Diff line number Diff line
@@ -18,13 +18,6 @@
/* Same as 0xfff00000 but fits in a 21 bit signed immediate */
#define PM_BASE	-0x100000

	.section .bss, "wa", @nobits
	.global	disable_idle_sleep
	.type	disable_idle_sleep, @object
disable_idle_sleep:
	.int	4
	.size	disable_idle_sleep, . - disable_idle_sleep

	/* Keep this close to the irq handlers */
	.section .irq.text, "ax", @progbits