<p>Marshall Dawson has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/28472">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">x86/acpi: Add BERT table<br><br>Create a structure for the Boot Error Record Table, and a generic<br>table generator function.<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: Ibeef4347678598f9f967797202a4ae6b25ee5538<br>Signed-off-by: Marshall Dawson <marshalldawson3rd@gmail.com><br>---<br>M src/arch/x86/acpi.c<br>M src/arch/x86/include/arch/acpi.h<br>2 files changed, 29 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/72/28472/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/arch/x86/acpi.c b/src/arch/x86/acpi.c</span><br><span>index d334eb3..d75d889 100644</span><br><span>--- a/src/arch/x86/acpi.c</span><br><span>+++ b/src/arch/x86/acpi.c</span><br><span>@@ -958,6 +958,27 @@</span><br><span>       header->checksum = acpi_checksum((void *)hest, header->length);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* ACPI 3.0b */</span><br><span style="color: hsl(120, 100%, 40%);">+void acpi_write_bert(acpi_bert_t *bert, uintptr_t region, size_t length)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  acpi_header_t *header = &(bert->header);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     memset(bert, 0, sizeof(acpi_bert_t));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       memcpy(header->signature, "BERT", 4);</span><br><span style="color: hsl(120, 100%, 40%);">+    memcpy(header->oem_id, OEM_ID, 6);</span><br><span style="color: hsl(120, 100%, 40%);">+ memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8);</span><br><span style="color: hsl(120, 100%, 40%);">+       memcpy(header->asl_compiler_id, ASLC, 4);</span><br><span style="color: hsl(120, 100%, 40%);">+  header->length += sizeof(acpi_bert_t);</span><br><span style="color: hsl(120, 100%, 40%);">+     header->revision = get_acpi_table_revision(BERT);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        bert->error_region = region;</span><br><span style="color: hsl(120, 100%, 40%);">+       bert->region_length = length;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Calculate checksums. */</span><br><span style="color: hsl(120, 100%, 40%);">+    header->checksum = acpi_checksum((void *)bert, header->length);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #if IS_ENABLED(CONFIG_COMMON_FADT)</span><br><span> void acpi_create_fadt(acpi_fadt_t *fadt, acpi_facs_t *facs, void *dsdt)</span><br><span> {</span><br><span>diff --git a/src/arch/x86/include/arch/acpi.h b/src/arch/x86/include/arch/acpi.h</span><br><span>index cf223e5..6991235 100644</span><br><span>--- a/src/arch/x86/include/arch/acpi.h</span><br><span>+++ b/src/arch/x86/include/arch/acpi.h</span><br><span>@@ -644,6 +644,13 @@</span><br><span>         u32 error_threshold_win;</span><br><span> } __packed acpi_hest_hen_t;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* BERT (Boot Error Record Table) */</span><br><span style="color: hsl(120, 100%, 40%);">+typedef struct acpi_bert {</span><br><span style="color: hsl(120, 100%, 40%);">+ struct acpi_table_header header;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 region_length;</span><br><span style="color: hsl(120, 100%, 40%);">+    u64 error_region;</span><br><span style="color: hsl(120, 100%, 40%);">+} __packed acpi_bert_t;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Generic Error Data Entry. */</span><br><span> typedef struct acpi_hest_generic_data {</span><br><span>   guid_t section_type;</span><br><span>@@ -751,6 +758,7 @@</span><br><span> unsigned long acpi_fill_mcfg(unsigned long current);</span><br><span> unsigned long acpi_fill_ivrs_ioapic(acpi_ivrs_t *ivrs, unsigned long current);</span><br><span> void acpi_create_ssdt_generator(acpi_header_t *ssdt, const char *oem_table_id);</span><br><span style="color: hsl(120, 100%, 40%);">+void acpi_write_bert(acpi_bert_t *bert, uintptr_t region, size_t length);</span><br><span> void acpi_create_fadt(acpi_fadt_t *fadt, acpi_facs_t *facs, void *dsdt);</span><br><span> #if IS_ENABLED(CONFIG_COMMON_FADT)</span><br><span> void acpi_fill_fadt(acpi_fadt_t *fadt);</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/28472">change 28472</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/28472"/><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: Ibeef4347678598f9f967797202a4ae6b25ee5538 </div>
<div style="display:none"> Gerrit-Change-Number: 28472 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Marshall Dawson <marshalldawson3rd@gmail.com> </div>