diff options
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/nest/p9_sys_chiplet_scominit.C')
-rw-r--r-- | src/import/chips/p9/procedures/hwp/nest/p9_sys_chiplet_scominit.C | 78 |
1 files changed, 59 insertions, 19 deletions
diff --git a/src/import/chips/p9/procedures/hwp/nest/p9_sys_chiplet_scominit.C b/src/import/chips/p9/procedures/hwp/nest/p9_sys_chiplet_scominit.C index bfd05abe9..46e2818e4 100644 --- a/src/import/chips/p9/procedures/hwp/nest/p9_sys_chiplet_scominit.C +++ b/src/import/chips/p9/procedures/hwp/nest/p9_sys_chiplet_scominit.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2016,2017 */ +/* Contributors Listed Below - COPYRIGHT 2016,2018 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -42,6 +42,9 @@ #include "p9_sys_chiplet_scominit.H" #include "p9_fbc_ioo_tl_scom.H" #include "p9_fbc_ioo_dl_scom.H" +#include "p9_misc_scom_addresses.H" +#include "p9_misc_scom_addresses_fld.H" +#include "p9_fbc_smp_utils.H" //------------------------------------------------------------------------------ // Function definitions @@ -53,38 +56,75 @@ fapi2::ReturnCode p9_sys_chiplet_scominit( fapi2::ReturnCode l_rc; fapi2::Target<fapi2::TARGET_TYPE_SYSTEM> FAPI_SYSTEM; std::vector<fapi2::Target<fapi2::TARGET_TYPE_OBUS>> l_obus_chiplets; + fapi2::ATTR_PROC_FABRIC_X_ATTACHED_CHIP_CNFG_Type l_x_en; + fapi2::ATTR_PROC_FABRIC_A_ATTACHED_CHIP_CNFG_Type l_a_en; FAPI_DBG("Start"); - do + // Invoke IOO (OBUS FBC IO) SCOM initfiles + FAPI_DBG("Invoking p9.fbc.ioo_tl.scom.initfile..."); + FAPI_EXEC_HWP(l_rc, p9_fbc_ioo_tl_scom, i_target, FAPI_SYSTEM); + + if (l_rc) + { + FAPI_ERR("Error from p9_fbc_ioo_tl_scom"); + fapi2::current_err = l_rc; + goto fapi_try_exit; + } + + l_obus_chiplets = i_target.getChildren<fapi2::TARGET_TYPE_OBUS>(); + + for (auto l_iter = l_obus_chiplets.begin(); + l_iter != l_obus_chiplets.end(); + l_iter++) { - // Invoke IOO (OBUS FBC IO) SCOM initfiles - FAPI_DBG("Invoking p9.fbc.ioo_tl.scom.initfile..."); - FAPI_EXEC_HWP(l_rc, p9_fbc_ioo_tl_scom, i_target, FAPI_SYSTEM); + FAPI_DBG("Invoking p9.fbc.ioo_dl.scom.initfile..."); + FAPI_EXEC_HWP(l_rc, p9_fbc_ioo_dl_scom, *l_iter, i_target); if (l_rc) { - FAPI_ERR("Error from p9_fbc_ioo_tl_scom"); - break; + FAPI_ERR("Error from p9_fbc_ioo_dl_scom"); + fapi2::current_err = l_rc; + goto fapi_try_exit; } + } - l_obus_chiplets = i_target.getChildren<fapi2::TARGET_TYPE_OBUS>(); + // mask EXTFIR associated with unused inter-drawer links + FAPI_DBG("Masking OBUS FIR resources for unused inter-drawer links"); + FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PROC_FABRIC_X_ATTACHED_CHIP_CNFG, + i_target, + l_x_en), + "Error from FAPI_ATTR_GET (ATTR_PROC_FABRIC_X_ATTACHED_CHIP_CNFG)"); + FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PROC_FABRIC_A_ATTACHED_CHIP_CNFG, + i_target, + l_a_en), + "Error from FAPI_ATTR_GET (ATTR_PROC_FABRIC_A_ATTACHED_CHIP_CNFG)"); - for (auto l_iter = l_obus_chiplets.begin(); - l_iter != l_obus_chiplets.end(); - l_iter++) + for (uint8_t l_obus = 0; + l_obus < P9_FBC_UTILS_MAX_A_LINKS; + l_obus++) + { + if (!l_x_en[3 + l_obus] && !l_a_en[l_obus]) { - FAPI_DBG("Invoking p9.fbc.ioo_dl.scom.initfile..."); - FAPI_EXEC_HWP(l_rc, p9_fbc_ioo_dl_scom, *l_iter, i_target); + fapi2::buffer<uint64_t> l_extfir_mask = 0; + fapi2::buffer<uint64_t> l_extfir_action1 = 0; + + FAPI_TRY(l_extfir_mask.setBit(PU_PB_CENT_SM1_EXTFIR_REG_PB_X3_FIR_ERR + + l_obus), + "Error forming EXTFIR mask register content"); + FAPI_TRY(fapi2::putScom(i_target, PU_PB_CENT_SM1_EXTFIR_MASK_REG_OR, l_extfir_mask), + "Error from putScom (PU_PB_CENT_SM1_EXTFIR_MASK_REG_OR)"); - if (l_rc) - { - FAPI_ERR("Error from p9_fbc_ioo_dl_scom"); - break; - } + FAPI_TRY(fapi2::getScom(i_target, PU_PB_CENT_SM1_EXTFIR_ACTION1_REG, l_extfir_action1), + "Error from getScom (PU_PB_CENT_SM1_EXTFIR_ACTION1_REG)"); + FAPI_TRY(l_extfir_action1.setBit(PU_PB_CENT_SM1_EXTFIR_REG_PB_X3_FIR_ERR + + l_obus), + "Error forming EXTFIR action1 register content"); + FAPI_TRY(fapi2::putScom(i_target, PU_PB_CENT_SM1_EXTFIR_ACTION1_REG, l_extfir_action1), + "Error from putScom (PU_PB_CENT_SM1_EXTFIR_ACTION1_REG)"); } } - while(0); +fapi_try_exit: FAPI_DBG("End"); return l_rc; } |