summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9
diff options
context:
space:
mode:
authorLiuYangFan <shliuyf@cn.ibm.com>2017-04-26 02:34:42 -0500
committerDean Sanner <dsanner@us.ibm.com>2017-07-14 08:37:58 -0400
commit34514fe03f1e41d838b3f60e06136444e028a0ef (patch)
treea0afb218c5fbca0054baf0f8efaa553711971a37 /src/import/chips/p9
parentc0cb66e57706b3791562f84f9e469293f6e0a11e (diff)
downloadtalos-hostboot-34514fe03f1e41d838b3f60e06136444e028a0ef.tar.gz
talos-hostboot-34514fe03f1e41d838b3f60e06136444e028a0ef.zip
p9_chiplet_scominit - add Cumulus support
requirers ecmd 14-7 Change-Id: I01a4529cc53718dbcd5aabc5157ef027db52418a Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/39697 Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Reviewed-by: Thi N. Tran <thi@us.ibm.com> Reviewed-by: LENNARD G. STREAT <lstreat@us.ibm.com> Reviewed-by: Benjamin Gass <bgass@us.ibm.com> Reviewed-by: Joseph J. McGill <jmcgill@us.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/39698 Reviewed-by: Hostboot Team <hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Reviewed-by: Dean Sanner <dsanner@us.ibm.com>
Diffstat (limited to 'src/import/chips/p9')
-rw-r--r--src/import/chips/p9/procedures/hwp/nest/p9_chiplet_scominit.C222
1 files changed, 160 insertions, 62 deletions
diff --git a/src/import/chips/p9/procedures/hwp/nest/p9_chiplet_scominit.C b/src/import/chips/p9/procedures/hwp/nest/p9_chiplet_scominit.C
index 9bf3e8aaf..071eed44e 100644
--- a/src/import/chips/p9/procedures/hwp/nest/p9_chiplet_scominit.C
+++ b/src/import/chips/p9/procedures/hwp/nest/p9_chiplet_scominit.C
@@ -43,6 +43,14 @@
#include <p9_fbc_ioo_tl_scom.H>
#include <p9_fbc_ioo_dl_scom.H>
#include <p9n_mcs_scom.H>
+
+//TODO: RTC 176054
+#ifndef __HOSTBOOT_MODULE
+ #include <p9c_dmi_scom.H>
+ #include <p9c_mi_scom.H>
+ #include <p9c_mc_scom.H>
+#endif
+
#include <p9_cxa_scom.H>
#include <p9_nx_scom.H>
#include <p9_int_scom.H>
@@ -93,6 +101,14 @@ fapi2::ReturnCode p9_chiplet_scominit(const fapi2::Target<fapi2::TARGET_TYPE_PRO
fapi2::Target<fapi2::TARGET_TYPE_SYSTEM> FAPI_SYSTEM;
std::vector<fapi2::Target<fapi2::TARGET_TYPE_OBUS>> l_obus_chiplets;
std::vector<fapi2::Target<fapi2::TARGET_TYPE_MCS>> l_mcs_targets;
+ std::vector<fapi2::Target<fapi2::TARGET_TYPE_MI>> l_mi_targets;
+
+//TODO: RTC 176054
+#ifndef __HOSTBOOT_MODULE
+ std::vector<fapi2::Target<fapi2::TARGET_TYPE_MC>> l_mc_targets;
+#endif
+
+ std::vector<fapi2::Target<fapi2::TARGET_TYPE_DMI>> l_dmi_targets;
std::vector<fapi2::Target<fapi2::TARGET_TYPE_CAPP>> l_capp_targets;
std::vector<fapi2::Target<fapi2::TARGET_TYPE_OBUS_BRICK>> l_obrick_targets;
fapi2::buffer<uint64_t> l_ob0data(0x0);
@@ -110,95 +126,177 @@ fapi2::ReturnCode p9_chiplet_scominit(const fapi2::Target<fapi2::TARGET_TYPE_PRO
// Get proc target string
fapi2::toString(i_target, l_procTargetStr, sizeof(l_procTargetStr));
+ // invoke IOO (OBUS FBC IO) SCOM initfiles
+ l_obus_chiplets = i_target.getChildren<fapi2::TARGET_TYPE_OBUS>();
- if (!l_no_ndl_iovalid)
+ for (auto l_obus_target : l_obus_chiplets)
{
+ uint8_t l_unit_pos;
+ uint8_t l_obus_mode;
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_CHIP_UNIT_POS, l_obus_target, l_unit_pos),
+ "Error from FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS)");
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_OPTICS_CONFIG_MODE, l_obus_target, l_obus_mode),
+ "Error from FAPI_ATTR_GET(ATTR_OPTICS_CONFIG_MODE)");
+
+ //Update NDL IOValid data as needed
+ if (!l_no_ndl_iovalid && (l_unit_pos == 0 || l_unit_pos == 3) && //NDL only exists on obus 0 and 3
+ l_obus_mode == fapi2::ENUM_ATTR_OPTICS_CONFIG_MODE_NV)
+ {
- l_obrick_targets = i_target.getChildren<fapi2::TARGET_TYPE_OBUS_BRICK>();
+ l_obrick_targets = l_obus_target.getChildren<fapi2::TARGET_TYPE_OBUS_BRICK>();
- for (auto l_obrick_target : l_obrick_targets)
- {
- fapi2::toString(l_obrick_target, l_chipletTargetStr, sizeof(l_chipletTargetStr));
- FAPI_DBG("Setting NDL IOValid for %s...", l_chipletTargetStr);
-
- uint8_t l_unit_pos;
- FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_CHIP_UNIT_POS, l_obrick_target, l_unit_pos),
- "Error from FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS)");
-
- //Mapping from John Irish (jdirish@us.ibm.com)
- //OBus Register bit NV instance NV pos
- //OB0 NV0 io_valid(A) STK0.NTL0.. 0
- //OB0 NV1 io_valid(B) STK0.NTL1.. 1
- //OB0 NV2 io_valid(C) STK1.NTL0.. 2
- //OB3 NV2 io_valid(C) STK1.NTL1.. 3
- //OB3 NV1 io_valid(B) STK2.NTL0.. 4
- //OB3 NV0 io_valid(A) STK2.NTL1.. 5
- switch (l_unit_pos)
+ for (auto l_obrick_target : l_obrick_targets)
{
- case OBRICK0_POS:
- l_ob0data.setBit<PERV_OB_CPLT_CONF1_OBRICKA_IOVALID>();
- break;
+ fapi2::toString(l_obrick_target, l_chipletTargetStr, sizeof(l_chipletTargetStr));
+ FAPI_DBG("Setting NDL IOValid for %s...", l_chipletTargetStr);
+
+ uint8_t l_unit_pos;
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_CHIP_UNIT_POS, l_obrick_target, l_unit_pos),
+ "Error from FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS)");
+
+ //Mapping from John Irish (jdirish@us.ibm.com)
+ //OBus Register bit NV instance NV pos
+ //OB0 NV0 io_valid(A) STK0.NTL0.. 0
+ //OB0 NV1 io_valid(B) STK0.NTL1.. 1
+ //OB0 NV2 io_valid(C) STK1.NTL0.. 2
+ //OB3 NV2 io_valid(C) STK1.NTL1.. 3
+ //OB3 NV1 io_valid(B) STK2.NTL0.. 4
+ //OB3 NV0 io_valid(A) STK2.NTL1.. 5
+ switch (l_unit_pos)
+ {
+ case OBRICK0_POS:
+ l_ob0data.setBit<PERV_OB_CPLT_CONF1_OBRICKA_IOVALID>();
+ break;
+
+ case OBRICK1_POS:
+ l_ob0data.setBit<PERV_OB_CPLT_CONF1_OBRICKB_IOVALID>();
+ break;
+
+ case OBRICK2_POS:
+ l_ob0data.setBit<PERV_OB_CPLT_CONF1_OBRICKC_IOVALID>();
+ break;
+
+ //OBRICK3..8 associated with OBUS 1 & 2 do not have NDL
+
+ case OBRICK9_POS:
+ l_ob3data.setBit<PERV_OB_CPLT_CONF1_OBRICKC_IOVALID>();
+ break;
+
+ case OBRICK10_POS:
+ l_ob3data.setBit<PERV_OB_CPLT_CONF1_OBRICKB_IOVALID>();
+ break;
+
+ case OBRICK11_POS:
+ l_ob3data.setBit<PERV_OB_CPLT_CONF1_OBRICKA_IOVALID>();
+ break;
+
+ default:
+ FAPI_ASSERT(false, fapi2::P9_CHIPLET_SCOMINIT_UNSUPPORTED_OBRICK_POS_ERR().set_TARGET(l_obrick_target),
+ "ERROR; Unsupported NV position.");
+
+ }
- case OBRICK1_POS:
- l_ob0data.setBit<PERV_OB_CPLT_CONF1_OBRICKB_IOVALID>();
- break;
+ }
- case OBRICK2_POS:
- l_ob0data.setBit<PERV_OB_CPLT_CONF1_OBRICKC_IOVALID>();
- break;
+ }
- case OBRICK9_POS:
- l_ob3data.setBit<PERV_OB_CPLT_CONF1_OBRICKC_IOVALID>();
- break;
+ }
- case OBRICK10_POS:
- l_ob3data.setBit<PERV_OB_CPLT_CONF1_OBRICKB_IOVALID>();
- break;
+ //Write the NDL IOValid registers as needed.
+ if (l_ob0data != 0)
+ {
+ FAPI_TRY(putScom(i_target, PERV_OB0_CPLT_CONF1_OR, l_ob0data));
+ }
- case OBRICK11_POS:
- l_ob3data.setBit<PERV_OB_CPLT_CONF1_OBRICKA_IOVALID>();
- break;
+ if (l_ob3data != 0)
+ {
+ FAPI_TRY(putScom(i_target, PERV_OB3_CPLT_CONF1_OR, l_ob3data));
+ }
- default:
- FAPI_ASSERT(false, fapi2::P9_CHIPLET_SCOMINIT_UNSUPPORTED_OBRICK_POS_ERR().set_TARGET(l_obrick_target),
- "ERROR; Unsupported NV position.");
- }
+ l_mcs_targets = i_target.getChildren<fapi2::TARGET_TYPE_MCS>();
+ l_mi_targets = i_target.getChildren<fapi2::TARGET_TYPE_MI>();
+ l_dmi_targets = i_target.getChildren<fapi2::TARGET_TYPE_DMI>();
- }
+//TODO: RTC 176054
+#ifndef __HOSTBOOT_MODULE
+ l_mc_targets = i_target.getChildren<fapi2::TARGET_TYPE_MC>();
+#endif
- if (l_ob0data != 0)
+ if (l_mcs_targets.size())
+ {
+ for (auto l_mcs_target : l_mcs_targets)
{
- FAPI_TRY(putScom(i_target, PERV_OB0_CPLT_CONF1_OR, l_ob0data));
- }
+ fapi2::toString(l_mcs_target, l_chipletTargetStr, sizeof(l_chipletTargetStr));
+ FAPI_DBG("Invoking p9n.mcs.scom.initfile on target %s...", l_chipletTargetStr);
+ FAPI_EXEC_HWP(l_rc, p9n_mcs_scom, l_mcs_target, FAPI_SYSTEM, i_target,
+ l_mcs_target.getParent<fapi2::TARGET_TYPE_MCBIST>());
- if (l_ob3data != 0)
- {
- FAPI_TRY(putScom(i_target, PERV_OB3_CPLT_CONF1_OR, l_ob3data));
+ if (l_rc)
+ {
+ FAPI_ERR("Error from p9.mcs.scom.initfile");
+ fapi2::current_err = l_rc;
+ goto fapi_try_exit;
+ }
}
-
}
- l_mcs_targets = i_target.getChildren<fapi2::TARGET_TYPE_MCS>();
+//TODO: RTC 176054
+#ifndef __HOSTBOOT_MODULE
- for (auto l_mcs_target : l_mcs_targets)
+ else if (l_mc_targets.size())
{
- fapi2::toString(l_mcs_target, l_chipletTargetStr, sizeof(l_chipletTargetStr));
- FAPI_DBG("Invoking p9.mcs.scom.initfile on target %s...", l_chipletTargetStr);
- FAPI_EXEC_HWP(l_rc, p9n_mcs_scom, l_mcs_target, FAPI_SYSTEM, i_target,
- l_mcs_target.getParent<fapi2::TARGET_TYPE_MCBIST>());
+ for (auto l_mc_target : l_mc_targets)
+ {
+ fapi2::toString(l_mc_target, l_chipletTargetStr, sizeof(l_chipletTargetStr));
+ FAPI_DBG("Invoking p9c.mc.scom.initfile on target %s...", l_chipletTargetStr);
+ FAPI_EXEC_HWP(l_rc, p9c_mc_scom, l_mc_target, FAPI_SYSTEM);
- if (l_rc)
+ if (l_rc)
+ {
+ FAPI_ERR("Error from p9c.mc.scom.initfile");
+ fapi2::current_err = l_rc;
+ goto fapi_try_exit;
+ }
+ }
+
+ for (auto l_mi_target : l_mi_targets)
{
- FAPI_ERR("Error from p9.mcs.scom.initfile");
- fapi2::current_err = l_rc;
- goto fapi_try_exit;
+ fapi2::toString(l_mi_target, l_chipletTargetStr, sizeof(l_chipletTargetStr));
+ FAPI_DBG("Invoking p9c.mi.scom.initfile on target %s...", l_chipletTargetStr);
+ FAPI_EXEC_HWP(l_rc, p9c_mi_scom, l_mi_target, FAPI_SYSTEM);
+
+ if (l_rc)
+ {
+ FAPI_ERR("Error from p9c.mi.scom.initfile");
+ fapi2::current_err = l_rc;
+ goto fapi_try_exit;
+ }
}
+ for (auto l_dmi_target : l_dmi_targets)
+ {
+ fapi2::toString(l_dmi_target, l_chipletTargetStr, sizeof(l_chipletTargetStr));
+ FAPI_DBG("Invoking p9c.dmi.scom.initfile on target %s...", l_chipletTargetStr);
+ FAPI_EXEC_HWP(l_rc, p9c_dmi_scom, l_dmi_target, FAPI_SYSTEM);
+
+ if (l_rc)
+ {
+ FAPI_ERR("Error from p9c.dmi.scom.initfile");
+ fapi2::current_err = l_rc;
+ goto fapi_try_exit;
+ }
+ }
+ }
+
+//TODO: RTC 176054
+#endif // __HOSTBOOT_MODULE
+
+ else
+ {
+ FAPI_INF("No MCS/MI targets found! Do nothing!");
}
- // invoke IOO (OBUS FBC IO) SCOM initfiles
- l_obus_chiplets = i_target.getChildren<fapi2::TARGET_TYPE_OBUS>();
FAPI_DBG("Invoking p9.fbc.ioo_tl.scom.initfile on target %s...", l_procTargetStr);
FAPI_EXEC_HWP(l_rc, p9_fbc_ioo_tl_scom, i_target, FAPI_SYSTEM);
OpenPOWER on IntegriCloud