Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8881cdce authored by Bjorn Helgaas's avatar Bjorn Helgaas Committed by Linus Torvalds
Browse files

dmi: log board, system, and BIOS information



Put basic system information in the dmesg log.  There are lots of dmesg
logs on the web, and it would be useful if they contained this information
for debugging platform problems.  "BOARD/PRODUCT" format copied from
show_regs_common(), which is used in the oops path.

Signed-off-by: default avatarBjorn Helgaas <bjorn.helgaas@hp.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent d31eb519
Loading
Loading
Loading
Loading
+31 −1
Original line number Original line Diff line number Diff line
@@ -2,6 +2,7 @@
#include <linux/string.h>
#include <linux/string.h>
#include <linux/init.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/module.h>
#include <linux/ctype.h>
#include <linux/dmi.h>
#include <linux/dmi.h>
#include <linux/efi.h>
#include <linux/efi.h>
#include <linux/bootmem.h>
#include <linux/bootmem.h>
@@ -361,6 +362,33 @@ static void __init dmi_decode(const struct dmi_header *dm, void *dummy)
	}
	}
}
}


static void __init print_filtered(const char *info)
{
	const char *p;

	if (!info)
		return;

	for (p = info; *p; p++)
		if (isprint(*p))
			printk(KERN_CONT "%c", *p);
		else
			printk(KERN_CONT "\\x%02x", *p & 0xff);
}

static void __init dmi_dump_ids(void)
{
	printk(KERN_DEBUG "DMI: ");
	print_filtered(dmi_get_system_info(DMI_BOARD_NAME));
	printk(KERN_CONT "/");
	print_filtered(dmi_get_system_info(DMI_PRODUCT_NAME));
	printk(KERN_CONT ", BIOS ");
	print_filtered(dmi_get_system_info(DMI_BIOS_VERSION));
	printk(KERN_CONT " ");
	print_filtered(dmi_get_system_info(DMI_BIOS_DATE));
	printk(KERN_CONT "\n");
}

static int __init dmi_present(const char __iomem *p)
static int __init dmi_present(const char __iomem *p)
{
{
	u8 buf[15];
	u8 buf[15];
@@ -381,9 +409,11 @@ static int __init dmi_present(const char __iomem *p)
			       buf[14] >> 4, buf[14] & 0xF);
			       buf[14] >> 4, buf[14] & 0xF);
		else
		else
			printk(KERN_INFO "DMI present.\n");
			printk(KERN_INFO "DMI present.\n");
		if (dmi_walk_early(dmi_decode) == 0)
		if (dmi_walk_early(dmi_decode) == 0) {
			dmi_dump_ids();
			return 0;
			return 0;
		}
		}
	}
	return 1;
	return 1;
}
}