summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarshall Dawson <marshalldawson3rd@gmail.com>2017-11-15 15:47:54 -0700
committerMartin Roth <martinroth@google.com>2018-01-19 19:47:17 +0000
commite01cfc94759d8fdbfa5f751f298bbfd04db7f672 (patch)
treef4e83458bac98b017ba380a8ea24ba94ab08b552
parent85b2e910df73affa8e12c0b66fc33c5b8c1e5f69 (diff)
downloadcoreboot-e01cfc94759d8fdbfa5f751f298bbfd04db7f672.tar.xz
amd/common: Define regions in AGESA cbmem
In 6c747068 "amd/stoneyridge: Put AGESA heap into cbmem" the AGESA heap was moved completely into cbmem. This was a departure from the "late cbmem init" method of adding it late in post, then storing the S3 volatile data to the region. Remove the hardcoded base address that was missed in that commit. To prepare for S3 support, split the region into subregions for heap, AGESA's S3 volatile storage, and an MTRR save area. BUG=b:69614064 Change-Id: I06c137f56516f3a04091d1191cd657a0aa07320b Signed-off-by: Marshall Dawson <marshalldawson3rd@gmail.com> Reviewed-on: https://review.coreboot.org/22720 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Martin Roth <martinroth@google.com>
-rw-r--r--src/soc/amd/common/block/include/amdblocks/BiosCallOuts.h9
-rw-r--r--src/soc/amd/common/block/include/amdblocks/s3_resume.h21
-rw-r--r--src/soc/amd/common/block/pi/heapmanager.c5
3 files changed, 33 insertions, 2 deletions
diff --git a/src/soc/amd/common/block/include/amdblocks/BiosCallOuts.h b/src/soc/amd/common/block/include/amdblocks/BiosCallOuts.h
index 2302889e6b..8a9474eb0d 100644
--- a/src/soc/amd/common/block/include/amdblocks/BiosCallOuts.h
+++ b/src/soc/amd/common/block/include/amdblocks/BiosCallOuts.h
@@ -18,11 +18,18 @@
#define __CALLOUTS_AMD_AGESA_H__
#include <amdblocks/agesawrapper.h>
+#include <amdblocks/s3_resume.h>
-#define BIOS_HEAP_START_ADDRESS 0x010000000
#define BIOS_HEAP_SIZE 0x30000
#define BSP_STACK_BASE_ADDR 0x30000
+struct cbmem_usage {
+ uint8_t heap_base[BIOS_HEAP_SIZE];
+#if IS_ENABLED(CONFIG_HAVE_ACPI_RESUME)
+ uint8_t s3_vol_data[S3_VOLATILE_SIZE];
+#endif
+};
+
typedef struct _BIOS_HEAP_MANAGER {
UINT32 StartOfAllocatedNodes;
UINT32 StartOfFreedNodes;
diff --git a/src/soc/amd/common/block/include/amdblocks/s3_resume.h b/src/soc/amd/common/block/include/amdblocks/s3_resume.h
new file mode 100644
index 0000000000..567b0a8c40
--- /dev/null
+++ b/src/soc/amd/common/block/include/amdblocks/s3_resume.h
@@ -0,0 +1,21 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2017 Advanced Micro Devices, 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.
+ */
+
+#ifndef __AMD_S3_RESUME_H__
+#define __AMD_S3_RESUME_H__
+
+#define S3_VOLATILE_SIZE 0x6000
+
+#endif /* __AMD_S3_RESUME_H__ */
diff --git a/src/soc/amd/common/block/pi/heapmanager.c b/src/soc/amd/common/block/pi/heapmanager.c
index 862ba3d524..f139a7fcb6 100644
--- a/src/soc/amd/common/block/pi/heapmanager.c
+++ b/src/soc/amd/common/block/pi/heapmanager.c
@@ -21,7 +21,10 @@
static void *GetHeapBase(void)
{
- return cbmem_add(CBMEM_ID_RESUME_SCRATCH, BIOS_HEAP_SIZE);
+ struct cbmem_usage *heap;
+ heap = (struct cbmem_usage *)cbmem_add(CBMEM_ID_RESUME_SCRATCH,
+ sizeof(struct cbmem_usage));
+ return &heap->heap_base;
}
static void EmptyHeap(int unused)