mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
ARM: lpc32xx: only run SoC init on LPC32xx hardware
lpc32xx_check_uid() and lpc32xx_pm_init() are arch_initcalls that poke
LPC32xx-only registers. Since the multiplatform conversion they also
run on other ARCH_MULTI_V5 boards where access faults e.g. on versatile:
Unable to handle kernel paging request at virtual address f4004130
PC is at lpc32xx_check_uid+0x2c/0x9c
Drop the arch_initcall() registrations and call both functions directly
from lpc3250_machine_init(), the machine's .init_machine hook.
The calls are placed in link order (common.c, pm.c, phy3250.c) to
keep their previous relative ordering.
Fixes: 75bf1bd7d2 ("ARM: lpc32xx: allow multiplatform build")
Suggested-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Karl Mehltretter <kmehltretter@gmail.com>
Reviewed-by: Vladimir Zapolskiy <vz@kernel.org>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Vladimir Zapolskiy <vz@mleia.com>
This commit is contained in:
parent
dc59e4fea9
commit
717ea40008
|
|
@ -106,7 +106,7 @@ void __init lpc32xx_map_io(void)
|
|||
iotable_init(lpc32xx_io_desc, ARRAY_SIZE(lpc32xx_io_desc));
|
||||
}
|
||||
|
||||
static int __init lpc32xx_check_uid(void)
|
||||
void __init lpc32xx_check_uid(void)
|
||||
{
|
||||
u32 uid[4];
|
||||
|
||||
|
|
@ -119,7 +119,4 @@ static int __init lpc32xx_check_uid(void)
|
|||
system_serial_low = uid[0];
|
||||
system_serial_high = uid[1];
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
arch_initcall(lpc32xx_check_uid);
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@
|
|||
* Other arch specific structures and functions
|
||||
*/
|
||||
extern void __init lpc32xx_map_io(void);
|
||||
extern void __init lpc32xx_check_uid(void);
|
||||
extern void __init lpc32xx_pm_init(void);
|
||||
extern void __init lpc32xx_serial_init(void);
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -71,6 +71,8 @@ static const struct of_dev_auxdata lpc32xx_auxdata_lookup[] __initconst = {
|
|||
|
||||
static void __init lpc3250_machine_init(void)
|
||||
{
|
||||
lpc32xx_check_uid();
|
||||
lpc32xx_pm_init();
|
||||
lpc32xx_serial_init();
|
||||
|
||||
of_platform_default_populate(NULL, lpc32xx_auxdata_lookup, NULL);
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ static const struct platform_suspend_ops lpc32xx_pm_ops = {
|
|||
#define EMC_DYN_MEM_CTRL_OFS 0x20
|
||||
#define EMC_SRMMC (1 << 3)
|
||||
#define EMC_CTRL_REG io_p2v(LPC32XX_EMC_BASE + EMC_DYN_MEM_CTRL_OFS)
|
||||
static int __init lpc32xx_pm_init(void)
|
||||
void __init lpc32xx_pm_init(void)
|
||||
{
|
||||
/*
|
||||
* Setup SDRAM self-refresh clock to automatically disable o
|
||||
|
|
@ -129,7 +129,4 @@ static int __init lpc32xx_pm_init(void)
|
|||
__raw_writel(__raw_readl(EMC_CTRL_REG) | EMC_SRMMC, EMC_CTRL_REG);
|
||||
|
||||
suspend_set_ops(&lpc32xx_pm_ops);
|
||||
|
||||
return 0;
|
||||
}
|
||||
arch_initcall(lpc32xx_pm_init);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user