diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c index c5f7b4e9eb6c..0f7bc9db3d0d 100644 --- a/drivers/firmware/dmi_scan.c +++ b/drivers/firmware/dmi_scan.c @@ -92,6 +92,9 @@ static void dmi_table(u8 *buf, int len, int num, while ((i < num) && (data - buf + sizeof(struct dmi_header)) <= len) { const struct dmi_header *dm = (const struct dmi_header *)data; + pr_err("====== Processing SMBIOS table entry at %p, type 0x%x, length 0x%x\n", + data, dm->type, dm->length); + /* * 7.45 End-of-Table (Type 127) [SMBIOS reference spec v3.0.0] */ @@ -126,6 +129,9 @@ static int __init dmi_walk_early(void (*decode)(const struct dmi_header *, if (buf == NULL) return -1; + pr_err("====== Remapped SMBIOS table 0x%llx at %p, size 0x%x, num 0x%x\n", + dmi_base, buf, dmi_len, dmi_num); + dmi_table(buf, dmi_len, dmi_num, decode, NULL); add_device_randomness(buf, dmi_len); @@ -495,10 +501,17 @@ static int __init dmi_present(const u8 *buf) buf += 16; if (memcmp(buf, "_DMI_", 5) == 0 && dmi_checksum(buf, 15)) { + int i; + dmi_num = get_unaligned_le16(buf + 12); dmi_len = get_unaligned_le16(buf + 6); dmi_base = get_unaligned_le32(buf + 8); + pr_err("====== Decoding _DMI_ header:\n"); + for (i = 0; i < 16; i++) + pr_cont("%02x ", buf[i]); + pr_cont("\n"); + if (dmi_walk_early(dmi_decode) == 0) { if (smbios_ver) { dmi_ver = smbios_ver; @@ -617,7 +630,7 @@ void __init dmi_scan_machine(void) memset(buf, 0, 16); for (q = p; q < p + 0x10000; q += 16) { memcpy_fromio(buf + 16, q, 16); - if (!dmi_smbios3_present(buf) || !dmi_present(buf)) { + if (/*!dmi_smbios3_present(buf) ||*/ !dmi_present(buf)) { dmi_available = 1; dmi_early_unmap(p, 0x10000); goto out;