soc/intel/quark: Add early debugging code

Add Kconfig values and early debugging code to better segment and debug
the early code in bootblock by using the SD LED as an indicator.  Update
the help text for the debug Kconfig values to point to the various
failure locations.

TEST=Build and run on Galileo Gen2

Change-Id: I1cd62eba3e9547cb1dd7f547aaec5d4827e14633
Signed-off-by: Lee Leahy <leroy.p.leahy@intel.com>
Reviewed-on: https://review.coreboot.org/17985
Tested-by: build bot (Jenkins)
Reviewed-by: Martin Roth <martinroth@google.com>
This commit is contained in:
Lee Leahy 2016-12-28 11:43:10 -08:00
parent 73f6a282a1
commit a765090f0d
4 changed files with 71 additions and 13 deletions

View File

@ -109,21 +109,54 @@ config ENABLE_DEBUG_LED_ESRAM
default n
select ENABLE_DEBUG_LED
help
Indicate that ESRAM has been successfully initialized.
Indicate that ESRAM has been successfully initialized. If the SD LED
does not light then the ESRAM initialization needs to be debugged.
config ENABLE_DEBUG_LED_FINDFSP
bool "SD LED indicates fsp.bin file was found"
depends on PLATFORM_USES_FSP1_1
default n
select ENABLE_DEBUG_LED
help
Indicate that fsp.bin was found.
Indicate that fsp.bin was found. If the SD LED does not light then
the code between ESRAM initialization through find_fsp needs to
debugged. Start by verifying that the correct fsp.bin is in the
image.
config ENABLE_DEBUG_LED_TEMPRAMINIT
bool "SD LED indicates TempRamInit was successful"
config ENABLE_DEBUG_LED_BOOTBLOCK_ENTRY
bool "SD LED indicates bootblock.c successfully entered"
default n
select ENABLE_DEBUG_LED
help
Indicate that TempRamInit was successful.
Indicate that bootblock_c_entry was entered. If the SD LED does not
light then debug the code between ESRAM and bootblock_c_entry. For
FSP 1.1, use ENABLE_DEBUG_LED_FINDFSP to split this code.
config ENABLE_DEBUG_LED_SOC_EARLY_INIT_ENTRY
bool "SD LED indicates bootblock_soc_early_init successfully entered"
default n
select ENABLE_DEBUG_LED
help
Indicate that bootblock_soc_early_init was entered. If the SD LED
does not light then debug the code in bootblock_main_with_timestamp.
config ENABLE_DEBUG_LED_SOC_EARLY_INIT_EXIT
bool "SD LED indicates bootblock_soc_early_init successfully exited"
default n
select ENABLE_DEBUG_LED
help
Indicate that bootblock_soc_early_init exited. If the SD LED does not
light then debug the scripts in bootblock_soc_early_init.
config ENABLE_DEBUG_LED_SOC_INIT_ENTRY
bool "SD LED indicates bootblock_soc_init successfully entered"
default n
select ENABLE_DEBUG_LED
help
Indicate that bootblock_soc_init was entered. If the SD LED does not
light then debug the code in bootblock_mainboard_early_init and
console_init. If the SD LED does light but there is no serial then
debug the serial port configuration and initialization.
#####
# ESRAM layout

View File

@ -22,6 +22,8 @@
#include <soc/pci_devs.h>
#include <soc/reg_access.h>
extern void asmlinkage light_sd_led(void);
static const struct reg_script legacy_gpio_init[] = {
/* Temporarily enable the legacy GPIO controller */
REG_PCI_WRITE32(R_QNC_LPC_GBA_BASE, IO_ADDRESS_VALID
@ -77,11 +79,17 @@ static const struct reg_script mtrr_init[] = {
void asmlinkage bootblock_c_entry(uint64_t base_timestamp)
{
if (IS_ENABLED(CONFIG_ENABLE_DEBUG_LED_BOOTBLOCK_ENTRY))
light_sd_led();
bootblock_main_with_timestamp(base_timestamp);
}
void bootblock_soc_early_init(void)
{
if (IS_ENABLED(CONFIG_ENABLE_DEBUG_LED_SOC_EARLY_INIT_ENTRY))
light_sd_led();
/* Initialize the MTRRs */
reg_script_run(mtrr_init);
@ -94,10 +102,16 @@ void bootblock_soc_early_init(void)
reg_script_run_on_dev(HSUART0_BDF, hsuart_init);
if (IS_ENABLED(CONFIG_ENABLE_BUILTIN_HSUART1))
reg_script_run_on_dev(HSUART1_BDF, hsuart_init);
if (IS_ENABLED(CONFIG_ENABLE_DEBUG_LED_SOC_EARLY_INIT_EXIT))
light_sd_led();
}
void bootblock_soc_init(void)
{
if (IS_ENABLED(CONFIG_ENABLE_DEBUG_LED_SOC_INIT_ENTRY))
light_sd_led();
/* Display the MTRRs */
soc_display_mtrrs();
}

View File

@ -507,14 +507,7 @@ L43:
L44:
#if IS_ENABLED(CONFIG_ENABLE_DEBUG_LED_ESRAM)
/* Turn on SD LED to indicate ESRAM successfully initialized */
movl $SD_HOST_CTRL, %ebx
movb 0(%ebx), %al
orb $1, %al
movb %al, 0(%ebx)
/* Loop forever */
jmp .
jmp light_sd_led
#endif /* CONFIG_ENABLE_DEBUG_LED_ESRAM */
#endif /* CONFIG_ENABLE_DEBUG_LED */
@ -537,3 +530,17 @@ before_carstage:
call bootblock_c_entry
/* Never reached */
.global light_sd_led
light_sd_led:
/* Turn on SD LED to indicate ESRAM successfully initialized */
movl $SD_HOST_CTRL, %ebx
movb 0(%ebx), %al
orb $1, %al
movb %al, 0(%ebx)
/* Loop forever */
die:
hlt
jmp die

View File

@ -26,6 +26,8 @@
#include <soc/romstage.h>
#include <string.h>
extern void asmlinkage light_sd_led(void);
asmlinkage void *car_stage_c_entry(void)
{
FSP_INFO_HEADER *fih;
@ -40,6 +42,8 @@ asmlinkage void *car_stage_c_entry(void)
/* Locate the FSP header in ESRAM */
fih = find_fsp(CONFIG_FSP_ESRAM_LOC);
if (IS_ENABLED(CONFIG_ENABLE_DEBUG_LED_FINDFSP))
light_sd_led();
/* Start the early verstage/romstage code */
post_code(0x2A);