soc/intel/common/p2sb: Add helper function to determine p2sb state
Change-Id: I1d6f9c18160806e289e98c2fa5d290c61434112f
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/47530
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-by: Christian Walter <christian.walter@9elements.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/src/soc/intel/common/block/p2sb/p2sb.c b/src/soc/intel/common/block/p2sb/p2sb.c
index d97cd8d..9673a2c 100644
--- a/src/soc/intel/common/block/p2sb/p2sb.c
+++ b/src/soc/intel/common/block/p2sb/p2sb.c
@@ -15,6 +15,18 @@
#define HIDE_BIT (1 << 0)
+static bool p2sb_is_hidden(void)
+{
+ const uint16_t pci_vid = pci_read_config16(PCH_DEV_P2SB, PCI_VENDOR_ID);
+
+ if (pci_vid == 0xffff)
+ return true;
+ if (pci_vid == PCI_VENDOR_ID_INTEL)
+ return false;
+ printk(BIOS_ERR, "P2SB PCI_VENDOR_ID is invalid, unknown if hidden\n");
+ return true;
+}
+
void p2sb_enable_bar(void)
{
/* Enable PCR Base address in PCH */
@@ -59,8 +71,7 @@
{
p2sb_set_hide_bit(0);
- if (pci_read_config16(PCH_DEV_P2SB, PCI_VENDOR_ID) !=
- PCI_VENDOR_ID_INTEL)
+ if (p2sb_is_hidden())
die_with_post_code(POST_HW_INIT_FAILURE,
"Unable to unhide PCH_DEV_P2SB device !\n");
}
@@ -69,8 +80,7 @@
{
p2sb_set_hide_bit(1);
- if (pci_read_config16(PCH_DEV_P2SB, PCI_VENDOR_ID) !=
- 0xFFFF)
+ if (!p2sb_is_hidden())
die_with_post_code(POST_HW_INIT_FAILURE,
"Unable to hide PCH_DEV_P2SB device !\n");
}