blob: f49623577e54493785e22e6ea55bf14d82545414 [file] [log] [blame]
Angel Pons8a3453f2020-04-02 23:48:19 +02001/* SPDX-License-Identifier: GPL-2.0-only */
2/* This file is part of the coreboot project. */
efdesign984b508342011-07-13 17:16:13 -07003
efdesign987c0c64e2011-06-20 19:56:06 -07004/******************************************************************************
5 * AMD Generic Encapsulated Software Architecture
6 *
Kyösti Mälkki7076aa52017-09-02 16:20:15 +03007 * $Workfile:: cache_as_ram.S
efdesign987c0c64e2011-06-20 19:56:06 -07008 *
Kyösti Mälkki7076aa52017-09-02 16:20:15 +03009 * Description: cache_as_ram.S - AGESA Module Entry Point for GCC complier
efdesign987c0c64e2011-06-20 19:56:06 -070010 *
11 ******************************************************************************
efdesign984b508342011-07-13 17:16:13 -070012 */
13
efdesign987c0c64e2011-06-20 19:56:06 -070014#include "gcccar.inc"
Michał Żygowski3aa17f72019-11-24 16:32:05 +010015#include <cpu/x86/lapic_def.h>
Kyösti Mälkki7076aa52017-09-02 16:20:15 +030016#include <cpu/x86/post_code.h>
efdesign987c0c64e2011-06-20 19:56:06 -070017
efdesign987c0c64e2011-06-20 19:56:06 -070018.code32
Kyösti Mälkki7076aa52017-09-02 16:20:15 +030019.globl _cache_as_ram_setup, _cache_as_ram_setup_end
Michał Żygowski1b12b642019-11-24 16:32:05 +010020.global bootblock_pre_c_entry
efdesign987c0c64e2011-06-20 19:56:06 -070021
Kyösti Mälkki7076aa52017-09-02 16:20:15 +030022_cache_as_ram_setup:
efdesign984b508342011-07-13 17:16:13 -070023
Michał Żygowski1b12b642019-11-24 16:32:05 +010024/*
25 * on entry:
26 * mm0: BIST (ignored)
27 * mm2_mm1: timestamp at bootblock_protected_mode_entry
28 */
29bootblock_pre_c_entry:
30
Elyes HAOUASdea45c12018-12-27 09:14:07 +010031 post_code(0xa0)
efdesign984b508342011-07-13 17:16:13 -070032
Elyes HAOUASdea45c12018-12-27 09:14:07 +010033 AMD_ENABLE_STACK
Kyösti Mälkkif6fe2f12016-11-21 11:26:48 +020034
Michał Żygowski3aa17f72019-11-24 16:32:05 +010035 /*
36 * Set up bootblock stack on BSP.
37 * AMD_ENABLE_STACK macro sets up a stack for BSP at BSP_STACK_BASE_ADDR
38 * which is 0x30000 (_car_region_end), but for C bootblock the stack
39 * begins at _ecar_stack (see arch/x86/car.ld)
40 */
41 mov $LAPIC_BASE_MSR, %ecx
42 rdmsr
43 test $LAPIC_BASE_MSR_BOOTSTRAP_PROCESSOR, %eax
44 jz ap_entry
45
46 mov $_ecar_stack, %esp
47
Kyösti Mälkki33d0fb82019-11-29 06:38:46 +020048 /* Align the stack and keep aligned for call to bootblock_c_entry() */
49 and $0xfffffff0, %esp
50 sub $8, %esp
Kyösti Mälkki26929bd2016-11-23 20:40:53 +020051
Michał Żygowski1b12b642019-11-24 16:32:05 +010052 movd %mm2, %eax
53 pushl %eax /* tsc[63:32] */
54 movd %mm1, %eax
55 pushl %eax /* tsc[31:0] */
Kyösti Mälkki33d0fb82019-11-29 06:38:46 +020056
57 post_code(0xa2)
58
59 call bootblock_c_entry
Kyösti Mälkki63fac812017-09-02 16:41:43 +030060
Michał Żygowski3aa17f72019-11-24 16:32:05 +010061 /* Never reached. */
Kyösti Mälkki63fac812017-09-02 16:41:43 +030062
Kyösti Mälkkiba22e152016-11-23 06:47:15 +020063stop:
Michał Żygowski3aa17f72019-11-24 16:32:05 +010064 post_code(POST_DEAD_CODE)
Elyes HAOUASdea45c12018-12-27 09:14:07 +010065 hlt
66 jmp stop
Kyösti Mälkki63fac812017-09-02 16:41:43 +030067
Michał Żygowski3aa17f72019-11-24 16:32:05 +010068ap_entry:
Kyösti Mälkki33d0fb82019-11-29 06:38:46 +020069 /* Align the stack for call to ap_bootblock_c_entry() */
Michał Żygowski3aa17f72019-11-24 16:32:05 +010070 and $0xfffffff0, %esp
Kyösti Mälkki33d0fb82019-11-29 06:38:46 +020071 call ap_bootblock_c_entry
Michał Żygowski3aa17f72019-11-24 16:32:05 +010072
73 /* Never reached. */
74 jmp stop
75
Kyösti Mälkki7076aa52017-09-02 16:20:15 +030076_cache_as_ram_setup_end: