blob: bb2203b8059e93b98e2c0df4703a3e150de304cc [file] [log] [blame]
Felix Held46673222020-04-04 02:37:04 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Felix Held46673222020-04-04 02:37:04 +02002
Martin Roth81804272022-11-20 20:30:18 -07003#include <amdblocks/post_codes.h>
Arthur Heymans3edf8402021-07-05 21:18:50 +02004#include <cpu/x86/64bit/entry64.inc>
Felix Held46673222020-04-04 02:37:04 +02005#include <cpu/x86/post_code.h>
6
Kyösti Mälkki7522a8f2020-11-20 16:47:38 +02007.section .init, "ax", @progbits
8
Raul E Rangelec264282020-06-04 16:42:50 -06009.global bootblock_resume_entry
10bootblock_resume_entry:
Yuchen He1e67adb2023-07-25 21:28:36 +020011 post_code(POSTCODE_BOOTBLOCK_RESUME_ENTRY)
Raul E Rangelec264282020-06-04 16:42:50 -060012
13 /* Get an early timestamp */
14 rdtsc
15 movd %eax, %mm1
16 movd %edx, %mm2
17
18 /* Fall through to bootblock_pre_c_entry */
19
Felix Held46673222020-04-04 02:37:04 +020020/*
21 * on entry:
22 * mm0: BIST (ignored)
Kyösti Mälkki6c7441f2020-12-05 08:39:57 +020023 * mm2_mm1: timestamp
Felix Held46673222020-04-04 02:37:04 +020024 */
25
26.global bootblock_pre_c_entry
27bootblock_pre_c_entry:
Yuchen He1e67adb2023-07-25 21:28:36 +020028 post_code(POSTCODE_BOOTBLOCK_PRE_C_ENTRY)
Felix Held46673222020-04-04 02:37:04 +020029
Arthur Heymansdf096802022-04-19 21:46:20 +020030#if ENV_X86_64
Arthur Heymans3edf8402021-07-05 21:18:50 +020031 setup_longmode $(CONFIG_ARCH_X86_64_PGTBL_LOC)
Arthur Heymansdf096802022-04-19 21:46:20 +020032#endif
33
Raul E Rangel6f1d35e2020-06-17 11:10:58 -060034 /* Clear .bss section */
35 cld
36 xor %eax, %eax
37 movl $(_ebss), %ecx
38 movl $(_bss), %edi
39 sub %edi, %ecx
40 shrl $2, %ecx
41 rep stosl
42
Felix Held46673222020-04-04 02:37:04 +020043 movl $_eearlyram_stack, %esp
44
45 /* Align the stack and keep aligned for call to bootblock_c_entry() */
46 and $0xfffffff0, %esp
47 sub $8, %esp
48
Arthur Heymansdf096802022-04-19 21:46:20 +020049#if ENV_X86_64
50 movd %mm2, %rdi
51 shlq $32, %rdi
52 movd %mm1, %rsi
53 or %rsi, %rdi
54#else
Felix Held46673222020-04-04 02:37:04 +020055 movd %mm2, %eax
56 pushl %eax /* tsc[63:32] */
57 movd %mm1, %eax
58 pushl %eax /* tsc[31:0] */
Arthur Heymansdf096802022-04-19 21:46:20 +020059#endif
Felix Held46673222020-04-04 02:37:04 +020060
Yuchen He1e67adb2023-07-25 21:28:36 +020061 post_code(POSTCODE_BOOTBLOCK_PRE_C_DONE)
Felix Held46673222020-04-04 02:37:04 +020062
63 call bootblock_c_entry
64 /* Never reached */
65
66.halt_forever:
lilacious40cb3fe2023-06-21 23:24:14 +020067 post_code(POSTCODE_DEAD_CODE)
Felix Held46673222020-04-04 02:37:04 +020068 hlt
69 jmp .halt_forever