<p>Marshall Dawson has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/22730">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">WIP soc/amd/common: Add S3 resume functions to wrapper<br><br>Change-Id: I5c6a9c1a679a1c4d3f7d1d3b41a32efd0a2c2c01<br>Signed-off-by: Marshall Dawson <marshalldawson3rd@gmail.com><br>---<br>M src/soc/amd/common/agesawrapper.c<br>1 file changed, 146 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/30/22730/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/src/soc/amd/common/agesawrapper.c b/src/soc/amd/common/agesawrapper.c<br>index 28c290b..87e1550 100644<br>--- a/src/soc/amd/common/agesawrapper.c<br>+++ b/src/soc/amd/common/agesawrapper.c<br>@@ -21,6 +21,7 @@<br> #include <cpu/x86/mtrr.h><br> #include <BiosCallOuts.h><br> #include <string.h><br>+#include "s3_resume.h"<br> <br> void __attribute__((weak)) SetMemParams(AMD_POST_PARAMS *PostParams) {}<br> void __attribute__((weak)) OemPostParams(AMD_POST_PARAMS *PostParams) {}<br>@@ -382,6 +383,151 @@<br> return Status;<br> }<br> <br>+AGESA_STATUS agesawrapper_amdinitresume(void)<br>+{<br>+ AGESA_STATUS status;<br>+ AMD_INTERFACE_PARAMS AmdParamStruct;<br>+ AMD_RESUME_PARAMS *AmdResumeParamsPtr;<br>+ struct region nv_data;<br>+<br>+ if (!acpi_s3_resume_allowed())<br>+ return AGESA_UNSUPPORTED;<br>+<br>+ memset(&AmdParamStruct, 0, sizeof(AmdParamStruct));<br>+<br>+ AmdParamStruct.AgesaFunctionName = AMD_INIT_RESUME;<br>+ AmdParamStruct.AllocationMethod = PreMemHeap;<br>+ AmdParamStruct.StdHeader.AltImageBasePtr = 0;<br>+ AmdParamStruct.StdHeader.CalloutPtr = &GetBiosCallout;<br>+ AmdParamStruct.StdHeader.Func = 0;<br>+ AmdParamStruct.StdHeader.ImageBasePtr = 0;<br>+ AmdCreateStruct (&AmdParamStruct);<br>+<br>+ AmdResumeParamsPtr = (AMD_RESUME_PARAMS *)AmdParamStruct.NewStructPtr;<br>+<br>+ get_s3_info(S3_DATA_TYPE_NV, &nv_data);<br>+ AmdResumeParamsPtr->S3DataBlock.NvStorage = (void *)nv_data.offset;<br>+ AmdResumeParamsPtr->S3DataBlock.NvStorageSize = nv_data.size;<br>+<br>+ status = AmdInitResume ((AMD_RESUME_PARAMS *)AmdParamStruct.NewStructPtr);<br>+<br>+ if (status != AGESA_SUCCESS) agesawrapper_amdreadeventlog(AmdParamStruct.StdHeader.HeapStatus);<br>+ AmdReleaseStruct (&AmdParamStruct);<br>+<br>+ return status;<br>+}<br>+<br>+AGESA_STATUS agesawrapper_amds3laterestore(void)<br>+{<br>+ AGESA_STATUS Status;<br>+ AMD_INTERFACE_PARAMS AmdInterfaceParams;<br>+ AMD_S3LATE_PARAMS AmdS3LateParams;<br>+ AMD_S3LATE_PARAMS *AmdS3LateParamsPtr;<br>+ struct region vol_data;<br>+<br>+ if (!acpi_s3_resume_allowed())<br>+ return AGESA_UNSUPPORTED;<br>+<br>+ amd_initcpuio();<br>+<br>+ memset(&AmdS3LateParams, 0, sizeof(AmdS3LateParams));<br>+<br>+ AmdInterfaceParams.StdHeader.ImageBasePtr = 0;<br>+ AmdInterfaceParams.AllocationMethod = ByHost;<br>+ AmdInterfaceParams.AgesaFunctionName = AMD_S3LATE_RESTORE;<br>+ AmdInterfaceParams.NewStructPtr = &AmdS3LateParams;<br>+ AmdInterfaceParams.StdHeader.CalloutPtr = &GetBiosCallout;<br>+ AmdS3LateParamsPtr = &AmdS3LateParams;<br>+ AmdInterfaceParams.NewStructSize = sizeof(AMD_S3LATE_PARAMS);<br>+<br>+ AmdCreateStruct(&AmdInterfaceParams);<br>+<br>+ get_s3_info(S3_DATA_TYPE_VOLATILE, &vol_data);<br>+ AmdS3LateParamsPtr->S3DataBlock.VolatileStorage = (void *)vol_data.offset;<br>+ AmdS3LateParamsPtr->S3DataBlock.VolatileStorageSize = vol_data.size;<br>+<br>+ Status = AmdS3LateRestore(AmdS3LateParamsPtr);<br>+ /* todo: debug status of UNSUPPORTED */<br>+ if (Status != AGESA_SUCCESS) {<br>+ agesawrapper_amdreadeventlog(AmdInterfaceParams.StdHeader.HeapStatus);<br>+ ASSERT(Status == AGESA_SUCCESS);<br>+ }<br>+<br>+ return Status;<br>+}<br>+<br>+AGESA_STATUS agesawrapper_fchs3earlyrestore(void)<br>+{<br>+ AGESA_STATUS status = AGESA_SUCCESS;<br>+ FCH_DATA_BLOCK FchParams;<br>+ AMD_CONFIG_PARAMS StdHeader;<br>+ struct cbmem_usage *amd_cbmem;<br>+<br>+ if (!acpi_s3_resume_allowed())<br>+ return AGESA_UNSUPPORTED;<br>+<br>+ amd_cbmem = (struct cbmem_usage *)GetHeapBase();<br>+ if (!amd_cbmem) {<br>+ printk(BIOS_ERR, "Error locating CBMEM_ID_RESUME_SCRATCH\n");<br>+ return AGESA_ERROR;<br>+ }<br>+<br>+ StdHeader.HeapStatus = HEAP_SYSTEM_MEM;<br>+ StdHeader.HeapBasePtr = (uintptr_t)&amd_cbmem->heap_base;<br>+ StdHeader.AltImageBasePtr = 0;<br>+ StdHeader.CalloutPtr = &GetBiosCallout;<br>+ StdHeader.Func = 0;<br>+ StdHeader.ImageBasePtr = 0;<br>+<br>+ memset(&FchParams, 0, sizeof(FchParams));<br>+<br>+ FchParams.StdHeader = &StdHeader;<br>+// todo<br>+// see example in southbridge/amd/agesa/hudson/resume.c<br>+// s3_resume_init_data(&FchParams);<br>+<br>+ FchInitS3EarlyRestore(&FchParams);<br>+<br>+ return status;<br>+}<br>+<br>+AGESA_STATUS agesawrapper_fchs3laterestore(void)<br>+{<br>+ AGESA_STATUS status = AGESA_SUCCESS;<br>+ AMD_CONFIG_PARAMS StdHeader;<br>+ FCH_DATA_BLOCK FchParams;<br>+ struct cbmem_usage *amd_cbmem;<br>+<br>+ if (!acpi_s3_resume_allowed())<br>+ return AGESA_UNSUPPORTED;<br>+<br>+ amd_cbmem = (struct cbmem_usage *)GetHeapBase();<br>+ if (!amd_cbmem) {<br>+ printk(BIOS_ERR, "Error locating CBMEM_ID_RESUME_SCRATCH\n");<br>+ return AGESA_ERROR;<br>+ }<br>+<br>+ StdHeader.HeapStatus = HEAP_SYSTEM_MEM;<br>+ StdHeader.HeapBasePtr = (uintptr_t)&amd_cbmem->heap_base;<br>+ StdHeader.AltImageBasePtr = 0;<br>+ StdHeader.CalloutPtr = &GetBiosCallout;<br>+ StdHeader.Func = 0;<br>+ StdHeader.ImageBasePtr = 0;<br>+<br>+ memset(&FchParams, 0, sizeof(FchParams));<br>+<br>+ FchParams.StdHeader = &StdHeader;<br>+// todo<br>+// see example in southbridge/amd/agesa/hudson/resume.c<br>+// s3_resume_init_data(&FchParams);<br>+ FchInitS3LateRestore(&FchParams);<br>+<br>+ // todo: still need to reload interrupt values? native agesa doesn't<br>+ // but old PI code used to.<br>+<br>+ return status;<br>+}<br>+<br> AGESA_STATUS agesawrapper_amdreadeventlog (UINT8 HeapStatus)<br> {<br> AGESA_STATUS Status;<br></pre><p>To view, visit <a href="https://review.coreboot.org/22730">change 22730</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/22730"/><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: I5c6a9c1a679a1c4d3f7d1d3b41a32efd0a2c2c01 </div>
<div style="display:none"> Gerrit-Change-Number: 22730 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Marshall Dawson <marshalldawson3rd@gmail.com> </div>