• Palmer Dabbelt's avatar
    Merge patch series "RISC-V Hibernation Support" · 38dab744
    Palmer Dabbelt authored
    Sia Jee Heng <jeeheng.sia@starfivetech.com> says:
    
    This series adds RISC-V Hibernation/suspend to disk support.
    Low level Arch functions were created to support hibernation.
    swsusp_arch_suspend() relies code from __cpu_suspend_enter() to write
    cpu state onto the stack, then calling swsusp_save() to save the memory
    image.
    
    Arch specific hibernation header is implemented and is utilized by the
    arch_hibernation_header_restore() and arch_hibernation_header_save()
    functions. The arch specific hibernation header consists of satp, hartid,
    and the cpu_resume address. The kernel built version is also need to be
    saved into the hibernation image header to making sure only the same
    kernel is restore when resume.
    
    swsusp_arch_resume() creates a temporary page table that covering only
    the linear map. It copies the restore code to a 'safe' page, then start to
    restore the memory image. Once completed, it restores the original
    kernel's page table. It then calls into __hibernate_cpu_resume()
    to restore the CPU context. Finally, it follows the normal hibernation
    path back to the hibernation core.
    
    To enable hibernation/suspend to disk into RISCV, the below config
    need to be enabled:
    - CONFIG_HIBERNATION
    - CONFIG_ARCH_HIBERNATION_HEADER
    - CONFIG_ARCH_HIBERNATION_POSSIBLE
    
    At high-level, this series includes the following changes:
    1) Change suspend_save_csrs() and suspend_restore_csrs()
       to public function as these functions are common to
       suspend/hibernation. (patch 1)
    2) Refactor the common code in the __cpu_resume_enter() function and
       __hibernate_cpu_resume() function. The common code are used by
       hibernation and suspend. (patch 2)
    3) Enhance kernel_page_present() function to support huge page. (patch 3)
    4) Add arch/riscv low level functions to support
       hibernation/suspend to disk. (patch 4)
    
    * b4-shazam-merge:
      RISC-V: Add arch functions to support hibernation/suspend-to-disk
      RISC-V: mm: Enable huge page support to kernel_page_present() function
      RISC-V: Factor out common code of __cpu_resume_enter()
      RISC-V: Change suspend_save_csrs and suspend_restore_csrs to public function
    
    Link: https://lore.kernel.org/r/20230330064321.1008373-1-jeeheng.sia@starfivetech.comSigned-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
    38dab744
Kconfig 24.3 KB