diff options
author | Ulf Hansson <ulf.hansson@linaro.org> | 2017-10-06 00:20:25 -0400 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2017-10-19 11:46:36 -0400 |
commit | 72ecd793865f91c3cdeb06884f230f38f434c67c (patch) | |
tree | d744ddc59d5df574501bb40ae6101398c13347d9 | |
parent | 8633e4f2e94a4d12cfb413fedfe4c072a6b99a79 (diff) |
ARM: ux500: Fix regression while init PM domains
The commit afece3ab9a36 ("PM / Domains: Add time accounting to various
genpd states") causes a boot regression for ux500.
The problem occurs when the ux500 machine code calls pm_genpd_init(), which
since the above change triggers a call to ktime_get(). More precisely,
because ux500 initializes PM domains in the init_IRQ() phase of the boot,
timekeeping has not yet been initialized.
Fix the problem by moving the initialization of the PM domains to after
timekeeping has been initialized.
Fixes: afece3ab9a36 ("PM / Domains: Add time accounting to various genpd..")
Cc: Thara Gopinath <thara.gopinath@linaro.org>
Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
-rw-r--r-- | arch/arm/mach-ux500/cpu-db8500.c | 4 | ||||
-rw-r--r-- | arch/arm/mach-ux500/pm.c | 4 |
2 files changed, 4 insertions, 4 deletions
diff --git a/arch/arm/mach-ux500/cpu-db8500.c b/arch/arm/mach-ux500/cpu-db8500.c index 71a34e8c345a..57058ac46f49 100644 --- a/arch/arm/mach-ux500/cpu-db8500.c +++ b/arch/arm/mach-ux500/cpu-db8500.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <asm/mach/arch.h> | 32 | #include <asm/mach/arch.h> |
33 | 33 | ||
34 | #include "db8500-regs.h" | 34 | #include "db8500-regs.h" |
35 | #include "pm_domains.h" | ||
35 | 36 | ||
36 | static int __init ux500_l2x0_unlock(void) | 37 | static int __init ux500_l2x0_unlock(void) |
37 | { | 38 | { |
@@ -157,6 +158,9 @@ static const struct of_device_id u8500_local_bus_nodes[] = { | |||
157 | 158 | ||
158 | static void __init u8500_init_machine(void) | 159 | static void __init u8500_init_machine(void) |
159 | { | 160 | { |
161 | /* Initialize ux500 power domains */ | ||
162 | ux500_pm_domains_init(); | ||
163 | |||
160 | /* automatically probe child nodes of dbx5x0 devices */ | 164 | /* automatically probe child nodes of dbx5x0 devices */ |
161 | if (of_machine_is_compatible("st-ericsson,u8540")) | 165 | if (of_machine_is_compatible("st-ericsson,u8540")) |
162 | of_platform_populate(NULL, u8500_local_bus_nodes, | 166 | of_platform_populate(NULL, u8500_local_bus_nodes, |
diff --git a/arch/arm/mach-ux500/pm.c b/arch/arm/mach-ux500/pm.c index a970e7fcba9e..f6c33a0c1c61 100644 --- a/arch/arm/mach-ux500/pm.c +++ b/arch/arm/mach-ux500/pm.c | |||
@@ -19,7 +19,6 @@ | |||
19 | #include <linux/of_address.h> | 19 | #include <linux/of_address.h> |
20 | 20 | ||
21 | #include "db8500-regs.h" | 21 | #include "db8500-regs.h" |
22 | #include "pm_domains.h" | ||
23 | 22 | ||
24 | /* ARM WFI Standby signal register */ | 23 | /* ARM WFI Standby signal register */ |
25 | #define PRCM_ARM_WFI_STANDBY (prcmu_base + 0x130) | 24 | #define PRCM_ARM_WFI_STANDBY (prcmu_base + 0x130) |
@@ -203,7 +202,4 @@ void __init ux500_pm_init(u32 phy_base, u32 size) | |||
203 | 202 | ||
204 | /* Set up ux500 suspend callbacks. */ | 203 | /* Set up ux500 suspend callbacks. */ |
205 | suspend_set_ops(UX500_SUSPEND_OPS); | 204 | suspend_set_ops(UX500_SUSPEND_OPS); |
206 | |||
207 | /* Initialize ux500 power domains */ | ||
208 | ux500_pm_domains_init(); | ||
209 | } | 205 | } |