blob: 72d778886ace6919daa31d60aecb7d8533dff884 [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>
Felix Held46673222020-04-04 02:37:04 +02004#include <cpu/x86/post_code.h>
5
Kyösti Mälkki7522a8f2020-11-20 16:47:38 +02006.section .init, "ax", @progbits
7
Raul E Rangelec264282020-06-04 16:42:50 -06008.global bootblock_resume_entry
9bootblock_resume_entry:
Martin Roth81804272022-11-20 20:30:18 -070010 post_code(POST_BOOTBLOCK_RESUME_ENTRY)
Raul E Rangelec264282020-06-04 16:42:50 -060011
12 /* Get an early timestamp */
13 rdtsc
14 movd %eax, %mm1
15 movd %edx, %mm2
16
17 /* Fall through to bootblock_pre_c_entry */
18
Felix Held46673222020-04-04 02:37:04 +020019/*
20 * on entry:
21 * mm0: BIST (ignored)
Kyösti Mälkki6c7441f2020-12-05 08:39:57 +020022 * mm2_mm1: timestamp
Felix Held46673222020-04-04 02:37:04 +020023 */
24
25.global bootblock_pre_c_entry
26bootblock_pre_c_entry:
Martin Roth81804272022-11-20 20:30:18 -070027 post_code(POST_BOOTBLOCK_PRE_C_ENTRY)
Felix Held46673222020-04-04 02:37:04 +020028
Arthur Heymansdf096802022-04-19 21:46:20 +020029#if ENV_X86_64
30 #include <cpu/x86/64bit/entry64.inc>
31#endif
32
Raul E Rangel6f1d35e2020-06-17 11:10:58 -060033 /* Clear .bss section */
34 cld
35 xor %eax, %eax
36 movl $(_ebss), %ecx
37 movl $(_bss), %edi
38 sub %edi, %ecx
39 shrl $2, %ecx
40 rep stosl
41
Felix Held46673222020-04-04 02:37:04 +020042 movl $_eearlyram_stack, %esp
43
44 /* Align the stack and keep aligned for call to bootblock_c_entry() */
45 and $0xfffffff0, %esp
46 sub $8, %esp
47
Arthur Heymansdf096802022-04-19 21:46:20 +020048#if ENV_X86_64
49 movd %mm2, %rdi
50 shlq $32, %rdi
51 movd %mm1, %rsi
52 or %rsi, %rdi
53#else
Felix Held46673222020-04-04 02:37:04 +020054 movd %mm2, %eax
55 pushl %eax /* tsc[63:32] */
56 movd %mm1, %eax
57 pushl %eax /* tsc[31:0] */
Arthur Heymansdf096802022-04-19 21:46:20 +020058#endif
Felix Held46673222020-04-04 02:37:04 +020059
Martin Roth81804272022-11-20 20:30:18 -070060 post_code(POST_BOOTBLOCK_PRE_C_DONE)
Felix Held46673222020-04-04 02:37:04 +020061
62 call bootblock_c_entry
63 /* Never reached */
64
65.halt_forever:
lilacious40cb3fe2023-06-21 23:24:14 +020066 post_code(POSTCODE_DEAD_CODE)
Felix Held46673222020-04-04 02:37:04 +020067 hlt
68 jmp .halt_forever