1*b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0 2bdde6b3cSTkhai Kirill /* 3bdde6b3cSTkhai Kirill * hibernate.c: Hibernaton support specific for sparc64. 4bdde6b3cSTkhai Kirill * 5bdde6b3cSTkhai Kirill * Copyright (C) 2013 Kirill V Tkhai (tkhai@yandex.ru) 6bdde6b3cSTkhai Kirill */ 7bdde6b3cSTkhai Kirill 8bdde6b3cSTkhai Kirill #include <linux/mm.h> 9bdde6b3cSTkhai Kirill 10bdde6b3cSTkhai Kirill #include <asm/hibernate.h> 11bdde6b3cSTkhai Kirill #include <asm/visasm.h> 12bdde6b3cSTkhai Kirill #include <asm/page.h> 137f8998c7SGeert Uytterhoeven #include <asm/sections.h> 14bdde6b3cSTkhai Kirill #include <asm/tlb.h> 15bdde6b3cSTkhai Kirill 16bdde6b3cSTkhai Kirill struct saved_context saved_context; 17bdde6b3cSTkhai Kirill 18bdde6b3cSTkhai Kirill /* 19bdde6b3cSTkhai Kirill * pfn_is_nosave - check if given pfn is in the 'nosave' section 20bdde6b3cSTkhai Kirill */ 21bdde6b3cSTkhai Kirill pfn_is_nosave(unsigned long pfn)22bdde6b3cSTkhai Kirillint pfn_is_nosave(unsigned long pfn) 23bdde6b3cSTkhai Kirill { 24bdde6b3cSTkhai Kirill unsigned long nosave_begin_pfn = PFN_DOWN((unsigned long)&__nosave_begin); 25bdde6b3cSTkhai Kirill unsigned long nosave_end_pfn = PFN_DOWN((unsigned long)&__nosave_end); 26bdde6b3cSTkhai Kirill 27bdde6b3cSTkhai Kirill return (pfn >= nosave_begin_pfn) && (pfn < nosave_end_pfn); 28bdde6b3cSTkhai Kirill } 29bdde6b3cSTkhai Kirill save_processor_state(void)30bdde6b3cSTkhai Kirillvoid save_processor_state(void) 31bdde6b3cSTkhai Kirill { 32bdde6b3cSTkhai Kirill save_and_clear_fpu(); 33bdde6b3cSTkhai Kirill } 34bdde6b3cSTkhai Kirill restore_processor_state(void)35bdde6b3cSTkhai Kirillvoid restore_processor_state(void) 36bdde6b3cSTkhai Kirill { 37bdde6b3cSTkhai Kirill struct mm_struct *mm = current->active_mm; 38bdde6b3cSTkhai Kirill 39fc290a11SRob Gardner tsb_context_switch_ctx(mm, CTX_HWBITS(mm->context)); 40bdde6b3cSTkhai Kirill } 41