diff options
author | Sachin Gupta <sgupta2m@in.ibm.com> | 2016-09-24 10:37:09 -0500 |
---|---|---|
committer | AMIT J. TENDOLKAR <amit.tendolkar@in.ibm.com> | 2016-09-30 06:48:47 -0400 |
commit | d72bbca6209a94e2e966d76a2b7206cbfd5c8dca (patch) | |
tree | 12e29b2a7e76cc8f69a042577687c763fb1b79bf /src | |
parent | 36dc66d7d9bd529a70a12e2152223fc80a23cdbd (diff) | |
download | talos-sbe-d72bbca6209a94e2e966d76a2b7206cbfd5c8dca.tar.gz talos-sbe-d72bbca6209a94e2e966d76a2b7206cbfd5c8dca.zip |
Change pk frequency after istep 2.7
RTC: 128819
Change-Id: If409105a104f482cb93979384906d85509b3ea32
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/30269
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Shakeeb A. Pasha B K <shakeebbk@in.ibm.com>
Reviewed-by: RAJA DAS <rajadas2@in.ibm.com>
Reviewed-by: AMIT J. TENDOLKAR <amit.tendolkar@in.ibm.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/sbefw/sbecmdiplcontrol.C | 38 | ||||
-rw-r--r-- | src/sbefw/sbemain.C | 7 | ||||
-rw-r--r-- | src/sbefw/sbeutil.H | 3 |
3 files changed, 45 insertions, 3 deletions
diff --git a/src/sbefw/sbecmdiplcontrol.C b/src/sbefw/sbecmdiplcontrol.C index 962604f1..ea08419f 100644 --- a/src/sbefw/sbecmdiplcontrol.C +++ b/src/sbefw/sbecmdiplcontrol.C @@ -85,8 +85,11 @@ // istep 5 hwp header files #include "p9_sbe_instruct_start.H" #include "p9_sbe_load_bootloader.H" +// Nest frequency array +#include "p9_frequency_buckets.H" #include "sbeXipUtils.H" // For getting hbbl offset +#include "sbeutil.H" // For getting SBE_TO_NEST_FREQ_FACTOR // Forward declaration using namespace fapi2; ReturnCode sbeExecuteIstep (uint8_t i_major, uint8_t i_minor); @@ -123,6 +126,7 @@ ReturnCode istepCheckSbeMaster( sbeIstepHwp_t i_hwp); ReturnCode istepStartInstruction( sbeIstepHwp_t i_hwp); ReturnCode istepWithCoreConditional( sbeIstepHwp_t i_hwp); ReturnCode istepWithEqConditional( sbeIstepHwp_t i_hwp); +ReturnCode istepNestFreq( sbeIstepHwp_t i_hwp); #ifdef SEEPROM_IMAGE // Using function pointer to force long call. @@ -176,7 +180,7 @@ static istepMap_t g_istep2PtrTbl[ ISTEP2_MAX_SUBSTEPS ] = { &istepWithProc, { .procHwp = &p9_sbe_tp_gptr_time_initf }}, { &istepNoOp, NULL }, // DFT only { &istepWithProc, { .procHwp = &p9_sbe_npll_initf }}, - { &istepWithProc, { .procHwp = &p9_sbe_npll_setup }}, + { &istepNestFreq, { .procHwp = &p9_sbe_npll_setup }}, { &istepWithProc, { .procHwp = &p9_sbe_tp_switch_gears }}, { &istepWithProc, { .procHwp = &p9_sbe_clock_test2 }}, { &istepWithProc, { .procHwp = &p9_sbe_tp_chiplet_reset }}, @@ -496,6 +500,38 @@ ReturnCode istepWithProc( sbeIstepHwp_t i_hwp) //---------------------------------------------------------------------------- +ReturnCode istepNestFreq( sbeIstepHwp_t i_hwp) +{ + #define SBE_FUNC "istepNestFreq " + Target<TARGET_TYPE_PROC_CHIP > proc = plat_getChipTarget(); + fapi2::Target<TARGET_TYPE_SYSTEM> sys; + ReturnCode rc = FAPI2_RC_SUCCESS; + uint8_t nestPllBkt = 0; + FAPI_ATTR_GET( ATTR_NEST_PLL_BUCKET, sys, nestPllBkt ); + assert( nestPllBkt && (nestPllBkt <= NEST_PLL_FREQ_BUCKETS )); + uint32_t sbeFreqHz = ( NEST_PLL_FREQ_LIST[ nestPllBkt - 1 ] * 1000 * 1000 )/ + SBE::SBE_TO_NEST_FREQ_FACTOR; + + assert( NULL != i_hwp.procHwp ); + do + { + SBE_EXEC_HWP(rc, i_hwp.procHwp,proc) + if( rc != FAPI2_RC_SUCCESS ) + { + break; + } + // This function signature though has return value + // But it always return SUCCESS. + SBE_INFO(SBE_FUNC"Setting new frequency:0x%08X", sbeFreqHz); + pk_timebase_freq_set(sbeFreqHz); + }while(0); + return rc; + #undef SBE_FUNC +} + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + ReturnCode istepSelectEx( sbeIstepHwp_t i_hwp) { ReturnCode rc = FAPI2_RC_SUCCESS; diff --git a/src/sbefw/sbemain.C b/src/sbefw/sbemain.C index 6ca8d351..7f1d25ec 100644 --- a/src/sbefw/sbemain.C +++ b/src/sbefw/sbemain.C @@ -42,6 +42,7 @@ #include "sberegaccess.H" #include "sbestates.H" #include "fapi2.H" // For target init +#include "sbeutil.H" // For getting SBE_TO_NEST_FREQ_FACTOR //////////////////////////////////////////////////////////////// // @brief Global semaphores @@ -280,13 +281,15 @@ uint32_t main(int argc, char **argv) do { + // Keep default nest frequncy as 133 MHZ + static const uint32_t initialSbefreq = ( 133 * 1000 * 1000)/ + SBE::SBE_TO_NEST_FREQ_FACTOR; // initializes kernel data - // stack, threads, timebase, timers, etc. l_rc = pk_initialize((PkAddress)g_sbe_Kernel_NCInt_stack, SBE_NONCRITICAL_STACK_SIZE, 0, - 500000000); // @TODO via RTC : 128819 - // Need to obtain at Runtime, a new attribute? + initialSbefreq ); if (l_rc) { break; diff --git a/src/sbefw/sbeutil.H b/src/sbefw/sbeutil.H index 9bd4bd18..89ee9ed0 100644 --- a/src/sbefw/sbeutil.H +++ b/src/sbefw/sbeutil.H @@ -70,6 +70,9 @@ void sbeHandlePsuResponse (const uint32_t i_rc); namespace SBE { + // Nest to SBE frequency ratio + static const uint8_t SBE_TO_NEST_FREQ_FACTOR = 4; + // Currently PK does not define start range for app // specifc panic code as enum. It is implicit understanding // through code comments. Expectation is 0x1cxx range is for |