treewide: replace GPLv2 long form headers with SPDX header
[coreboot.git] / src / cpu / x86 / early_reset.S
blobcbf4de7479d464150e44015b357278091a6ee05a
1 /* This file is part of the coreboot project. */
2 /* SPDX-License-Identifier: GPL-2.0-or-later */
4 /*
5  * input %esp: return address (not pointer to return address!)
6  * clobber the content of eax, ecx, edx
7  */
9 #include <cpu/x86/mtrr.h>
11 .section .text
12 .global check_mtrr
14 check_mtrr:
15         /* Use the MTRR default type MSR as a proxy for detecting INIT#.
16          * Reset the system if any known bits are set in that MSR. That is
17          * an indication of the CPU not being properly reset. */
19 check_for_clean_reset:
20         movl    $MTRR_DEF_TYPE_MSR, %ecx
21         rdmsr
22         andl    $(MTRR_DEF_TYPE_EN | MTRR_DEF_TYPE_FIX_EN), %eax
23         cmp     $0, %eax
24         jnz     warm_reset
25         jmp     *%esp
26         /* perform warm reset */
27 warm_reset:
28         movw    $0xcf9, %dx
29         movb    $0x06, %al
30         outb    %al, %dx
31         /* Should not reach this*/
32 .Lhlt:
33         hlt
34         jmp     .Lhlt