<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>