blob: 0d678d1889f993603cd04ab2bc5cddd012e8d29b [file] [log] [blame]
Angel Pons8a3453f2020-04-02 23:48:19 +02001/* SPDX-License-Identifier: GPL-2.0-only */
efdesign984b508342011-07-13 17:16:13 -07002
efdesign987c0c64e2011-06-20 19:56:06 -07003/******************************************************************************
4 * AMD Generic Encapsulated Software Architecture
5 *
Kyösti Mälkki7076aa52017-09-02 16:20:15 +03006 * $Workfile:: cache_as_ram.S
efdesign987c0c64e2011-06-20 19:56:06 -07007 *
Martin Roth0949e732021-10-01 14:28:22 -06008 * Description: cache_as_ram.S - AGESA Module Entry Point for GCC compiler
efdesign987c0c64e2011-06-20 19:56:06 -07009 *
10 ******************************************************************************
efdesign984b508342011-07-13 17:16:13 -070011 */
12
Michał Żygowski3aa17f72019-11-24 16:32:05 +010013#include <cpu/x86/lapic_def.h>
Kyösti Mälkki7076aa52017-09-02 16:20:15 +030014#include <cpu/x86/post_code.h>
efdesign987c0c64e2011-06-20 19:56:06 -070015
Kyösti Mälkki7522a8f2020-11-20 16:47:38 +020016.section .init
17
efdesign987c0c64e2011-06-20 19:56:06 -070018.code32
Kyösti Mälkki7522a8f2020-11-20 16:47:38 +020019
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
Kyösti Mälkki7522a8f2020-11-20 16:47:38 +020024#include "gcccar.inc"
25
Michał Żygowski1b12b642019-11-24 16:32:05 +010026/*
27 * on entry:
28 * mm0: BIST (ignored)
Kyösti Mälkki6c7441f2020-12-05 08:39:57 +020029 * mm2_mm1: timestamp
Michał Żygowski1b12b642019-11-24 16:32:05 +010030 */
31bootblock_pre_c_entry:
32
Elyes HAOUASdea45c12018-12-27 09:14:07 +010033 post_code(0xa0)
efdesign984b508342011-07-13 17:16:13 -070034
Elyes HAOUASdea45c12018-12-27 09:14:07 +010035 AMD_ENABLE_STACK
Kyösti Mälkkif6fe2f12016-11-21 11:26:48 +020036
Michał Żygowski3aa17f72019-11-24 16:32:05 +010037 /*
38 * Set up bootblock stack on BSP.
39 * AMD_ENABLE_STACK macro sets up a stack for BSP at BSP_STACK_BASE_ADDR
40 * which is 0x30000 (_car_region_end), but for C bootblock the stack
41 * begins at _ecar_stack (see arch/x86/car.ld)
42 */
43 mov $LAPIC_BASE_MSR, %ecx
44 rdmsr
45 test $LAPIC_BASE_MSR_BOOTSTRAP_PROCESSOR, %eax
46 jz ap_entry
47
48 mov $_ecar_stack, %esp
49
Kyösti Mälkki33d0fb82019-11-29 06:38:46 +020050 /* Align the stack and keep aligned for call to bootblock_c_entry() */
51 and $0xfffffff0, %esp
52 sub $8, %esp
Kyösti Mälkki26929bd2016-11-23 20:40:53 +020053
Michał Żygowski1b12b642019-11-24 16:32:05 +010054 movd %mm2, %eax
55 pushl %eax /* tsc[63:32] */
56 movd %mm1, %eax
57 pushl %eax /* tsc[31:0] */
Kyösti Mälkki33d0fb82019-11-29 06:38:46 +020058
59 post_code(0xa2)
60
61 call bootblock_c_entry
Kyösti Mälkki63fac812017-09-02 16:41:43 +030062
Michał Żygowski3aa17f72019-11-24 16:32:05 +010063 /* Never reached. */
Kyösti Mälkki63fac812017-09-02 16:41:43 +030064
Kyösti Mälkkiba22e152016-11-23 06:47:15 +020065stop:
Michał Żygowski3aa17f72019-11-24 16:32:05 +010066 post_code(POST_DEAD_CODE)
Elyes HAOUASdea45c12018-12-27 09:14:07 +010067 hlt
68 jmp stop
Kyösti Mälkki63fac812017-09-02 16:41:43 +030069
Michał Żygowski3aa17f72019-11-24 16:32:05 +010070ap_entry:
Kyösti Mälkki33d0fb82019-11-29 06:38:46 +020071 /* Align the stack for call to ap_bootblock_c_entry() */
Michał Żygowski3aa17f72019-11-24 16:32:05 +010072 and $0xfffffff0, %esp
Kyösti Mälkki33d0fb82019-11-29 06:38:46 +020073 call ap_bootblock_c_entry
Michał Żygowski3aa17f72019-11-24 16:32:05 +010074
75 /* Never reached. */
76 jmp stop
77
Kyösti Mälkki7076aa52017-09-02 16:20:15 +030078_cache_as_ram_setup_end: