<p>Marc Jones has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/22194">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">soc/amd/stoneyridge: Add RunOnAP support<br><br>Add support for AGESA callbacks RunFcnOnAp() and RunFcnOnAllAp().<br>Update the wording on the AP errors. The functions are not missing,<br>they are not supported.<br><br>Change-Id: Id30cb2e0c6cc474158f3a7710dbb8ecf54f1ffe4<br>Signed-off-by: Marc Jones <marcj303@gmail.com><br>---<br>M src/soc/amd/common/def_callouts.c<br>M src/soc/amd/stoneyridge/Kconfig<br>2 files changed, 77 insertions(+), 19 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/94/22194/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/src/soc/amd/common/def_callouts.c b/src/soc/amd/common/def_callouts.c<br>index 7a6afeb..aca3d8a 100644<br>--- a/src/soc/amd/common/def_callouts.c<br>+++ b/src/soc/amd/common/def_callouts.c<br>@@ -15,11 +15,15 @@<br> */<br> <br> #include <cbfs.h><br>+#include <cpu/x86/lapic.h><br>+#include <cpu/x86/mp.h><br>+#include <timer.h><br> <br> #include <AGESA.h><br> #include <amdlib.h><br> #include <Ids.h><br> #include <agesawrapper.h><br>+#include <agesawrapper_call.h><br> #include <BiosCallOuts.h><br> #include <soc/southbridge.h><br> <br>@@ -37,11 +41,13 @@<br> { AGESA_DO_RESET, agesa_Reset },<br> { AGESA_LOCATE_BUFFER, agesa_LocateBuffer },<br> { AGESA_READ_SPD, agesa_ReadSpd },<br>+ { AGESA_GNB_PCIE_SLOT_RESET, agesa_PcieSlotResetControl },<br>+#if ENV_RAMSTAGE<br> { AGESA_RUNFUNC_ONAP, agesa_RunFuncOnAp },<br> { AGESA_RUNFUNC_ON_ALL_APS, agesa_RunFcnOnAllAps },<br>- { AGESA_GNB_PCIE_SLOT_RESET, agesa_PcieSlotResetControl },<br> { AGESA_WAIT_FOR_ALL_APS, agesa_WaitForAllApsFinished },<br> { AGESA_IDLE_AN_AP, agesa_IdleAnAp },<br>+#endif /* ENV_RAMSTAGE */<br> <br> /* Optional callouts */<br> { AGESA_GET_IDS_INIT_DATA, agesa_EmptyIdsInitData },<br>@@ -132,14 +138,6 @@<br> return Status;<br> }<br> <br>-AGESA_STATUS agesa_RunFuncOnAp(UINT32 Func, UINTN Data, VOID *ConfigPtr)<br>-{<br>- AGESA_STATUS Status;<br>-<br>- Status = agesawrapper_amdlaterunaptask(Func, Data, ConfigPtr);<br>- return Status;<br>-}<br>-<br> AGESA_STATUS agesa_GfxGetVbiosImage(UINT32 Func, UINTN FchData,<br> VOID *ConfigPrt)<br> {<br>@@ -152,14 +150,6 @@<br> printk(BIOS_DEBUG, "agesa_GfxGetVbiosImage: IMGptr=%p\n",<br> pVbiosImageInfo->ImagePtr);<br> return pVbiosImageInfo->ImagePtr ? AGESA_SUCCESS : AGESA_WARNING;<br>-}<br>-<br>-AGESA_STATUS agesa_RunFcnOnAllAps(UINT32 Func, UINTN Data, VOID *ConfigPtr)<br>-{<br>- printk(BIOS_WARNING, "Warning - Missing AGESA callout: %s\n", __func__);<br>- AGESA_STATUS Status = AGESA_UNSUPPORTED;<br>-<br>- return Status;<br> }<br> <br> void __attribute__((weak)) platform_PcieSlotResetControl(UINT32 Func, UINTN Data,<br>@@ -175,10 +165,76 @@<br> platform_PcieSlotResetControl(Func, Data, ConfigPtr)<br> }<br> <br>+#if ENV_RAMSTAGE<br>+/*<br>+ * Application Processor callouts:<br>+ * agesa_RunFuncOnAp() and agesa_RunFcnOnAllAps() are called after main memory<br>+ * has been initialized and coreboot has taken control of AP task dispatching.<br>+ * These functions execute callout_ap_entry() on each AP, which calls the<br>+ * AmdLateRunApTask() entry point if it is a targeted AP.<br>+ */<br>+<br>+/*<br>+ * Global data for APs.<br>+ * Passed from the AGESA_Callout for the agesawrapper_amdlaterunaptask.<br>+ */<br>+static struct agesa_data {<br>+ UINT32 Func;<br>+ UINTN Data;<br>+ VOID *ConfigPtr;<br>+}agesadata;<br>+<br>+/*<br>+ * BSP deploys APs to callout_ap_entry(), which calls agesawrapper_amdlaterunaptask<br>+ * with the agesadata.<br>+ */<br>+static void callout_ap_entry(void) {<br>+ AGESA_STATUS Status = AGESA_UNSUPPORTED;<br>+<br>+ printk(BIOS_DEBUG, "%s Func: 0x%x, Data: 0x%lx, Ptr: 0x%p \n",<br>+ __func__, agesadata.Func, agesadata.Data, agesadata.ConfigPtr);<br>+<br>+ /* Check if this AP should run the function */<br>+ if (!((agesadata.Func == AGESA_RUNFUNC_ONAP) &&<br>+ (agesadata.Data == lapicid())))<br>+ return;<br>+<br>+ Status = agesawrapper_amdlaterunaptask(agesadata.Func, agesadata.Data,<br>+ agesadata.ConfigPtr);<br>+<br>+ if (Status)<br>+ printk(BIOS_DEBUG, "There was a problem with %lx returned %s\n",<br>+ lapicid(), decodeAGESA_STATUS(Status));<br>+}<br>+<br>+AGESA_STATUS agesa_RunFuncOnAp(UINT32 Func, UINTN Data, VOID *ConfigPtr)<br>+{<br>+ printk(BIOS_DEBUG, "%s\n", __func__);<br>+<br>+ agesadata.Func = Func;<br>+ agesadata.Data = Data;<br>+ agesadata.ConfigPtr = ConfigPtr;<br>+ mp_run_on_aps(callout_ap_entry, 100 * USECS_PER_MSEC);<br>+<br>+ return AGESA_SUCCESS;<br>+}<br>+<br>+AGESA_STATUS agesa_RunFcnOnAllAps(UINT32 Func, UINTN Data, VOID *ConfigPtr)<br>+{<br>+ printk(BIOS_DEBUG, "%s\n", __func__);<br>+<br>+ agesadata.Func = Func;<br>+ agesadata.Data = Data;<br>+ agesadata.ConfigPtr = ConfigPtr;<br>+ mp_run_on_aps(callout_ap_entry, 100 * USECS_PER_MSEC);<br>+<br>+ return AGESA_SUCCESS;<br>+}<br>+<br> AGESA_STATUS agesa_WaitForAllApsFinished(UINT32 Func, UINTN Data,<br> VOID *ConfigPtr)<br> {<br>- printk(BIOS_WARNING, "Warning - Missing AGESA callout: %s\n", __func__);<br>+ printk(BIOS_WARNING, "Warning - AGESA callout: %s not supported\n", __func__);<br> AGESA_STATUS Status = AGESA_UNSUPPORTED;<br> <br> return Status;<br>@@ -186,8 +242,9 @@<br> <br> AGESA_STATUS agesa_IdleAnAp(UINT32 Func, UINTN Data, VOID *ConfigPtr)<br> {<br>- printk(BIOS_WARNING, "Warning - Missing AGESA callout: %s\n", __func__);<br>+ printk(BIOS_WARNING, "Warning - AGESA callout: %s no supported\n", __func__);<br> AGESA_STATUS Status = AGESA_UNSUPPORTED;<br> <br> return Status;<br> }<br>+#endif /* ENV_RAMSTAGE */<br>diff --git a/src/soc/amd/stoneyridge/Kconfig b/src/soc/amd/stoneyridge/Kconfig<br>index 30da8a0..ff8d3b6 100644<br>--- a/src/soc/amd/stoneyridge/Kconfig<br>+++ b/src/soc/amd/stoneyridge/Kconfig<br>@@ -51,6 +51,7 @@<br> select BOOTBLOCK_CONSOLE<br> select RELOCATABLE_MODULES<br> select PARALLEL_MP<br>+ select PARALLEL_MP_AP_WORK<br> select HAVE_SMI_HANDLER<br> select SMM_TSEG<br> select RELOCATABLE_RAMSTAGE<br></pre><p>To view, visit <a href="https://review.coreboot.org/22194">change 22194</a>. To unsubscribe, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/22194"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Id30cb2e0c6cc474158f3a7710dbb8ecf54f1ffe4 </div>
<div style="display:none"> Gerrit-Change-Number: 22194 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Marc Jones <marc@marcjonesconsulting.com> </div>