[coreboot-gerrit] Change in coreboot[master]: arch/x86/smbios: Add support for table 38

Philipp Deppenwiese (Code Review) gerrit at coreboot.org
Thu Jul 19 15:50:33 CEST 2018


Philipp Deppenwiese has submitted this change and it was merged. ( https://review.coreboot.org/25386 )

Change subject: arch/x86/smbios: Add support for table 38
......................................................................

arch/x86/smbios: Add support for table 38

Add support for SMBIOS table 'IPMI Device Information' and use it on
HP Compaq 8200 Elite SFF.

Tested on HP Compaq 8200. dmidecode prints the table and sensors-detect scans
for IPMI compatible devices.

Change-Id: I66b4c4658da9d44941430d8040384d022d76f51e
Signed-off-by: Patrick Rudolph <siro at das-labor.org>
Reviewed-on: https://review.coreboot.org/25386
Reviewed-by: Felix Held <felix-coreboot at felixheld.de>
Reviewed-by: Philipp Deppenwiese <zaolin.daisuki at gmail.com>
Tested-by: build bot (Jenkins) <no-reply at coreboot.org>
---
M src/arch/x86/smbios.c
M src/include/smbios.h
M src/mainboard/hp/compaq_8200_elite_sff/mainboard.c
3 files changed, 67 insertions(+), 0 deletions(-)

Approvals:
  build bot (Jenkins): Verified
  Philipp Deppenwiese: Looks good to me, approved
  Felix Held: Looks good to me, approved



diff --git a/src/arch/x86/smbios.c b/src/arch/x86/smbios.c
index da1b711..582ae8d 100644
--- a/src/arch/x86/smbios.c
+++ b/src/arch/x86/smbios.c
@@ -4,6 +4,7 @@
  * Copyright (C) 2015 Timothy Pearson <tpearson at raptorengineeringinc.com>,
  * Raptor Engineering
  * Copyright (C) 2011 Sven Schnelle <svens at stackframe.org>
+ * Copyright (C) 2018 Patrick Rudolph <siro at das-labor.org>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -629,6 +630,33 @@
 	return len;
 }
 
+int smbios_write_type38(unsigned long *current, int *handle,
+			const enum smbios_bmc_interface_type interface_type,
+			const u8 ipmi_rev, const u8 i2c_addr, const u8 nv_addr,
+			const u64 base_addr, const u8 base_modifier,
+			const u8 irq)
+{
+	struct smbios_type38 *t = (struct smbios_type38 *)*current;
+	int len = sizeof(struct smbios_type38);
+
+	memset(t, 0, sizeof(struct smbios_type38));
+	t->type = SMBIOS_IPMI_DEVICE_INFORMATION;
+	t->handle = *handle;
+	t->length = len - 2;
+	t->interface_type = interface_type;
+	t->ipmi_rev = ipmi_rev;
+	t->i2c_slave_addr = i2c_addr;
+	t->nv_storage_addr = nv_addr;
+	t->base_address = base_addr;
+	t->base_address_modifier = base_modifier;
+	t->irq = irq;
+
+	*current += len;
+	*handle += 1;
+
+	return len;
+}
+
 int smbios_write_type41(unsigned long *current, int *handle,
 			const char *name, u8 instance, u16 segment,
 			u8 bus, u8 device, u8 function)
diff --git a/src/include/smbios.h b/src/include/smbios.h
index 8fe507e..631a1a5 100644
--- a/src/include/smbios.h
+++ b/src/include/smbios.h
@@ -26,6 +26,12 @@
 int smbios_string_table_len(u8 *start);
 
 /* Used by mainboard to add an on-board device */
+enum smbios_bmc_interface_type;
+int smbios_write_type38(unsigned long *current, int *handle,
+			const enum smbios_bmc_interface_type interface_type,
+			const u8 ipmi_rev, const u8 i2c_addr, const u8 nv_addr,
+			const u64 base_addr, const u8 base_modifier,
+			const u8 irq);
 int smbios_write_type41(unsigned long *current, int *handle,
 			const char *name, u8 instance, u16 segment,
 			u8 bus, u8 device, u8 function);
@@ -216,6 +222,7 @@
 	SMBIOS_MEMORY_DEVICE = 17,
 	SMBIOS_MEMORY_ARRAY_MAPPED_ADDRESS = 19,
 	SMBIOS_SYSTEM_BOOT_INFORMATION = 32,
+	SMBIOS_IPMI_DEVICE_INFORMATION = 38,
 	SMBIOS_ONBOARD_DEVICES_EXTENDED_INFORMATION = 41,
 	SMBIOS_END_OF_TABLE = 127,
 } smbios_struct_type_t;
@@ -497,6 +504,13 @@
 	u8 irq;
 } __packed;
 
+enum smbios_bmc_interface_type {
+	SMBIOS_BMC_INTERFACE_UNKNOWN = 0,
+	SMBIOS_BMC_INTERFACE_KCS,
+	SMBIOS_BMC_INTERFACE_SMIC,
+	SMBIOS_BMC_INTERFACE_BLOCK,
+};
+
 typedef enum {
 	SMBIOS_DEVICE_TYPE_OTHER = 0x01,
 	SMBIOS_DEVICE_TYPE_UNKNOWN,
diff --git a/src/mainboard/hp/compaq_8200_elite_sff/mainboard.c b/src/mainboard/hp/compaq_8200_elite_sff/mainboard.c
index 527b0d1..a1b5a09 100644
--- a/src/mainboard/hp/compaq_8200_elite_sff/mainboard.c
+++ b/src/mainboard/hp/compaq_8200_elite_sff/mainboard.c
@@ -17,12 +17,37 @@
 #include <device/device.h>
 #include <drivers/intel/gma/int15.h>
 #include <southbridge/intel/bd82x6x/pch.h>
+#include <smbios.h>
+
+#if IS_ENABLED(CONFIG_GENERATE_SMBIOS_TABLES)
+static int mainboard_smbios_data(struct device *dev, int *handle,
+				 unsigned long *current)
+{
+	int len = 0;
+
+	// add IPMI Device Information
+	len += smbios_write_type38(
+		current, handle,
+		SMBIOS_BMC_INTERFACE_KCS,
+		0x20, // IPMI Version
+		0x20, // I2C address
+		0xff, // no NV storage
+		0, // IO port interface address
+		0,
+		0); // no IRQ
+
+	return len;
+}
+#endif
 
 static void mainboard_enable(struct device *dev)
 {
 	install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_NONE,
 					GMA_INT15_PANEL_FIT_DEFAULT,
 					GMA_INT15_BOOT_DISPLAY_DEFAULT, 0);
+#if IS_ENABLED(CONFIG_GENERATE_SMBIOS_TABLES)
+	dev->ops->get_smbios_data = mainboard_smbios_data;
+#endif
 }
 
 struct chip_operations mainboard_ops = {

-- 
To view, visit https://review.coreboot.org/25386
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: I66b4c4658da9d44941430d8040384d022d76f51e
Gerrit-Change-Number: 25386
Gerrit-PatchSet: 11
Gerrit-Owner: Patrick Rudolph <patrick.rudolph at 9elements.com>
Gerrit-Reviewer: Felix Held <felix-coreboot at felixheld.de>
Gerrit-Reviewer: Jonathan Neuschäfer <j.neuschaefer at gmx.net>
Gerrit-Reviewer: Patrick Rudolph <siro at das-labor.org>
Gerrit-Reviewer: Paul Menzel <paulepanter at users.sourceforge.net>
Gerrit-Reviewer: Philipp Deppenwiese <zaolin.daisuki at gmail.com>
Gerrit-Reviewer: build bot (Jenkins) <no-reply at coreboot.org>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20180719/82f7752b/attachment.html>


More information about the coreboot-gerrit mailing list