From ef610048c36f8019cc36978f7a4b9a708cf9c341 Mon Sep 17 00:00:00 2001 From: Swathi Madhuri Bhattiprolu Date: Thu, 24 Aug 2017 04:12:57 -0500 Subject: Cumulus HWPs for istep 13 Change-Id: Ib09110b844db1e54e129abdca88bc0aaae8d162a RTC:175769 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/45092 Tested-by: Jenkins Server Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW Tested-by: FSP CI Jenkins Reviewed-by: Prachi Gupta Reviewed-by: Sakethan R. Kotta Reviewed-by: Thomas R. Sand Reviewed-by: Daniel M. Crowell --- src/usr/isteps/istep13/call_mss_ddr_phy_reset.C | 71 ++++++++++++++++++++- src/usr/isteps/istep13/call_mss_draminit.C | 74 +++++++++++++++++++++- src/usr/isteps/istep13/call_mss_draminit_mc.C | 48 ++++++++++++++ .../isteps/istep13/call_mss_draminit_trainadv.C | 71 +++++++++++++++++++++ .../isteps/istep13/call_mss_draminit_training.C | 71 ++++++++++++++++++++- src/usr/isteps/istep13/call_mss_scominit.C | 57 ++++++++++++++++- src/usr/isteps/istep13/makefile | 34 ++++++++++ 7 files changed, 422 insertions(+), 4 deletions(-) (limited to 'src/usr/isteps/istep13') diff --git a/src/usr/isteps/istep13/call_mss_ddr_phy_reset.C b/src/usr/isteps/istep13/call_mss_ddr_phy_reset.C index 95ab0824e..00ffaf2fb 100644 --- a/src/usr/isteps/istep13/call_mss_ddr_phy_reset.C +++ b/src/usr/isteps/istep13/call_mss_ddr_phy_reset.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2015,2016 */ +/* Contributors Listed Below - COPYRIGHT 2015,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -41,6 +41,7 @@ #include #include #include +#include using namespace ERRORLOG; using namespace ISTEP; @@ -101,6 +102,74 @@ void* call_mss_ddr_phy_reset (void *io_pArgs) } // end l_mcbist loop + + if(l_stepError.getErrorHandle() == NULL) + { + // Get all Centaur targets + TARGETING::TargetHandleList l_membufTargetList; + getAllChips(l_membufTargetList, TYPE_MEMBUF); + + for (TargetHandleList::const_iterator + l_membuf_iter = l_membufTargetList.begin(); + l_membuf_iter != l_membufTargetList.end(); + ++l_membuf_iter) + { + // make a local copy of the target for ease of use + TARGETING::Target* l_pCentaur = *l_membuf_iter; + + TARGETING::TargetHandleList l_mbaTargetList; + getChildChiplets(l_mbaTargetList, + l_pCentaur, + TYPE_MBA); + + for (TargetHandleList::const_iterator + l_mba_iter = l_mbaTargetList.begin(); + l_mba_iter != l_mbaTargetList.end(); + ++l_mba_iter) + { + // Make a local copy of the target for ease of use + TARGETING::Target* l_mbaTarget = *l_mba_iter; + + // Dump current run on target + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "Running p9c_mss_ddr_phy_reset HWP on " + "target HUID %.8X", TARGETING::get_huid(l_mbaTarget)); + + // call the HWP with each target + fapi2::Target l_fapi_mba_target(l_mbaTarget); + + FAPI_INVOKE_HWP(l_err, p9c_mss_ddr_phy_reset, l_fapi_mba_target); + + // process return code. + if ( l_err ) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR 0x%.8X: p9c_mss_ddr_phy_reset HWP returns error", + l_err->reasonCode()); + + // capture the target data in the elog + ErrlUserDetailsTarget(l_fapi_mba_target).addToLog( l_err ); + + // Create IStep error log and cross reference to error that occurred + l_stepError.addErrorDetails( l_err ); + + // Commit Error + errlCommit( l_err, HWPF_COMP_ID ); + + break; + } + else + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS running p9c_mss_ddr_phy_reset HWP on " + "target HUID %.8X", TARGETING::get_huid(l_fapi_mba_target)); + } + + } + + } + } + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_ddr_phy_reset exit" ); diff --git a/src/usr/isteps/istep13/call_mss_draminit.C b/src/usr/isteps/istep13/call_mss_draminit.C index 1aabd9ddf..00d69f5f3 100644 --- a/src/usr/isteps/istep13/call_mss_draminit.C +++ b/src/usr/isteps/istep13/call_mss_draminit.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2015,2016 */ +/* Contributors Listed Below - COPYRIGHT 2015,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -48,6 +48,7 @@ //From Import Directory (EKB Repository) #include #include +#include using namespace ERRORLOG; using namespace ISTEP; @@ -174,6 +175,8 @@ void* call_mss_draminit (void *io_pArgs) // Create IStep error log and cross reference to error that occurred l_stepError.addErrorDetails( l_err ); + break; + // Commit Error errlCommit( l_err, HWPF_COMP_ID ); } @@ -186,6 +189,75 @@ void* call_mss_draminit (void *io_pArgs) } // endfor mcbist's + + + if(l_stepError.getErrorHandle() == NULL) + { + // Get all Centaur targets + TARGETING::TargetHandleList l_membufTargetList; + getAllChips(l_membufTargetList, TYPE_MEMBUF); + + for (TargetHandleList::const_iterator + l_membuf_iter = l_membufTargetList.begin(); + l_membuf_iter != l_membufTargetList.end(); + ++l_membuf_iter) + { + // make a local copy of the target for ease of use + TARGETING::Target* l_pCentaur = *l_membuf_iter; + + TARGETING::TargetHandleList l_mbaTargetList; + getChildChiplets(l_mbaTargetList, + l_pCentaur, + TYPE_MBA); + + for (TargetHandleList::const_iterator + l_mba_iter = l_mbaTargetList.begin(); + l_mba_iter != l_mbaTargetList.end(); + ++l_mba_iter) + { + // Make a local copy of the target for ease of use + TARGETING::Target* l_mbaTarget = *l_mba_iter; + + // Dump current run on target + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "Running p9c_mss_draminit HWP on " + "target HUID %.8X", TARGETING::get_huid(l_mbaTarget)); + + // call the HWP with each target + fapi2::Target l_fapi_mba_target(l_mbaTarget); + + FAPI_INVOKE_HWP(l_err, p9c_mss_draminit, l_fapi_mba_target); + + // process return code. + if ( l_err ) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR 0x%.8X : p9c_mss_draminit HWP returns error", + l_err->reasonCode()); + + // capture the target data in the elog + ErrlUserDetailsTarget(l_mbaTarget).addToLog(l_err); + + // Create IStep error log and cross reference to error that occurred + l_stepError.addErrorDetails( l_err ); + + // Commit Error + errlCommit( l_err, HWPF_COMP_ID ); + + break; + } + else + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS running p9c_mss_draminit HWP on " + "target HUID %.8X", TARGETING::get_huid(l_mbaTarget)); + } + + } + } + + } + // call POST_DRAM_INIT function if(INITSERVICE::spBaseServicesEnabled()) { diff --git a/src/usr/isteps/istep13/call_mss_draminit_mc.C b/src/usr/isteps/istep13/call_mss_draminit_mc.C index a94095a85..cee7771bf 100644 --- a/src/usr/isteps/istep13/call_mss_draminit_mc.C +++ b/src/usr/isteps/istep13/call_mss_draminit_mc.C @@ -45,6 +45,7 @@ #include #include #include +#include using namespace ERRORLOG; @@ -105,6 +106,53 @@ void* call_mss_draminit_mc (void *io_pArgs) } // End; memBuf loop + if(l_stepError.getErrorHandle() == NULL) + { + + // Get all Centaur targets + TARGETING::TargetHandleList l_membufTargetList; + getAllChips(l_membufTargetList, TYPE_MEMBUF); + + for (const auto & l_membuf_target : l_membufTargetList) + { + // Dump current run on target + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "Running p9_mss_draminit_mc HWP on " + "target HUID %.8X", TARGETING::get_huid(l_membuf_target)); + + fapi2::Target l_fapi_membuf_target + (l_membuf_target); + + // call the HWP with each fapi2::Target + FAPI_INVOKE_HWP(l_err, p9c_mss_draminit_mc, l_fapi_membuf_target); + + if (l_err) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR 0x%.8X : p9c_mss_draminit_mc HWP returns error", + l_err->reasonCode()); + + // capture the target data in the elog + ErrlUserDetailsTarget(l_fapi_membuf_target).addToLog( l_err ); + + // Create IStep error log and cross reference to error that occurred + l_stepError.addErrorDetails( l_err ); + + // Commit Error + errlCommit( l_err, HWPF_COMP_ID ); + + break; + } + else + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS running p9c_mss_draminit_mc HWP on " + "target HUID %.8X", TARGETING::get_huid(l_fapi_membuf_target)); + } + + } + } + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_draminit_mc exit" ); return l_stepError.getErrorHandle(); diff --git a/src/usr/isteps/istep13/call_mss_draminit_trainadv.C b/src/usr/isteps/istep13/call_mss_draminit_trainadv.C index f814193ac..e281c5b80 100644 --- a/src/usr/isteps/istep13/call_mss_draminit_trainadv.C +++ b/src/usr/isteps/istep13/call_mss_draminit_trainadv.C @@ -37,6 +37,7 @@ #include #include #include +#include using namespace ERRORLOG; using namespace ISTEP; @@ -90,6 +91,76 @@ void* call_mss_draminit_trainadv (void *io_pArgs) "SUCCESS : p9_mss_draminit_trainingadv HWP( )" ); } + if(l_stepError.getErrorHandle() == NULL) + { + // Get all Centaur targets + TARGETING::TargetHandleList l_membufTargetList; + getAllChips(l_membufTargetList, TYPE_MEMBUF); + + for (TargetHandleList::const_iterator + l_membuf_iter = l_membufTargetList.begin(); + l_membuf_iter != l_membufTargetList.end(); + ++l_membuf_iter) + { + // make a local copy of the target for ease of use + TARGETING::Target* l_pCentaur = *l_membuf_iter; + + TARGETING::TargetHandleList l_mbaTargetList; + getChildChiplets(l_mbaTargetList, + l_pCentaur, + TYPE_MBA); + + for (TargetHandleList::const_iterator + l_mba_iter = l_mbaTargetList.begin(); + l_mba_iter != l_mbaTargetList.end(); + ++l_mba_iter) + { + // Make a local copy of the target for ease of use + TARGETING::Target* l_mbaTarget = *l_mba_iter; + + // Dump current run on target + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "Running p9c_mss_draminit_training_advanced HWP on " + "target HUID %.8X", TARGETING::get_huid(l_mbaTarget)); + + // call the HWP with each target + fapi2::Target l_fapi_mba_target(l_mbaTarget); + + FAPI_INVOKE_HWP(l_err, p9c_mss_draminit_training_advanced, l_fapi_mba_target); + + // process return code. + if ( l_err ) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR 0x%.8X : p9c_mss_draminit_training_advanced HWP returns error", + l_err->reasonCode()); + + // capture the target data in the elog + ErrlUserDetailsTarget(l_mbaTarget).addToLog(l_err); + + // Create IStep error log and cross reference to error that occurred + l_stepError.addErrorDetails( l_err ); + + // Commit Error + errlCommit( l_err, HWPF_COMP_ID ); + + break; + } + else + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS running p9c_mss_draminit_training_advanced HWP on " + "target HUID %.8X", TARGETING::get_huid(l_mbaTarget)); + } + + } + + } + + } + + + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_draminit_trainingadv exit" ); diff --git a/src/usr/isteps/istep13/call_mss_draminit_training.C b/src/usr/isteps/istep13/call_mss_draminit_training.C index 748169cf9..a167457e9 100644 --- a/src/usr/isteps/istep13/call_mss_draminit_training.C +++ b/src/usr/isteps/istep13/call_mss_draminit_training.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2015,2016 */ +/* Contributors Listed Below - COPYRIGHT 2015,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -45,6 +45,7 @@ #include #include #include +#include using namespace ERRORLOG; @@ -101,6 +102,74 @@ void* call_mss_draminit_training (void *io_pArgs) } } + if(l_stepError.getErrorHandle() == NULL) + { + // Get all Centaur targets + TARGETING::TargetHandleList l_membufTargetList; + getAllChips(l_membufTargetList, TYPE_MEMBUF); + + for (TargetHandleList::const_iterator + l_membuf_iter = l_membufTargetList.begin(); + l_membuf_iter != l_membufTargetList.end(); + ++l_membuf_iter) + { + // make a local copy of the target for ease of use + TARGETING::Target* l_pCentaur = *l_membuf_iter; + + TARGETING::TargetHandleList l_mbaTargetList; + getChildChiplets(l_mbaTargetList, + l_pCentaur, + TYPE_MBA); + + for (TargetHandleList::const_iterator + l_mba_iter = l_mbaTargetList.begin(); + l_mba_iter != l_mbaTargetList.end(); + ++l_mba_iter) + { + // Make a local copy of the target for ease of use + TARGETING::Target* l_mbaTarget = *l_mba_iter; + + // Dump current run on target + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "Running p9c_mss_draminit_training HWP on " + "target HUID %.8X", TARGETING::get_huid(l_mbaTarget)); + + // call the HWP with each target + fapi2::Target l_fapi_mba_target(l_mbaTarget); + + FAPI_INVOKE_HWP(l_err, p9c_mss_draminit_training, l_fapi_mba_target); + + // process return code. + if ( l_err ) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR 0x%.8X:p9c_mss_draminit_training HWP returns error", + l_err->reasonCode()); + + // capture the target data in the elog + ErrlUserDetailsTarget(l_mbaTarget).addToLog(l_err); + + // Create IStep error log and cross reference to error + // that occurred + l_stepError.addErrorDetails( l_err ); + + // Commit Error + errlCommit( l_err, HWPF_COMP_ID ); + + break; + } + else + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS running p9c_mss_draminit_training HWP on " + "target HUID %.8X", TARGETING::get_huid(l_mbaTarget)); + } + + } + } + + } + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_draminit_training exit" ); diff --git a/src/usr/isteps/istep13/call_mss_scominit.C b/src/usr/isteps/istep13/call_mss_scominit.C index 6d7ddc435..783ae2a97 100644 --- a/src/usr/isteps/istep13/call_mss_scominit.C +++ b/src/usr/isteps/istep13/call_mss_scominit.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2015,2016 */ +/* Contributors Listed Below - COPYRIGHT 2015,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -43,6 +43,7 @@ #include #include #include +#include using namespace ERRORLOG; using namespace ISTEP; @@ -94,6 +95,8 @@ void* call_mss_scominit (void *io_pArgs) // Commit Error errlCommit( l_err, HWPF_COMP_ID ); + + break; } else { @@ -102,6 +105,56 @@ void* call_mss_scominit (void *io_pArgs) "target HUID %.8X", TARGETING::get_huid(l_target)); } } + + if (!l_stepError.isNull()) + { + break; + } + + // Get all MBA targets + TARGETING::TargetHandleList l_membufTargetList; + getAllChips(l_membufTargetList, TYPE_MEMBUF); + + for (const auto & l_membuf_target : l_membufTargetList) + { + // Dump current run on target + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "Running p9c_mss_scominit HWP on " + "target HUID %.8X", + TARGETING::get_huid(l_membuf_target)); + + fapi2::Target l_fapi_membuf_target + (l_membuf_target); + + // call the HWP with each fapi2::Target + FAPI_INVOKE_HWP(l_err, p9c_mss_scominit, l_fapi_membuf_target); + + if (l_err) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR 0x%.8X: p9c_mss_scominit HWP returns error", + l_err->reasonCode()); + + // capture the target data in the elog + ErrlUserDetailsTarget(l_membuf_target).addToLog(l_err); + + // Create IStep error log and cross reference to error that + // occurred + l_stepError.addErrorDetails( l_err ); + + // Commit Error + errlCommit( l_err, HWPF_COMP_ID ); + + break; + } + else + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS running p9c_mss_scominit HWP on " + "target HUID %.8X", TARGETING::get_huid(l_membuf_target)); + } + } + if (!l_stepError.isNull()) { break; @@ -139,6 +192,8 @@ void* call_mss_scominit (void *io_pArgs) // Commit Error errlCommit( l_err, HWPF_COMP_ID ); + + break; } else { diff --git a/src/usr/isteps/istep13/makefile b/src/usr/isteps/istep13/makefile index 6c3ba1402..074b260b8 100644 --- a/src/usr/isteps/istep13/makefile +++ b/src/usr/isteps/istep13/makefile @@ -26,6 +26,7 @@ ROOTPATH = ../../../.. MODULE = istep13 PROCEDURES_PATH = ${ROOTPATH}/src/import/chips/p9/procedures +CEN_PROCEDURES_PATH = ${ROOTPATH}/src/import/chips/centaur/procedures #Add all the extra include paths EXTRAINCDIR += ${ROOTPATH}/src/include/usr/fapi2 @@ -45,6 +46,14 @@ EXTRAINCDIR += ${PROCEDURES_PATH}/hwp/memory/lib/fir/ EXTRAINCDIR += ${PROCEDURES_PATH}/hwp/perv EXTRAINCDIR += ${PROCEDURES_PATH}/hwp/nest EXTRAINCDIR += ${PROCEDURES_PATH}/hwp/initfiles +EXTRAINCDIR += ${ROOTPATH}/src/import/chips/centaur/common/include/ +EXTRAINCDIR += ${ROOTPATH}/src/import/ +EXTRAINCDIR += ${ROOTPATH}/ +EXTRAINCDIR += ${CEN_PROCEDURES_PATH}/hwp/memory +EXTRAINCDIR += ${CEN_PROCEDURES_PATH}/hwp/memory/lib/ +EXTRAINCDIR += ${CEN_PROCEDURES_PATH}/hwp/memory/lib/shared/ +EXTRAINCDIR += ${CEN_PROCEDURES_PATH}/hwp/memory/lib/utils/ +EXTRAINCDIR += ${CEN_PROCEDURES_PATH}/hwp/initfiles # from src/usr/isteps/istep13 @@ -76,6 +85,7 @@ include ${PROCEDURES_PATH}/hwp/perv/p9_mem_startclocks.mk #Scom init include ${PROCEDURES_PATH}/hwp/memory/p9_mss_scominit.mk include ${PROCEDURES_PATH}/hwp/nest/p9_throttle_sync.mk +include ${CEN_PROCEDURES_PATH}/hwp/memory/p9c_mss_scominit.mk include ${PROCEDURES_PATH}/hwp/initfiles/p9n_ddrphy_scom.mk include ${PROCEDURES_PATH}/hwp/initfiles/p9n_mca_scom.mk @@ -88,6 +98,24 @@ include ${PROCEDURES_PATH}/hwp/memory/p9_mss_draminit_mc.mk include ${PROCEDURES_PATH}/hwp/memory/p9_mss_ddr_phy_reset.mk include ${PROCEDURES_PATH}/hwp/memory/p9_mss_draminit_training_adv.mk +include ${CEN_PROCEDURES_PATH}/hwp/memory/p9c_mss_draminit.mk +include ${CEN_PROCEDURES_PATH}/hwp/memory/p9c_mss_draminit_mc.mk +include ${CEN_PROCEDURES_PATH}/hwp/memory/p9c_mss_draminit_training.mk +include ${CEN_PROCEDURES_PATH}/hwp/memory/p9c_mss_ddr_phy_reset.mk +include ${CEN_PROCEDURES_PATH}/hwp/memory/p9c_mss_draminit_training_advanced.mk +include ${CEN_PROCEDURES_PATH}/hwp/memory/p9c_mss_mrs6_DDR4.mk +include ${CEN_PROCEDURES_PATH}/hwp/memory/p9c_mss_ddr4_pda.mk +include ${CEN_PROCEDURES_PATH}/hwp/memory/p9c_mss_ddr4_funcs.mk +include ${CEN_PROCEDURES_PATH}/hwp/memory/p9c_mss_termination_control.mk +include ${CEN_PROCEDURES_PATH}/hwp/memory/p9c_mss_access_delay_reg.mk +include ${CEN_PROCEDURES_PATH}/hwp/memory/p9c_mss_unmask_errors.mk +include ${CEN_PROCEDURES_PATH}/hwp/memory/p9c_dimmBadDqBitmapFuncs.mk +include ${CEN_PROCEDURES_PATH}/hwp/memory/p9c_mss_funcs.mk +include ${CEN_PROCEDURES_PATH}/hwp/initfiles/centaur_mbs_scom.mk +include ${CEN_PROCEDURES_PATH}/hwp/initfiles/centaur_mba_scom.mk +include ${CEN_PROCEDURES_PATH}/hwp/initfiles/centaur_ddrphy_scom.mk + + include ${ROOTPATH}/config.mk VPATH += ${PROCEDURES_PATH}/hwp/memory ${PROCEDURES_PATH}/hwp/nest ${PROCEDURES_PATH}/hwp/perv ${PROCEDURES_PATH}/hwp/initfiles/ @@ -95,3 +123,9 @@ VPATH += ${PROCEDURES_PATH}/hwp/memory/lib/ccs/ ${PROCEDURES_PATH}/hwp/memory VPATH += ${PROCEDURES_PATH}/hwp/memory/lib/mc/ VPATH += ${PROCEDURES_PATH}/hwp/memory/lib/fir/ VPATH += ${PROCEDURES_PATH}/hwp/memory/lib/dimm/ddr4/ +VPATH += ${CEN_PROCEDURES_PATH} +VPATH += ${CEN_PROCEDURES_PATH}/hwp/memory/ +VPATH += ${CEN_PROCEDURES_PATH}/hwp/memory/lib/ +VPATH += ${CEN_PROCEDURES_PATH}/hwp/memory/lib/shared/ +VPATH += ${CEN_PROCEDURES_PATH}/hwp/memory/lib/utils/ +VPATH += ${CEN_PROCEDURES_PATH}/hwp/initfiles -- cgit v1.2.1