From 200182a748afd430da97b707dc5dff53c3147b5f Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Fri, 10 Oct 2014 08:21:55 -0600 Subject: x86: Add support for starting 64-bit kernel Add code to jump to a 64-bit Linux kernel. We need to set up a flat page table structure, a new GDT and then go through a few hoops in the right order. Signed-off-by: Simon Glass --- arch/x86/include/asm/cpu.h | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'arch/x86/include/asm/cpu.h') diff --git a/arch/x86/include/asm/cpu.h b/arch/x86/include/asm/cpu.h index 32930bd..6c6774a 100644 --- a/arch/x86/include/asm/cpu.h +++ b/arch/x86/include/asm/cpu.h @@ -26,4 +26,30 @@ void cpu_disable_paging_pae(void); */ int cpu_has_64bit(void); +/** + * cpu_call64() - Jump to a 64-bit Linux kernel (internal function) + * + * The kernel is uncompressed and the 64-bit entry point is expected to be + * at @target. + * + * This function is used internally - see cpu_jump_to_64bit() for a more + * useful function. + * + * @pgtable: Address of 24KB area containing the page table + * @setup_base: Pointer to the setup.bin information for the kernel + * @target: Pointer to the start of the kernel image + */ +void cpu_call64(ulong pgtable, ulong setup_base, ulong target); + +/** + * cpu_jump_to_64bit() - Jump to a 64-bit Linux kernel + * + * The kernel is uncompressed and the 64-bit entry point is expected to be + * at @target. + * + * @setup_base: Pointer to the setup.bin information for the kernel + * @target: Pointer to the start of the kernel image + */ +int cpu_jump_to_64bit(ulong setup_base, ulong target); + #endif -- cgit v1.1