[coreboot-gerrit] Change in coreboot[master]: src/x86/smbios: Add support for table 38
Patrick Rudolph (Code Review)
gerrit at coreboot.org
Tue Mar 27 16:27:31 CEST 2018
Hello Patrick Rudolph,
I'd like you to do a code review. Please visit
https://review.coreboot.org/25386
to review the following change.
Change subject: src/x86/smbios: Add support for table 38
......................................................................
src/x86/smbios: Add support for table 38
Add support for table 38 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>
---
M src/arch/x86/smbios.c
M src/include/smbios.h
M src/mainboard/hp/compaq_8200_elite_sff/mainboard.c
3 files changed, 66 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/86/25386/1
diff --git a/src/arch/x86/smbios.c b/src/arch/x86/smbios.c
index 7079374..4365166 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
@@ -618,6 +619,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 7ad4aa6..84f7449 100644
--- a/src/mainboard/hp/compaq_8200_elite_sff/mainboard.c
+++ b/src/mainboard/hp/compaq_8200_elite_sff/mainboard.c
@@ -17,12 +17,36 @@
#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(device_t dev, int *handle,
+ unsigned long *current)
+{
+ int len = 0;
+
+ len += smbios_write_type38(
+ current, handle,
+ SMBIOS_BMC_INTERFACE_KCS,
+ 0x20, // IMPI Version
+ 0x20, // I2C address
+ 0xff, // no NV storage
+ 0xca2 | 1, // IO port interface address
+ 0,
+ 0); // no IRQ
+
+ return len;
+}
+#endif
static void mainboard_enable(device_t 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: newchange
Gerrit-Change-Id: I66b4c4658da9d44941430d8040384d022d76f51e
Gerrit-Change-Number: 25386
Gerrit-PatchSet: 1
Gerrit-Owner: Patrick Rudolph <patrick.rudolph at 9elements.com>
Gerrit-Reviewer: Patrick Rudolph <siro at das-labor.org>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20180327/4c92ae3c/attachment.html>
More information about the coreboot-gerrit
mailing list