summaryrefslogtreecommitdiff
path: root/arch/x86/cpu/call64.S
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2017-01-16 14:04:19 (GMT)
committerBin Meng <bmeng.cn@gmail.com>2017-02-07 05:07:33 (GMT)
commit8cfc966c777ae0effaeea40a96d62034b2f86b91 (patch)
tree7905e0e6c58ce4e475a3a5641e317bf2ab7b77fc /arch/x86/cpu/call64.S
parent337705833c8f73560af8f4c163ed6b0d9e5440af (diff)
downloadu-boot-fsl-qoriq-8cfc966c777ae0effaeea40a96d62034b2f86b91.tar.xz
x86: Move call64 to the i386 directory
This code is only used in 32-bit mode. Move it so that it does not get built with 64-bit U-Boot. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Diffstat (limited to 'arch/x86/cpu/call64.S')
-rw-r--r--arch/x86/cpu/call64.S96
1 files changed, 0 insertions, 96 deletions
diff --git a/arch/x86/cpu/call64.S b/arch/x86/cpu/call64.S
deleted file mode 100644
index 970c461..0000000
--- a/arch/x86/cpu/call64.S
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * (C) Copyright 2014 Google, Inc
- * Copyright (C) 1991, 1992, 1993 Linus Torvalds
- *
- * Parts of this copied from Linux arch/x86/boot/compressed/head_64.S
- *
- * SPDX-License-Identifier: GPL-2.0+
- */
-
-#include <asm/global_data.h>
-#include <asm/msr-index.h>
-#include <asm/processor-flags.h>
-
-.code32
-.globl cpu_call64
-cpu_call64:
- /*
- * cpu_call64(ulong pgtable, ulong setup_base, ulong target)
- *
- * eax - pgtable
- * edx - setup_base
- * ecx - target
- */
- cli
- push %ecx /* arg2 = target */
- push %edx /* arg1 = setup_base */
- mov %eax, %ebx
-
- /* Load new GDT with the 64bit segments using 32bit descriptor */
- leal gdt, %eax
- movl %eax, gdt+2
- lgdt gdt
-
- /* Enable PAE mode */
- movl $(X86_CR4_PAE), %eax
- movl %eax, %cr4
-
- /* Enable the boot page tables */
- leal (%ebx), %eax
- movl %eax, %cr3
-
- /* Enable Long mode in EFER (Extended Feature Enable Register) */
- movl $MSR_EFER, %ecx
- rdmsr
- btsl $_EFER_LME, %eax
- wrmsr
-
- /* After gdt is loaded */
- xorl %eax, %eax
- lldt %ax
- movl $0x20, %eax
- ltr %ax
-
- /*
- * Setup for the jump to 64bit mode
- *
- * When the jump is performed we will be in long mode but
- * in 32bit compatibility mode with EFER.LME = 1, CS.L = 0, CS.D = 1
- * (and in turn EFER.LMA = 1). To jump into 64bit mode we use
- * the new gdt/idt that has __KERNEL_CS with CS.L = 1.
- * We place all of the values on our mini stack so lret can
- * used to perform that far jump. See the gdt below.
- */
- pop %esi /* setup_base */
-
- pushl $0x10
- leal lret_target, %eax
- pushl %eax
-
- /* Enter paged protected Mode, activating Long Mode */
- movl $(X86_CR0_PG | X86_CR0_PE), %eax
- movl %eax, %cr0
-
- /* Jump from 32bit compatibility mode into 64bit mode. */
- lret
-
-code64:
-lret_target:
- pop %eax /* target */
- mov %eax, %eax /* Clear bits 63:32 */
- jmp *%eax /* Jump to the 64-bit target */
-
- .data
- .align 16
- .globl gdt64
-gdt64:
-gdt:
- .word gdt_end - gdt - 1
- .long gdt /* Fixed up by code above */
- .word 0
- .quad 0x0000000000000000 /* NULL descriptor */
- .quad 0x00af9a000000ffff /* __KERNEL_CS */
- .quad 0x00cf92000000ffff /* __KERNEL_DS */
- .quad 0x0080890000000000 /* TS descriptor */
- .quad 0x0000000000000000 /* TS continued */
-gdt_end: