soc/amd/stoneyridge: Create a HALT_THIS_AP callout
It was required for all cores use the same CAR teardown function (exit_car.S and gcccar.inc). AGESA has already been modified to do the AP to do the call out. Create assembly code to call chipset_teardown_car and then enter an endless loop with halt instruction. Then create the call out that will call this new assembly code. BUG=b:70338633 AGESA COMMIT=3313d277 TEST=Created a debug version of AGESA that would print the returned status of HALT_THIS_AP. Build code without the fix, see the return. Build code with the fix, see that there's no return. Change-Id: I05ee405812211d93dfdbdc5ee7d9978c2eb585e1 Signed-off-by: Richard Spiegel <richard.spiegel@silverbackltd.com> Reviewed-on: https://review.coreboot.org/24999 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Martin Roth <martinroth@google.com>
This commit is contained in:
committed by
Martin Roth
parent
013f1024c3
commit
a9f49366c0
@@ -26,6 +26,7 @@
|
||||
#include <amdlib.h>
|
||||
#include <amdblocks/dimm_spd.h>
|
||||
#include "chip.h"
|
||||
#include <amdblocks/car.h>
|
||||
|
||||
void __attribute__((weak)) platform_FchParams_reset(
|
||||
FCH_RESET_DATA_BLOCK *FchParams_reset) {}
|
||||
@@ -139,6 +140,24 @@ AGESA_STATUS agesa_ReadSpd(UINT32 Func, UINTN Data, VOID *ConfigPtr)
|
||||
return AGESA_SUCCESS;
|
||||
}
|
||||
|
||||
AGESA_STATUS agesa_HaltThisAp(UINT32 Func, UINTN Data, VOID *ConfigPtr)
|
||||
{
|
||||
AGESA_HALT_THIS_AP_PARAMS *info = ConfigPtr;
|
||||
uint32_t flags = 0;
|
||||
|
||||
if (info->PrimaryCore == TRUE)
|
||||
return AGESA_UNSUPPORTED; /* force normal path */
|
||||
if (info->ExecWbinvd == TRUE)
|
||||
flags |= 1;
|
||||
if (info->CacheEn == TRUE)
|
||||
flags |= 2;
|
||||
|
||||
ap_teardown_car(flags); /* does not return */
|
||||
|
||||
/* Should never reach here */
|
||||
return AGESA_UNSUPPORTED;
|
||||
}
|
||||
|
||||
/* Allow mainboards to fill the SPD buffer */
|
||||
__attribute__((weak)) int mainboard_read_spd(uint8_t spdAddress, char *buf,
|
||||
size_t len)
|
||||
|
Reference in New Issue
Block a user