coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
finalize.c
Go to the documentation of this file.
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
3
#include <
bootstate.h
>
4
#include <
commonlib/console/post_codes.h
>
5
#include <
console/console.h
>
6
#include <
cpu/x86/mp.h
>
7
#include <
cpu/x86/smm.h
>
8
#include <
device/mmio.h
>
9
#include <
device/pci.h
>
10
#include <
device/pci_ops.h
>
11
#include <
intelblocks/cpulib.h
>
12
#include <
intelblocks/cse.h
>
13
#include <
intelblocks/lpc_lib.h
>
14
#include <
intelblocks/p2sb.h
>
15
#include <
intelblocks/pcr.h
>
16
#include <
intelblocks/pmclib.h
>
17
#include <
intelblocks/tco.h
>
18
#include <
intelblocks/thermal.h
>
19
#include <soc/me.h>
20
#include <soc/p2sb.h>
21
#include <soc/pci_devs.h>
22
#include <soc/pcr_ids.h>
23
#include <soc/pm.h>
24
#include <soc/smbus.h>
25
#include <soc/systemagent.h>
26
#include <
spi-generic.h
>
27
28
#include "
chip.h
"
29
30
#define PSF_BASE_ADDRESS 0xA00
31
#define PCR_PSFX_T0_SHDW_PCIEN 0x1C
32
#define PCR_PSFX_T0_SHDW_PCIEN_FUNDIS (1 << 8)
33
34
void
soc_disable_heci1_using_pcr
(
void
)
35
{
36
/* unhide p2sb device */
37
p2sb_unhide
();
38
39
/* disable heci */
40
pcr_or32
(
PID_PSF1
,
PSF_BASE_ADDRESS
+
PCR_PSFX_T0_SHDW_PCIEN
,
41
PCR_PSFX_T0_SHDW_PCIEN_FUNDIS
);
42
43
p2sb_disable_sideband_access
();
44
}
45
46
static
void
pch_finalize_script
(
struct
device
*dev)
47
{
48
tco_lockdown
();
49
50
/* Display me status before we hide it */
51
intel_me_status
();
52
53
/*
54
* Set low maximum temp value used for dynamic thermal sensor
55
* shutdown consideration.
56
*
57
* If Dynamic Thermal Shutdown is enabled then PMC logic shuts down the
58
* thermal sensor when CPU is in a C-state and DTS Temp <= LTT.
59
*/
60
pch_thermal_configuration
();
61
62
/* we should disable Heci1 based on the config */
63
if
(
CONFIG
(DISABLE_HECI1_AT_PRE_BOOT))
64
heci1_disable
();
65
66
/* Hide p2sb device as the OS must not change BAR0. */
67
p2sb_hide
();
68
69
pmc_clear_pmcon_sts
();
70
}
71
72
static
void
soc_lockdown
(
struct
device
*dev)
73
{
74
struct
soc_intel_skylake_config
*
config
;
75
u8
reg8;
76
77
config
=
config_of
(dev);
78
79
/* Global SMI Lock */
80
if
(
config
->LockDownConfigGlobalSmi == 0) {
81
reg8 =
pci_read_config8
(dev,
GEN_PMCON_A
);
82
reg8 |=
SMI_LOCK
;
83
pci_write_config8
(dev,
GEN_PMCON_A
, reg8);
84
}
85
86
/*
87
* Lock chipset memory registers to protect SMM.
88
* When SkipMpInit=0, this is done by FSP.
89
*/
90
if
(!
CONFIG
(USE_INTEL_FSP_MP_INIT))
91
cpu_lt_lock_memory
();
92
}
93
94
static
void
soc_finalize
(
void
*unused)
95
{
96
struct
device
*dev;
97
98
dev =
PCH_DEV_PMC
;
99
100
/* Check if PMC is enabled, else return */
101
if
(dev ==
NULL
)
102
return
;
103
104
printk
(
BIOS_DEBUG
,
"Finalizing chipset.\n"
);
105
106
pch_finalize_script
(dev);
107
108
soc_lockdown
(dev);
109
apm_control
(
APM_CNT_FINALIZE
);
110
111
/* Indicate finalize step with post code */
112
post_code
(
POST_OS_BOOT
);
113
}
114
115
BOOT_STATE_INIT_ENTRY
(
BS_OS_RESUME
,
BS_ON_ENTRY
,
soc_finalize
,
NULL
);
116
BOOT_STATE_INIT_ENTRY
(
BS_PAYLOAD_LOAD
,
BS_ON_EXIT
,
soc_finalize
,
NULL
);
PID_PSF1
#define PID_PSF1
Definition:
pcr_ids.h:27
bootstate.h
BS_PAYLOAD_LOAD
@ BS_PAYLOAD_LOAD
Definition:
bootstate.h:88
BS_OS_RESUME
@ BS_OS_RESUME
Definition:
bootstate.h:86
BS_ON_ENTRY
@ BS_ON_ENTRY
Definition:
bootstate.h:95
BS_ON_EXIT
@ BS_ON_EXIT
Definition:
bootstate.h:96
p2sb.h
p2sb_hide
void p2sb_hide(void)
Definition:
p2sb.c:83
p2sb_disable_sideband_access
void p2sb_disable_sideband_access(void)
Definition:
p2sb.c:107
p2sb_unhide
void p2sb_unhide(void)
Definition:
p2sb.c:78
pcr.h
pcr_or32
void pcr_or32(uint8_t pid, uint16_t offset, uint32_t ordata)
Definition:
pcr.c:184
printk
#define printk(level,...)
Definition:
stdlib.h:16
console.h
cpu_lt_lock_memory
void cpu_lt_lock_memory(void)
Definition:
cpulib.c:392
cpulib.h
cse.h
heci1_disable
void heci1_disable(void)
Definition:
disable_heci.c:84
CONFIG
@ CONFIG
Definition:
dsi_common.h:201
smm.h
APM_CNT_FINALIZE
#define APM_CNT_FINALIZE
Definition:
smm.h:24
config_of
static DEVTREE_CONST void * config_of(const struct device *dev)
Definition:
device.h:382
mmio.h
pci_ops.h
pci_read_config8
static __always_inline u8 pci_read_config8(const struct device *dev, u16 reg)
Definition:
pci_ops.h:46
pci_write_config8
static __always_inline void pci_write_config8(const struct device *dev, u16 reg, u8 val)
Definition:
pci_ops.h:64
GEN_PMCON_A
#define GEN_PMCON_A
Definition:
pmc.h:14
SMI_LOCK
#define SMI_LOCK
Definition:
pmc.h:60
BIOS_DEBUG
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
Definition:
loglevel.h:128
lpc_lib.h
config
enum board_config config
Definition:
memory.c:448
mp.h
pci.h
post_code
#define post_code(value)
Definition:
post_code.h:12
post_codes.h
POST_OS_BOOT
#define POST_OS_BOOT
Final code before OS boots.
Definition:
post_codes.h:414
apm_control
int apm_control(u8 cmd)
Definition:
smi_trigger.c:31
BOOT_STATE_INIT_ENTRY
BOOT_STATE_INIT_ENTRY(BS_OS_RESUME, BS_ON_ENTRY, soc_finalize, NULL)
PCH_DEV_PMC
#define PCH_DEV_PMC
Definition:
pci_devs.h:236
intel_me_status
void intel_me_status(void)
Definition:
me_status.c:194
pmclib.h
pmc_clear_pmcon_sts
void pmc_clear_pmcon_sts(void)
tco.h
tco_lockdown
void tco_lockdown(void)
Definition:
tco.c:50
thermal.h
pch_thermal_configuration
void pch_thermal_configuration(void)
Definition:
thermal_pci.c:13
PCR_PSFX_T0_SHDW_PCIEN
#define PCR_PSFX_T0_SHDW_PCIEN
Definition:
finalize.c:31
PSF_BASE_ADDRESS
#define PSF_BASE_ADDRESS
Definition:
finalize.c:30
soc_lockdown
static void soc_lockdown(struct device *dev)
Definition:
finalize.c:72
PCR_PSFX_T0_SHDW_PCIEN_FUNDIS
#define PCR_PSFX_T0_SHDW_PCIEN_FUNDIS
Definition:
finalize.c:32
soc_finalize
static void soc_finalize(void *unused)
Definition:
finalize.c:94
pch_finalize_script
static void pch_finalize_script(struct device *dev)
Definition:
finalize.c:46
soc_disable_heci1_using_pcr
void soc_disable_heci1_using_pcr(void)
Definition:
finalize.c:34
spi-generic.h
NULL
#define NULL
Definition:
stddef.h:19
u8
uint8_t u8
Definition:
stdint.h:45
device
Definition:
device.h:107
soc_intel_skylake_config
Definition:
chip.h:31
chip.h
src
soc
intel
skylake
finalize.c
Generated by
1.9.1