From aa9068ab871dbbfe8abaf15a283065f8de962580 Mon Sep 17 00:00:00 2001 From: Christian Geddes Date: Wed, 31 Jul 2019 13:53:49 -0500 Subject: Account for OMI technology in initial mcs setup for Axone The scom registers that setup the memory channel's intial state get written during the SBE steps. The hwp that does this needs to be updated to account for the changes to the MCFGP0 register that happened between P9N/P9C and P9A. Change-Id: Icfa50177f9fefca3acabbbc41b60f65d280348e7 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/81458 Tested-by: FSP CI Jenkins Tested-by: Jenkins Server Tested-by: PPE CI Tested-by: HWSV CI Reviewed-by: Adam S Hale Reviewed-by: Christian R Geddes Reviewed-by: Jennifer A Stofer Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/81482 Reviewed-by: RAJA DAS --- .../p9/procedures/hwp/nest/p9_sbe_mcs_setup.C | 82 +++++++++++++++++----- .../xml/attribute_info/p9_sbe_attributes.xml | 4 ++ 2 files changed, 69 insertions(+), 17 deletions(-) (limited to 'src/import') diff --git a/src/import/chips/p9/procedures/hwp/nest/p9_sbe_mcs_setup.C b/src/import/chips/p9/procedures/hwp/nest/p9_sbe_mcs_setup.C index b4256bb9..7fbdc78d 100644 --- a/src/import/chips/p9/procedures/hwp/nest/p9_sbe_mcs_setup.C +++ b/src/import/chips/p9/procedures/hwp/nest/p9_sbe_mcs_setup.C @@ -45,11 +45,16 @@ #include #include #include +#include +#include //------------------------------------------------------------------------------ // Constant definitions //------------------------------------------------------------------------------ const uint8_t MCS_MCFGP_BASE_ADDRESS_START_BIT = 8; +const uint8_t P9A_MI_MCFGP0_ONE_CHANNEL_PER_GROUP = 1; +const uint8_t P9A_MI_MCFGP0_GROUP_MEMBER_ZERO = 0; +const uint16_t P9A_MI_MCFGP0_GROUP_SIZE_4GB = 0; //------------------------------------------------------------------------------ // Function definitions @@ -66,32 +71,73 @@ const uint8_t MCS_MCFGP_BASE_ADDRESS_START_BIT = 8; template fapi2::ReturnCode set_hb_dcbz_config( const fapi2::Target& i_target, + const fapi2::Target& i_parentProc, const uint64_t i_chip_base_address) { FAPI_DBG("Start"); fapi2::buffer l_mcfgp; + fapi2::buffer l_mcfgp0; fapi2::buffer l_mcmode1; fapi2::buffer l_mcperf1; fapi2::buffer l_mcfirmask_and; fapi2::buffer l_mcaction; + fapi2::ATTR_CHIP_EC_FEATURE_OMI_Type l_omiSupported; - // MCFGP -- set BAR valid, configure single MC group with minimum size at - // chip base address - FAPI_TRY(fapi2::getScom(i_target, MCS_MCFGP, l_mcfgp), - "Error from getScom (MCS_MCFGP)"); - l_mcfgp.setBit(); - l_mcfgp.clearBit(); - l_mcfgp.clearBit(); - l_mcfgp.clearBit(); - // group base address field covers RA 8:31 - l_mcfgp.insert(i_chip_base_address, - MCS_MCFGP_GROUP_BASE_ADDRESS, - MCS_MCFGP_GROUP_BASE_ADDRESS_LEN, - MCS_MCFGP_BASE_ADDRESS_START_BIT); - FAPI_TRY(fapi2::putScom(i_target, MCS_MCFGP, l_mcfgp), - "Error from putScom (MCS_MCFGP)"); + FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_CHIP_EC_FEATURE_OMI, + i_parentProc, + l_omiSupported), + "Error from FAPI_ATTR_GET (ATTR_CHIP_EC_FEATURE_OMI)"); + + if(l_omiSupported) + { + // MCFGP -- set BAR valid, configure single MC group with minimum size at + // chip base address + FAPI_TRY(fapi2::getScom(i_target, P9A_MI_MCFGP0, l_mcfgp0), + "Error from getScom (P9A_MI_MCFGP0)"); + + // Set Valid Bit + l_mcfgp0.setBit(); + // Channel per group (bits 40:42) + l_mcfgp0.insertFromRight( + P9A_MI_MCFGP0_ONE_CHANNEL_PER_GROUP); + // Channel 0 group id (bits 43:45) + l_mcfgp0.insertFromRight( + P9A_MI_MCFGP0_GROUP_MEMBER_ZERO); + // Group size (bits 25:39) + l_mcfgp0.insertFromRight( + P9A_MI_MCFGP0_GROUP_SIZE_4GB); + // group base address field covers RA 1:24 + l_mcfgp0.insert( + i_chip_base_address); + + + FAPI_TRY(fapi2::putScom(i_target, P9A_MI_MCFGP0, l_mcfgp0), + "Error from putScom (P9A_MCFGP0)"); + } + else + { + // MCFGP -- set BAR valid, configure single MC group with minimum size at + // chip base address + FAPI_TRY(fapi2::getScom(i_target, MCS_MCFGP, l_mcfgp), + "Error from getScom (MCS_MCFGP)"); + l_mcfgp.setBit(); + l_mcfgp.clearBit(); + l_mcfgp.clearBit(); + l_mcfgp.clearBit(); + // group base address field covers RA 8:31 + l_mcfgp.insert(i_chip_base_address, + MCS_MCFGP_GROUP_BASE_ADDRESS, + MCS_MCFGP_GROUP_BASE_ADDRESS_LEN, + MCS_MCFGP_BASE_ADDRESS_START_BIT); + FAPI_TRY(fapi2::putScom(i_target, MCS_MCFGP, l_mcfgp), + "Error from putScom (MCS_MCFGP)"); + } // MCMODE1 -- disable speculation, cmd bypass, fp command bypass FAPI_TRY(fapi2::getScom(i_target, MCS_MCMODE1, l_mcmode1), @@ -246,6 +292,7 @@ p9_sbe_mcs_setup(const fapi2::Target& i_target) { FAPI_TRY(set_hb_dcbz_config( l_mcs_chiplets.front(), + i_target, l_chip_base_address_nm0), "Error from set_hb_dcbz_config (MCS)"); } @@ -253,6 +300,7 @@ p9_sbe_mcs_setup(const fapi2::Target& i_target) { FAPI_TRY(set_hb_dcbz_config( l_mi_chiplets.front(), + i_target, l_chip_base_address_nm0), "Error from set_hb_dcbz_config (MI)"); } diff --git a/src/import/chips/p9/procedures/xml/attribute_info/p9_sbe_attributes.xml b/src/import/chips/p9/procedures/xml/attribute_info/p9_sbe_attributes.xml index efce389b..36cdc58c 100644 --- a/src/import/chips/p9/procedures/xml/attribute_info/p9_sbe_attributes.xml +++ b/src/import/chips/p9/procedures/xml/attribute_info/p9_sbe_attributes.xml @@ -358,6 +358,10 @@ attribute tank --> + + ATTR_CHIP_EC_FEATURE_OMI + + ATTR_CHIP_EC_FEATURE_DMI_MC_PLL_SCAN_BUCKETS -- cgit v1.2.1