diff options
3 files changed, 30 insertions, 0 deletions
diff --git a/src/import/chips/p9/procedures/hwp/nest/p9_fbc_utils.H b/src/import/chips/p9/procedures/hwp/nest/p9_fbc_utils.H index 97d2c811..79926591 100644 --- a/src/import/chips/p9/procedures/hwp/nest/p9_fbc_utils.H +++ b/src/import/chips/p9/procedures/hwp/nest/p9_fbc_utils.H @@ -79,6 +79,9 @@ const uint8_t CHIP_ADDRESS_EXTENSION_GROUP_ID_MASK_SMF_ENABLE = 0x8; const uint64_t MAX_INTERLEAVE_GROUP_SIZE = 0x40000000000ULL; // 4_TB const uint64_t MAX_INTERLEAVE_GROUP_SIZE_HW423589_OPTION2 = 0x8000000000ULL; // 512_GB +// XSCOM BAR offset, with SMF enabled +const uint64_t XSCOM_BAR_SMF_OFFSET = 0x0001000000000000ULL; + //------------------------------------------------------------------------------ // Function prototypes //------------------------------------------------------------------------------ diff --git a/src/import/chips/p9/procedures/hwp/nest/p9_sbe_load_bootloader.C b/src/import/chips/p9/procedures/hwp/nest/p9_sbe_load_bootloader.C index 18ce7098..626063cc 100644 --- a/src/import/chips/p9/procedures/hwp/nest/p9_sbe_load_bootloader.C +++ b/src/import/chips/p9/procedures/hwp/nest/p9_sbe_load_bootloader.C @@ -401,6 +401,8 @@ get_bootloader_config_data( fapi2::buffer<uint64_t> l_cbs_cs; BootloaderConfigData_t l_bootloader_config_data; + fapi2::ATTR_CHIP_EC_FEATURE_SMF_SUPPORTED_Type l_smf_supported; + fapi2::ATTR_SMF_CONFIG_Type l_smf_config; FAPI_DBG("Start"); @@ -420,8 +422,22 @@ get_bootloader_config_data( FAPI_SYSTEM, l_bootloader_config_data.xscomBAR), "Error from FAPI_ATTR_GET (ATTR_PROC_XSCOM_BAR_BASE_ADDR_OFFSET)"); + FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_CHIP_EC_FEATURE_SMF_SUPPORTED, + i_master_chip_target, + l_smf_supported), + "Error from FAPI_ATTR_GET (ATTR_CHIP_EC_FEATURE_SMF_SUPPORTED)"); + FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_SMF_CONFIG, + FAPI_SYSTEM, + l_smf_config), + "Error from FAPI_ATTR_GET (ATTR_SMF_CONFIG)"); + l_bootloader_config_data.xscomBAR += l_chip_base_address_mmio; + if (l_smf_config && l_smf_supported) + { + l_bootloader_config_data.xscomBAR += XSCOM_BAR_SMF_OFFSET; + } + // LPC BAR offset FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PROC_LPC_BAR_BASE_ADDR_OFFSET, FAPI_SYSTEM, diff --git a/src/import/chips/p9/procedures/hwp/nest/p9_sbe_scominit.C b/src/import/chips/p9/procedures/hwp/nest/p9_sbe_scominit.C index 1f6fc5d3..431ba12a 100644 --- a/src/import/chips/p9/procedures/hwp/nest/p9_sbe_scominit.C +++ b/src/import/chips/p9/procedures/hwp/nest/p9_sbe_scominit.C @@ -178,14 +178,25 @@ p9_sbe_scominit(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target) { fapi2::buffer<uint64_t> l_xscom_bar; uint64_t l_xscom_bar_offset; + fapi2::ATTR_CHIP_EC_FEATURE_SMF_SUPPORTED_Type l_smf_supported; + fapi2::ATTR_SMF_CONFIG_Type l_smf_config; FAPI_DBG("Configuring XSCOM BAR"); FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PROC_XSCOM_BAR_BASE_ADDR_OFFSET, FAPI_SYSTEM, l_xscom_bar_offset), "Error from FAPI_ATTR_GET (ATTR_PROC_XSCOM_BAR_BASE_ADDR_OFFSET)"); + FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_CHIP_EC_FEATURE_SMF_SUPPORTED, i_target, l_smf_supported), + "Error from FAPI_ATTR_GET (ATTR_CHIP_EC_FEATURE_SMF_SUPPORTED)"); + FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_SMF_CONFIG, fapi2::Target<fapi2::TARGET_TYPE_SYSTEM>(), l_smf_config), + "Error from FAPI_ATTR_GET (ATTR_SMF_CONFIG)"); l_xscom_bar = l_base_addr_mmio; l_xscom_bar += l_xscom_bar_offset; + if (l_smf_config && l_smf_supported) + { + l_xscom_bar += XSCOM_BAR_SMF_OFFSET; + } + FAPI_ASSERT((l_xscom_bar & XSCOM_BAR_MASK) == 0, fapi2::P9_SBE_SCOMINIT_XSCOM_BAR_ATTR_ERR() .set_TARGET(i_target) |