Skip to content
  • Xianglong Du's avatar
    drivers/rtc/rtc-sirfsoc.c: fix kernel panic of backing from hibernation · 3916b09e
    Xianglong Du authored
    
    
    RTC settings will be lost if power supply is cut off after hibernation
    finished, but the current "restore" function does not restore RTC related
    settings, this causes rtc_read_time failure and kernel panic:
    
      rtc rtc0: **** DPM device timeout ****
      Stack trace:
        unwind_backtrace+0x0/0xf4
        show_stack+0x10/0x14
        dpm_wd_handler+0x24/0x28
        call_timer_fn.isra.33+0x24/0x88
        run_timer_softirq+0x178/0x1f0
        __do_softirq+0x120/0x200
        do_softirq+0x54/0x5c
        irq_exit+0x9c/0xd0
        handle_IRQ+0x44/0x90
        __irq_svc+0x40/0x70
        _raw_spin_unlock_irqrestore+0x10/0x48
        sirfsoc_rtc_iobrg_readl+0x34/0x3c
        sirfsoc_rtc_read_time+0x24/0x48
        __rtc_read_time.isra.3+0x48/0x5c
        rtc_read_time+0x30/0x44
        rtc_resume.part.9+0x20/0x104
        rtc_resume+0x5c/0x64
        dpm_run_callback.isra.4+0x2c/0x74
        device_resume+0x9c/0x144
        dpm_resume+0x100/0x224
        hibernation_snapshot+0x170/0x398
        hibernate+0x13c/0x1d8
        state_store+0xb4/0xb8
        kobj_attr_store+0x14/0x20
        sysfs_write_file+0x160/0x190
        vfs_write+0xb4/0x194
        SyS_write+0x3c/0x78
    
    this patch uses SIMPLE_DEV_PM_OPS() to make restore() execute the
    existing resume() function which will restore the set of RTC.
    
    Signed-off-by: default avatarXianglong Du <Xianglong.Du@csr.com>
    Signed-off-by: default avatarBarry Song <Baohua.Song@csr.com>
    Cc: Grant Likely <grant.likely@linaro.org>
    Cc: Rob Herring <robh+dt@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    3916b09e