aboutsummaryrefslogtreecommitdiff
path: root/src/mainboard/dell/optiplex_9010/smihandler.c
diff options
context:
space:
mode:
authorMichał Żygowski <michal.zygowski@3mdeb.com>2020-04-13 21:42:24 +0200
committerMichał Żygowski <michal.zygowski@3mdeb.com>2020-05-16 17:38:46 +0000
commit72f06ca554e6f7b155a6b4e2b8ce57942288ac2c (patch)
treebb4341a075b603d0d7e3778a7b10978cbf494c1d /src/mainboard/dell/optiplex_9010/smihandler.c
parentfba08308f086d7b77f95554df094288fd55903d1 (diff)
mb/dell/optiplex_9010: Add Dell OptiPlex 9010 SFF support
Based on the autoport. The OptiPlex 9010 comes in four different sizes: MT, DT, SFF and USFF. Tested on SFF only. The other PCBs are slightly different, but they are designed with intercompatibility in mind. With small devicetree overrides it should work on OptiPlex 7010 and other OptiPlex 9010 variants as well. Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com> Change-Id: I88d65cae30d08ca727d86d930707c2be25a527cf Reviewed-on: https://review.coreboot.org/c/coreboot/+/40351 Reviewed-by: Felix Held <felix-coreboot@felixheld.de> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/mainboard/dell/optiplex_9010/smihandler.c')
-rw-r--r--src/mainboard/dell/optiplex_9010/smihandler.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/mainboard/dell/optiplex_9010/smihandler.c b/src/mainboard/dell/optiplex_9010/smihandler.c
new file mode 100644
index 0000000000..d3c83ef5e7
--- /dev/null
+++ b/src/mainboard/dell/optiplex_9010/smihandler.c
@@ -0,0 +1,47 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <stdint.h>
+#include <arch/io.h>
+#include <console/console.h>
+#include <cpu/x86/smm.h>
+#include <superio/smsc/sch5545/sch5545.h>
+
+void mainboard_smi_gpi(u32 gpi_sts)
+{
+ printk(BIOS_SPEW, "%s: gpi_sts: %08x\n", __func__, gpi_sts);
+}
+
+int mainboard_smi_apmc(u8 data)
+{
+ u8 val;
+ switch (data) {
+ case APM_CNT_ACPI_ENABLE:
+ printk(BIOS_SPEW, "%s: APM CNT EN: %02x\n", __func__, data);
+ /* Enable wake on PS2 */
+ val = inb(SCH5545_RUNTIME_REG_BASE + SCH5545_RR_PME_EN1);
+ val |= (SCH5545_KBD_PME_EN | SCH5545_MOUSE_PME_EN);
+ outb(val, SCH5545_RUNTIME_REG_BASE + SCH5545_RR_PME_EN1);
+ /* Clear pending and enable PMEs */
+ outb(SCH5545_GLOBAL_PME_STS, SCH5545_RUNTIME_REG_BASE + SCH5545_RR_PME_STS);
+ outb(SCH5545_GLOBAL_PME_EN, SCH5545_RUNTIME_REG_BASE + SCH5545_RR_PME_EN);
+ break;
+ case APM_CNT_ACPI_DISABLE:
+ printk(BIOS_SPEW, "%s: APM CNT DIS: %02x\n", __func__, data);
+ /* Disable wake on PS2 */
+ val = inb(SCH5545_RUNTIME_REG_BASE + SCH5545_RR_PME_EN1);
+ val &= ~(SCH5545_KBD_PME_EN | SCH5545_MOUSE_PME_EN);
+ outb(val, SCH5545_RUNTIME_REG_BASE + SCH5545_RR_PME_EN1);
+ /* Clear pending and disable PMEs */
+ outb(SCH5545_GLOBAL_PME_STS, SCH5545_RUNTIME_REG_BASE + SCH5545_RR_PME_STS);
+ outb(0, SCH5545_RUNTIME_REG_BASE + SCH5545_RR_PME_EN);
+ break;
+ default:
+ break;
+ }
+ return 0;
+}
+
+void mainboard_smi_sleep(u8 slp_typ)
+{
+ printk(BIOS_SPEW, "%s: SMI sleep: %02x\n", __func__, slp_typ);
+}