<p>Marshall Dawson has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/23441">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">WIP: amd/common: Add FCH restore functions to wrapper<br><br>This follows a historical methodology for restoring the FCH settings,<br>but is not architecturally pure.  The FCH restoration falls outside<br>the definitions of the AGESA Arch2008 entry points.<br><br>A better implementation is needed.<br><br>Change-Id: I2c81d744d550493266c7986891a43c1d16b78b9a<br>Signed-off-by: Marshall Dawson <marshalldawson3rd@gmail.com><br>---<br>M src/soc/amd/common/block/pi/agesawrapper.c<br>1 file changed, 60 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/41/23441/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/soc/amd/common/block/pi/agesawrapper.c b/src/soc/amd/common/block/pi/agesawrapper.c</span><br><span>index 22b9f04..fd6f5f5 100644</span><br><span>--- a/src/soc/amd/common/block/pi/agesawrapper.c</span><br><span>+++ b/src/soc/amd/common/block/pi/agesawrapper.c</span><br><span>@@ -513,6 +513,66 @@</span><br><span>  return Status;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+AGESA_STATUS agesawrapper_fchs3earlyrestore(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ AGESA_STATUS status = AGESA_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+  struct cbmem_usage *amd_cbmem = (struct cbmem_usage *)agesa_heap_base();</span><br><span style="color: hsl(120, 100%, 40%);">+      AMD_CONFIG_PARAMS StdHeader = {</span><br><span style="color: hsl(120, 100%, 40%);">+               .HeapStatus = HEAP_SYSTEM_MEM,</span><br><span style="color: hsl(120, 100%, 40%);">+                .HeapBasePtr = (uintptr_t)&amd_cbmem->heap_base,</span><br><span style="color: hsl(120, 100%, 40%);">+               .CalloutPtr = &GetBiosCallout,</span><br><span style="color: hsl(120, 100%, 40%);">+    };</span><br><span style="color: hsl(120, 100%, 40%);">+    FCH_DATA_BLOCK FchParams = {</span><br><span style="color: hsl(120, 100%, 40%);">+          .StdHeader = &StdHeader,</span><br><span style="color: hsl(120, 100%, 40%);">+  };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  if (!acpi_s3_resume_allowed())</span><br><span style="color: hsl(120, 100%, 40%);">+                return AGESA_UNSUPPORTED;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (!amd_cbmem) {</span><br><span style="color: hsl(120, 100%, 40%);">+             printk(BIOS_ERR, "Error locating CBMEM_ID_RESUME_SCRATCH\n");</span><br><span style="color: hsl(120, 100%, 40%);">+               return AGESA_ERROR;</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+// todo: save data during POST to be used here</span><br><span style="color: hsl(120, 100%, 40%);">+// s3_resume_init_data(&FchParams);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        FchInitS3EarlyRestore(&FchParams);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      return status;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+AGESA_STATUS agesawrapper_fchs3laterestore(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      AGESA_STATUS status = AGESA_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+  struct cbmem_usage *amd_cbmem = (struct cbmem_usage *)agesa_heap_base();</span><br><span style="color: hsl(120, 100%, 40%);">+      AMD_CONFIG_PARAMS StdHeader = {</span><br><span style="color: hsl(120, 100%, 40%);">+               .HeapStatus = HEAP_SYSTEM_MEM,</span><br><span style="color: hsl(120, 100%, 40%);">+                .HeapBasePtr = (uintptr_t)&amd_cbmem->heap_base,</span><br><span style="color: hsl(120, 100%, 40%);">+               .CalloutPtr = &GetBiosCallout,</span><br><span style="color: hsl(120, 100%, 40%);">+    };</span><br><span style="color: hsl(120, 100%, 40%);">+    FCH_DATA_BLOCK FchParams = {</span><br><span style="color: hsl(120, 100%, 40%);">+          .StdHeader = &StdHeader,</span><br><span style="color: hsl(120, 100%, 40%);">+  };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  if (!acpi_s3_resume_allowed())</span><br><span style="color: hsl(120, 100%, 40%);">+                return AGESA_UNSUPPORTED;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (!amd_cbmem) {</span><br><span style="color: hsl(120, 100%, 40%);">+             printk(BIOS_ERR, "Error locating CBMEM_ID_RESUME_SCRATCH\n");</span><br><span style="color: hsl(120, 100%, 40%);">+               return AGESA_ERROR;</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+// todo: save data during POST to be used here</span><br><span style="color: hsl(120, 100%, 40%);">+// s3_resume_init_data(&FchParams);</span><br><span style="color: hsl(120, 100%, 40%);">+  FchInitS3LateRestore(&FchParams);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       // todo: still need to reload interrupt values?  native agesa doesn't</span><br><span style="color: hsl(120, 100%, 40%);">+     //       but old PI code used to.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   return status;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static int agesa_locate_file(const char *name, struct region_device *rdev,</span><br><span>                            uint32_t type)</span><br><span> {</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/23441">change 23441</a>. To unsubscribe, or for help writing mail filters, 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/23441"/><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: I2c81d744d550493266c7986891a43c1d16b78b9a </div>
<div style="display:none"> Gerrit-Change-Number: 23441 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Marshall Dawson <marshalldawson3rd@gmail.com> </div>