<p>Marshall Dawson has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/28478">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">amd/stoneyridge: Construct ACPI BERT table<br><br>Add a Boot Error Record Table to the ACPI information.  Avoid a driver<br>error message by skipping the table altogether when no errors are found,<br>or support isn't built in.<br><br>BUG=b:65446699<br>TEST=inspect BERT region, and dmesg, on full patch stack.  Use test<br>     data plus a failing Grunt system.<br><br>Change-Id: I6fe38eefacaad0bc73d0cb4ae44a339a45857128<br>Signed-off-by: Marshall Dawson <marshalldawson3rd@gmail.com><br>---<br>M src/soc/amd/stoneyridge/northbridge.c<br>1 file changed, 23 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/78/28478/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/soc/amd/stoneyridge/northbridge.c b/src/soc/amd/stoneyridge/northbridge.c</span><br><span>index c78ca7c..912daa0 100644</span><br><span>--- a/src/soc/amd/stoneyridge/northbridge.c</span><br><span>+++ b/src/soc/amd/stoneyridge/northbridge.c</span><br><span>@@ -33,6 +33,7 @@</span><br><span> #include <amdblocks/agesawrapper.h></span><br><span> #include <amdblocks/agesawrapper_call.h></span><br><span> #include <agesa_headers.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <soc/cpu.h></span><br><span> #include <soc/northbridge.h></span><br><span> #include <soc/southbridge.h></span><br><span> #include <soc/pci_devs.h></span><br><span>@@ -40,6 +41,7 @@</span><br><span> #include <stdint.h></span><br><span> #include <stdlib.h></span><br><span> #include <string.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <arch/bert_storage.h></span><br><span> </span><br><span> static void set_io_addr_reg(struct device *dev, u32 nodeid, u32 linkn, u32 reg,</span><br><span>                         u32 io_min, u32 io_max)</span><br><span>@@ -228,6 +230,7 @@</span><br><span>        acpi_header_t *alib;</span><br><span>         acpi_header_t *ivrs;</span><br><span>         acpi_hest_t *hest;</span><br><span style="color: hsl(120, 100%, 40%);">+    acpi_bert_t *bert;</span><br><span> </span><br><span>       /* HEST */</span><br><span>   current = ALIGN(current, 8);</span><br><span>@@ -236,6 +239,26 @@</span><br><span>  acpi_add_table(rsdp, (void *)current);</span><br><span>       current += ((acpi_header_t *)current)->length;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* BERT */</span><br><span style="color: hsl(120, 100%, 40%);">+    if (IS_ENABLED(CONFIG_ACPI_BERT) && bert_errors_present()) {</span><br><span style="color: hsl(120, 100%, 40%);">+          /* Skip the table if no errors are present.  ACPI driver reports</span><br><span style="color: hsl(120, 100%, 40%);">+               * a table with a 0-length region:</span><br><span style="color: hsl(120, 100%, 40%);">+             *   BERT: [Firmware Bug]: table invalid.</span><br><span style="color: hsl(120, 100%, 40%);">+              */</span><br><span style="color: hsl(120, 100%, 40%);">+           void *rgn;</span><br><span style="color: hsl(120, 100%, 40%);">+            size_t size;</span><br><span style="color: hsl(120, 100%, 40%);">+          bert_errors_region(&rgn, &size);</span><br><span style="color: hsl(120, 100%, 40%);">+              if (!rgn) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   printk(BIOS_ERR, "Error: Can't find BERT storage area\n");</span><br><span style="color: hsl(120, 100%, 40%);">+              } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      current = ALIGN(current, 8);</span><br><span style="color: hsl(120, 100%, 40%);">+                  bert = (acpi_bert_t *)current;</span><br><span style="color: hsl(120, 100%, 40%);">+                        acpi_write_bert((void *)current, (uintptr_t)rgn, size);</span><br><span style="color: hsl(120, 100%, 40%);">+                       acpi_add_table(rsdp, (void *)current);</span><br><span style="color: hsl(120, 100%, 40%);">+                        current += ((acpi_header_t *)current)->length;</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%);">+</span><br><span>  current = ALIGN(current, 8);</span><br><span>         printk(BIOS_DEBUG, "ACPI:    * IVRS at %lx\n", current);</span><br><span>   ivrs = agesawrapper_getlateinitptr(PICK_IVRS);</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/28478">change 28478</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/28478"/><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: I6fe38eefacaad0bc73d0cb4ae44a339a45857128 </div>
<div style="display:none"> Gerrit-Change-Number: 28478 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Marshall Dawson <marshalldawson3rd@gmail.com> </div>