From e01cfc94759d8fdbfa5f751f298bbfd04db7f672 Mon Sep 17 00:00:00 2001 From: Marshall Dawson Date: Wed, 15 Nov 2017 15:47:54 -0700 Subject: 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 Reviewed-on: https://review.coreboot.org/22720 Tested-by: build bot (Jenkins) Reviewed-by: Martin Roth --- .../common/block/include/amdblocks/BiosCallOuts.h | 9 ++++++++- .../amd/common/block/include/amdblocks/s3_resume.h | 21 +++++++++++++++++++++ src/soc/amd/common/block/pi/heapmanager.c | 5 ++++- 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 src/soc/amd/common/block/include/amdblocks/s3_resume.h (limited to 'src/soc/amd/common') 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 +#include -#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) -- cgit v1.2.3