summaryrefslogtreecommitdiff
path: root/src/mainboard
diff options
context:
space:
mode:
authorzbao <fishbaozi@gmail.com>2012-04-18 16:59:53 +0800
committerMarc Jones <marcj303@gmail.com>2012-04-19 01:02:46 +0200
commit3f788e1f701ffb65f6f1bf62c91ac0d6fc013fb4 (patch)
tree0553cdd0c0ea54c7a05f1a20bda7252a8a51f41c /src/mainboard
parent899608dc5d6be88a91606f63c41c4729d76f5187 (diff)
downloadcoreboot-3f788e1f701ffb65f6f1bf62c91ac0d6fc013fb4.tar.xz
S3: Use old heap during normal boot
During normal boot, the cbmem is uninitialized. So it is illegal to find the heap in cbmem. Change-Id: I8b5e1dbf1124819ed91693a86a6dbe41aea109e5 Signed-off-by: Zheng Bao <zheng.bao@amd.com> Signed-off-by: zbao <fishbaozi@gmail.com> Reviewed-on: http://review.coreboot.org/904 Tested-by: build bot (Jenkins) Reviewed-by: Marc Jones <marcj303@gmail.com>
Diffstat (limited to 'src/mainboard')
-rw-r--r--src/mainboard/amd/persimmon/BiosCallOuts.h1
-rw-r--r--src/mainboard/amd/persimmon/agesawrapper.c11
2 files changed, 9 insertions, 3 deletions
diff --git a/src/mainboard/amd/persimmon/BiosCallOuts.h b/src/mainboard/amd/persimmon/BiosCallOuts.h
index 071c73c3c6..cd23110ef2 100644
--- a/src/mainboard/amd/persimmon/BiosCallOuts.h
+++ b/src/mainboard/amd/persimmon/BiosCallOuts.h
@@ -23,6 +23,7 @@
#include "Porting.h"
#include "AGESA.h"
+#define BIOS_HEAP_START_ADDRESS 0x10000 /* HEAP during cold boot */
#define BIOS_HEAP_SIZE 0x20000
#define BSP_STACK_BASE_ADDR 0x30000
diff --git a/src/mainboard/amd/persimmon/agesawrapper.c b/src/mainboard/amd/persimmon/agesawrapper.c
index 6bba7ca15a..e60673ec9b 100644
--- a/src/mainboard/amd/persimmon/agesawrapper.c
+++ b/src/mainboard/amd/persimmon/agesawrapper.c
@@ -40,6 +40,7 @@
#include <arch/io.h>
#include <cpu/amd/agesa/s3_resume.h>
#include <cbmem.h>
+#include <arch/acpi.h>
#define FILECODE UNASSIGNED_FILE_FILECODE
@@ -250,11 +251,15 @@ UINT32 GetHeapBase(
AMD_CONFIG_PARAMS *StdHeader
)
{
- UINT32 high_heap;
+ UINT32 heap;
- high_heap = (UINT32)cbmem_find(CBMEM_ID_RESUME_SCRATCH) + (CONFIG_HIGH_SCRATCH_MEMORY_SIZE - BIOS_HEAP_SIZE); /* base + high_stack_size */
+ /* Both romstage and ramstage has this S3 detect. */
+ if (acpi_get_sleep_type() == 3)
+ heap = (UINT32)cbmem_find(CBMEM_ID_RESUME_SCRATCH) + (CONFIG_HIGH_SCRATCH_MEMORY_SIZE - BIOS_HEAP_SIZE); /* himem_heap_base + high_stack_size */
+ else
+ heap = BIOS_HEAP_START_ADDRESS; /* low mem */
- return high_heap;
+ return heap;
}
UINT32