From 640a41f3ee938b794b140218921e0fd63b1d9235 Mon Sep 17 00:00:00 2001 From: Subrata Banik Date: Sat, 16 Nov 2024 09:54:14 +0530 Subject: soc/intel: Assert if `pmc_/gpe0_dwX` values are not unique This commit adds an assertion to ensure that the values of pmc_/gpe0_dw0, pmc_/gpe0_dw1, and pmc_/gpe0_dw2 in the soc_intel__config structure are unique. This check helps to catch potential configuration errors early on, preventing unexpected behavior during system initialization. TEST=Built and booted normally. No assertion failure observed. Able to catch the hidden issue due to overlapping Tier 1 GPE configuration. [DEBUG] CPU: Intel(R) Core(TM) 3 N355 [DEBUG] CPU: ID b06e0, Alderlake-N Platform, ucode: 0000001a [DEBUG] CPU: AES supported, TXT supported, VT supported ... ... [DEBUG] MCH: device id 4617 (rev 00) is Alderlake-N [DEBUG] PCH: device id 5481 (rev 00) is Alderlake-N SKU [DEBUG] IGD: device id 46d3 (rev 00) is Twinlake GT1 [EMERG] ASSERTION ERROR: file 'src/soc/intel/alderlake/pmutil.c', line 163 Change-Id: I6b4f2f90a858b9ec85145bce0542f1ce61d080be Signed-off-by: Subrata Banik Reviewed-on: https://review.coreboot.org/c/coreboot/+/85161 Tested-by: build bot (Jenkins) Reviewed-by: Eric Lai Reviewed-by: Kapil Porwal --- src/soc/intel/apollolake/pmutil.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/soc/intel/apollolake') diff --git a/src/soc/intel/apollolake/pmutil.c b/src/soc/intel/apollolake/pmutil.c index 8d9af926d6..5366ca8baf 100644 --- a/src/soc/intel/apollolake/pmutil.c +++ b/src/soc/intel/apollolake/pmutil.c @@ -138,12 +138,23 @@ void soc_clear_pm_registers(uintptr_t pmc_bar) write32p(pmc_bar + GEN_PMCON1, gen_pmcon1 & ~RPS); } +static void gpe0_different_values(const struct soc_intel_apollolake_config *config) +{ + bool result = (config->gpe0_dw1 != config->gpe0_dw2) && + (config->gpe0_dw1 != config->gpe0_dw3) && + (config->gpe0_dw2 != config->gpe0_dw3); + + assert(result); +} + void soc_get_gpi_gpe_configs(uint8_t *dw0, uint8_t *dw1, uint8_t *dw2) { DEVTREE_CONST struct soc_intel_apollolake_config *config; config = config_of_soc(); + gpe0_different_values(config); + /* Assign to out variable */ *dw0 = config->gpe0_dw1; *dw1 = config->gpe0_dw2; -- cgit v1.2.3