<p>Raul Rangel has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/25343">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">include/memory_info.h: Change serial number field from 5 bytes to 4<br><br>dimm_info.serial had a strange contract. The SPD spec defines a 4 byte<br>serial number. dimm_info.serial required a 4 character ascii string with<br>a null terminator.<br><br>This change makes the serial field so it matches the SPD spec.<br>smbios.c will then translate the byte array into hex and set it on the<br>smbios table.<br><br>There were only two callers that set the serial number:<br>* haswell/raminit.c: already does a memcpy(serial, spd->serial, 4), so<br>  it already matches the new contract.<br>* amd_late_init.c: Previously copied the last 4 characters. Requires<br>  decoding the serial number into a byte array.<br><br>google/cyan/spd/spd.c: This could be updated to pass the serial number,<br>but it uses a hard coded spd.bin.<br><br>Testing this on grunt, dmidecode now shows the full serial number:<br>        Serial Number: 00000000<br><br>BUG=b:65403853<br>TEST=tested on grunt<br><br>Change-Id: Ifc58ad9ea4cdd2abe06a170a39b1f32680e7b299<br>Signed-off-by: Raul E Rangel <rrangel@chromium.org><br>---<br>M src/arch/x86/smbios.c<br>A src/include/hexutil.h<br>M src/include/memory_info.h<br>M src/lib/Makefile.inc<br>A src/lib/hexutil.c<br>M src/soc/amd/common/block/pi/amd_late_init.c<br>6 files changed, 154 insertions(+), 33 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/43/25343/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/arch/x86/smbios.c b/src/arch/x86/smbios.c</span><br><span>index 7079374..21125c4 100644</span><br><span>--- a/src/arch/x86/smbios.c</span><br><span>+++ b/src/arch/x86/smbios.c</span><br><span>@@ -29,6 +29,7 @@</span><br><span> #include <memory_info.h></span><br><span> #include <spd.h></span><br><span> #include <cbmem.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <hexutil.h></span><br><span> #if IS_ENABLED(CONFIG_CHROMEOS)</span><br><span> #include <vendorcode/google/chromeos/gnvs.h></span><br><span> #endif</span><br><span>@@ -251,6 +252,16 @@</span><br><span>        }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Encodes the SPD serial number into hex */</span><br><span style="color: hsl(120, 100%, 40%);">+static void smbios_fill_dimm_serial_number(const struct dimm_info *dimm,</span><br><span style="color: hsl(120, 100%, 40%);">+                                       struct smbios_type17 *t)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        char serial[sizeof(dimm->serial) * 2 + 1];</span><br><span style="color: hsl(120, 100%, 40%);">+ encode_as_hex_string(dimm->serial, sizeof(dimm->serial), serial,</span><br><span style="color: hsl(120, 100%, 40%);">+                             sizeof(serial));</span><br><span style="color: hsl(120, 100%, 40%);">+ t->serial_number = smbios_add_string(t->eos, serial);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static int create_smbios_type17_for_dimm(struct dimm_info *dimm,</span><br><span>                                          unsigned long *current, int *handle)</span><br><span> {</span><br><span>@@ -290,13 +301,7 @@</span><br><span>    }</span><br><span> </span><br><span>        smbios_fill_dimm_manufacturer_from_id(dimm->mod_id, t);</span><br><span style="color: hsl(0, 100%, 40%);">-      /* put '\0' in the end of data */</span><br><span style="color: hsl(0, 100%, 40%);">-       dimm->serial[DIMM_INFO_SERIAL_SIZE - 1] = '\0';</span><br><span style="color: hsl(0, 100%, 40%);">-      if (dimm->serial[0] == 0)</span><br><span style="color: hsl(0, 100%, 40%);">-            t->serial_number = smbios_add_string(t->eos, "None");</span><br><span style="color: hsl(0, 100%, 40%);">-   else</span><br><span style="color: hsl(0, 100%, 40%);">-            t->serial_number = smbios_add_string(t->eos,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                 (const char *)dimm->serial);</span><br><span style="color: hsl(120, 100%, 40%);">+    smbios_fill_dimm_serial_number(dimm, t);</span><br><span> </span><br><span>         snprintf(locator, sizeof(locator), "Channel-%d-DIMM-%d",</span><br><span>           dimm->channel_num, dimm->dimm_num);</span><br><span>diff --git a/src/include/hexutil.h b/src/include/hexutil.h</span><br><span>new file mode 100644</span><br><span>index 0000000..e57cd34</span><br><span>--- /dev/null</span><br><span>+++ b/src/include/hexutil.h</span><br><span>@@ -0,0 +1,53 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright 2018 Google Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</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%);">+#ifndef HEXUTIL_H</span><br><span style="color: hsl(120, 100%, 40%);">+#define HEXUTIL_H</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <stddef.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <stdint.h></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%);">+ * Decodes a hex character [0-9A-Za-z] into a byte.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Invalid characters are mapped to 0.</span><br><span style="color: hsl(120, 100%, 40%);">+ * */</span><br><span style="color: hsl(120, 100%, 40%);">+uint8_t decode_hex_character(char hex);</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%);">+ * Decodes a hex string into a byte array.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Examples:</span><br><span style="color: hsl(120, 100%, 40%);">+ *  * "01AF" => {0x01, 0xAF}</span><br><span style="color: hsl(120, 100%, 40%);">+ *  * "1AF" => {0x01, 0xAF}</span><br><span style="color: hsl(120, 100%, 40%);">+ *  * "1AF" => {0x00, 0x00, 0x01, 0xAF} w/ 4 byte dest buffer.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * @param src_size size of the src buffer</span><br><span style="color: hsl(120, 100%, 40%);">+ * @param dest_size must be at least (strlen(src) + 1) / 2 in size. If the</span><br><span style="color: hsl(120, 100%, 40%);">+ * buffer is bigger than required the most significant bytes are cleared.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+void decode_hex_string(const char *src, size_t src_size, uint8_t *dest,</span><br><span style="color: hsl(120, 100%, 40%);">+                size_t dest_size);</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%);">+ * Encodes a byte array into a hex string.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * e.g., {0x01, 0x02} => "0102"</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * @param dest_size must be at least (src_size * 2 + 1).</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+void encode_as_hex_string(const uint8_t *src, size_t src_size, char *dest,</span><br><span style="color: hsl(120, 100%, 40%);">+                   size_t dest_size);</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span>diff --git a/src/include/memory_info.h b/src/include/memory_info.h</span><br><span>index 4613015..d26d789 100644</span><br><span>--- a/src/include/memory_info.h</span><br><span>+++ b/src/include/memory_info.h</span><br><span>@@ -19,7 +19,7 @@</span><br><span> #include <stdint.h></span><br><span> #include <compiler.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define DIMM_INFO_SERIAL_SIZE          5</span><br><span style="color: hsl(120, 100%, 40%);">+#define DIMM_INFO_SERIAL_SIZE                4</span><br><span> #define DIMM_INFO_PART_NUMBER_SIZE 19</span><br><span> #define DIMM_INFO_TOTAL                   8       /* Maximum num of dimm is 8 */</span><br><span> </span><br><span>@@ -46,11 +46,7 @@</span><br><span>      uint8_t dimm_num;</span><br><span>    uint8_t bank_locator;</span><br><span>        /*</span><br><span style="color: hsl(0, 100%, 40%);">-       * The last byte is '\0' for the end of string.</span><br><span style="color: hsl(0, 100%, 40%);">-  *</span><br><span style="color: hsl(0, 100%, 40%);">-       * Even though the SPD spec defines this field as a byte array the value</span><br><span style="color: hsl(0, 100%, 40%);">-         * is passed directly to SMBIOS as a string, and thus must be printable</span><br><span style="color: hsl(0, 100%, 40%);">-  * ASCII.</span><br><span style="color: hsl(120, 100%, 40%);">+      * SPD serial number.</span><br><span>         */</span><br><span>  uint8_t serial[DIMM_INFO_SERIAL_SIZE];</span><br><span>       /*</span><br><span>diff --git a/src/lib/Makefile.inc b/src/lib/Makefile.inc</span><br><span>index 960b5cb..3ae77a6 100644</span><br><span>--- a/src/lib/Makefile.inc</span><br><span>+++ b/src/lib/Makefile.inc</span><br><span>@@ -133,6 +133,7 @@</span><br><span> ramstage-$(CONFIG_GENERIC_GPIO_LIB) += gpio.c</span><br><span> ramstage-$(CONFIG_GENERIC_UDELAY) += timer.c</span><br><span> ramstage-y += b64_decode.c</span><br><span style="color: hsl(120, 100%, 40%);">+ramstage-y += hexutil.c</span><br><span> ramstage-$(CONFIG_ACPI_NHLT) += nhlt.c</span><br><span> </span><br><span> romstage-y += cbmem_common.c</span><br><span>diff --git a/src/lib/hexutil.c b/src/lib/hexutil.c</span><br><span>new file mode 100644</span><br><span>index 0000000..7c335a1</span><br><span>--- /dev/null</span><br><span>+++ b/src/lib/hexutil.c</span><br><span>@@ -0,0 +1,73 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright 2018 Google Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</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%);">+#include <hexutil.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <string.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+uint8_t decode_hex_character(char hex)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        if (isdigit(hex))</span><br><span style="color: hsl(120, 100%, 40%);">+             return hex - '0';</span><br><span style="color: hsl(120, 100%, 40%);">+     else if (isxdigit(hex) && isupper(hex))</span><br><span style="color: hsl(120, 100%, 40%);">+               return hex - 'A' + 10;</span><br><span style="color: hsl(120, 100%, 40%);">+        else if (isxdigit(hex) && islower(hex))</span><br><span style="color: hsl(120, 100%, 40%);">+               return hex - 'a' + 10;</span><br><span style="color: hsl(120, 100%, 40%);">+        else</span><br><span style="color: hsl(120, 100%, 40%);">+          return 0;</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%);">+void decode_hex_string(const char *src, size_t src_size, uint8_t *dest,</span><br><span style="color: hsl(120, 100%, 40%);">+                      size_t dest_size)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   const size_t src_len = strnlen(src, src_size - 1);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  for (size_t i = 0; i < dest_size; ++i) {</span><br><span style="color: hsl(120, 100%, 40%);">+           int offset = (src_len - 1) - i * 2;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+         uint8_t byte = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           if (offset >= 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 char low = src[offset];</span><br><span style="color: hsl(120, 100%, 40%);">+                       byte |= decode_hex_character(low);</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 (offset >= 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 char high = src[offset - 1];</span><br><span style="color: hsl(120, 100%, 40%);">+                  byte |= decode_hex_character(high) << 4;</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%);">+           dest[dest_size - i - 1] = byte;</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 style="color: hsl(120, 100%, 40%);">+void encode_as_hex_string(const uint8_t *src, size_t src_size, char *dest,</span><br><span style="color: hsl(120, 100%, 40%);">+                      size_t dest_size)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        for (size_t i = 0; i < src_size; ++i) {</span><br><span style="color: hsl(120, 100%, 40%);">+            size_t dest_offset = i * 2;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+         if (dest_offset < dest_size) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     if (dest_offset + 3 <= dest_size) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                snprintf(dest + dest_offset, 3, "%02hhx",</span><br><span style="color: hsl(120, 100%, 40%);">+                                    src[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+                     } else if (dest_offset + 2 <= dest_size) {</span><br><span style="color: hsl(120, 100%, 40%);">+                         snprintf(dest + dest_offset, 2, "%01hhx",</span><br><span style="color: hsl(120, 100%, 40%);">+                                    src[i] >> 4);</span><br><span style="color: hsl(120, 100%, 40%);">+                  } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              dest[dest_offset] = '\0';</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 style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/soc/amd/common/block/pi/amd_late_init.c b/src/soc/amd/common/block/pi/amd_late_init.c</span><br><span>index 48c1718..6b09987 100644</span><br><span>--- a/src/soc/amd/common/block/pi/amd_late_init.c</span><br><span>+++ b/src/soc/amd/common/block/pi/amd_late_init.c</span><br><span>@@ -15,11 +15,12 @@</span><br><span> </span><br><span> #include <arch/acpi.h></span><br><span> #include <bootstate.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <cbmem.h></span><br><span> #include <console/console.h></span><br><span> #include <device/device.h></span><br><span> #include <device/pci_def.h></span><br><span> #include <device/pci_ops.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <cbmem.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <hexutil.h></span><br><span> #include <memory_info.h></span><br><span> </span><br><span> #include <amdblocks/agesawrapper.h></span><br><span>@@ -27,20 +28,9 @@</span><br><span> </span><br><span> static void transfer_memory_info(TYPE17_DMI_INFO *dmi17, struct dimm_info *dimm)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  size_t len, destlen;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint32_t offset;</span><br><span style="color: hsl(120, 100%, 40%);">+      decode_hex_string(dmi17->SerialNumber, sizeof(dmi17->SerialNumber),</span><br><span style="color: hsl(120, 100%, 40%);">+                       dimm->serial, sizeof(dimm->serial));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        len = strnlen(dmi17->SerialNumber, sizeof(dmi17->SerialNumber)) + 1;</span><br><span style="color: hsl(0, 100%, 40%);">-      destlen = sizeof(dimm->serial);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      if (len > destlen) {</span><br><span style="color: hsl(0, 100%, 40%);">-         offset = len - destlen;</span><br><span style="color: hsl(0, 100%, 40%);">-         len = destlen;</span><br><span style="color: hsl(0, 100%, 40%);">-  } else</span><br><span style="color: hsl(0, 100%, 40%);">-          offset = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     strncpy((char *)dimm->serial, &dmi17->SerialNumber[offset], len);</span><br><span>  dimm->dimm_size = dmi17->ExtSize;</span><br><span>      dimm->ddr_type = dmi17->MemoryType;</span><br><span>    dimm->ddr_frequency = dmi17->Speed;</span><br><span>@@ -55,6 +45,10 @@</span><br><span> </span><br><span> static void print_dimm_info(const struct dimm_info *dimm)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+  char serial[sizeof(dimm->serial) * 2 + 1];</span><br><span style="color: hsl(120, 100%, 40%);">+ encode_as_hex_string(dimm->serial, sizeof(dimm->serial), serial,</span><br><span style="color: hsl(120, 100%, 40%);">+                             sizeof(serial));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>      printk(RAM_SPEW,</span><br><span>            "CBMEM_ID_MEMINFO:\n"</span><br><span>              "  dimm_size: %u\n"</span><br><span>@@ -67,8 +61,8 @@</span><br><span>            "  mod_id: %hu\n"</span><br><span>          "  mod_type: 0x%hhx\n"</span><br><span>             "  bus_width: %hhu\n"</span><br><span style="color: hsl(0, 100%, 40%);">-         "  serial(%zu): %s\n"</span><br><span style="color: hsl(0, 100%, 40%);">-         "  module_part_number(%zu): %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+          "  serial: 0x%s\n"</span><br><span style="color: hsl(120, 100%, 40%);">+          "  module_part_number(%zu): '%s'\n",</span><br><span>               dimm->dimm_size,</span><br><span>          dimm->ddr_type,</span><br><span>           dimm->ddr_frequency,</span><br><span>@@ -79,8 +73,7 @@</span><br><span>          dimm->mod_id,</span><br><span>             dimm->mod_type,</span><br><span>           dimm->bus_width,</span><br><span style="color: hsl(0, 100%, 40%);">-             strlen((char *) dimm->serial),</span><br><span style="color: hsl(0, 100%, 40%);">-               (char *) dimm->serial,</span><br><span style="color: hsl(120, 100%, 40%);">+             serial,</span><br><span>              strlen((char *) dimm->module_part_number),</span><br><span>                (char *) dimm->module_part_number</span><br><span>  );</span><br><span>@@ -104,8 +97,8 @@</span><br><span>             "  FormFactor: 0x%x\n"</span><br><span>             "  DeviceLocator: %8s\n"</span><br><span>           "  BankLocator: %10s\n"</span><br><span style="color: hsl(0, 100%, 40%);">-               "  SerialNumber(%zu): %9s\n"</span><br><span style="color: hsl(0, 100%, 40%);">-          "  PartNumber(%zu): %19s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+        "  SerialNumber(%zu): '%9s'\n"</span><br><span style="color: hsl(120, 100%, 40%);">+              "  PartNumber(%zu): '%19s'\n",</span><br><span>             dmi17->Handle,</span><br><span>            dmi17->TotalWidth,</span><br><span>                dmi17->DataWidth,</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/25343">change 25343</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/25343"/><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: Ifc58ad9ea4cdd2abe06a170a39b1f32680e7b299 </div>
<div style="display:none"> Gerrit-Change-Number: 25343 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Raul Rangel <rrangel@chromium.org> </div>