summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/dimm/ddr4/data_buffer_ddr4.H29
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/shared/mss_const.H1
2 files changed, 21 insertions, 9 deletions
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/dimm/ddr4/data_buffer_ddr4.H b/src/import/chips/p9/procedures/hwp/memory/lib/dimm/ddr4/data_buffer_ddr4.H
index ab980a962..05b1f2f2d 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/dimm/ddr4/data_buffer_ddr4.H
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/dimm/ddr4/data_buffer_ddr4.H
@@ -473,20 +473,31 @@ inline fapi2::ReturnCode set_pba_mode( const fapi2::Target<fapi2::TARGET_TYPE_DI
const mss::states i_state,
std::vector< ccs::instruction_t<T> >& io_inst )
{
+ // PBA position is really bit 0, but we're right justified on our bit ordering here, so it's bit7
+ constexpr uint64_t PBA_POSITION = 7;
constexpr uint64_t MAX_VALID = 1;
+ uint8_t l_nominal_bc_value = 0;
+
+ // Error checking
+ FAPI_ASSERT(i_state <= MAX_VALID,
+ fapi2::MSS_OUT_OF_BOUNDS_INDEXING()
+ .set_TARGET(i_target)
+ .set_INDEX(i_state)
+ .set_LIST_SIZE(MAX_VALID)
+ .set_FUNCTION(SET_PBA_MODE),
+ "%s has PBA input (%u) out of bounds: %u",
+ mss::c_str(i_target), i_state, MAX_VALID);
+
+ // Gets our nominal BCW value
+ FAPI_TRY(mss::eff_dimm_ddr4_f0bc1x(i_target, l_nominal_bc_value));
- // User input programming error asserts program termination
- if( i_state > MAX_VALID )
{
- FAPI_ERR( "%s. Invalid setting received: %d, largest valid PBA setting is %d",
- mss::c_str(i_target), i_state, MAX_VALID );
- fapi2::Assert(false);
+ cw_data l_data(FUNC_SPACE_0, BUFF_CONFIG_CW, l_nominal_bc_value, mss::tmrc());
+ l_data.iv_data.writeBit<PBA_POSITION>(i_state);
+ FAPI_INF("%s data 0x%02x", mss::c_str(i_target), l_data.iv_data);
+ FAPI_TRY( settings_boilerplate<BCW_8BIT>(i_target, l_data, io_inst) );
}
- cw_data l_data(FUNC_SPACE_0, BUFF_CONFIG_CW, i_state, mss::tmrc());
- FAPI_INF("%s data 0x%02x", mss::c_str(i_target), l_data.iv_data);
- FAPI_TRY( settings_boilerplate<BCW_8BIT>(i_target, l_data, io_inst) );
-
fapi_try_exit:
return fapi2::current_err;
}
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/shared/mss_const.H b/src/import/chips/p9/procedures/hwp/memory/lib/shared/mss_const.H
index 7676d5f3f..d1effb898 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/shared/mss_const.H
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/shared/mss_const.H
@@ -203,6 +203,7 @@ enum ffdc_function_codes
// PBA function codes
PBA_EXECUTE_CONTAINER = 80,
PBA_EXECUTE_VECTOR = 81,
+ SET_PBA_MODE = 83,
};
enum states
OpenPOWER on IntegriCloud