summaryrefslogtreecommitdiff
path: root/src/cpu/amd/agesa
diff options
context:
space:
mode:
authorKyösti Mälkki <kyosti.malkki@gmail.com>2017-03-29 10:59:21 +0300
committerKyösti Mälkki <kyosti.malkki@gmail.com>2017-04-04 02:25:50 +0200
commitbceccec0f769fa53bf5786952aaf824f82e4e777 (patch)
tree24c3f14db12ef3140f17997f4dde14f08b917895 /src/cpu/amd/agesa
parent42402772e52a6a0b8c797cb14e2c33f034d840b3 (diff)
AGESA: Handle HEAP_CALLOUT_RUNTIME allocation more cleanly
This was guarded because AGESA.h only defined it starting from fam15 header files. We can simply test if it has been defined. The way coreboot currently handles this request, is to make the allocation outside the heap, since heap may not be in CBMEM and thus not available runtime. The acquired buffer from Allocate() would not be found with Locate() or Deallocate(), so move the alloc_cbmem() call for better code symmetry. Change-Id: Ibf0066913a0b73e768488c3afbeb70139a3961eb Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: https://review.coreboot.org/19039 Tested-by: build bot (Jenkins) Reviewed-by: Martin Roth <martinroth@google.com>
Diffstat (limited to 'src/cpu/amd/agesa')
-rw-r--r--src/cpu/amd/agesa/heapmanager.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/src/cpu/amd/agesa/heapmanager.c b/src/cpu/amd/agesa/heapmanager.c
index f131f9841e..b364d10baa 100644
--- a/src/cpu/amd/agesa/heapmanager.c
+++ b/src/cpu/amd/agesa/heapmanager.c
@@ -66,12 +66,11 @@ void EmptyHeap(void)
(unsigned int)(uintptr_t) base, (unsigned int)(uintptr_t) base + BIOS_HEAP_SIZE - 1);
}
-#if (IS_ENABLED(CONFIG_NORTHBRIDGE_AMD_AGESA_FAMILY15_TN) || \
- IS_ENABLED(CONFIG_NORTHBRIDGE_AMD_AGESA_FAMILY15_RL)) && !defined(__PRE_RAM__)
+#if defined(HEAP_CALLOUT_RUNTIME) && ENV_RAMSTAGE
#define AGESA_RUNTIME_SIZE 4096
-
-static AGESA_STATUS alloc_cbmem(AGESA_BUFFER_PARAMS *AllocParams) {
+static AGESA_STATUS alloc_cbmem(AGESA_BUFFER_PARAMS *AllocParams)
+{
static unsigned int used = 0;
void *p = cbmem_find(CBMEM_ID_AGESA_RUNTIME);
@@ -123,14 +122,6 @@ static AGESA_STATUS agesa_AllocateBuffer(UINT32 Func, UINT32 Data, VOID *ConfigP
AllocParams = ((AGESA_BUFFER_PARAMS *) ConfigPtr);
AllocParams->BufferPointer = NULL;
-
-#if (IS_ENABLED(CONFIG_NORTHBRIDGE_AMD_AGESA_FAMILY15_TN) || \
- IS_ENABLED(CONFIG_NORTHBRIDGE_AMD_AGESA_FAMILY15_RL)) && !defined(__PRE_RAM__)
- /* if the allocation is for runtime use simple CBMEM data */
- if (Data == HEAP_CALLOUT_RUNTIME)
- return alloc_cbmem(AllocParams);
-#endif
-
AvailableHeapSize = BIOS_HEAP_SIZE - sizeof(BIOS_HEAP_MANAGER);
BiosHeapBaseAddr = GetHeapBase();
BiosHeapBasePtr = (BIOS_HEAP_MANAGER *) BiosHeapBaseAddr;
@@ -394,6 +385,13 @@ static AGESA_STATUS agesa_LocateBuffer(UINT32 Func, UINT32 Data, VOID *ConfigPtr
AGESA_STATUS HeapManagerCallout(UINT32 Func, UINTN Data, VOID *ConfigPtr)
{
+#if defined(HEAP_CALLOUT_RUNTIME) && ENV_RAMSTAGE
+ AGESA_BUFFER_PARAMS *AllocParams = ConfigPtr;
+
+ if (Func == AGESA_ALLOCATE_BUFFER && Data == HEAP_CALLOUT_RUNTIME)
+ return alloc_cbmem(AllocParams);
+#endif
+
if (Func == AGESA_LOCATE_BUFFER)
return agesa_LocateBuffer(Func, Data, ConfigPtr);
else if (Func == AGESA_ALLOCATE_BUFFER)