summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyösti Mälkki <kyosti.malkki@gmail.com>2017-04-12 04:31:54 +0300
committerKyösti Mälkki <kyosti.malkki@gmail.com>2017-08-02 04:50:33 +0000
commitfb32be4090f088da8db877d3dce42d95b50212b6 (patch)
treed8ab453bfd95b773b96be927b25e020bf0399f08
parenta18f58b862061cb68fd1c6afc862d31dd6ac69e3 (diff)
downloadcoreboot-fb32be4090f088da8db877d3dce42d95b50212b6.tar.xz
AGESA: Implement EARLY_CBMEM_INIT
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 <kyosti.malkki@gmail.com> Reviewed-on: https://review.coreboot.org/19329 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org>
-rw-r--r--src/cpu/amd/agesa/romstage.c21
-rw-r--r--src/northbridge/amd/agesa/Kconfig2
-rw-r--r--src/northbridge/amd/agesa/family10/Kconfig1
-rw-r--r--src/northbridge/amd/agesa/family12/Kconfig1
-rw-r--r--src/northbridge/amd/agesa/family14/Kconfig1
-rw-r--r--src/northbridge/amd/agesa/family15/Kconfig1
-rw-r--r--src/northbridge/amd/agesa/family15rl/Kconfig1
-rw-r--r--src/northbridge/amd/agesa/family15tn/Kconfig1
-rw-r--r--src/northbridge/amd/agesa/family16kb/Kconfig1
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 <console/console.h>
#include <halt.h>
#include <program_loading.h>
+#include <romstage_handoff.h>
#include <smp/node.h>
#include <string.h>
#include <northbridge/amd/agesa/agesa_helper.h>
@@ -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