Skip to content

Commit

Permalink
Streamline the way PIB/NET are initialized between SBE and Cronus
Browse files Browse the repository at this point in the history
Instead of p9_start_cbs swinging the PCB mux to PIB2PCB, do it
in p9_sbe_tp_chiplet_init1. The PIBMEM repair code on the SBE does
it this way already so no change is needed there.

This way, even if we start the SBE but then run isteps in Cronus,
both pieces of code will work correctly since they don't depend on
previous steps leaving the mux in a specific state.

Change-Id: I4a2bd53f813cbb0a00486effb156a3c2a7f4336a
CQ: SW470122
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/81162
Reviewed-by: Joseph J McGill <jmcgill@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+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: Milton D Miller <miltonm@us.ibm.com>
Tested-by: HWSV CI <hwsv-ci+hostboot@us.ibm.com>
Dev-Ready: Joachim Fenkes <fenkes@de.ibm.com>
Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com>
Reviewed-by: Jennifer A Stofer <stofer@us.ibm.com>
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/81191
Reviewed-by: RAJA DAS <rajadas2@in.ibm.com>
  • Loading branch information
fenkes-ibm authored and RAJA DAS committed Jul 30, 2019
1 parent dfae3a8 commit ace8002
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 73 deletions.
59 changes: 1 addition & 58 deletions src/import/chips/p9/procedures/hwp/perv/p9_perv_sbe_cmn.C
Expand Up @@ -5,7 +5,7 @@
/* */
/* OpenPOWER sbe Project */
/* */
/* Contributors Listed Below - COPYRIGHT 2015,2018 */
/* Contributors Listed Below - COPYRIGHT 2015,2019 */
/* [+] International Business Machines Corp. */
/* */
/* */
Expand Down Expand Up @@ -515,60 +515,3 @@ fapi_try_exit:
return fapi2::current_err;

}

#if defined(SBE_AXONE_CONFIG) || !defined(__PPE__)
/// @brief Switching to PCB2PCB Path via scom
///
/// @param[in] i_target_chip Reference to TARGET_TYPE_PROC_CHIP
/// @return FAPI2_RC_SUCCESS if success, else error code.
fapi2::ReturnCode p9_perv_sbe_cmn_switch_to_pcb2pcb_path_scom(const
fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target_chip)
{
fapi2::buffer<uint64_t> l_read_reg;
FAPI_INF("p9_perv_sbe_cmn_switch_to_pcb2pcb_path_scom: Entering ...");

FAPI_DBG("Reading ROOT_CTRL0_REG");
FAPI_TRY(fapi2::getScom(i_target_chip, PERV_ROOT_CTRL0_SCOM, l_read_reg));

if (!l_read_reg.getBit<PERV_ROOT_CTRL0_SET_PCB_RESET_DC>())
{
FAPI_DBG("Setting PCB RESET bit in ROOT_CTRL0_REG");
l_read_reg.setBit<PERV_ROOT_CTRL0_SET_PCB_RESET_DC>();
FAPI_TRY(fapi2::putScom(i_target_chip, PERV_ROOT_CTRL0_SCOM, l_read_reg));
}

if (!l_read_reg.getBit<PERV_ROOT_CTRL0_19_SPARE_MUX_CONTROL>())
{
FAPI_DBG("Setting PCB2PCB bit in ROOT_CTRL0_REG");
l_read_reg.setBit<PERV_ROOT_CTRL0_19_SPARE_MUX_CONTROL>();
FAPI_TRY(fapi2::putScom(i_target_chip, PERV_ROOT_CTRL0_SCOM, l_read_reg));
}

if (l_read_reg.getBit<PERV_ROOT_CTRL0_PIB2PCB_DC>())
{
FAPI_DBG("Clearing FSI2PCB bit in ROOT_CTRL0_REG");
l_read_reg.clearBit<PERV_ROOT_CTRL0_PIB2PCB_DC>();
FAPI_TRY(fapi2::putScom(i_target_chip, PERV_ROOT_CTRL0_SCOM, l_read_reg));
}

if (l_read_reg.getBit<PERV_ROOT_CTRL0_18_SPARE_MUX_CONTROL>())
{
FAPI_DBG("Clearing PIB2PCB bit in ROOT_CTRL0_REG");
l_read_reg.clearBit<PERV_ROOT_CTRL0_18_SPARE_MUX_CONTROL>();
FAPI_TRY(fapi2::putScom(i_target_chip, PERV_ROOT_CTRL0_SCOM, l_read_reg));
}

if (l_read_reg.getBit<PERV_ROOT_CTRL0_SET_PCB_RESET_DC>())
{
FAPI_DBG("Clearing PCB RESET bit in ROOT_CTRL0_REG");
l_read_reg.clearBit<PERV_ROOT_CTRL0_SET_PCB_RESET_DC>();
FAPI_TRY(fapi2::putScom(i_target_chip, PERV_ROOT_CTRL0_SCOM, l_read_reg));
}

FAPI_INF("p9_perv_sbe_cmn_switch_to_pcb2pcb_path_scom: Exiting ...");

fapi_try_exit:
return fapi2::current_err;

}
#endif
7 changes: 1 addition & 6 deletions src/import/chips/p9/procedures/hwp/perv/p9_perv_sbe_cmn.H
Expand Up @@ -5,7 +5,7 @@
/* */
/* OpenPOWER sbe Project */
/* */
/* Contributors Listed Below - COPYRIGHT 2015,2018 */
/* Contributors Listed Below - COPYRIGHT 2015,2019 */
/* [+] International Business Machines Corp. */
/* */
/* */
Expand Down Expand Up @@ -66,9 +66,4 @@ fapi2::ReturnCode p9_perv_sbe_cmn_scan0_module(const
const fapi2::buffer<uint16_t> i_regions,
const fapi2::buffer<uint16_t> i_scan_types);

#if defined(SBE_AXONE_CONFIG) || !defined(__PPE__)
fapi2::ReturnCode p9_perv_sbe_cmn_switch_to_pcb2pcb_path_scom(const
fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target_chip);
#endif

#endif
62 changes: 53 additions & 9 deletions src/import/chips/p9/procedures/hwp/perv/p9_sbe_tp_chiplet_init1.C
Expand Up @@ -5,7 +5,7 @@
/* */
/* OpenPOWER sbe Project */
/* */
/* Contributors Listed Below - COPYRIGHT 2015,2018 */
/* Contributors Listed Below - COPYRIGHT 2015,2019 */
/* [+] International Business Machines Corp. */
/* */
/* */
Expand Down Expand Up @@ -41,6 +41,7 @@
#include <p9_perv_scom_addresses.H>
#include <p9_perv_scom_addresses_fld.H>
#include <p9n2_perv_scom_addresses_fld.H>
#include <p9a_perv_scom_addresses_fld.H>
#include <p9_perv_sbe_cmn.H>
#include <p9_sbe_common.H>

Expand All @@ -55,6 +56,48 @@ enum P9_SBE_TP_CHIPLET_INIT1_Private_Constants
SCAN_TYPES_TIME_GPTR_REPR = 0x230
};

#ifndef __PPE__
/// @brief Switch PCB mux via CFAM
///
/// @param[in] i_target_chip Reference to TARGET_TYPE_PROC_CHIP
/// @param[in] i_new_position Desired new mux position (bit position in ROOT_CTRL0)
/// @return FAPI2_RC_SUCCESS if success, else error code.
static fapi2::ReturnCode switch_pcb_mux_cfam(
const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target_chip,
const uint32_t i_new_position)
{
fapi2::buffer<uint32_t> l_pcb_reset, l_mux_select;

l_pcb_reset.flush<0>().setBit<PERV_ROOT_CTRL0_PCB_RESET_DC>();

l_mux_select.flush<0>()
.setBit<P9A_PERV_ROOT_CTRL0_PIB2PCB_DC>()
.setBit<P9A_PERV_ROOT_CTRL0_PCB2PCB_DC>();

FAPI_DBG("Setting PCB RESET bit in ROOT_CTRL0_REG");
FAPI_TRY(fapi2::putCfamRegister(i_target_chip, PERV_ROOT_CTRL0_SET_FSI, l_pcb_reset));

// This will unconditionally set both bits (PIB2PCB, PCB2PCB), switching to a safe
// intermediate state from either of the two settings.
FAPI_DBG("Setting PCB mux to intermediate state");
FAPI_TRY(fapi2::putCfamRegister(i_target_chip, PERV_ROOT_CTRL0_SET_FSI, l_mux_select));

// We CLEAR the bit corresponding to the desired new position in l_mux_select
// and then use the CLEAR address of RC0 to effectively clear the _other_ bit,
// so that the bit left standing is our desired new position.
FAPI_DBG("Setting PCB mux to final state");
l_mux_select.clearBit(i_new_position);
FAPI_TRY(fapi2::putCfamRegister(i_target_chip, PERV_ROOT_CTRL0_CLEAR_FSI, l_mux_select));

FAPI_DBG("Clearing PCB RESET bit in ROOT_CTRL0_REG");
FAPI_TRY(fapi2::putCfamRegister(i_target_chip, PERV_ROOT_CTRL0_CLEAR_FSI, l_pcb_reset));

fapi_try_exit:
return fapi2::current_err;

}
#endif

fapi2::ReturnCode p9_sbe_tp_chiplet_init1(const
fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target_chip)
{
Expand Down Expand Up @@ -102,12 +145,14 @@ fapi2::ReturnCode p9_sbe_tp_chiplet_init1(const

#ifndef __PPE__

if(l_is_axone)
if (l_is_axone)
{
FAPI_DBG("Release PCB Reset");
//PIB.ROOT_CTRL0.PCB_RESET_DC = 0
l_data64_root_ctrl0.clearBit<PERV_ROOT_CTRL0_SET_PCB_RESET_DC>();
FAPI_TRY(fapi2::putScom(i_target_chip, PERV_ROOT_CTRL0_SCOM, l_data64_root_ctrl0));
/*
* In some lab configurations, the SBE might have done these exact steps
* before us already, but it won't hurt to do them all again.
*/
FAPI_DBG("Switch PCB mux to PIB2PCB position");
FAPI_TRY(switch_pcb_mux_cfam(i_target_chip, P9A_PERV_ROOT_CTRL0_PIB2PCB_DC));

FAPI_DBG("Set Chiplet Enable");
//PIB.PERV_CTRL0.TP_CHIPLET_EN_DC = 1
Expand All @@ -130,9 +175,8 @@ fapi2::ReturnCode p9_sbe_tp_chiplet_init1(const
FAPI_DBG("l_clk_regions value: %#018lX", l_clk_regions);
FAPI_TRY(p9_sbe_common_clock_start_stop(l_tpchiplet, START_CMD, 0, 0, l_clk_regions, CLOCK_TYPES_ALL));

FAPI_DBG("Switching to PCB2PCB path");
FAPI_TRY(p9_perv_sbe_cmn_switch_to_pcb2pcb_path_scom(
i_target_chip));
FAPI_DBG("Switch PCB mux to PCB2PCB position");
FAPI_TRY(switch_pcb_mux_cfam(i_target_chip, P9A_PERV_ROOT_CTRL0_PCB2PCB_DC));

//Getting ROOT_CTRL0 register value again as it is changed in above function
FAPI_TRY(fapi2::getScom(i_target_chip, PERV_ROOT_CTRL0_SCOM,
Expand Down

0 comments on commit ace8002

Please sign in to comment.