From a1f65bed10d41e41c684cd5e109b9883560e36f2 Mon Sep 17 00:00:00 2001 From: Arthur Heymans Date: Thu, 12 Nov 2020 21:07:13 +0100 Subject: soc/intel/common/block/p2sb: Add ioapic BDF functions This allows to get/set the IOAPIC bus device function. Change-Id: Ib5bb409efbcbc5729cf0e996655c7ac3f6a78223 Signed-off-by: Arthur Heymans Reviewed-on: https://review.coreboot.org/c/coreboot/+/47534 Reviewed-by: Angel Pons Tested-by: build bot (Jenkins) --- src/soc/intel/common/block/include/intelblocks/p2sb.h | 3 +++ src/soc/intel/common/block/p2sb/p2sb.c | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+) (limited to 'src/soc/intel/common') diff --git a/src/soc/intel/common/block/include/intelblocks/p2sb.h b/src/soc/intel/common/block/include/intelblocks/p2sb.h index 819b9403a3..436861c924 100644 --- a/src/soc/intel/common/block/include/intelblocks/p2sb.h +++ b/src/soc/intel/common/block/include/intelblocks/p2sb.h @@ -40,6 +40,9 @@ union p2sb_bdf { union p2sb_bdf p2sb_get_hpet_bdf(void); void p2sb_set_hpet_bdf(union p2sb_bdf bdf); +union p2sb_bdf p2sb_get_ioapic_bdf(void); +void p2sb_set_ioapic_bdf(union p2sb_bdf bdf); + /* SOC overrides */ /* diff --git a/src/soc/intel/common/block/p2sb/p2sb.c b/src/soc/intel/common/block/p2sb/p2sb.c index fd54a08dda..05bef2bc4e 100644 --- a/src/soc/intel/common/block/p2sb/p2sb.c +++ b/src/soc/intel/common/block/p2sb/p2sb.c @@ -73,6 +73,25 @@ void p2sb_set_hpet_bdf(union p2sb_bdf bdf) pci_write_config16(PCH_DEV_P2SB, PCH_P2SB_HBDF, bdf.raw); } +union p2sb_bdf p2sb_get_ioapic_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_IBDF) }; + + if (was_hidden) + p2sb_hide(); + + return bdf; +} + +void p2sb_set_ioapic_bdf(union p2sb_bdf bdf) +{ + pci_write_config16(PCH_DEV_P2SB, PCH_P2SB_IBDF, bdf.raw); +} + static void p2sb_set_hide_bit(int hide) { const uint16_t reg = PCH_P2SB_E0 + 1; -- cgit v1.2.3