Skip to content

Commit

Permalink
Add Write CRC attributes to xml and eff_dimm
Browse files Browse the repository at this point in the history
Added ATTR_EFF_PACKAGE_RANK_MAP, ATTR_EFF_NIBBLE_MAP, and
ATTR_MSS_EFF_WR_CRC attributes.

Change-Id: Ib665e22ce755282afb012ca0df9c670770fa1dd6
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/45386
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Louis Stermole <stermole@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: STEPHEN GLANCY <sglancy@us.ibm.com>
Tested-by: HWSV CI <hwsv-ci+hostboot@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: Matt K. Light <mklight@us.ibm.com>
Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
Dev-Ready: ANDRE A. MARIN <aamarin@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/45406
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Daniel M. Crowell <dcrowell@us.ibm.com>
  • Loading branch information
aamarin authored and dcrowell77 committed Sep 26, 2017
1 parent 84e9979 commit 7085e6b
Show file tree
Hide file tree
Showing 10 changed files with 701 additions and 128 deletions.
90 changes: 90 additions & 0 deletions src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.C
Expand Up @@ -3373,6 +3373,96 @@ fapi_try_exit:
return fapi2::current_err;
}

///
/// @brief Determines & sets effective config for nibble
/// @return fapi2::FAPI2_RC_SUCCESS if okay
///
fapi2::ReturnCode eff_dimm::nibble_map()
{
uint8_t l_attr[PORTS_PER_MCS][MAX_DIMM_PER_PORT][MAX_DQ_NIBBLES] = {};

std::vector<uint8_t> l_nibble_bitmap;
FAPI_TRY( iv_pDecoder->nibble_map(l_nibble_bitmap) );

// Sanity check we retrieved a vector w/the right size
FAPI_ASSERT( l_nibble_bitmap.size() == MAX_DQ_NIBBLES,
fapi2::MSS_UNEXPECTED_VALUE_SEEN().
set_TARGET(iv_dimm).
set_EXPECTED(MAX_DQ_NIBBLES).
set_ACTUAL(l_nibble_bitmap.size()).
set_FUNCTION(NIBBLE_MAP_FUNC),
"Expected vector size %d, actual size %d for %s",
MAX_DQ_NIBBLES, l_nibble_bitmap.size(), mss::c_str(iv_dimm) );

// Get & update MCS attribute
FAPI_TRY( eff_nibble_map(iv_mcs, &l_attr[0][0][0]) );

memcpy(&(l_attr[iv_port_index][iv_dimm_index][0]), l_nibble_bitmap.data(), MAX_DQ_NIBBLES);

FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_NIBBLE_MAP, iv_mcs, l_attr),
"Failed setting attribute ATTR_EFF_NIBBLE_MAP for %s", mss::c_str(iv_mcs));

fapi_try_exit:
return fapi2::current_err;
}

///
/// @brief Determines & sets effective config for the package rank map
/// @return fapi2::FAPI2_RC_SUCCESS if okay
///
fapi2::ReturnCode eff_dimm::package_rank_map()
{
uint8_t l_attr[PORTS_PER_MCS][MAX_DIMM_PER_PORT][MAX_DQ_NIBBLES] = {};

std::vector<uint8_t> l_package_rank_map;
FAPI_TRY( iv_pDecoder->package_rank_map(l_package_rank_map) );

// Sanity check we retrieved a vector w/the right size
FAPI_ASSERT( l_package_rank_map.size() == MAX_DQ_NIBBLES,
fapi2::MSS_UNEXPECTED_VALUE_SEEN().
set_TARGET(iv_dimm).
set_EXPECTED(MAX_DQ_NIBBLES).
set_ACTUAL(l_package_rank_map.size()).
set_FUNCTION(PACKAGE_RANK_MAP_FUNC),
"Expected vector size %d, actual size %d for %s",
MAX_DQ_NIBBLES, l_package_rank_map.size(), mss::c_str(iv_dimm) );

// Get & update MCS attribute
FAPI_TRY( eff_package_rank_map(iv_mcs, &l_attr[0][0][0]) );

memcpy(&(l_attr[iv_port_index][iv_dimm_index][0]), l_package_rank_map.data(), MAX_DQ_NIBBLES);

FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_EFF_PACKAGE_RANK_MAP, iv_mcs, l_attr),
"Failed setting attribute ATTR_EFF_PACKAGE_RANK_MAP for %s", mss::c_str(iv_mcs));

fapi_try_exit:
return fapi2::current_err;
}

///
/// @brief Determines & sets effective config for the wr_crc
/// @return fapi2::FAPI2_RC_SUCCESS if okay
/// @warning eff_package_rank_map must be set before calling this method
///
fapi2::ReturnCode eff_dimm::wr_crc()
{
uint8_t l_attr[PORTS_PER_MCS] = {};

// Get & update MCS attribute
FAPI_TRY( eff_wr_crc(iv_mcs, &l_attr[0]) );

// By default write CRC will be disabled. For us to actually enable it in a product,
// we'd have to be taking more bit flips on the write data interface than scrub can keep up with,
// plus we'd have to take the performance hit of enabling it... so pretty high bar to enable it.
l_attr[iv_port_index] = fapi2::ENUM_ATTR_MSS_EFF_WR_CRC_DISABLE;

FAPI_TRY( FAPI_ATTR_SET(fapi2::ATTR_MSS_EFF_WR_CRC, iv_mcs, l_attr),
"Failed setting attribute ATTR_MSS_EFF_WR_CRC for %s", mss::c_str(iv_mcs));

fapi_try_exit:
return fapi2::current_err;
}

///
/// @brief Determines & sets effective config for tRRD_S
/// @return fapi2::FAPI2_RC_SUCCESS if okay
Expand Down
18 changes: 18 additions & 0 deletions src/import/chips/p9/procedures/hwp/memory/lib/dimm/eff_dimm.H
Expand Up @@ -691,6 +691,24 @@ class eff_dimm
///
fapi2::ReturnCode dram_twtr_s();

///
/// @brief Determines & sets effective config for the nibble map
/// @return fapi2::FAPI2_RC_SUCCESS if okay
///
fapi2::ReturnCode nibble_map();

///
/// @brief Determines & sets effective config for the package rank map
/// @return fapi2::FAPI2_RC_SUCCESS if okay
///
fapi2::ReturnCode package_rank_map();

///
/// @brief Determines & sets effective config for the wr_crc
/// @return fapi2::FAPI2_RC_SUCCESS if okay
///
fapi2::ReturnCode wr_crc();

///
/// @brief Determines & sets effective config for tRRD_S (tRRD_S_slr)
/// @return fapi2::FAPI2_RC_SUCCESS if okay
Expand Down
2 changes: 1 addition & 1 deletion src/import/chips/p9/procedures/hwp/memory/lib/mc/port.C
Expand Up @@ -418,7 +418,7 @@ fapi2::ReturnCode restore_repairs_helper<fapi2::TARGET_TYPE_DIMM, MAX_RANK_PER_D
repair_state_machine<fapi2::TARGET_TYPE_DIMM> l_machine;

// loop through bytes
for (uint64_t l_byte = 0; l_byte < (MAX_DQ_NIBBLES_X4 / NIBBLES_PER_BYTE); ++l_byte)
for (uint64_t l_byte = 0; l_byte < (MAX_DQ_NIBBLES / NIBBLES_PER_BYTE); ++l_byte)
{
for (size_t l_nibble = 0; l_nibble < NIBBLES_PER_BYTE; ++l_nibble)
{
Expand Down

0 comments on commit 7085e6b

Please sign in to comment.