summaryrefslogtreecommitdiffstats
path: root/src/import/chips
diff options
context:
space:
mode:
Diffstat (limited to 'src/import/chips')
-rw-r--r--src/import/chips/p9/procedures/hwp/nest/p9_fbc_utils.H3
-rw-r--r--src/import/chips/p9/procedures/hwp/nest/p9_sbe_load_bootloader.C16
-rw-r--r--src/import/chips/p9/procedures/hwp/nest/p9_sbe_scominit.C11
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)
OpenPOWER on IntegriCloud