diff options
author | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2020-11-22 00:55:31 +0200 |
---|---|---|
committer | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2021-01-28 08:53:07 +0000 |
commit | 47d58e5df0a5d1a96e64408c3c9384024d5ddaa3 (patch) | |
tree | bdb073336a4fccb1b39fc8aebdc2d2726ec9d7aa /src/cpu/x86/entry32.S | |
parent | 404c0c455c4f9ae3b1c40f8fbe8328349b6b547d (diff) |
cpu/x86: Link entry32.inc
Change-Id: Ib475f40f950f8cc54f0e3c50a80970ba3d2b628f
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/47969
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Raul Rangel <rrangel@chromium.org>
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
Diffstat (limited to 'src/cpu/x86/entry32.S')
-rw-r--r-- | src/cpu/x86/entry32.S | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/cpu/x86/entry32.S b/src/cpu/x86/entry32.S new file mode 100644 index 0000000000..32f61ad261 --- /dev/null +++ b/src/cpu/x86/entry32.S @@ -0,0 +1,79 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +/* For starting coreboot in protected mode */ + +/* + * This is the modern bootblock. It prepares the system for C environment runtime + * setup. The actual setup is done by hardware-specific code. + * + * It provides a bootflow similar to other architectures, and thus is considered + * to be the modern approach. + * + */ + +#include <arch/rom_segs.h> +#include <cpu/x86/cr.h> +#include <cpu/x86/post_code.h> + +.section .init, "ax", @progbits + + .code32 +/* + * When we come here we are in protected mode. + * NOTE aligned to 4 so that we are sure that the prefetch + * cache will be reloaded. + */ + .align 4 + +.globl __protected_start +__protected_start: + /* Save the BIST value */ + movl %eax, %ebp + +#if !CONFIG(NO_EARLY_BOOTBLOCK_POSTCODES) + post_code(POST_ENTER_PROTECTED_MODE) +#endif + + movw $ROM_DATA_SEG, %ax + movw %ax, %ds + movw %ax, %es + movw %ax, %ss + movw %ax, %fs + movw %ax, %gs + + /* Restore the BIST value to %eax */ + movl %ebp, %eax + +#if CONFIG(BOOTBLOCK_DEBUG_SPINLOOP) + + /* Wait for a JTAG debugger to break in and set EBX non-zero */ + xor %ebx, %ebx + +debug_spinloop: + cmp $0, %ebx + jz debug_spinloop +#endif + +bootblock_protected_mode_entry: + +#if !CONFIG(USE_MARCH_586) + /* MMX registers required here */ + + /* BIST result in eax */ + movd %eax, %mm0 + + /* Get an early timestamp */ + rdtsc + movd %eax, %mm1 + movd %edx, %mm2 +#endif + +#if CONFIG(SSE) +enable_sse: + mov %cr4, %eax + or $CR4_OSFXSR, %ax + mov %eax, %cr4 +#endif /* CONFIG(SSE) */ + + /* We're done. Now it's up to platform-specific code */ + jmp bootblock_pre_c_entry |