ARM: s3c24xx: move special idle code to out of line
... and hook it to arm_pm_idle. Signed-off-by: Nicolas Pitre <nicolas.pitre@linaro.org>
This commit is contained in:
parent
50edbf78f5
commit
92311272c1
@ -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();
|
||||
}
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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));
|
||||
|
Loading…
x
Reference in New Issue
Block a user