intel/smm: Provide common smm_relocation_params

Pull in all copies of smm_relocation_params structs defined
for intel platforms.

Pull in all the inlined MSR accessors to the header file.

Change-Id: I39c6cffee95433aea1a3c783b869eedfff094413
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/34840
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
Kyösti Mälkki 2019-08-14 13:02:41 +03:00
parent 75396f67aa
commit f5c0d61296
31 changed files with 64 additions and 333 deletions

View File

@ -26,3 +26,7 @@ config CPU_INTEL_COMMON_HYPERTHREADING
bool bool
endif endif
config CPU_INTEL_COMMON_SMM
bool
default y if CPU_INTEL_COMMON

View File

@ -45,49 +45,7 @@
#define SMRR_SUPPORTED (1 << 11) #define SMRR_SUPPORTED (1 << 11)
#define PRMRR_SUPPORTED (1 << 12) #define PRMRR_SUPPORTED (1 << 12)
struct smm_relocation_params {
uintptr_t ied_base;
size_t ied_size;
msr_t smrr_base;
msr_t smrr_mask;
msr_t prmrr_base;
msr_t prmrr_mask;
msr_t uncore_prmrr_base;
msr_t uncore_prmrr_mask;
/* The smm_save_state_in_msrs field indicates if SMM save state
* locations live in MSRs. This indicates to the CPUs how to adjust
* the SMMBASE and IEDBASE */
int smm_save_state_in_msrs;
};
/* This gets filled in and used during relocation. */
static struct smm_relocation_params smm_reloc_params;
static inline void write_smrr(struct smm_relocation_params *relo_params)
{
printk(BIOS_DEBUG, "Writing SMRR. base = 0x%08x, mask=0x%08x\n",
relo_params->smrr_base.lo, relo_params->smrr_mask.lo);
wrmsr(IA32_SMRR_PHYS_BASE, relo_params->smrr_base);
wrmsr(IA32_SMRR_PHYS_MASK, relo_params->smrr_mask);
}
static inline void write_prmrr(struct smm_relocation_params *relo_params)
{
printk(BIOS_DEBUG, "Writing PRMRR. base = 0x%08x, mask=0x%08x\n",
relo_params->prmrr_base.lo, relo_params->prmrr_mask.lo);
wrmsr(MSR_PRMRR_PHYS_BASE, relo_params->prmrr_base);
wrmsr(MSR_PRMRR_PHYS_MASK, relo_params->prmrr_mask);
}
static inline void write_uncore_prmrr(struct smm_relocation_params *relo_params)
{
printk(BIOS_DEBUG,
"Writing UNCORE_PRMRR. base = 0x%08x, mask=0x%08x\n",
relo_params->uncore_prmrr_base.lo,
relo_params->uncore_prmrr_mask.lo);
wrmsr(MSR_UNCORE_PRMRR_PHYS_BASE, relo_params->uncore_prmrr_base);
wrmsr(MSR_UNCORE_PRMRR_PHYS_MASK, relo_params->uncore_prmrr_mask);
}
static void update_save_state(int cpu, uintptr_t curr_smbase, static void update_save_state(int cpu, uintptr_t curr_smbase,
uintptr_t staggered_smbase, uintptr_t staggered_smbase,

View File

@ -0,0 +1 @@
ramstage-$(CONFIG_HAVE_SMI_HANDLER) += smm_reloc.c

View File

@ -39,17 +39,6 @@
#define C_BASE_SEG ((0 << 2) | (1 << 1) | (0 << 0)) #define C_BASE_SEG ((0 << 2) | (1 << 1) | (0 << 0))
struct smm_relocation_params {
uintptr_t ied_base;
size_t ied_size;
msr_t smrr_base;
msr_t smrr_mask;
};
/* This gets filled in and used during relocation. */
static struct smm_relocation_params smm_reloc_params;
/* On model_6fx, model_1067x and model_106cx SMRR functions slightly /* On model_6fx, model_1067x and model_106cx SMRR functions slightly
differently. The MSR are at different location from the rest differently. The MSR are at different location from the rest
and need to be explicitly enabled in IA32_FEATURE_CONTROL MSR. */ and need to be explicitly enabled in IA32_FEATURE_CONTROL MSR. */
@ -88,15 +77,6 @@ static void write_smrr_alt(struct smm_relocation_params *relo_params)
wrmsr(MSR_SMRR_PHYS_MASK, relo_params->smrr_mask); wrmsr(MSR_SMRR_PHYS_MASK, relo_params->smrr_mask);
} }
static void write_smrr(struct smm_relocation_params *relo_params)
{
printk(BIOS_DEBUG, "Writing SMRR. base = 0x%08x, mask=0x%08x\n",
relo_params->smrr_base.lo, relo_params->smrr_mask.lo);
wrmsr(IA32_SMRR_PHYS_BASE, relo_params->smrr_base);
wrmsr(IA32_SMRR_PHYS_MASK, relo_params->smrr_mask);
}
static void fill_in_relocation_params(struct smm_relocation_params *params) static void fill_in_relocation_params(struct smm_relocation_params *params)
{ {
uintptr_t tseg_base; uintptr_t tseg_base;

View File

@ -1,8 +1,6 @@
/* /*
* This file is part of the coreboot project. * This file is part of the coreboot project.
* *
* Copyright (C) 2018 Intel Corp.
*
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License. * the Free Software Foundation; version 2 of the License.
@ -13,26 +11,6 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#ifndef _SOC_SMM_H_ #include <cpu/intel/smm_reloc.h>
#define _SOC_SMM_H_
#include <stdint.h> struct smm_relocation_params smm_reloc_params;
#include <cpu/x86/msr.h>
#include <cpu/x86/smm.h>
#include <soc/gpio.h>
struct smm_relocation_params {
uintptr_t ied_base;
size_t ied_size;
msr_t smrr_base;
msr_t smrr_mask;
/*
* The smm_save_state_in_msrs field indicates if SMM save state
* locations live in MSRs. This indicates to the CPUs how to adjust
* the SMMBASE and IEDBASE
*/
int smm_save_state_in_msrs;
};
#endif

View File

@ -6,6 +6,8 @@ ramstage-$(CONFIG_PARALLEL_MP) += mp_init.c
ramstage-$(CONFIG_MIRROR_PAYLOAD_TO_RAM_BEFORE_LOADING) += mirror_payload.c ramstage-$(CONFIG_MIRROR_PAYLOAD_TO_RAM_BEFORE_LOADING) += mirror_payload.c
ramstage-y += backup_default_smm.c ramstage-y += backup_default_smm.c
subdirs-$(CONFIG_CPU_INTEL_COMMON_SMM) += ../intel/smm
additional-dirs += $(obj)/cpu/x86 additional-dirs += $(obj)/cpu/x86
SIPI_ELF=$(obj)/cpu/x86/sipi_vector.elf SIPI_ELF=$(obj)/cpu/x86/sipi_vector.elf

View File

@ -14,7 +14,29 @@
#ifndef __INTEL_SMM_RELOC_H__ #ifndef __INTEL_SMM_RELOC_H__
#define __INTEL_SMM_RELOC_H__ #define __INTEL_SMM_RELOC_H__
#include <console/console.h>
#include <types.h> #include <types.h>
#include <cpu/x86/msr.h>
#include <cpu/x86/mtrr.h>
struct smm_relocation_params {
uintptr_t ied_base;
size_t ied_size;
msr_t smrr_base;
msr_t smrr_mask;
msr_t prmrr_base;
msr_t prmrr_mask;
msr_t uncore_prmrr_base;
msr_t uncore_prmrr_mask;
/*
* The smm_save_state_in_msrs field indicates if SMM save state
* locations live in MSRs. This indicates to the CPUs how to adjust
* the SMMBASE and IEDBASE
*/
int smm_save_state_in_msrs;
};
extern struct smm_relocation_params smm_reloc_params;
struct ied_header { struct ied_header {
char signature[10]; char signature[10];
@ -42,4 +64,36 @@ void smm_relocation_handler(int cpu, uintptr_t curr_smbase, uintptr_t staggered_
bool cpu_has_alternative_smrr(void); bool cpu_has_alternative_smrr(void);
#define MSR_PRMRR_PHYS_BASE 0x1f4
#define MSR_PRMRR_PHYS_MASK 0x1f5
#define MSR_UNCORE_PRMRR_PHYS_BASE 0x2f4
#define MSR_UNCORE_PRMRR_PHYS_MASK 0x2f5
static inline void write_smrr(struct smm_relocation_params *relo_params)
{
printk(BIOS_DEBUG, "Writing SMRR. base = 0x%08x, mask=0x%08x\n",
relo_params->smrr_base.lo, relo_params->smrr_mask.lo);
wrmsr(IA32_SMRR_PHYS_BASE, relo_params->smrr_base);
wrmsr(IA32_SMRR_PHYS_MASK, relo_params->smrr_mask);
}
static inline void write_prmrr(struct smm_relocation_params *relo_params)
{
printk(BIOS_DEBUG, "Writing PRMRR. base = 0x%08x, mask=0x%08x\n",
relo_params->prmrr_base.lo, relo_params->prmrr_mask.lo);
wrmsr(MSR_PRMRR_PHYS_BASE, relo_params->prmrr_base);
wrmsr(MSR_PRMRR_PHYS_MASK, relo_params->prmrr_mask);
}
static inline void write_uncore_prmrr(struct smm_relocation_params *relo_params)
{
printk(BIOS_DEBUG,
"Writing UNCORE_PRMRR. base = 0x%08x, mask=0x%08x\n",
relo_params->uncore_prmrr_base.lo,
relo_params->uncore_prmrr_mask.lo);
wrmsr(MSR_UNCORE_PRMRR_PHYS_BASE, relo_params->uncore_prmrr_base);
wrmsr(MSR_UNCORE_PRMRR_PHYS_MASK, relo_params->uncore_prmrr_mask);
}
#endif #endif

View File

@ -19,7 +19,6 @@
#include <console/console.h> #include <console/console.h>
#include <cpu/x86/smm.h> #include <cpu/x86/smm.h>
#include <soc/pm.h> #include <soc/pm.h>
#include <soc/smm.h>
#include <elog.h> #include <elog.h>
#include <ec/google/chromeec/ec.h> #include <ec/google/chromeec/ec.h>
#include <soc/gpio.h> #include <soc/gpio.h>

View File

@ -18,7 +18,6 @@
#include <console/console.h> #include <console/console.h>
#include <cpu/x86/smm.h> #include <cpu/x86/smm.h>
#include <soc/pm.h> #include <soc/pm.h>
#include <soc/smm.h>
#include <ec/google/chromeec/ec.h> #include <ec/google/chromeec/ec.h>
#include <soc/gpio.h> #include <soc/gpio.h>
#include <soc/iomap.h> #include <soc/iomap.h>

View File

@ -33,7 +33,6 @@
#include <soc/msr.h> #include <soc/msr.h>
#include <soc/pattrs.h> #include <soc/pattrs.h>
#include <soc/ramstage.h> #include <soc/ramstage.h>
#include <soc/smm.h>
/* Core level MSRs */ /* Core level MSRs */
const struct reg_script core_msr_script[] = { const struct reg_script core_msr_script[] = {
@ -88,13 +87,6 @@ static const struct cpu_driver driver __cpu_driver = {
* MP and SMM loading initialization. * MP and SMM loading initialization.
*/ */
struct smm_relocation_params {
msr_t smrr_base;
msr_t smrr_mask;
};
static struct smm_relocation_params smm_reloc_params;
/* Package level MSRs */ /* Package level MSRs */
static const struct reg_script package_msr_script[] = { static const struct reg_script package_msr_script[] = {
/* Set Package TDP to ~7W */ /* Set Package TDP to ~7W */

View File

@ -22,7 +22,6 @@
#include <cpu/intel/microcode.h> #include <cpu/intel/microcode.h>
#include <cpu/intel/smm_reloc.h> #include <cpu/intel/smm_reloc.h>
#include <cpu/intel/turbo.h> #include <cpu/intel/turbo.h>
#include <cpu/intel/smm_reloc.h>
#include <cpu/x86/cache.h> #include <cpu/x86/cache.h>
#include <cpu/x86/lapic.h> #include <cpu/x86/lapic.h>
#include <cpu/x86/mp.h> #include <cpu/x86/mp.h>
@ -34,7 +33,6 @@
#include <soc/msr.h> #include <soc/msr.h>
#include <soc/pattrs.h> #include <soc/pattrs.h>
#include <soc/ramstage.h> #include <soc/ramstage.h>
#include <soc/smm.h>
#include <stdlib.h> #include <stdlib.h>
/* Core level MSRs */ /* Core level MSRs */
@ -98,13 +96,6 @@ static const struct cpu_driver driver __cpu_driver = {
* MP and SMM loading initialization. * MP and SMM loading initialization.
*/ */
struct smm_relocation_params {
msr_t smrr_base;
msr_t smrr_mask;
};
static struct smm_relocation_params smm_reloc_params;
/* Package level MSRs */ /* Package level MSRs */
static const struct reg_script package_msr_script[] = { static const struct reg_script package_msr_script[] = {
/* Set Package TDP to ~7W */ /* Set Package TDP to ~7W */

View File

@ -36,7 +36,6 @@
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <soc/ramstage.h> #include <soc/ramstage.h>
#include <soc/rcba.h> #include <soc/rcba.h>
#include <soc/smm.h>
#include <soc/systemagent.h> #include <soc/systemagent.h>
#include <soc/intel/broadwell/chip.h> #include <soc/intel/broadwell/chip.h>
#include <cpu/intel/common/common.h> #include <cpu/intel/common/common.h>

View File

@ -1,38 +0,0 @@
/*
* This file is part of the coreboot project.
*
* Copyright (C) 2014 Google Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef _BROADWELL_SMM_H_
#define _BROADWELL_SMM_H_
#include <stdint.h>
#include <cpu/x86/msr.h>
struct smm_relocation_params {
uintptr_t ied_base;
size_t ied_size;
msr_t smrr_base;
msr_t smrr_mask;
msr_t prmrr_base;
msr_t prmrr_mask;
msr_t uncore_prmrr_base;
msr_t uncore_prmrr_mask;
/* The smm_save_state_in_msrs field indicates if SMM save state
* locations live in MSRs. This indicates to the CPUs how to adjust
* the SMMBASE and IEDBASE */
int smm_save_state_in_msrs;
};
#endif

View File

@ -21,7 +21,6 @@
#include <device/pci_ops.h> #include <device/pci_ops.h>
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <soc/systemagent.h> #include <soc/systemagent.h>
#include <soc/smm.h>
#include <stdint.h> #include <stdint.h>
static uintptr_t dpr_region_start(void) static uintptr_t dpr_region_start(void)

View File

@ -19,7 +19,6 @@
#include <soc/iomap.h> #include <soc/iomap.h>
#include <soc/pei_data.h> #include <soc/pei_data.h>
#include <soc/pei_wrapper.h> #include <soc/pei_wrapper.h>
#include <soc/smm.h>
static void ABI_X86 send_to_console(unsigned char b) static void ABI_X86 send_to_console(unsigned char b)
{ {

View File

@ -33,7 +33,6 @@
#include <soc/pei_wrapper.h> #include <soc/pei_wrapper.h>
#include <soc/pm.h> #include <soc/pm.h>
#include <soc/romstage.h> #include <soc/romstage.h>
#include <soc/smm.h>
#include <soc/systemagent.h> #include <soc/systemagent.h>
/* /*

View File

@ -24,7 +24,6 @@
#include <soc/iomap.h> #include <soc/iomap.h>
#include <soc/pch.h> #include <soc/pch.h>
#include <soc/pm.h> #include <soc/pm.h>
#include <soc/smm.h>
void smm_southbridge_clear_state(void) void smm_southbridge_clear_state(void)
{ {

View File

@ -33,7 +33,6 @@
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <soc/pm.h> #include <soc/pm.h>
#include <soc/rcba.h> #include <soc/rcba.h>
#include <soc/smm.h>
#include <soc/xhci.h> #include <soc/xhci.h>
#include <drivers/intel/gma/i915_reg.h> #include <drivers/intel/gma/i915_reg.h>

View File

@ -30,37 +30,8 @@
#include <soc/cpu.h> #include <soc/cpu.h>
#include <soc/msr.h> #include <soc/msr.h>
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <soc/smm.h>
#include <soc/systemagent.h> #include <soc/systemagent.h>
/* This gets filled in and used during relocation. */
static struct smm_relocation_params smm_reloc_params;
static inline void write_smrr(struct smm_relocation_params *relo_params)
{
printk(BIOS_DEBUG, "Writing SMRR. base = 0x%08x, mask=0x%08x\n",
relo_params->smrr_base.lo, relo_params->smrr_mask.lo);
wrmsr(IA32_SMRR_PHYS_BASE, relo_params->smrr_base);
wrmsr(IA32_SMRR_PHYS_MASK, relo_params->smrr_mask);
}
static inline void write_prmrr(struct smm_relocation_params *relo_params)
{
printk(BIOS_DEBUG, "Writing PRMRR. base = 0x%08x, mask=0x%08x\n",
relo_params->prmrr_base.lo, relo_params->prmrr_mask.lo);
wrmsr(MSR_PRMRR_PHYS_BASE, relo_params->prmrr_base);
wrmsr(MSR_PRMRR_PHYS_MASK, relo_params->prmrr_mask);
}
static inline void write_uncore_prmrr(struct smm_relocation_params *relo_params)
{
printk(BIOS_DEBUG,
"Writing UNCORE_PRMRR. base = 0x%08x, mask=0x%08x\n",
relo_params->uncore_prmrr_base.lo,
relo_params->uncore_prmrr_mask.lo);
wrmsr(MSR_UNCORE_PRMRR_PHYS_BASE, relo_params->uncore_prmrr_base);
wrmsr(MSR_UNCORE_PRMRR_PHYS_MASK, relo_params->uncore_prmrr_mask);
}
static void update_save_state(int cpu, uintptr_t curr_smbase, static void update_save_state(int cpu, uintptr_t curr_smbase,
uintptr_t staggered_smbase, uintptr_t staggered_smbase,

View File

@ -28,7 +28,6 @@
#include <soc/msr.h> #include <soc/msr.h>
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <soc/pm.h> #include <soc/pm.h>
#include <soc/smm.h>
#include <soc/systemagent.h> #include <soc/systemagent.h>
#include <cpu/x86/mtrr.h> #include <cpu/x86/mtrr.h>
#include <cpu/intel/microcode.h> #include <cpu/intel/microcode.h>

View File

@ -1,39 +0,0 @@
/*
* This file is part of the coreboot project.
*
* Copyright (C) 2014 Google Inc.
* Copyright (C) 2017 Intel Corporation.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef _SOC_SMM_H_
#define _SOC_SMM_H_
#include <stdint.h>
#include <cpu/x86/msr.h>
#include <cpu/x86/smm.h>
#include <soc/gpio.h>
struct smm_relocation_params {
uintptr_t ied_base;
size_t ied_size;
msr_t smrr_base;
msr_t smrr_mask;
/*
* The smm_save_state_in_msrs field indicates if SMM save state
* locations live in MSRs. This indicates to the CPUs how to adjust
* the SMMBASE and IEDBASE
*/
int smm_save_state_in_msrs;
};
#endif

View File

@ -31,20 +31,9 @@
#include <soc/cpu.h> #include <soc/cpu.h>
#include <soc/msr.h> #include <soc/msr.h>
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <soc/smm.h>
#include <soc/systemagent.h> #include <soc/systemagent.h>
#include "chip.h" #include "chip.h"
/* This gets filled in and used during relocation. */
static struct smm_relocation_params smm_reloc_params;
static inline void write_smrr(struct smm_relocation_params *relo_params)
{
printk(BIOS_DEBUG, "Writing SMRR. base = 0x%08x, mask=0x%08x\n",
relo_params->smrr_base.lo, relo_params->smrr_mask.lo);
wrmsr(IA32_SMRR_PHYS_BASE, relo_params->smrr_base);
wrmsr(IA32_SMRR_PHYS_MASK, relo_params->smrr_mask);
}
static void update_save_state(int cpu, uintptr_t curr_smbase, static void update_save_state(int cpu, uintptr_t curr_smbase,
uintptr_t staggered_smbase, uintptr_t staggered_smbase,

View File

@ -36,6 +36,7 @@ config CPU_SPECIFIC_OPTIONS
select SMP select SMP
select SOC_AHCI_PORT_IMPLEMENTED_INVERT select SOC_AHCI_PORT_IMPLEMENTED_INVERT
select PMC_GLOBAL_RESET_ENABLE_LOCK select PMC_GLOBAL_RESET_ENABLE_LOCK
select CPU_INTEL_COMMON_SMM
select SOC_INTEL_COMMON select SOC_INTEL_COMMON
select SOC_INTEL_COMMON_ACPI_WAKE_SOURCE select SOC_INTEL_COMMON_ACPI_WAKE_SOURCE
select SOC_INTEL_COMMON_BLOCK select SOC_INTEL_COMMON_BLOCK

View File

@ -30,7 +30,6 @@
#include <soc/msr.h> #include <soc/msr.h>
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <soc/pm.h> #include <soc/pm.h>
#include <soc/smm.h>
#include <soc/soc_chip.h> #include <soc/soc_chip.h>
static void soc_fsp_load(void) static void soc_fsp_load(void)

View File

@ -30,20 +30,9 @@
#include <soc/cpu.h> #include <soc/cpu.h>
#include <soc/msr.h> #include <soc/msr.h>
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <soc/smm.h>
#include <soc/soc_chip.h> #include <soc/soc_chip.h>
#include <soc/systemagent.h> #include <soc/systemagent.h>
/* This gets filled in and used during relocation. */
static struct smm_relocation_params smm_reloc_params;
static inline void write_smrr(struct smm_relocation_params *relo_params)
{
printk(BIOS_DEBUG, "Writing SMRR. base = 0x%08x, mask=0x%08x\n",
relo_params->smrr_base.lo, relo_params->smrr_mask.lo);
wrmsr(IA32_SMRR_PHYS_BASE, relo_params->smrr_base);
wrmsr(IA32_SMRR_PHYS_MASK, relo_params->smrr_mask);
}
static void update_save_state(int cpu, uintptr_t curr_smbase, static void update_save_state(int cpu, uintptr_t curr_smbase,
uintptr_t staggered_smbase, uintptr_t staggered_smbase,

View File

@ -41,7 +41,6 @@
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <soc/pm.h> #include <soc/pm.h>
#include <soc/ramstage.h> #include <soc/ramstage.h>
#include <soc/smm.h>
#include <soc/systemagent.h> #include <soc/systemagent.h>
#include <timer.h> #include <timer.h>

View File

@ -1,40 +0,0 @@
/*
* This file is part of the coreboot project.
*
* Copyright (C) 2014 Google Inc.
* Copyright (C) 2015 Intel Corporation.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef _SOC_SMM_H_
#define _SOC_SMM_H_
#include <stdint.h>
#include <cpu/x86/msr.h>
#include <cpu/x86/smm.h>
#include <intelblocks/smihandler.h>
#include <soc/gpio.h>
struct smm_relocation_params {
uintptr_t ied_base;
size_t ied_size;
msr_t smrr_base;
msr_t smrr_mask;
/*
* The smm_save_state_in_msrs field indicates if SMM save state
* locations live in MSRs. This indicates to the CPUs how to adjust
* the SMMBASE and IEDBASE
*/
int smm_save_state_in_msrs;
};
#endif

View File

@ -31,20 +31,9 @@
#include <soc/cpu.h> #include <soc/cpu.h>
#include <soc/msr.h> #include <soc/msr.h>
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <soc/smm.h>
#include <soc/systemagent.h> #include <soc/systemagent.h>
#include "chip.h" #include "chip.h"
/* This gets filled in and used during relocation. */
static struct smm_relocation_params smm_reloc_params;
static inline void write_smrr(struct smm_relocation_params *relo_params)
{
printk(BIOS_DEBUG, "Writing SMRR. base = 0x%08x, mask=0x%08x\n",
relo_params->smrr_base.lo, relo_params->smrr_mask.lo);
wrmsr(IA32_SMRR_PHYS_BASE, relo_params->smrr_base);
wrmsr(IA32_SMRR_PHYS_MASK, relo_params->smrr_mask);
}
static void update_save_state(int cpu, uintptr_t curr_smbase, static void update_save_state(int cpu, uintptr_t curr_smbase,
uintptr_t staggered_smbase, uintptr_t staggered_smbase,

View File

@ -36,7 +36,6 @@
#include <soc/msr.h> #include <soc/msr.h>
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <soc/pm.h> #include <soc/pm.h>
#include <soc/smm.h>
#include <soc/soc_chip.h> #include <soc/soc_chip.h>
static void soc_fsp_load(void) static void soc_fsp_load(void)

View File

@ -1,38 +0,0 @@
/*
* This file is part of the coreboot project.
*
* Copyright (C) 2018 Intel Corp.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef _SOC_SMM_H_
#define _SOC_SMM_H_
#include <stdint.h>
#include <cpu/x86/msr.h>
#include <cpu/x86/smm.h>
#include <soc/gpio.h>
struct smm_relocation_params {
uintptr_t ied_base;
size_t ied_size;
msr_t smrr_base;
msr_t smrr_mask;
/*
* The smm_save_state_in_msrs field indicates if SMM save state
* locations live in MSRs. This indicates to the CPUs how to adjust
* the SMMBASE and IEDBASE
*/
int smm_save_state_in_msrs;
};
#endif

View File

@ -30,7 +30,6 @@
#include <soc/cpu.h> #include <soc/cpu.h>
#include <soc/msr.h> #include <soc/msr.h>
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <soc/smm.h>
#include <soc/soc_chip.h> #include <soc/soc_chip.h>
#include <soc/systemagent.h> #include <soc/systemagent.h>