1 // SPDX-License-Identifier: GPL-2.0 1 // SPDX-License-Identifier: GPL-2.0 2 #include <asm/fpu.h> !! 2 /* 3 #include <asm/loongson.h> !! 3 * hibernate.c: Hibernaton support specific for sparc64. 4 #include <asm/sections.h> !! 4 * 5 #include <asm/tlbflush.h> !! 5 * Copyright (C) 2013 Kirill V Tkhai (tkhai@yandex.ru) 6 #include <linux/suspend.h> !! 6 */ 7 7 8 static u32 saved_crmd; !! 8 #include <linux/suspend.h> 9 static u32 saved_prmd; !! 9 #include <linux/mm.h> 10 static u32 saved_euen; << 11 static u32 saved_ecfg; << 12 static u64 saved_pcpu_base; << 13 struct pt_regs saved_regs; << 14 << 15 void save_processor_state(void) << 16 { << 17 saved_crmd = csr_read32(LOONGARCH_CSR_ << 18 saved_prmd = csr_read32(LOONGARCH_CSR_ << 19 saved_euen = csr_read32(LOONGARCH_CSR_ << 20 saved_ecfg = csr_read32(LOONGARCH_CSR_ << 21 saved_pcpu_base = csr_read64(PERCPU_BA << 22 10 23 if (is_fpu_owner()) !! 11 #include <asm/hibernate.h> 24 save_fp(current); !! 12 #include <asm/visasm.h> 25 } !! 13 #include <asm/page.h> >> 14 #include <asm/sections.h> >> 15 #include <asm/tlb.h> 26 16 27 void restore_processor_state(void) !! 17 struct saved_context saved_context; 28 { << 29 csr_write32(saved_crmd, LOONGARCH_CSR_ << 30 csr_write32(saved_prmd, LOONGARCH_CSR_ << 31 csr_write32(saved_euen, LOONGARCH_CSR_ << 32 csr_write32(saved_ecfg, LOONGARCH_CSR_ << 33 csr_write64(saved_pcpu_base, PERCPU_BA << 34 18 35 if (is_fpu_owner()) !! 19 /* 36 restore_fp(current); !! 20 * pfn_is_nosave - check if given pfn is in the 'nosave' section 37 } !! 21 */ 38 22 39 int pfn_is_nosave(unsigned long pfn) 23 int pfn_is_nosave(unsigned long pfn) 40 { 24 { 41 unsigned long nosave_begin_pfn = PFN_D !! 25 unsigned long nosave_begin_pfn = PFN_DOWN((unsigned long)&__nosave_begin); 42 unsigned long nosave_end_pfn = PFN_UP( !! 26 unsigned long nosave_end_pfn = PFN_DOWN((unsigned long)&__nosave_end); 43 27 44 return (pfn >= nosave_begin_pfn) && ( !! 28 return (pfn >= nosave_begin_pfn) && (pfn < nosave_end_pfn); 45 } 29 } 46 30 47 extern int swsusp_asm_suspend(void); !! 31 void save_processor_state(void) 48 << 49 int swsusp_arch_suspend(void) << 50 { 32 { 51 enable_pci_wakeup(); !! 33 save_and_clear_fpu(); 52 return swsusp_asm_suspend(); << 53 } 34 } 54 35 55 extern int swsusp_asm_resume(void); !! 36 void restore_processor_state(void) 56 << 57 int swsusp_arch_resume(void) << 58 { 37 { 59 /* Avoid TLB mismatch during and after !! 38 struct mm_struct *mm = current->active_mm; 60 local_flush_tlb_all(); !! 39 61 return swsusp_asm_resume(); !! 40 tsb_context_switch_ctx(mm, CTX_HWBITS(mm->context)); 62 } 41 } 63 42
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.