4aec216b93
All these are functions which are invoked from elsewhere but they are not typical C functions. So annotate them using the new SYM_CODE_START. All these were not balanced with any END, so mark their ends by SYM_CODE_END appropriately too. Signed-off-by: Jiri Slaby <jslaby@suse.cz> Signed-off-by: Borislav Petkov <bp@suse.de> Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> [xen bits] Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> [power mgmt] Cc: Andy Shevchenko <andy@infradead.org> Cc: Cao jin <caoj.fnst@cn.fujitsu.com> Cc: Darren Hart <dvhart@infradead.org> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Juergen Gross <jgross@suse.com> Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com> Cc: linux-arch@vger.kernel.org Cc: linux-pm@vger.kernel.org Cc: Pavel Machek <pavel@ucw.cz> Cc: Pingfan Liu <kernelfans@gmail.com> Cc: platform-driver-x86@vger.kernel.org Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net> Cc: Stefano Stabellini <sstabellini@kernel.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Wei Huang <wei@redhat.com> Cc: x86-ml <x86@kernel.org> Cc: xen-devel@lists.xenproject.org Cc: Xiaoyao Li <xiaoyao.li@linux.intel.com> Link: https://lkml.kernel.org/r/20191011115108.12392-23-jslaby@suse.cz
127 lines
2.2 KiB
ArmAsm
127 lines
2.2 KiB
ArmAsm
/* SPDX-License-Identifier: GPL-2.0 */
|
|
.text
|
|
#include <linux/linkage.h>
|
|
#include <asm/segment.h>
|
|
#include <asm/page.h>
|
|
#include <asm/pgtable_32.h>
|
|
|
|
.macro writepost,value
|
|
movb $0x34, %al
|
|
outb %al, $0x70
|
|
movb $\value, %al
|
|
outb %al, $0x71
|
|
.endm
|
|
|
|
wakeup_start:
|
|
# OFW lands us here, running in protected mode, with a
|
|
# kernel-compatible GDT already setup.
|
|
|
|
# Clear any dangerous flags
|
|
pushl $0
|
|
popfl
|
|
|
|
writepost 0x31
|
|
|
|
# Set up %cr3
|
|
movl $initial_page_table - __PAGE_OFFSET, %eax
|
|
movl %eax, %cr3
|
|
|
|
movl saved_cr4, %eax
|
|
movl %eax, %cr4
|
|
|
|
movl saved_cr0, %eax
|
|
movl %eax, %cr0
|
|
|
|
# Control registers were modified, pipeline resync is needed
|
|
jmp 1f
|
|
1:
|
|
|
|
movw $__KERNEL_DS, %ax
|
|
movw %ax, %ss
|
|
movw %ax, %ds
|
|
movw %ax, %es
|
|
movw %ax, %fs
|
|
movw %ax, %gs
|
|
|
|
lgdt saved_gdt
|
|
lidt saved_idt
|
|
lldt saved_ldt
|
|
ljmp $(__KERNEL_CS),$1f
|
|
1:
|
|
movl %cr3, %eax
|
|
movl %eax, %cr3
|
|
wbinvd
|
|
|
|
# Go back to the return point
|
|
jmp ret_point
|
|
|
|
save_registers:
|
|
sgdt saved_gdt
|
|
sidt saved_idt
|
|
sldt saved_ldt
|
|
|
|
pushl %edx
|
|
movl %cr4, %edx
|
|
movl %edx, saved_cr4
|
|
|
|
movl %cr0, %edx
|
|
movl %edx, saved_cr0
|
|
|
|
popl %edx
|
|
|
|
movl %ebx, saved_context_ebx
|
|
movl %ebp, saved_context_ebp
|
|
movl %esi, saved_context_esi
|
|
movl %edi, saved_context_edi
|
|
|
|
pushfl
|
|
popl saved_context_eflags
|
|
|
|
ret
|
|
|
|
restore_registers:
|
|
movl saved_context_ebp, %ebp
|
|
movl saved_context_ebx, %ebx
|
|
movl saved_context_esi, %esi
|
|
movl saved_context_edi, %edi
|
|
|
|
pushl saved_context_eflags
|
|
popfl
|
|
|
|
ret
|
|
|
|
SYM_CODE_START(do_olpc_suspend_lowlevel)
|
|
call save_processor_state
|
|
call save_registers
|
|
|
|
# This is the stack context we want to remember
|
|
movl %esp, saved_context_esp
|
|
|
|
pushl $3
|
|
call xo1_do_sleep
|
|
|
|
jmp wakeup_start
|
|
.p2align 4,,7
|
|
ret_point:
|
|
movl saved_context_esp, %esp
|
|
|
|
writepost 0x32
|
|
|
|
call restore_registers
|
|
call restore_processor_state
|
|
ret
|
|
SYM_CODE_END(do_olpc_suspend_lowlevel)
|
|
|
|
.data
|
|
saved_gdt: .long 0,0
|
|
saved_idt: .long 0,0
|
|
saved_ldt: .long 0
|
|
saved_cr4: .long 0
|
|
saved_cr0: .long 0
|
|
saved_context_esp: .long 0
|
|
saved_context_edi: .long 0
|
|
saved_context_esi: .long 0
|
|
saved_context_ebx: .long 0
|
|
saved_context_ebp: .long 0
|
|
saved_context_eflags: .long 0
|