From fb32be4090f088da8db877d3dce42d95b50212b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ky=C3=B6sti=20M=C3=A4lkki?= Date: Wed, 12 Apr 2017 04:31:54 +0300 Subject: [PATCH] AGESA: Implement EARLY_CBMEM_INIT MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Boards without AGESA_LEGACY_WRAPPER gain EARLY_CBMEM_INIT. This does not apply to family12 and family14 just yet, as they do invalidate without write-back on CAR teardown. Change-Id: I008356efa2bc3df0ed1f0720e225ecc7e9995127 Signed-off-by: Kyösti Mälkki Reviewed-on: https://review.coreboot.org/19329 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin --- src/cpu/amd/agesa/romstage.c | 21 ++++++++++++++------ src/northbridge/amd/agesa/Kconfig | 2 +- src/northbridge/amd/agesa/family10/Kconfig | 1 + src/northbridge/amd/agesa/family12/Kconfig | 1 + src/northbridge/amd/agesa/family14/Kconfig | 1 + src/northbridge/amd/agesa/family15/Kconfig | 1 + src/northbridge/amd/agesa/family15rl/Kconfig | 1 + src/northbridge/amd/agesa/family15tn/Kconfig | 1 + src/northbridge/amd/agesa/family16kb/Kconfig | 1 + 9 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/cpu/amd/agesa/romstage.c b/src/cpu/amd/agesa/romstage.c index 54ef602d20..cb98e7b6d3 100644 --- a/src/cpu/amd/agesa/romstage.c +++ b/src/cpu/amd/agesa/romstage.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -52,6 +53,8 @@ void * asmlinkage romstage_main(unsigned long bist) struct sysinfo romstage_state; struct sysinfo *cb = &romstage_state; u8 initial_apic_id = (u8) (cpuid_ebx(1) >> 24); + uintptr_t stack_top = CACHE_TMP_RAMTOP; + int cbmem_initted = 0; fill_sysinfo(cb); @@ -85,17 +88,23 @@ void * asmlinkage romstage_main(unsigned long bist) } - uintptr_t stack_top = CACHE_TMP_RAMTOP; - if (cb->s3resume) { - if (cbmem_recovery(1)) { - printk(BIOS_EMERG, "Unable to recover CBMEM\n"); - halt(); - } + if (IS_ENABLED(CONFIG_EARLY_CBMEM_INIT) || cb->s3resume) + cbmem_initted = !cbmem_recovery(cb->s3resume); + + if (cb->s3resume && !cbmem_initted) { + printk(BIOS_EMERG, "Unable to recover CBMEM\n"); + halt(); + } + + if (IS_ENABLED(CONFIG_EARLY_CBMEM_INIT) || cb->s3resume) { stack_top = romstage_ram_stack_base(HIGH_ROMSTAGE_STACK_SIZE, ROMSTAGE_STACK_CBMEM); stack_top += HIGH_ROMSTAGE_STACK_SIZE; } + if (IS_ENABLED(CONFIG_EARLY_CBMEM_INIT)) + romstage_handoff_init(cb->s3resume); + printk(BIOS_DEBUG, "Move CAR stack.\n"); return (void*)stack_top; } diff --git a/src/northbridge/amd/agesa/Kconfig b/src/northbridge/amd/agesa/Kconfig index d5cff805ef..4bf1d472b8 100644 --- a/src/northbridge/amd/agesa/Kconfig +++ b/src/northbridge/amd/agesa/Kconfig @@ -16,7 +16,7 @@ config NORTHBRIDGE_AMD_AGESA bool default CPU_AMD_AGESA - select LATE_CBMEM_INIT + select CBMEM_TOP_BACKUP if NORTHBRIDGE_AMD_AGESA diff --git a/src/northbridge/amd/agesa/family10/Kconfig b/src/northbridge/amd/agesa/family10/Kconfig index 51e4a9d9b2..c961275b01 100644 --- a/src/northbridge/amd/agesa/family10/Kconfig +++ b/src/northbridge/amd/agesa/family10/Kconfig @@ -18,6 +18,7 @@ config NORTHBRIDGE_AMD_AGESA_FAMILY10 select HAVE_DEBUG_RAM_SETUP select HAVE_DEBUG_SMBUS select HYPERTRANSPORT_PLUGIN_SUPPORT + select LATE_CBMEM_INIT if AGESA_LEGACY_WRAPPER if NORTHBRIDGE_AMD_AGESA_FAMILY10 diff --git a/src/northbridge/amd/agesa/family12/Kconfig b/src/northbridge/amd/agesa/family12/Kconfig index f967837b3c..ccae75773c 100644 --- a/src/northbridge/amd/agesa/family12/Kconfig +++ b/src/northbridge/amd/agesa/family12/Kconfig @@ -17,6 +17,7 @@ config NORTHBRIDGE_AMD_AGESA_FAMILY12 select HAVE_DEBUG_RAM_SETUP select HAVE_DEBUG_SMBUS select HYPERTRANSPORT_PLUGIN_SUPPORT + select LATE_CBMEM_INIT if NORTHBRIDGE_AMD_AGESA_FAMILY12 diff --git a/src/northbridge/amd/agesa/family14/Kconfig b/src/northbridge/amd/agesa/family14/Kconfig index 2e295ef528..4f6c51e0d9 100644 --- a/src/northbridge/amd/agesa/family14/Kconfig +++ b/src/northbridge/amd/agesa/family14/Kconfig @@ -14,6 +14,7 @@ ## config NORTHBRIDGE_AMD_AGESA_FAMILY14 bool + select LATE_CBMEM_INIT if NORTHBRIDGE_AMD_AGESA_FAMILY14 diff --git a/src/northbridge/amd/agesa/family15/Kconfig b/src/northbridge/amd/agesa/family15/Kconfig index c895b5d7ab..b9cf3a7653 100644 --- a/src/northbridge/amd/agesa/family15/Kconfig +++ b/src/northbridge/amd/agesa/family15/Kconfig @@ -18,6 +18,7 @@ config NORTHBRIDGE_AMD_AGESA_FAMILY15 select HAVE_DEBUG_RAM_SETUP select HAVE_DEBUG_SMBUS select HYPERTRANSPORT_PLUGIN_SUPPORT + select LATE_CBMEM_INIT if AGESA_LEGACY_WRAPPER if NORTHBRIDGE_AMD_AGESA_FAMILY15 diff --git a/src/northbridge/amd/agesa/family15rl/Kconfig b/src/northbridge/amd/agesa/family15rl/Kconfig index 2089a22541..656119f408 100644 --- a/src/northbridge/amd/agesa/family15rl/Kconfig +++ b/src/northbridge/amd/agesa/family15rl/Kconfig @@ -14,6 +14,7 @@ ## config NORTHBRIDGE_AMD_AGESA_FAMILY15_RL bool + select LATE_CBMEM_INIT if AGESA_LEGACY_WRAPPER if NORTHBRIDGE_AMD_AGESA_FAMILY15_RL diff --git a/src/northbridge/amd/agesa/family15tn/Kconfig b/src/northbridge/amd/agesa/family15tn/Kconfig index 26a99844e8..8c4bd43c6f 100644 --- a/src/northbridge/amd/agesa/family15tn/Kconfig +++ b/src/northbridge/amd/agesa/family15tn/Kconfig @@ -14,6 +14,7 @@ ## config NORTHBRIDGE_AMD_AGESA_FAMILY15_TN bool + select LATE_CBMEM_INIT if AGESA_LEGACY_WRAPPER if NORTHBRIDGE_AMD_AGESA_FAMILY15_TN diff --git a/src/northbridge/amd/agesa/family16kb/Kconfig b/src/northbridge/amd/agesa/family16kb/Kconfig index bafbe2df09..fcd14a1356 100644 --- a/src/northbridge/amd/agesa/family16kb/Kconfig +++ b/src/northbridge/amd/agesa/family16kb/Kconfig @@ -15,6 +15,7 @@ ## config NORTHBRIDGE_AMD_AGESA_FAMILY16_KB bool + select LATE_CBMEM_INIT if AGESA_LEGACY_WRAPPER if NORTHBRIDGE_AMD_AGESA_FAMILY16_KB