soc/intel/common/block/p2sb: Add hpet BDF functions

This allows to get/set the HPET bus device function.

Change-Id: I8d72da8bc392aa144d167d31cde30cc71cd1396e
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/47531
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/src/soc/intel/common/block/include/intelblocks/p2sb.h b/src/soc/intel/common/block/include/intelblocks/p2sb.h
index 71f9c62..819b940 100644
--- a/src/soc/intel/common/block/include/intelblocks/p2sb.h
+++ b/src/soc/intel/common/block/include/intelblocks/p2sb.h
@@ -29,6 +29,18 @@
 void p2sb_enable_bar(void);
 void p2sb_configure_hpet(void);
 
+union p2sb_bdf {
+	struct {
+		uint16_t fn  : 3;
+		uint16_t dev : 5;
+		uint16_t bus : 8;
+	};
+	uint16_t raw;
+};
+
+union p2sb_bdf p2sb_get_hpet_bdf(void);
+void p2sb_set_hpet_bdf(union p2sb_bdf bdf);
+
 /* SOC overrides */
 /*
  * Each SoC should implement EP Mask register to disable SB access
diff --git a/src/soc/intel/common/block/p2sb/p2sb.c b/src/soc/intel/common/block/p2sb/p2sb.c
index 9673a2c..fd54a08 100644
--- a/src/soc/intel/common/block/p2sb/p2sb.c
+++ b/src/soc/intel/common/block/p2sb/p2sb.c
@@ -54,6 +54,25 @@
 	pci_write_config8(PCH_DEV_P2SB, HPTC_OFFSET, HPTC_ADDR_ENABLE_BIT);
 }
 
+union p2sb_bdf p2sb_get_hpet_bdf(void)
+{
+	const bool was_hidden = p2sb_is_hidden();
+	if (was_hidden)
+		p2sb_unhide();
+
+	union p2sb_bdf bdf = { .raw = pci_read_config16(PCH_DEV_P2SB, PCH_P2SB_HBDF) };
+
+	if (was_hidden)
+		p2sb_hide();
+
+	return bdf;
+}
+
+void p2sb_set_hpet_bdf(union p2sb_bdf bdf)
+{
+	pci_write_config16(PCH_DEV_P2SB, PCH_P2SB_HBDF, bdf.raw);
+}
+
 static void p2sb_set_hide_bit(int hide)
 {
 	const uint16_t reg = PCH_P2SB_E0 + 1;