diff options
author | Tim Wawrzynczak <twawrzynczak@chromium.org> | 2021-08-24 09:20:14 -0600 |
---|---|---|
committer | Felix Held <felix-coreboot@felixheld.de> | 2021-08-26 18:23:24 +0000 |
commit | d87af79ace16a499679d28ba3436950f9d9d090e (patch) | |
tree | 5dd9ac8fd9eb2f5cb48fd6cbb339879266823bc3 | |
parent | 30c6ca98381c3fa746aeeacdb37f77a5b9435750 (diff) |
soc/intel/common/block: Add PAM locking function
Some FSPs provide a UPD to allow the bootloader to set the PAM lock bit
instead of the FSP, therefore add a function in the common code to do
this. Source: ADL & TGL FSP integration guides
Signed-off-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Change-Id: I1d6642b496617b6e8ccda8a0aa6bfd88ea9dc3ba
Reviewed-on: https://review.coreboot.org/c/coreboot/+/57145
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Subrata Banik <subrata.banik@intel.com>
Reviewed-by: Furquan Shaikh <furquan@google.com>
3 files changed, 15 insertions, 0 deletions
diff --git a/src/soc/intel/common/block/include/intelblocks/systemagent.h b/src/soc/intel/common/block/include/intelblocks/systemagent.h index fe14c181fb..f708fae674 100644 --- a/src/soc/intel/common/block/include/intelblocks/systemagent.h +++ b/src/soc/intel/common/block/include/intelblocks/systemagent.h @@ -79,6 +79,9 @@ uintptr_t sa_get_tseg_base(void); size_t sa_get_tseg_size(void); /* Fill MMIO resource above 4GB into GNVS */ void sa_fill_gnvs(struct global_nvs *gnvs); +/* API to lock PAM registers */ +void sa_lock_pam(void); + /* * SoC overrides * diff --git a/src/soc/intel/common/block/systemagent/systemagent.c b/src/soc/intel/common/block/systemagent/systemagent.c index 6e02c811ec..45e1d4216f 100644 --- a/src/soc/intel/common/block/systemagent/systemagent.c +++ b/src/soc/intel/common/block/systemagent/systemagent.c @@ -306,6 +306,15 @@ void enable_power_aware_intr(void) MCHBAR8(MCH_PAIR) = pair; } +void sa_lock_pam(void) +{ + const struct device *dev = pcidev_path_on_root(SA_DEVFN_ROOT); + if (!dev) + return; + + pci_or_config8(dev, PAM0, PAM_LOCK); +} + static struct device_operations systemagent_ops = { .read_resources = systemagent_read_resources, .set_resources = pci_dev_set_resources, diff --git a/src/soc/intel/common/block/systemagent/systemagent_def.h b/src/soc/intel/common/block/systemagent/systemagent_def.h index 7517b140fb..0add13e93e 100644 --- a/src/soc/intel/common/block/systemagent/systemagent_def.h +++ b/src/soc/intel/common/block/systemagent/systemagent_def.h @@ -35,6 +35,9 @@ #define PAM5 0x85 #define PAM6 0x86 +/* PAM0 contains the lock bit */ +#define PAM_LOCK (1 << 0) + /* Device 0:0.0 MMIO space */ #define MCH_PAIR 0x5418 |