diff options
author | Doug Anderson <dianders@chromium.org> | 2014-05-29 21:40:54 +0530 |
---|---|---|
committer | Minkyu Kang <mk7.kang@samsung.com> | 2014-05-31 14:22:20 +0900 |
commit | 567802bbd6bf1c809d37fef9244fc8a692244e73 (patch) | |
tree | 0aa905d346d2f75f5f8cb6bd79ca52bd15e709f8 | |
parent | 0c04b1a83b54e5c3c458b5dfa096784be76e24d4 (diff) | |
download | u-boot-imx-567802bbd6bf1c809d37fef9244fc8a692244e73.zip u-boot-imx-567802bbd6bf1c809d37fef9244fc8a692244e73.tar.gz u-boot-imx-567802bbd6bf1c809d37fef9244fc8a692244e73.tar.bz2 |
Exynos: Make sure ps_hold gets set in the SPL
Setting ps_hold ought to be one of the first things we do when we
first boot up. If we wait until the main u-boot runs we won't set it
in time and the PMIC may power us back off.
Signed-off-by: Doug Anderson <dianders@chromium.org>
Signed-off-by: Akshay Saraswat <akshay.s@samsung.com>
Acked-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
-rw-r--r-- | arch/arm/cpu/armv7/exynos/lowlevel_init.c | 6 | ||||
-rw-r--r-- | arch/arm/cpu/armv7/exynos/power.c | 6 | ||||
-rw-r--r-- | arch/arm/include/asm/arch-exynos/power.h | 1 |
3 files changed, 12 insertions, 1 deletions
diff --git a/arch/arm/cpu/armv7/exynos/lowlevel_init.c b/arch/arm/cpu/armv7/exynos/lowlevel_init.c index 48b5511..dcc270f 100644 --- a/arch/arm/cpu/armv7/exynos/lowlevel_init.c +++ b/arch/arm/cpu/armv7/exynos/lowlevel_init.c @@ -39,6 +39,7 @@ enum { DO_CLOCKS = 1 << 1, DO_MEM_RESET = 1 << 2, DO_UART = 1 << 3, + DO_POWER = 1 << 4, }; int do_lowlevel_init(void) @@ -62,9 +63,12 @@ int do_lowlevel_init(void) break; default: /* This is a normal boot (not a wake from sleep) */ - actions = DO_CLOCKS | DO_MEM_RESET; + actions = DO_CLOCKS | DO_MEM_RESET | DO_POWER; } + if (actions & DO_POWER) + set_ps_hold_ctrl(); + if (actions & DO_CLOCKS) { system_clock_init(); mem_ctrl_init(actions & DO_MEM_RESET); diff --git a/arch/arm/cpu/armv7/exynos/power.c b/arch/arm/cpu/armv7/exynos/power.c index 563abd7..638ee0b 100644 --- a/arch/arm/cpu/armv7/exynos/power.c +++ b/arch/arm/cpu/armv7/exynos/power.c @@ -112,6 +112,12 @@ static void exynos5_set_ps_hold_ctrl(void) EXYNOS_PS_HOLD_CONTROL_DATA_HIGH); } +/* + * Set ps_hold data driving value high + * This enables the machine to stay powered on + * after the initial power-on condition goes away + * (e.g. power button). + */ void set_ps_hold_ctrl(void) { if (cpu_is_exynos5()) diff --git a/arch/arm/include/asm/arch-exynos/power.h b/arch/arm/include/asm/arch-exynos/power.h index c9609a2..a4b41ad 100644 --- a/arch/arm/include/asm/arch-exynos/power.h +++ b/arch/arm/include/asm/arch-exynos/power.h @@ -1726,4 +1726,5 @@ uint32_t get_reset_status(void); /* Read the resume function and call it */ void power_exit_wakeup(void); + #endif |