summaryrefslogtreecommitdiffstats
path: root/src/import/chips/centaur
diff options
context:
space:
mode:
Diffstat (limited to 'src/import/chips/centaur')
-rw-r--r--src/import/chips/centaur/common/include/centaur_misc_constants.H6
-rw-r--r--src/import/chips/centaur/procedures/hwp/perv/cen_common_funcs.C182
-rw-r--r--src/import/chips/centaur/procedures/hwp/perv/cen_common_funcs.H8
3 files changed, 151 insertions, 45 deletions
diff --git a/src/import/chips/centaur/common/include/centaur_misc_constants.H b/src/import/chips/centaur/common/include/centaur_misc_constants.H
index b4dbec855..5d726645f 100644
--- a/src/import/chips/centaur/common/include/centaur_misc_constants.H
+++ b/src/import/chips/centaur/common/include/centaur_misc_constants.H
@@ -59,6 +59,11 @@
#define SCAN_TP_ARRAY_INIT_REGIONS 0x09000e0000000000
#define SCAN_TP_REGIONS_EXCEPT_PIB_PCB 0x09e00e0000000000
#define SCAN_TP_SCAN_SELECTS 0x09e00dce00000000
+#define SCAN_TP_PLL_REGIONS 0x08100E0000000000
+
+#define SCAN_REGION_TP_PLL_GPTR 0x0810020000000000
+#define SCAN_REGION_TP_PLL_BNDY_FUNC 0x0810080800000000
+
#define SCAN_CLK_ALL_BUT_PLL 0x0FE00E0000000000
#define SCAN_GPTR_TIME_REP_NO_PLL 0x0FE0023000000000
#define SCAN_ALL_BUT_VITALPLLGPTRTIME 0x0FE00DCE00000000
@@ -70,6 +75,7 @@
#define SCAN_STBY_CHIPLET RULL(0x00)
#define SCAN_CHIPLET_TP RULL(0x01)
#define SCAN_CHIPLET_NEST RULL(0x02)
+#define SCAN_CHIPLET_MEM RULL(0x03)
#define SCAN_CHIPLET_GROUP1 RULL(0x69)
#define SCAN_CHIPLET_GROUP3 RULL(0x6B)
diff --git a/src/import/chips/centaur/procedures/hwp/perv/cen_common_funcs.C b/src/import/chips/centaur/procedures/hwp/perv/cen_common_funcs.C
index 1948315a2..33205c6bb 100644
--- a/src/import/chips/centaur/procedures/hwp/perv/cen_common_funcs.C
+++ b/src/import/chips/centaur/procedures/hwp/perv/cen_common_funcs.C
@@ -81,12 +81,12 @@ cen_scan0_module(const fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>& i_target,
uint64_t l_multicast_read_and = i_chiplet_id;
bool l_poll_succeed = false;
- FAPI_INF("cen_scan0_module Start");
- FAPI_DBG("<scan0> : Setting up Clock Regions and Scan Selects");
+ FAPI_INF("Start");
+ FAPI_DBG("Setting up Clock Regions and Scan Selects");
FAPI_TRY(fapi2::putScom(i_target, l_clk_region_addr, l_clk_region_data));
FAPI_TRY(fapi2::putScom(i_target, l_clk_scansel_addr, l_clk_scansel_data));
- FAPI_DBG("<scan0> : Clear OPCG_CNTL0 REG BIT(0)");
+ FAPI_DBG("Clear OPCG_CNTL0 REG BIT(0)");
FAPI_TRY(fapi2::getScom(i_target, l_opcg_cntl0_addr, l_opcg_cntl0_data));
l_opcg_cntl0_data.clearBit<0>();
FAPI_TRY(fapi2::putScom(i_target, l_opcg_cntl0_addr, l_opcg_cntl0_data));
@@ -96,22 +96,22 @@ cen_scan0_module(const fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>& i_target,
// read group, otherwise simply set l_multicast_read_and = i_chiplet_id.
if (is_multicast_write(i_chiplet_id))
{
- FAPI_DBG("<scan0> : *INFO* This is a multicast SCAN0 *INFO* ");
- FAPI_DBG("<scan0> : Setting OPCG_CNTL0 run BIT(2) for scan0 to start, also set scan ratio to 16:1, set INOP alignment to 4:1");
+ FAPI_DBG("*INFO* This is a multicast SCAN0 *INFO* ");
+ FAPI_DBG("Setting OPCG_CNTL0 run BIT(2) for scan0 to start, also set scan ratio to 16:1, set INOP alignment to 4:1");
l_multicast_read_and = get_multicast_read_and(i_chiplet_id);
l_opcg_cntl0_data.setBit<2>().setBit<5, 4>().setBit<12, 2>();
}
else //cen_osm_start
{
- FAPI_DBG("<scan0> : Setting OPCG_CNTL0 run BIT(2) for scan0 to start");
+ FAPI_DBG("Setting OPCG_CNTL0 run BIT(2) for scan0 to start");
l_opcg_cntl0_data.setBit<2>();
}
FAPI_TRY(fapi2::putScom(i_target, l_opcg_cntl0_addr, l_opcg_cntl0_data));
//cen_osm_poll
- FAPI_DBG("<scan0> : Start polling for SCAN0 complete ...");
+ FAPI_DBG("Start polling for SCAN0 complete ...");
l_gp1_addr_multi_cast = get_scom_addr(l_multicast_read_and, CEN_GENERIC_GP1);
@@ -133,16 +133,16 @@ cen_scan0_module(const fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>& i_target,
FAPI_ASSERT(l_poll_succeed,
fapi2::CEN_COMMON_SCAN0_POLL_OPCG_DONE_TIMEOUT().
set_TARGET(i_target),
- "<scan0> : ERROR: Gave up waiting for OPCG done bit(15)='1'.");
+ "ERROR: Gave up waiting for OPCG done bit(15)='1'.");
- FAPI_DBG("<scan0> : SCAN0 completed, clear Clock Regions and Scan Selects");
+ FAPI_DBG("SCAN0 completed, clear Clock Regions and Scan Selects");
l_clk_region_data.flush<0>(); //clear to all-zero
FAPI_TRY(fapi2::putScom(i_target, l_clk_region_addr, l_clk_region_data));
l_clk_scansel_data.flush<0>(); //clear to all-zero
FAPI_TRY(fapi2::putScom(i_target, l_clk_scansel_addr, l_clk_scansel_data))
fapi_try_exit:
- FAPI_DBG("cen_scan0_module End");
+ FAPI_DBG("End");
return fapi2::current_err;
}
@@ -150,7 +150,7 @@ fapi2::ReturnCode
cen_arrayinit_module(const fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>& i_target,
const uint64_t i_chiplet_id, const uint64_t i_clock_region)
{
- FAPI_INF("cen_arrayinit_module Start");
+ FAPI_INF("Start");
fapi2::buffer<uint64_t> l_gp0_data = 0;
fapi2::buffer<uint64_t> l_gp1_data = 0;
fapi2::buffer<uint64_t> l_opcg_cntl0_data = 0;
@@ -175,24 +175,24 @@ cen_arrayinit_module(const fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>& i_targ
// read group, otherwise simply set l_multicast_read_and = i_chiplet_id.
if (is_multicast_write(i_chiplet_id))
{
- FAPI_DBG("<cen_arrayinit> : *INFO* This is a multicast ARRAY INIT *INFO*");
+ FAPI_DBG("*INFO* This is a multicast ARRAY INIT *INFO*");
l_multicast_read_or = get_multicast_read_or(i_chiplet_id);
l_multicast_read_and = get_multicast_read_and(i_chiplet_id);
}
- FAPI_DBG("<cen_arrayinit> : Drop Pervasive Fence");
+ FAPI_DBG("Drop Pervasive Fence");
l_gp0_data.setBit<63>().invert();
FAPI_TRY(fapi2::putScom(i_target, l_gp0_addr_and, l_gp0_data));
- FAPI_DBG("<cen_arrayinit> : Setup ABISTMUX_SEL, ABIST mode and ABIST mode2");
+ FAPI_DBG("Setup ABISTMUX_SEL, ABIST mode and ABIST mode2");
l_gp0_data = 0;
l_gp0_data.setBit<0>().setBit<11>().setBit<13>();
FAPI_TRY(fapi2::putScom(i_target, l_gp0_addr_or, l_gp0_data));
- FAPI_DBG("<cen_arrayinit> : Setup all Clock Domains and Clock Types");
+ FAPI_DBG("Setup all Clock Domains and Clock Types");
FAPI_TRY(fapi2::putScom(i_target, l_clk_region_addr, i_clock_region));
- FAPI_DBG("<cen_arrayinit> : Setup loopcount and run-N mode");
+ FAPI_DBG("Setup loopcount and run-N mode");
l_opcg_cntl0_addr_multi_cast = get_scom_addr(l_multicast_read_or, CEN_GENERIC_OPCG_CNTL0);
FAPI_TRY(fapi2::getScom(i_target, l_opcg_cntl0_addr_multi_cast, l_opcg_cntl0_data));
// And with mask bit(0:20), starting from bit 0, totally 21 bits.
@@ -200,7 +200,7 @@ cen_arrayinit_module(const fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>& i_targ
l_opcg_cntl0_data |= 0x80000000000412D0;
FAPI_TRY(fapi2::putScom(i_target, l_opcg_cntl0_addr, l_opcg_cntl0_data));
- FAPI_DBG("<cen_arrayinit> : Setup IDLE count and OPCG engine start ABIST");
+ FAPI_DBG("Setup IDLE count and OPCG engine start ABIST");
l_opcg_cntl2_addr_multi_cast = get_scom_addr(l_multicast_read_or, CEN_GENERIC_OPCG_CNTL2);
FAPI_TRY(fapi2::getScom(i_target, l_opcg_cntl2_addr_multi_cast, l_opcg_cntl2_data));
// And with mask bit(36:63), starting from bit 36, totally 28 bits.
@@ -208,12 +208,12 @@ cen_arrayinit_module(const fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>& i_targ
l_opcg_cntl2_data |= 0x00000000F0007200;
FAPI_TRY(fapi2::putScom(i_target, l_opcg_cntl2_addr, l_opcg_cntl2_data));
- FAPI_DBG("<cen_arrayinit> : Issue Clock Start: Write OPCG CTL0 Register");
+ FAPI_DBG("Issue Clock Start: Write OPCG CTL0 Register");
FAPI_TRY(fapi2::getScom(i_target, l_opcg_cntl0_addr_multi_cast, l_opcg_cntl0_data));
l_opcg_cntl0_data |= fapi2::buffer<uint64_t>().setBit<1>();
FAPI_TRY(fapi2::putScom(i_target, l_opcg_cntl0_addr, l_opcg_cntl0_data));
- FAPI_DBG("<cen_arrayinit> : Poll for OPCG done bit");
+ FAPI_DBG("Poll for OPCG done bit");
l_gp1_addr_multi_cast = get_scom_addr(l_multicast_read_and, CEN_GENERIC_GP1);
for (uint32_t i = 0; i < MAX_FLUSH_LOOPS; i++)
@@ -236,13 +236,13 @@ cen_arrayinit_module(const fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>& i_targ
set_TARGET(i_target),
"Centaur arrayinit module timed out polling for OPCG done!");
- FAPI_DBG("<cen_arrayinit> : OPCG done, clear Run-N mode");
+ FAPI_DBG("OPCG done, clear Run-N mode");
l_opcg_cntl0_addr_multi_cast = get_scom_addr(l_multicast_read_and, CEN_GENERIC_OPCG_CNTL0);
FAPI_TRY(fapi2::getScom(i_target, l_opcg_cntl0_addr_multi_cast, l_opcg_cntl0_data));
l_opcg_cntl0_data &= 0x7FFFF80000000000;
FAPI_TRY(fapi2::putScom(i_target, l_opcg_cntl0_addr, l_opcg_cntl0_data));
- FAPI_DBG("<cen_arrayinit> : Clear ABISTMUX_SEL, ABIST mode, ABIST mode2 and set Pervasive Fence");
+ FAPI_DBG("Clear ABISTMUX_SEL, ABIST mode, ABIST mode2 and set Pervasive Fence");
l_gp0_data = 0;
l_gp0_data.setBit<0>().setBit<11>().setBit<13>().invert();
FAPI_TRY(fapi2::putScom(i_target, l_gp0_addr_and, l_gp0_data));
@@ -251,7 +251,7 @@ cen_arrayinit_module(const fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>& i_targ
FAPI_TRY(fapi2::putScom(i_target, l_gp0_addr_or, l_gp0_data));
fapi_try_exit:
- FAPI_INF("cen_arrayinit_module End");
+ FAPI_INF("End");
return fapi2::current_err;
}
@@ -274,22 +274,22 @@ cen_repair_loader(const fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>& i_target,
if (temp_data_64 != 0)
{
- FAPI_DBG("<repair_loader>: Reading Status Register to verify engine is idle...");
+ FAPI_DBG("Reading Status Register to verify engine is idle...");
FAPI_TRY(fapi2::getScom(i_target, CEN_RLDCOMP_RLDLOG_STATUS_REGISTER_ROX, l_repair_status));
FAPI_TRY(l_repair_status.extract(temp_data_64, 0, 64));
FAPI_ASSERT(temp_data_64 != 0,
fapi2::CEN_COMMON_REPAIR_LOADER_BUSY().
set_TARGET(i_target),
- "<repair_loader>: ERROR: Repair loader reports busy, but engine should be idle!");
+ "ERROR: Repair loader reports busy, but engine should be idle!");
- FAPI_DBG("<repair_loader>: Writing Command Validation Register");
+ FAPI_DBG("Writing Command Validation Register");
FAPI_TRY(fapi2::putScom(i_target, CEN_RLDCOMP_RLDLOG_CMDVAL_REGISTER, l_repair_cmd_valid));
- FAPI_DBG("<repair_loader>: Writing Command Register to start engine");
+ FAPI_DBG("Writing Command Register to start engine");
FAPI_TRY(fapi2::putScom(i_target, CEN_RLDCOMP_RLDLOG_COMMAND_REGISTER, l_repair_cmd_start_addr));
- FAPI_DBG("<repair_loader>: Polling repair loader Status Register...");
+ FAPI_DBG("Polling repair loader Status Register...");
do
{
@@ -307,13 +307,13 @@ cen_repair_loader(const fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>& i_target,
set_TARGET(i_target),
"Centaur repair loader timed out!");
- FAPI_INF("<repair_loader>: Checking repair loader status...");
- FAPI_INF("<repair_loader>: BUSY = 0b%d", l_repair_status.getBit<0>());
- FAPI_INF("<repair_loader>: REPAIR DONE = 0b%d", l_repair_status.getBit<2>());
- FAPI_INF("<repair_loader>: PIB PARITY CHECK = 0b%d", l_repair_status.getBit<5>());
- FAPI_INF("<repair_loader>: FSM ERROR = 0b%d", l_repair_status.getBit<6>());
- FAPI_INF("<repair_loader>: ECC ERROR = 0b%d", l_repair_status.getBit<7>());
- FAPI_INF("<repair_loader>: FSM STATE = 0x%04llX", l_repair_status.getBit<8, 14>());
+ FAPI_INF("Checking repair loader status...");
+ FAPI_INF(" BUSY = 0b%d", l_repair_status.getBit<0>());
+ FAPI_INF(" REPAIR DONE = 0b%d", l_repair_status.getBit<2>());
+ FAPI_INF(" PIB PARITY CHECK = 0b%d", l_repair_status.getBit<5>());
+ FAPI_INF(" FSM ERROR = 0b%d", l_repair_status.getBit<6>());
+ FAPI_INF(" ECC ERROR = 0b%d", l_repair_status.getBit<7>());
+ FAPI_INF(" FSM STATE = 0x%04llX", l_repair_status.getBit<8, 14>());
FAPI_TRY(l_repair_status.extract(temp_data_64, 0, 64));
@@ -321,18 +321,18 @@ cen_repair_loader(const fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>& i_target,
FAPI_ASSERT(temp_data_64 == REPAIR_STATUS_CHECK_EXP,
fapi2::CEN_COMMON_MISMATCH_IN_EXPECTED_REPAIR_LOADER_STATUS().
set_TARGET(i_target),
- "<repair_loader>: Mismatch in expected repair loader status!"
+ "Mismatch in expected repair loader status!"
" Expected: 0x%016llX, actual: 0x%016llX",
REPAIR_STATUS_CHECK_EXP, temp_data_64);
FAPI_TRY(fapi2::getScom(i_target, CEN_RLDCOMP_RLDLOG_ECCTRAP_REGISTER_ROX, l_repair_ecc_trap));
- FAPI_INF("<repair_loader>: Checking ECC Trap Register status...");
- FAPI_INF("<repair_loader>: CE NUMBER = 0x%01llX", l_repair_ecc_trap.getBit<0, 4>());
- FAPI_INF("<repair_loader>: UE NUMBER = 0x%01llX", l_repair_ecc_trap.getBit<4, 4>());
- FAPI_INF("<repair_loader>: FIRST ERR SYNDROME = 0x%02llX", l_repair_ecc_trap.getBit<9, 7>());
- FAPI_INF("<repair_loader>: ECC DATA CORRECTION EN = 0b%d" , l_repair_ecc_trap.getBit<18>());
- FAPI_INF("<repair_loader>: ADDRESS CHECKING EN = 0b%d" , l_repair_ecc_trap.getBit<19>());
- FAPI_INF("<repair_loader>: FIRST ERR ADDRESS = 0x%03llX", l_repair_ecc_trap.getBit<22, 10>());
+ FAPI_INF("Checking ECC Trap Register status...");
+ FAPI_INF(" CE NUMBER = 0x%01llX", l_repair_ecc_trap.getBit<0, 4>());
+ FAPI_INF(" UE NUMBER = 0x%01llX", l_repair_ecc_trap.getBit<4, 4>());
+ FAPI_INF(" FIRST ERR SYNDROME = 0x%02llX", l_repair_ecc_trap.getBit<9, 7>());
+ FAPI_INF(" ECC DATA CORRECTION EN = 0b%d" , l_repair_ecc_trap.getBit<18>());
+ FAPI_INF(" ADDRESS CHECKING EN = 0b%d" , l_repair_ecc_trap.getBit<19>());
+ FAPI_INF(" FIRST ERR ADDRESS = 0x%03llX", l_repair_ecc_trap.getBit<22, 10>());
FAPI_TRY(l_repair_ecc_trap.extract(temp_data_64, 0, 64));
@@ -340,15 +340,107 @@ cen_repair_loader(const fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>& i_target,
FAPI_ASSERT(temp_data_64 == REPAIR_ECC_TRAP_EXP,
fapi2::CEN_COMMON_ECC_TRAP_REG_ERROR().
set_TARGET(i_target),
- "<repair_loader>: ECC trap register reported error!"
+ "ECC trap register reported error!"
" Expected: 0x%016llX, actual: 0x%016llX",
REPAIR_ECC_TRAP_EXP, temp_data_64);
}
- FAPI_DBG("<repair_loader>: Done");
+fapi_try_exit:
+ FAPI_DBG("End");
+ return fapi2::current_err;
+}
+
+
+fapi2::ReturnCode
+cen_startclocks_module(const fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>& i_target,
+ const uint64_t i_chiplet_id)
+{
+ uint64_t l_gp3_and_addr = get_scom_addr(i_chiplet_id, CEN_GENERIC_GP3_AND );
+ uint64_t l_gp3_or_addr = get_scom_addr(i_chiplet_id, CEN_GENERIC_GP3_OR );
+ uint64_t l_gp0_and_addr = get_scom_addr(i_chiplet_id, CEN_GENERIC_GP0_AND );
+ uint64_t l_gp0_or_addr = get_scom_addr(i_chiplet_id, CEN_GENERIC_GP0_OR );
+ uint64_t l_clk_region_addr = get_scom_addr(i_chiplet_id, CEN_GENERIC_CLK_REGION );
+ uint64_t l_clk_scansel_addr = get_scom_addr(i_chiplet_id, CEN_GENERIC_CLK_SCANSEL);
+ uint64_t l_clk_status_addr = get_scom_addr(i_chiplet_id, CEN_GENERIC_CLK_STATUS );
+ uint64_t temp_data_64 = 0;
+
+ fapi2::buffer<uint64_t> reg_data_64;
+ fapi2::buffer<uint32_t> reg_data_32;
+
+ FAPI_DBG("Start clocks... ");
+ FAPI_DBG("GP3 Reg: Clear bit(18) to drop chiplet fences.");
+ reg_data_64.flush<1>().clearBit<18>();
+ FAPI_TRY(fapi2::putScom(i_target, l_gp3_and_addr, reg_data_64),
+ "Error from putScom (GP3_AND) ");
+
+ FAPI_DBG("GP3 Reg: Set bit(28) to enable EDRAM.");
+ reg_data_64.flush<0>().setBit<28>();
+ FAPI_TRY(fapi2::putScom(i_target, l_gp3_or_addr, reg_data_64),
+ "Error from putScom (GP3_OR) ");
+
+ FAPI_DBG("GP0 Reg: clear bit(63) to drop perv fences.");
+ FAPI_DBG("GP0 Reg: clear bits(0:1) to reset abstclk_muxsel, synclk_muxsel.");
+ reg_data_64.flush<1>().clearBit<0, 2>().clearBit<63>();
+ FAPI_TRY(fapi2::putScom(i_target, l_gp0_and_addr, reg_data_64),
+ "Error from putScom (GP0_AND) ");
+
+ if (i_chiplet_id == SCAN_CHIPLET_MEM)
+ {
+ FAPI_DBG("Writing GP0 OR mask to set abist_mode_dc (bit 11) ...");
+ reg_data_64.flush<0>().setBit<11>();
+ FAPI_TRY(fapi2::putScom(i_target, l_gp0_or_addr, reg_data_64),
+ "Error from putScom (GP0_OR) ");
+ }
+
+ FAPI_DBG("Clear Scan Region Reg prior to clock start.");
+ reg_data_64.flush<0>();
+ FAPI_TRY(fapi2::putScom(i_target, l_clk_scansel_addr, reg_data_64),
+ "Error from putScom (CLK_SCANSEL) ");
+
+ FAPI_DBG("Clock start cmd for array and nsl tholds.");
+ reg_data_64 = STRT_CLK_REGION_NSL;
+ FAPI_TRY(fapi2::putScom(i_target, l_clk_region_addr, reg_data_64),
+ "Error from putScom (CLK_REGION) ");
+
+ FAPI_DBG("Clock start cmd for sl tholds.");
+ reg_data_64 = STRT_CLK_REGION_SL;
+ FAPI_TRY(fapi2::putScom(i_target, l_clk_region_addr, reg_data_64),
+ "Error from putScom (CLK_REGION) ");
+
+ reg_data_64.flush<0>();
+ FAPI_DBG("Check status of THOLDs. ");
+ FAPI_TRY(fapi2::getScom(i_target, l_clk_status_addr, reg_data_64),
+ "Error from getScom (CLK_STATUS) ");
+
+ FAPI_TRY(reg_data_64.extract(temp_data_64, 0, 64));
+ FAPI_ASSERT((temp_data_64 == EXPECTED_CLK_STATUS),
+ fapi2::CEN_COMMON_STARTCLOCKS_CLK_THOLDS_CHECK_ERR().
+ set_TARGET(i_target).
+ set_CHIPLET(i_chiplet_id).
+ set_ACTUAL(temp_data_64),
+ "Tholds aren't low after clock start, status: 0x%016llX!",
+ temp_data_64);
+
+ if (i_chiplet_id == SCAN_CHIPLET_NEST)
+ {
+ FAPI_DBG("GP0 Reg: clear bit(19) to clear edram_fence.");
+ reg_data_64.flush<1>().clearBit<19>();
+ FAPI_TRY(fapi2::putScom(i_target, l_gp0_and_addr, reg_data_64),
+ "Error from putScom (GP0_AND) ");
+ }
+
+ FAPI_DBG("GP0 Reg: clear bit(3) to clear force_align.");
+ reg_data_64.flush<1>().clearBit<3>();
+ FAPI_TRY(fapi2::putScom(i_target, l_gp0_and_addr, reg_data_64),
+ "Error from putScom (GP0_AND) ");
+
+ FAPI_DBG("GP0 Reg: clear bit(2) to clear flushmode_inhibit.");
+ reg_data_64.flush<1>().clearBit<2>();
+ FAPI_TRY(fapi2::putScom(i_target, l_gp0_and_addr, reg_data_64),
+ "Error from putScom (GP0_AND) ");
fapi_try_exit:
- FAPI_DBG("cen_repair_loader end");
+ FAPI_DBG("End");
return fapi2::current_err;
}
diff --git a/src/import/chips/centaur/procedures/hwp/perv/cen_common_funcs.H b/src/import/chips/centaur/procedures/hwp/perv/cen_common_funcs.H
index ccf15d52b..a78c6af3e 100644
--- a/src/import/chips/centaur/procedures/hwp/perv/cen_common_funcs.H
+++ b/src/import/chips/centaur/procedures/hwp/perv/cen_common_funcs.H
@@ -101,4 +101,12 @@ fapi2::ReturnCode
cen_repair_loader(const fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>& i_target,
const uint64_t i_repair_cmd_validation_entry, const uint64_t i_repair_cmd_star_addr);
+/// @brief STARTCLOCKS module
+/// @param[in] i_target The FAPI2 target
+/// @param[in] i_chiplet_id The chiplet ID
+/// @return The FAPI2 return code
+fapi2::ReturnCode
+cen_startclocks_module(const fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>& i_target,
+ const uint64_t i_chiplet_id);
+
#endif
OpenPOWER on IntegriCloud