Message ID | 20170507113540.8687-4-krzk@kernel.org |
---|---|
State | New |
Headers | show |
On 05/07/2017 06:35 AM, Krzysztof Kozlowski wrote: > On all Exynos-based boards, the system powers down itself by driving > PS_HOLD signal low. Handle writing to respective PMU register to fix > power off failure: > > reboot: Power down > Unable to poweroff system > shutdown: 31 output lines suppressed due to ratelimiting > Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000000 > > CPU: 0 PID: 1 Comm: shutdown Not tainted 4.11.0-rc8 #846 > Hardware name: SAMSUNG EXYNOS (Flattened Device Tree) > [<c031050c>] (unwind_backtrace) from [<c030ba6c>] (show_stack+0x10/0x14) > [<c030ba6c>] (show_stack) from [<c05b2800>] (dump_stack+0x88/0x9c) > [<c05b2800>] (dump_stack) from [<c03d3140>] (panic+0xdc/0x268) > [<c03d3140>] (panic) from [<c0343614>] (do_exit+0xa90/0xab4) > [<c0343614>] (do_exit) from [<c035f2dc>] (SyS_reboot+0x164/0x1d0) > [<c035f2dc>] (SyS_reboot) from [<c0307c80>] (ret_fast_syscall+0x0/0x3c) > > Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org> > --- > hw/misc/exynos4210_pmu.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > @@ -397,6 +398,12 @@ typedef struct Exynos4210PmuState { > uint32_t reg[PMU_NUM_OF_REGISTERS]; > } Exynos4210PmuState; > > +static void exynos4210_pmu_poweroff(void) > +{ > + PRINT_DEBUG("QEMU PMU: PS_HOLD bit down, powering off\n"); > + qemu_system_shutdown_request(); Depending on whether your patch lands before or after mine, we'll have to update this. It sounds like it is a guest-triggered reset, so my patch would have this use SHUTDOWN_CAUSE_GUEST_SHUTDOWN. https://lists.gnu.org/archive/html/qemu-devel/2017-05/msg01380.html
On Mon, May 08, 2017 at 09:21:40AM -0500, Eric Blake wrote: > On 05/07/2017 06:35 AM, Krzysztof Kozlowski wrote: > > On all Exynos-based boards, the system powers down itself by driving > > PS_HOLD signal low. Handle writing to respective PMU register to fix > > power off failure: > > > > reboot: Power down > > Unable to poweroff system > > shutdown: 31 output lines suppressed due to ratelimiting > > Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000000 > > > > CPU: 0 PID: 1 Comm: shutdown Not tainted 4.11.0-rc8 #846 > > Hardware name: SAMSUNG EXYNOS (Flattened Device Tree) > > [<c031050c>] (unwind_backtrace) from [<c030ba6c>] (show_stack+0x10/0x14) > > [<c030ba6c>] (show_stack) from [<c05b2800>] (dump_stack+0x88/0x9c) > > [<c05b2800>] (dump_stack) from [<c03d3140>] (panic+0xdc/0x268) > > [<c03d3140>] (panic) from [<c0343614>] (do_exit+0xa90/0xab4) > > [<c0343614>] (do_exit) from [<c035f2dc>] (SyS_reboot+0x164/0x1d0) > > [<c035f2dc>] (SyS_reboot) from [<c0307c80>] (ret_fast_syscall+0x0/0x3c) > > > > Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org> > > --- > > hw/misc/exynos4210_pmu.c | 14 ++++++++++++++ > > 1 file changed, 14 insertions(+) > > > @@ -397,6 +398,12 @@ typedef struct Exynos4210PmuState { > > uint32_t reg[PMU_NUM_OF_REGISTERS]; > > } Exynos4210PmuState; > > > > +static void exynos4210_pmu_poweroff(void) > > +{ > > + PRINT_DEBUG("QEMU PMU: PS_HOLD bit down, powering off\n"); > > + qemu_system_shutdown_request(); > > Depending on whether your patch lands before or after mine, we'll have > to update this. It sounds like it is a guest-triggered reset, so my > patch would have this use SHUTDOWN_CAUSE_GUEST_SHUTDOWN. > > https://lists.gnu.org/archive/html/qemu-devel/2017-05/msg01380.html Sure, I can rebase and fix the difference once your patchset gets in. Best regards, Krzysztof
On 7 May 2017 at 12:35, Krzysztof Kozlowski <krzk@kernel.org> wrote: > On all Exynos-based boards, the system powers down itself by driving > PS_HOLD signal low. Handle writing to respective PMU register to fix > power off failure: > > reboot: Power down > Unable to poweroff system > shutdown: 31 output lines suppressed due to ratelimiting > Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000000 > > CPU: 0 PID: 1 Comm: shutdown Not tainted 4.11.0-rc8 #846 > Hardware name: SAMSUNG EXYNOS (Flattened Device Tree) > [<c031050c>] (unwind_backtrace) from [<c030ba6c>] (show_stack+0x10/0x14) > [<c030ba6c>] (show_stack) from [<c05b2800>] (dump_stack+0x88/0x9c) > [<c05b2800>] (dump_stack) from [<c03d3140>] (panic+0xdc/0x268) > [<c03d3140>] (panic) from [<c0343614>] (do_exit+0xa90/0xab4) > [<c0343614>] (do_exit) from [<c035f2dc>] (SyS_reboot+0x164/0x1d0) > [<c035f2dc>] (SyS_reboot) from [<c0307c80>] (ret_fast_syscall+0x0/0x3c) > > Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> give or take the minor change mentioned by Eric if needed. thanks -- PMM
diff --git a/hw/misc/exynos4210_pmu.c b/hw/misc/exynos4210_pmu.c index 63a8ccd35559..2046e6313f10 100644 --- a/hw/misc/exynos4210_pmu.c +++ b/hw/misc/exynos4210_pmu.c @@ -26,6 +26,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" +#include "sysemu/sysemu.h" #ifndef DEBUG_PMU #define DEBUG_PMU 0 @@ -397,6 +398,12 @@ typedef struct Exynos4210PmuState { uint32_t reg[PMU_NUM_OF_REGISTERS]; } Exynos4210PmuState; +static void exynos4210_pmu_poweroff(void) +{ + PRINT_DEBUG("QEMU PMU: PS_HOLD bit down, powering off\n"); + qemu_system_shutdown_request(); +} + static uint64_t exynos4210_pmu_read(void *opaque, hwaddr offset, unsigned size) { @@ -428,6 +435,13 @@ static void exynos4210_pmu_write(void *opaque, hwaddr offset, PRINT_DEBUG_EXTEND("%s <0x%04x> <- 0x%04x\n", reg_p->name, (uint32_t)offset, (uint32_t)val); s->reg[i] = val; + if ((offset == PS_HOLD_CONTROL) && ((val & BIT(8)) == 0)) { + /* + * We are interested only in setting data bit + * of PS_HOLD_CONTROL register to indicate power off request. + */ + exynos4210_pmu_poweroff(); + } return; } reg_p++;
On all Exynos-based boards, the system powers down itself by driving PS_HOLD signal low. Handle writing to respective PMU register to fix power off failure: reboot: Power down Unable to poweroff system shutdown: 31 output lines suppressed due to ratelimiting Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000000 CPU: 0 PID: 1 Comm: shutdown Not tainted 4.11.0-rc8 #846 Hardware name: SAMSUNG EXYNOS (Flattened Device Tree) [<c031050c>] (unwind_backtrace) from [<c030ba6c>] (show_stack+0x10/0x14) [<c030ba6c>] (show_stack) from [<c05b2800>] (dump_stack+0x88/0x9c) [<c05b2800>] (dump_stack) from [<c03d3140>] (panic+0xdc/0x268) [<c03d3140>] (panic) from [<c0343614>] (do_exit+0xa90/0xab4) [<c0343614>] (do_exit) from [<c035f2dc>] (SyS_reboot+0x164/0x1d0) [<c035f2dc>] (SyS_reboot) from [<c0307c80>] (ret_fast_syscall+0x0/0x3c) Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org> --- hw/misc/exynos4210_pmu.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+)