coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
smi.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <device/device.h>
4 #include <device/pci.h>
5 #include <console/console.h>
6 #include <arch/io.h>
7 #include <cpu/intel/smm_reloc.h>
8 #include <cpu/x86/smm.h>
9 
10 #include "pch.h"
11 
13 {
14  u32 smi_en;
15 
16  /* Log events from chipset before clearing */
17  if (CONFIG(ELOG))
18  pch_log_state();
19 
20  printk(BIOS_DEBUG, "Initializing Southbridge SMI...");
21  printk(BIOS_SPEW, " ... pmbase = 0x%04x\n", get_pmbase());
22 
23  smi_en = inl(get_pmbase() + SMI_EN);
24  if (smi_en & APMC_EN) {
25  printk(BIOS_INFO, "SMI# handler already enabled?\n");
26  return;
27  }
28 
29  printk(BIOS_DEBUG, "\n");
30 
31  /* Dump and clear status registers */
36 }
37 
38 static void smm_southbridge_enable(uint16_t pm1_events)
39 {
40  printk(BIOS_DEBUG, "Enabling SMIs.\n");
41  /* Configure events */
42  enable_pm1(pm1_events);
44 
45  /* Enable SMI generation:
46  * - on APMC writes (io 0xb2)
47  * - on writes to SLP_EN (sleep states)
48  * - on writes to GBL_RLS (bios commands)
49  * No SMIs:
50  * - on microcontroller writes (io 0x62/0x66)
51  * - on TCO events
52  */
54 }
55 
57 {
59 }
#define GBL_SMI_EN
Definition: pm.h:49
#define APMC_EN
Definition: pm.h:44
#define SLP_SMI_EN
Definition: pm.h:45
#define PME_B0_EN
Definition: pm.h:104
#define SMI_EN
Definition: pm.h:32
#define EOS
Definition: pm.h:48
void enable_pm1(uint16_t events)
Definition: pmutil.c:157
uint16_t clear_pm1_status(void)
Definition: pmutil.c:152
void enable_smi(uint32_t mask)
Definition: pmutil.c:89
uint32_t clear_gpe_status(void)
Definition: pmutil.c:265
uint32_t clear_tco_status(void)
Definition: pmutil.c:189
uint32_t clear_smi_status(void)
Definition: pmutil.c:84
void disable_gpe(uint32_t mask)
Definition: pmutil.c:202
#define PWRBTN_EN
Definition: southbridge.h:36
#define GBL_EN
Definition: southbridge.h:37
#define printk(level,...)
Definition: stdlib.h:16
u32 inl(u16 port)
@ CONFIG
Definition: dsi_common.h:201
#define BIOS_INFO
BIOS_INFO - Expected events.
Definition: loglevel.h:113
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
Definition: loglevel.h:128
#define BIOS_SPEW
BIOS_SPEW - Excessively verbose output.
Definition: loglevel.h:142
static void pch_log_state(void *unused)
Definition: elog.c:193
void global_smi_enable(void)
Set the EOS bit and enable SMI generation from southbridge.
Definition: smi.c:53
void smm_southbridge_clear_state(void)
Definition: smi.c:13
u16 get_pmbase(void)
Definition: smi.c:13
static void smm_southbridge_enable(uint16_t pm1_events)
Definition: smi.c:38
unsigned short uint16_t
Definition: stdint.h:11
uint32_t u32
Definition: stdint.h:51