summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp/memory/lib/freq
diff options
context:
space:
mode:
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/memory/lib/freq')
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/freq/cas_latency.C34
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/freq/cas_latency.H8
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/freq/sync.C17
3 files changed, 29 insertions, 30 deletions
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/freq/cas_latency.C b/src/import/chips/p9/procedures/hwp/memory/lib/freq/cas_latency.C
index b81796771..1e1494560 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/freq/cas_latency.C
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/freq/cas_latency.C
@@ -42,8 +42,9 @@
// mss lib
#include <lib/freq/cas_latency.H>
-#include <lib/spd/spd_factory.H>
+#include <generic/memory/lib/data_engine/pre_data_init.H>
#include <lib/eff_config/timing.H>
+#include <generic/memory/lib/spd/spd_utils.H>
#include <generic/memory/lib/utils/find.H>
#include <lib/utils/checker.H>
@@ -66,7 +67,7 @@ namespace mss
/// @param[out] o_rc returns FAPI2_RC_SUCCESS if constructor initialzed successfully
///
cas_latency::cas_latency(const fapi2::Target<fapi2::TARGET_TYPE_MCA>& i_target,
- const std::vector< std::shared_ptr<spd::decoder> >& i_caches,
+ const std::vector< spd::facade >& i_caches,
const std::vector<uint32_t>& i_supported_freqs,
fapi2::ReturnCode& o_rc):
iv_dimm_list_empty(false),
@@ -88,16 +89,16 @@ cas_latency::cas_latency(const fapi2::Target<fapi2::TARGET_TYPE_MCA>& i_target,
for ( const auto& l_cache : i_caches )
{
// Retrieve timing values from the SPD
- const auto l_target = l_cache->iv_target;
+ const auto l_target = l_cache.get_dimm_target();
uint64_t l_taa_min_in_ps = 0;
uint64_t l_tckmax_in_ps = 0;
uint64_t l_tck_min_in_ps = 0;
FAPI_TRY( get_taamin(l_cache, l_taa_min_in_ps),
"%s. Failed to get tAAmin", mss::c_str(l_target) );
- FAPI_TRY( get_tckmax(l_cache, l_tckmax_in_ps),
+ FAPI_TRY( spd::get_tckmax(l_cache, l_tckmax_in_ps),
"%s. Failed to get tCKmax", mss::c_str(l_target) );
- FAPI_TRY( get_tckmin(l_cache, l_tck_min_in_ps),
+ FAPI_TRY( spd::get_tckmin(l_cache, l_tck_min_in_ps),
"%s. Failed to get tCKmin", mss::c_str(l_target) );
// Determine largest tAAmin value
@@ -114,7 +115,7 @@ cas_latency::cas_latency(const fapi2::Target<fapi2::TARGET_TYPE_MCA>& i_target,
if( iv_is_3ds != loading::IS_3DS)
{
uint8_t l_stack_type = 0;
- FAPI_TRY( l_cache->prim_sdram_signal_loading(l_stack_type) );
+ FAPI_TRY( l_cache.prim_sdram_signal_loading(l_stack_type) );
// Is there a more algorithmic efficient approach? - AAM
iv_is_3ds = (l_stack_type == fapi2::ENUM_ATTR_EFF_PRIM_STACK_TYPE_3DS) ?
@@ -124,7 +125,7 @@ cas_latency::cas_latency(const fapi2::Target<fapi2::TARGET_TYPE_MCA>& i_target,
{
// Retrieve dimm supported cas latencies from SPD
uint64_t l_dimm_supported_cl = 0;
- FAPI_TRY( l_cache->supported_cas_latencies(l_dimm_supported_cl),
+ FAPI_TRY( l_cache.supported_cas_latencies(l_dimm_supported_cl),
"%s. Failed to get supported CAS latency", mss::c_str(l_target) );
// Bitwise ANDING the bitmap from all modules creates a bitmap w/a common CL
@@ -312,11 +313,11 @@ fapi_try_exit:
///
/// @brief Retrieves SDRAM Minimum CAS Latency Time (tAAmin) from SPD
-/// @param[in] i_pDecoder the SPD decoder
+/// @param[in] i_spd_decoder the SPD decoder
/// @param[out] o_value tCKmin value in ps
/// @return FAPI2_RC_SUCCESS iff ok
///
-fapi2::ReturnCode cas_latency::get_taamin( const std::shared_ptr<mss::spd::decoder>& i_pDecoder,
+fapi2::ReturnCode cas_latency::get_taamin( const mss::spd::facade& i_spd_decoder,
uint64_t& o_value )
{
int64_t l_timing_ftb = 0;
@@ -326,15 +327,14 @@ fapi2::ReturnCode cas_latency::get_taamin( const std::shared_ptr<mss::spd::decod
int64_t l_temp = 0;
// Retrieve timing parameters
- const auto l_target = i_pDecoder->iv_target;
+ const auto l_target = i_spd_decoder.get_dimm_target();
- FAPI_TRY( i_pDecoder->medium_timebase(l_medium_timebase),
- "%s. Failed medium_timebase()", mss::c_str(l_target) );
- FAPI_TRY( i_pDecoder->fine_timebase(l_fine_timebase),
- "%s. Failed fine_timebase()", mss::c_str(l_target) );
- FAPI_TRY( i_pDecoder->min_taa(l_timing_mtb),
+ FAPI_TRY( get_timebases(i_spd_decoder, l_medium_timebase, l_fine_timebase),
+ "%s. Failed Failed get_timebases", mss::c_str(l_target) );
+
+ FAPI_TRY( i_spd_decoder.min_taa(l_timing_mtb),
"%s. Failed min_taa()", mss::c_str(l_target) );
- FAPI_TRY( i_pDecoder->fine_offset_min_taa(l_timing_ftb),
+ FAPI_TRY( i_spd_decoder.fine_offset_min_taa(l_timing_ftb),
"%s. Failed fine_offset_min_taa()", mss::c_str(l_target) );
// Calculate timing value
@@ -409,7 +409,7 @@ inline fapi2::ReturnCode cas_latency::calc_cas_latency(const uint64_t i_taa,
const uint64_t i_tck,
uint64_t& o_cas_latency) const
{
- FAPI_TRY( spd::calc_nck(i_taa, i_tck, INVERSE_DDR4_CORRECTION_FACTOR, o_cas_latency) );
+ FAPI_TRY( spd::calc_nck(i_taa, i_tck, spd::INVERSE_DDR4_CORRECTION_FACTOR, o_cas_latency) );
FAPI_INF("%s. tAA (ps): %d, tCK (ps): %d, CL (nck): %d",
mss::c_str(iv_target),
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/freq/cas_latency.H b/src/import/chips/p9/procedures/hwp/memory/lib/freq/cas_latency.H
index 6c9ad087c..bd01e5dc9 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/freq/cas_latency.H
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/freq/cas_latency.H
@@ -45,7 +45,7 @@
#include <fapi2.H>
// mss lib
-#include <generic/memory/lib/spd/common/ddr4/spd_decoder_ddr4.H>
+#include <generic/memory/lib/spd/spd_facade.H>
#include <lib/utils/conversions.H>
#include <lib/freq/sync.H>
@@ -132,7 +132,7 @@ class cas_latency
/// @param[out] o_rc returns FAPI2_RC_SUCCESS if constructor initialzed successfully
///
cas_latency(const fapi2::Target<fapi2::TARGET_TYPE_MCA>& i_target_mcs,
- const std::vector< std::shared_ptr<spd::decoder> >& i_caches,
+ const std::vector< spd::facade >& i_caches,
const std::vector<uint32_t>& i_supported_freqs,
fapi2::ReturnCode& o_rc);
@@ -277,11 +277,11 @@ class cas_latency
///
/// @brief Retrieves SDRAM Minimum CAS Latency Time (tAAmin) from SPD
- /// @param[in] i_pDecoder the SPD decoder
+ /// @param[in] i_spd_decoder the SPD decoder
/// @param[out] o_value tCKmin value in ps
/// @return FAPI2_RC_SUCCESS iff ok
///
- fapi2::ReturnCode get_taamin(const std::shared_ptr<mss::spd::decoder>& i_pDecoder,
+ fapi2::ReturnCode get_taamin(const mss::spd::facade& i_spd_decoder,
uint64_t& o_value);
///
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/freq/sync.C b/src/import/chips/p9/procedures/hwp/memory/lib/freq/sync.C
index 35f6daa10..0d9d4c0f8 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/freq/sync.C
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/freq/sync.C
@@ -42,8 +42,9 @@
#include <lib/freq/sync.H>
#include <generic/memory/lib/utils/find.H>
#include <lib/utils/assert_noexit.H>
-#include <lib/spd/spd_factory.H>
#include <generic/memory/lib/utils/count_dimm.H>
+#include <generic/memory/lib/spd/spd_facade.H>
+#include <generic/memory/lib/spd/spd_utils.H>
using fapi2::TARGET_TYPE_DIMM;
using fapi2::TARGET_TYPE_MCS;
@@ -445,25 +446,23 @@ fapi2::ReturnCode spd_supported_freq(const fapi2::Target<TARGET_TYPE_MCBIST>& i_
o_supported_freqs = std::vector<uint32_t>(PORTS_PER_MCBIST, ~(0));
// Get cached decoder
- std::vector< std::shared_ptr<mss::spd::decoder> > l_factory_caches;
-
- FAPI_TRY( mss::spd::populate_decoder_caches(i_target, l_factory_caches),
- "%s. Failed to populate decoder cache", mss::c_str(i_target) );
+ std::vector< mss::spd::facade > l_spd_facades;
+ FAPI_TRY( get_spd_decoder_list(i_target, l_spd_facades) );
// Looking for the biggest application period on an MC.
// This will further reduce supported frequencies the system can run on.
- for ( const auto& l_cache : l_factory_caches )
+ for ( const auto& l_cache : l_spd_facades )
{
- const auto l_dimm = l_cache->iv_target;
+ const auto l_dimm = l_cache.get_dimm_target();
const auto l_mca = mss::find_target<TARGET_TYPE_MCA>(l_dimm);
const auto l_port_pos = mss::relative_pos<fapi2::TARGET_TYPE_MCBIST>(l_mca);
uint64_t l_tckmax_in_ps = 0;
uint64_t l_tck_min_in_ps = 0;
uint32_t l_dimm_freq = 0;
- FAPI_TRY( get_tckmax(l_cache, l_tckmax_in_ps),
+ FAPI_TRY( spd::get_tckmax(l_cache, l_tckmax_in_ps),
"%s. Failed to get tCKmax", mss::c_str(l_dimm) );
- FAPI_TRY( get_tckmin(l_cache, l_tck_min_in_ps),
+ FAPI_TRY( spd::get_tckmin(l_cache, l_tck_min_in_ps),
"%s. Failed to get tCKmin", mss::c_str(l_dimm) );
// Determine a proposed tCK value that is greater than or equal tCKmin
OpenPOWER on IntegriCloud