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>
This commit is contained in:
Kyösti Mälkki 2017-03-29 10:59:21 +03:00
parent 42402772e5
commit bceccec0f7
1 changed files with 10 additions and 12 deletions

View File

@ -66,12 +66,11 @@ void EmptyHeap(void)
(unsigned int)(uintptr_t) base, (unsigned int)(uintptr_t) base + BIOS_HEAP_SIZE - 1); (unsigned int)(uintptr_t) base, (unsigned int)(uintptr_t) base + BIOS_HEAP_SIZE - 1);
} }
#if (IS_ENABLED(CONFIG_NORTHBRIDGE_AMD_AGESA_FAMILY15_TN) || \ #if defined(HEAP_CALLOUT_RUNTIME) && ENV_RAMSTAGE
IS_ENABLED(CONFIG_NORTHBRIDGE_AMD_AGESA_FAMILY15_RL)) && !defined(__PRE_RAM__)
#define AGESA_RUNTIME_SIZE 4096 #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; static unsigned int used = 0;
void *p = cbmem_find(CBMEM_ID_AGESA_RUNTIME); 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 = ((AGESA_BUFFER_PARAMS *) ConfigPtr);
AllocParams->BufferPointer = NULL; 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); AvailableHeapSize = BIOS_HEAP_SIZE - sizeof(BIOS_HEAP_MANAGER);
BiosHeapBaseAddr = GetHeapBase(); BiosHeapBaseAddr = GetHeapBase();
BiosHeapBasePtr = (BIOS_HEAP_MANAGER *) BiosHeapBaseAddr; 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) 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) if (Func == AGESA_LOCATE_BUFFER)
return agesa_LocateBuffer(Func, Data, ConfigPtr); return agesa_LocateBuffer(Func, Data, ConfigPtr);
else if (Func == AGESA_ALLOCATE_BUFFER) else if (Func == AGESA_ALLOCATE_BUFFER)