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

Commit 92311272 authored by Nicolas Pitre's avatar Nicolas Pitre Committed by Nicolas Pitre
Browse files

ARM: s3c24xx: move special idle code to out of line



... and hook it to arm_pm_idle.

Signed-off-by: default avatarNicolas Pitre <nicolas.pitre@linaro.org>
parent 50edbf78
Loading
Loading
Loading
Loading
+1 −39
Original line number Diff line number Diff line
@@ -10,45 +10,7 @@
 * published by the Free Software Foundation.
*/

#include <linux/io.h>
#include <mach/hardware.h>

#include <mach/map.h>
#include <mach/idle.h>

#include <mach/regs-clock.h>

void (*s3c24xx_idle)(void);

void s3c24xx_default_idle(void)
{
	unsigned long tmp;
	int i;

	/* idle the system by using the idle mode which will wait for an
	 * interrupt to happen before restarting the system.
	 */

	/* Warning: going into idle state upsets jtag scanning */

	__raw_writel(__raw_readl(S3C2410_CLKCON) | S3C2410_CLKCON_IDLE,
		     S3C2410_CLKCON);

	/* the samsung port seems to do a loop and then unset idle.. */
	for (i = 0; i < 50; i++) {
		tmp += __raw_readl(S3C2410_CLKCON); /* ensure loop not optimised out */
	}

	/* this bit is not cleared on re-start... */

	__raw_writel(__raw_readl(S3C2410_CLKCON) & ~S3C2410_CLKCON_IDLE,
		     S3C2410_CLKCON);
}

static void arch_idle(void)
{
	if (s3c24xx_idle != NULL)
		(s3c24xx_idle)();
	else
		s3c24xx_default_idle();
	cpu_do_idle();
}
+1 −3
Original line number Diff line number Diff line
@@ -32,8 +32,6 @@
#include <asm/proc-fns.h>
#include <asm/irq.h>

#include <mach/idle.h>

#include <plat/cpu-freq.h>

#include <mach/regs-clock.h>
@@ -164,7 +162,7 @@ void __init s3c2412_map_io(void)

	/* set our idle function */

	s3c24xx_idle = s3c2412_idle;
	arm_pm_idle = s3c2412_idle;

	/* register our io-tables */

+0 −3
Original line number Diff line number Diff line
@@ -44,7 +44,6 @@
#include <asm/proc-fns.h>
#include <asm/irq.h>

#include <mach/idle.h>
#include <mach/regs-s3c2443-clock.h>

#include <plat/gpio-core.h>
@@ -88,8 +87,6 @@ int __init s3c2416_init(void)
{
	printk(KERN_INFO "S3C2416: Initializing architecture\n");

	/* s3c24xx_idle = s3c2416_idle;	*/

	/* change WDT IRQ number */
	s3c_device_wdt.resource[1].start = IRQ_S3C2443_WDT;
	s3c_device_wdt.resource[1].end   = IRQ_S3C2443_WDT;
+27 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@
#include <linux/io.h>

#include <mach/hardware.h>
#include <mach/regs-clock.h>
#include <asm/irq.h>
#include <asm/cacheflush.h>

@@ -190,8 +191,34 @@ static unsigned long s3c24xx_read_idcode_v4(void)
	return __raw_readl(S3C2410_GSTATUS1);
}

static void s3c24xx_default_idle(void)
{
	unsigned long tmp;
	int i;

	/* idle the system by using the idle mode which will wait for an
	 * interrupt to happen before restarting the system.
	 */

	/* Warning: going into idle state upsets jtag scanning */

	__raw_writel(__raw_readl(S3C2410_CLKCON) | S3C2410_CLKCON_IDLE,
		     S3C2410_CLKCON);

	/* the samsung port seems to do a loop and then unset idle.. */
	for (i = 0; i < 50; i++)
		tmp += __raw_readl(S3C2410_CLKCON); /* ensure loop not optimised out */

	/* this bit is not cleared on re-start... */

	__raw_writel(__raw_readl(S3C2410_CLKCON) & ~S3C2410_CLKCON_IDLE,
		     S3C2410_CLKCON);
}

void __init s3c24xx_init_io(struct map_desc *mach_desc, int size)
{
	arm_pm_idle = s3c24xx_default_idle;

	/* initialise the io descriptors we need for initialisation */
	iotable_init(mach_desc, size);
	iotable_init(s3c_iodesc, ARRAY_SIZE(s3c_iodesc));