blob: 503de3b5f46fff6b365368f72d93662ce684bbb3 [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
3#include <cpu/x86/post_code.h>
4
Kyösti Mälkki7522a8f2020-11-20 16:47:38 +02005.section .init, "ax", @progbits
6
Raul E Rangelec264282020-06-04 16:42:50 -06007.global bootblock_resume_entry
8bootblock_resume_entry:
9 post_code(0xb0)
10
11 /* Get an early timestamp */
12 rdtsc
13 movd %eax, %mm1
14 movd %edx, %mm2
15
16 /* Fall through to bootblock_pre_c_entry */
17
Felix Held46673222020-04-04 02:37:04 +020018/*
19 * on entry:
20 * mm0: BIST (ignored)
Kyösti Mälkki6c7441f2020-12-05 08:39:57 +020021 * mm2_mm1: timestamp
Felix Held46673222020-04-04 02:37:04 +020022 */
23
24.global bootblock_pre_c_entry
25bootblock_pre_c_entry:
26 post_code(0xa0)
27
Arthur Heymansdf096802022-04-19 21:46:20 +020028#if ENV_X86_64
29 #include <cpu/x86/64bit/entry64.inc>
30#endif
31
Raul E Rangel6f1d35e2020-06-17 11:10:58 -060032 /* Clear .bss section */
33 cld
34 xor %eax, %eax
35 movl $(_ebss), %ecx
36 movl $(_bss), %edi
37 sub %edi, %ecx
38 shrl $2, %ecx
39 rep stosl
40
Felix Held46673222020-04-04 02:37:04 +020041 movl $_eearlyram_stack, %esp
42
43 /* Align the stack and keep aligned for call to bootblock_c_entry() */
44 and $0xfffffff0, %esp
45 sub $8, %esp
46
Arthur Heymansdf096802022-04-19 21:46:20 +020047#if ENV_X86_64
48 movd %mm2, %rdi
49 shlq $32, %rdi
50 movd %mm1, %rsi
51 or %rsi, %rdi
52#else
Felix Held46673222020-04-04 02:37:04 +020053 movd %mm2, %eax
54 pushl %eax /* tsc[63:32] */
55 movd %mm1, %eax
56 pushl %eax /* tsc[31:0] */
Arthur Heymansdf096802022-04-19 21:46:20 +020057#endif
Felix Held46673222020-04-04 02:37:04 +020058
59 post_code(0xa2)
60
61 call bootblock_c_entry
62 /* Never reached */
63
64.halt_forever:
65 post_code(POST_DEAD_CODE)
66 hlt
67 jmp .halt_forever