arch/x86: move postcar main logic into C

The console_init(), MTRR printing, and loading ramstage
logic was previously all in assembly. Move that logic
into C code so that future features can more easily be
added into the postcar boot flow.

BUG=chrome-os-partner:57513

Change-Id: I332140f569caf0803570fd635d894295de8c0018
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: https://review.coreboot.org/16618
Tested-by: build bot (Jenkins)
Reviewed-by: Furquan Shaikh <furquan@google.com>
Reviewed-by: Andrey Petrov <andrey.petrov@intel.com>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
This commit is contained in:
Aaron Durbin 2016-09-16 16:15:14 -05:00
parent c701393e20
commit 6b0cebccc4
3 changed files with 34 additions and 12 deletions

View File

@ -287,6 +287,7 @@ postcar-y += memmove.c
postcar-y += memset.c
postcar-y += memlayout.ld
postcar-$(CONFIG_X86_TOP4G_BOOTMEDIA_MAP) += mmap_boot.c
postcar-y += postcar.c
postcar-$(CONFIG_COLLECT_TIMESTAMPS) += timestamp.c
LDFLAGS_postcar += -Map $(objcbfs)/postcar.map

View File

@ -26,11 +26,6 @@ stack_top:
.text
.global _start
_start:
#if IS_ENABLED(CONFIG_POSTCAR_CONSOLE)
/* Enable the console */
call console_init
#endif /* CONFIG_POSTCAR_CONSOLE */
/* chipset_teardown_car() is expected to disable cache-as-ram. */
call chipset_teardown_car
@ -113,13 +108,8 @@ _start:
wrmsr
#endif /* CONFIG_SOC_SETS_MSRS */
/* Display the MTRRs */
#if IS_ENABLED(CONFIG_POSTCAR_CONSOLE)
call soc_display_mtrrs
#endif /* CONFIG_POSTCAR_CONSOLE */
/* Load and run ramstage. */
call copy_and_run
/* Call into main for postcar. */
call main
/* Should never return. */
1:
jmp 1b

31
src/arch/x86/postcar.c Normal file
View File

@ -0,0 +1,31 @@
/*
* This file is part of the coreboot project.
*
* Copyright 2016 Google, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <console/console.h>
#include <main_decl.h>
#include <program_loading.h>
#include <soc/intel/common/util.h>
void main(void)
{
console_init();
/* Display the MTRRs */
if (IS_ENABLED(CONFIG_DISPLAY_MTRRS))
soc_display_mtrrs();
/* Load and run ramstage. */
run_ramstage();
}