diff options
author | Thi Tran <thi@us.ibm.com> | 2017-09-18 14:19:02 -0500 |
---|---|---|
committer | Christian R. Geddes <crgeddes@us.ibm.com> | 2017-10-11 17:43:04 -0400 |
commit | e1ea4c3922ff7298fdf8858768aea27527a30cb9 (patch) | |
tree | 329eac2ba0e0a65d1ff2c9e6db397176f2113ecc /src/import/chips/p9/procedures/hwp/cache | |
parent | 6be06fc2818d424dc2de77592700e31e71d00bff (diff) | |
download | talos-hostboot-e1ea4c3922ff7298fdf8858768aea27527a30cb9.tar.gz talos-hostboot-e1ea4c3922ff7298fdf8858768aea27527a30cb9.zip |
Share common code between p9_l2_flush and p9_l2err_linedelete
Change-Id: I547078b1e0fc7adec767402faf5e64e4b4390bc9
RTC: 178071
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/46359
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: HWSV CI <hwsv-ci+hostboot@us.ibm.com>
Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: Joseph J. McGill <jmcgill@us.ibm.com>
Reviewed-by: Benjamin Gass <bgass@us.ibm.com>
Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/46386
Reviewed-by: Hostboot Team <hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/cache')
3 files changed, 19 insertions, 106 deletions
diff --git a/src/import/chips/p9/procedures/hwp/cache/p9_l2err_linedelete.C b/src/import/chips/p9/procedures/hwp/cache/p9_l2err_linedelete.C index cbed86c4b..8ef374e75 100644 --- a/src/import/chips/p9/procedures/hwp/cache/p9_l2err_linedelete.C +++ b/src/import/chips/p9/procedures/hwp/cache/p9_l2err_linedelete.C @@ -42,91 +42,26 @@ // Includes //------------------------------------------------------------------------------ #include <p9_l2err_linedelete.H> +#include <p9_l2_flush.H> #include <p9_quad_scom_addresses.H> #include <p9_quad_scom_addresses_fld.H> //------------------------------------------------------------------------------ -// Constant definitions -//------------------------------------------------------------------------------ -const uint32_t BUSY_POLL_DELAY_IN_NS = 10000000; // 10ms -const uint32_t BUSY_POLL_DELAY_IN_CYCLES = 20000000; // 10ms, assumming 2GHz - -//------------------------------------------------------------------------------ // Function definitions //------------------------------------------------------------------------------ -/// -/// @brief Utility function to check for a purge operation to be completed. -/// This function polls the EX_PRD_PURGE_CMD_REG_BUSY bit of -/// EX_PRD_PURGE_CMD_REG. -/// - If this bit is clear before the input loop threshold is -/// reached, it returns FAPi2_RC_SUCCESS. -/// - Otherwise, it returns an error code. -/// -/// @param[in] i_target => EX chiplet target -/// @param[in] i_busyCount => Max busy count waiting for PURGE to complete. -/// @param[out] o_prdPurgeCmdReg => EX_PRD_PURGE_CMD_REG value. -/// -fapi2::ReturnCode purgeCompleteCheck( - const fapi2::Target<fapi2::TARGET_TYPE_EX>& i_target, - const uint64_t i_busyCount, - fapi2::buffer<uint64_t>& o_prdPurgeCmdReg) -{ - FAPI_DBG("Entering purgeCompleteCheck"); - - // Wait EX_PRD_PURGE_CMD_REG_BUSY bit for a max input counter time - uint64_t l_loopCount = 0; - - do - { - FAPI_TRY(fapi2::getScom(i_target, EX_PRD_PURGE_CMD_REG, o_prdPurgeCmdReg), - "Error from getScom EX_PRD_PURGE_CMD_REG"); - - // Check the EX_PRD_PURGE_CMD_REG_BUSY bit from scom register - if ( !o_prdPurgeCmdReg.getBit(EX_PRD_PURGE_CMD_REG_BUSY) ) - { - // PURGE is done, get out - break; - } - else - { - l_loopCount++; - // Delay for 10ms - FAPI_TRY(fapi2::delay(BUSY_POLL_DELAY_IN_NS, - BUSY_POLL_DELAY_IN_CYCLES), - "Fapi Delay call failed."); - } - } - while (l_loopCount < i_busyCount); - - // Error out if still busy - FAPI_ASSERT(l_loopCount < i_busyCount, - fapi2::P9_L2ERR_LINE_DELETE_REG_BUSY() - .set_TARGET(i_target) - .set_COUNT_THRESHOLD(i_busyCount) - .set_PRD_PURGE_CMD_REG(o_prdPurgeCmdReg), - "Error: PRD_PURGE_CMD_REG_BUSY exceeds limit count of %d.", - i_busyCount); - -fapi_try_exit: - FAPI_DBG("Exiting purgeCompleteCheck - Counter: %d; prdPurgeCmdReg: 0x%.16llX", - l_loopCount, o_prdPurgeCmdReg); - return fapi2::current_err; -} - //------------------------------------------------------------------------------ // HWP entry point //------------------------------------------------------------------------------ // See doxygen in header file -// TODO: RTC 178071 -// See if with some small refactoring we could just call/share the p9_l2_flush -// HWP code/errors to implement this routine? fapi2::ReturnCode p9_l2err_linedelete( const fapi2::Target<fapi2::TARGET_TYPE_EX>& i_target, const p9_l2err_extract_err_data& i_err_data, const uint64_t i_busyCount) { - fapi2::buffer<uint64_t> l_l2_l2cerrs_prd_purge_cmd_reg; + fapi2::ReturnCode l_rc; + fapi2::buffer<uint64_t> l_cmdReg; + p9core::purgeData_t l_purgeData; // mark function entry FAPI_DBG("Entering p9_l2err_linedelete. BusyCount %d", i_busyCount); @@ -159,41 +94,22 @@ fapi2::ReturnCode p9_l2err_linedelete( // bits 20:27 is the cgc address // bit 28 is the bank - // Make sure there's no current purge is in progress - FAPI_TRY(purgeCompleteCheck(i_target, i_busyCount, - l_l2_l2cerrs_prd_purge_cmd_reg), - "Error returned from purgeCompleteCheck()"); - FAPI_DBG("l_l2_l2cerrs_prd_purge_cmd_reg_data: 0x%.16llX", - l_l2_l2cerrs_prd_purge_cmd_reg); - - // write trigger, type, cgc address and bank into PRD Purge Engine Command Register - l_l2_l2cerrs_prd_purge_cmd_reg.insertFromRight - <EX_PRD_PURGE_CMD_REG_MEM, EX_PRD_PURGE_CMD_REG_MEM_LEN> - (i_err_data.member); - l_l2_l2cerrs_prd_purge_cmd_reg.insertFromRight - <EX_PRD_PURGE_CMD_REG_CGC, EX_PRD_PURGE_CMD_REG_CGC_LEN> - (i_err_data.address); - l_l2_l2cerrs_prd_purge_cmd_reg.insertFromRight - <EX_PRD_PURGE_CMD_REG_BANK, 1>(i_err_data.bank); - - l_l2_l2cerrs_prd_purge_cmd_reg.insertFromRight - <EX_PRD_PURGE_CMD_REG_TRIGGER, 1>(1); - l_l2_l2cerrs_prd_purge_cmd_reg.insertFromRight - <EX_PRD_PURGE_CMD_REG_TYPE, EX_PRD_PURGE_CMD_REG_TYPE_LEN>(0x2); + // Ensure that purge engine is idle before starting line delete + FAPI_TRY(purgeCompleteCheck(i_target, i_busyCount, l_cmdReg), + "Error returned from purgeCompleteCheck call"); - FAPI_DBG("l_l2_l2cerrs_prd_purge_cmd_reg_data: %#lx", - l_l2_l2cerrs_prd_purge_cmd_reg); - FAPI_TRY(fapi2::putScom(i_target, EX_PRD_PURGE_CMD_REG, - l_l2_l2cerrs_prd_purge_cmd_reg), - "Error from putScom EX_PRD_PURGE_CMD_REG"); + // Set PRD Purge Engine Command register values for line delete + l_purgeData.iv_cmdType = 0b0010; // L2 Dir Line_Delete + l_purgeData.iv_cmdMem = i_err_data.member; + l_purgeData.iv_cmdBank = i_err_data.bank; + l_purgeData.iv_cmdCGC = i_err_data.address; + FAPI_TRY(setupAndTriggerPrdPurge(i_target, l_purgeData, l_cmdReg), + "Error returned from setupAndTriggerPrdPurge"); - // Verify purge operation is complete - FAPI_TRY(purgeCompleteCheck(i_target, i_busyCount, - l_l2_l2cerrs_prd_purge_cmd_reg), - "Error returned from purgeCompleteCheck()"); - FAPI_DBG("l_l2_l2cerrs_prd_purge_cmd_reg_data: 0x%.16llX", - l_l2_l2cerrs_prd_purge_cmd_reg); + // Verify purge/line delete complete + FAPI_TRY(purgeCompleteCheck(i_target, i_busyCount, l_cmdReg), + "Error returned from purgeCompleteCheck call"); fapi_try_exit: FAPI_INF("Exiting p9_l2err_linedelete..."); diff --git a/src/import/chips/p9/procedures/hwp/cache/p9_l2err_linedelete.H b/src/import/chips/p9/procedures/hwp/cache/p9_l2err_linedelete.H index 64550e7c0..274428471 100644 --- a/src/import/chips/p9/procedures/hwp/cache/p9_l2err_linedelete.H +++ b/src/import/chips/p9/procedures/hwp/cache/p9_l2err_linedelete.H @@ -56,10 +56,6 @@ #include <fapi2.H> #include <p9_l2err_extract.H> -//------------------------------------------------------------------------------ -// Structure definitions -//------------------------------------------------------------------------------ - // function pointer typedef definition for HWP call support typedef fapi2::ReturnCode (*p9_l2err_linedelete_FP_t) (const fapi2::Target<fapi2::TARGET_TYPE_EX>&, diff --git a/src/import/chips/p9/procedures/hwp/cache/p9_l2err_linedelete.mk b/src/import/chips/p9/procedures/hwp/cache/p9_l2err_linedelete.mk index d53c9a751..734beae00 100644 --- a/src/import/chips/p9/procedures/hwp/cache/p9_l2err_linedelete.mk +++ b/src/import/chips/p9/procedures/hwp/cache/p9_l2err_linedelete.mk @@ -23,5 +23,6 @@ # # IBM_PROLOG_END_TAG PROCEDURE=p9_l2err_linedelete +$(call ADD_MODULE_INCDIR,$(PROCEDURE),$(ROOTPATH)/chips/p9/procedures/hwp/nest) +lib$(PROCEDURE)_DEPLIBS+=p9_l2_flush $(call BUILD_PROCEDURE) - |