Skip to content

Commit b458557

Browse files
shawnguo2saschahauer
authored andcommitted
arm/imx: remove imx_idle hook and use pm_idle instead
The patch removes imx_idle hook and use pm_idle instead to get imx arch_idle prepared for the cleanup. It's suggested by Russel King as below. > The final removal of mach/system.h depends on getting rid of the arch_idle > thing. While going through these headers, I was dismayed to find these: > > arch/arm/mach-s3c2410/include/mach/system.h:void (*s3c24xx_idle)(void); > arch/arm/plat-mxc/include/mach/system.h:extern void (*imx_idle)(void); > > when we have a perfectly good pm_idle hook already in place - so there's > no excuse for these especially when other platforms are already using > pm_idle to hook their platform specific idle function into. This is > something that better be gone at the next merge window! Suggested-by: Russell King <[email protected]> Signed-off-by: Shawn Guo <[email protected]> Acked-by: Russell King <[email protected]> Signed-off-by: Sascha Hauer <[email protected]>
1 parent 6d42c33 commit b458557

File tree

5 files changed

+33
-35
lines changed

5 files changed

+33
-35
lines changed

arch/arm/mach-imx/mm-imx3.c

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -33,29 +33,32 @@
3333
static void imx3_idle(void)
3434
{
3535
unsigned long reg = 0;
36-
__asm__ __volatile__(
37-
/* disable I and D cache */
38-
"mrc p15, 0, %0, c1, c0, 0\n"
39-
"bic %0, %0, #0x00001000\n"
40-
"bic %0, %0, #0x00000004\n"
41-
"mcr p15, 0, %0, c1, c0, 0\n"
42-
/* invalidate I cache */
43-
"mov %0, #0\n"
44-
"mcr p15, 0, %0, c7, c5, 0\n"
45-
/* clear and invalidate D cache */
46-
"mov %0, #0\n"
47-
"mcr p15, 0, %0, c7, c14, 0\n"
48-
/* WFI */
49-
"mov %0, #0\n"
50-
"mcr p15, 0, %0, c7, c0, 4\n"
51-
"nop\n" "nop\n" "nop\n" "nop\n"
52-
"nop\n" "nop\n" "nop\n"
53-
/* enable I and D cache */
54-
"mrc p15, 0, %0, c1, c0, 0\n"
55-
"orr %0, %0, #0x00001000\n"
56-
"orr %0, %0, #0x00000004\n"
57-
"mcr p15, 0, %0, c1, c0, 0\n"
58-
: "=r" (reg));
36+
37+
if (!need_resched())
38+
__asm__ __volatile__(
39+
/* disable I and D cache */
40+
"mrc p15, 0, %0, c1, c0, 0\n"
41+
"bic %0, %0, #0x00001000\n"
42+
"bic %0, %0, #0x00000004\n"
43+
"mcr p15, 0, %0, c1, c0, 0\n"
44+
/* invalidate I cache */
45+
"mov %0, #0\n"
46+
"mcr p15, 0, %0, c7, c5, 0\n"
47+
/* clear and invalidate D cache */
48+
"mov %0, #0\n"
49+
"mcr p15, 0, %0, c7, c14, 0\n"
50+
/* WFI */
51+
"mov %0, #0\n"
52+
"mcr p15, 0, %0, c7, c0, 4\n"
53+
"nop\n" "nop\n" "nop\n" "nop\n"
54+
"nop\n" "nop\n" "nop\n"
55+
/* enable I and D cache */
56+
"mrc p15, 0, %0, c1, c0, 0\n"
57+
"orr %0, %0, #0x00001000\n"
58+
"orr %0, %0, #0x00000004\n"
59+
"mcr p15, 0, %0, c1, c0, 0\n"
60+
: "=r" (reg));
61+
local_irq_enable();
5962
}
6063

6164
static void __iomem *imx3_ioremap(unsigned long phys_addr, size_t size,
@@ -143,7 +146,7 @@ void __init imx31_init_early(void)
143146
{
144147
mxc_set_cpu_type(MXC_CPU_MX31);
145148
mxc_arch_reset_init(MX31_IO_ADDRESS(MX31_WDOG_BASE_ADDR));
146-
imx_idle = imx3_idle;
149+
pm_idle = imx3_idle;
147150
imx_ioremap = imx3_ioremap;
148151
}
149152

@@ -152,7 +155,7 @@ void __init imx35_init_early(void)
152155
mxc_set_cpu_type(MXC_CPU_MX35);
153156
mxc_iomux_v3_init(MX35_IO_ADDRESS(MX35_IOMUXC_BASE_ADDR));
154157
mxc_arch_reset_init(MX35_IO_ADDRESS(MX35_WDOG_BASE_ADDR));
155-
imx_idle = imx3_idle;
158+
pm_idle = imx3_idle;
156159
imx_ioremap = imx3_ioremap;
157160
}
158161

arch/arm/mach-mx5/mm.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@
2323

2424
static void imx5_idle(void)
2525
{
26-
mx5_cpu_lp_set(WAIT_UNCLOCKED_POWER_OFF);
26+
if (!need_resched())
27+
mx5_cpu_lp_set(WAIT_UNCLOCKED_POWER_OFF);
28+
local_irq_enable();
2729
}
2830

2931
/*
@@ -89,7 +91,7 @@ void __init imx51_init_early(void)
8991
mxc_set_cpu_type(MXC_CPU_MX51);
9092
mxc_iomux_v3_init(MX51_IO_ADDRESS(MX51_IOMUXC_BASE_ADDR));
9193
mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG1_BASE_ADDR));
92-
imx_idle = imx5_idle;
94+
pm_idle = imx5_idle;
9395
}
9496

9597
void __init imx53_init_early(void)

arch/arm/plat-mxc/include/mach/common.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ enum mxc_cpu_pwr_mode {
8585
};
8686

8787
extern void mx5_cpu_lp_set(enum mxc_cpu_pwr_mode mode);
88-
extern void (*imx_idle)(void);
8988
extern void imx_print_silicon_rev(const char *cpu, int srev);
9089

9190
void avic_handle_irq(struct pt_regs *);

arch/arm/plat-mxc/include/mach/system.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,9 @@
1717
#ifndef __ASM_ARCH_MXC_SYSTEM_H__
1818
#define __ASM_ARCH_MXC_SYSTEM_H__
1919

20-
extern void (*imx_idle)(void);
21-
2220
static inline void arch_idle(void)
2321
{
24-
if (imx_idle != NULL)
25-
(imx_idle)();
26-
else
27-
cpu_do_idle();
22+
cpu_do_idle();
2823
}
2924

3025
void arch_reset(char mode, const char *cmd);

arch/arm/plat-mxc/system.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
#include <asm/system.h>
2929
#include <asm/mach-types.h>
3030

31-
void (*imx_idle)(void) = NULL;
3231
void __iomem *(*imx_ioremap)(unsigned long, size_t, unsigned int) = NULL;
3332

3433
static void __iomem *wdog_base;

0 commit comments

Comments
 (0)