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