summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSachin Gupta <sgupta2m@in.ibm.com>2016-09-24 10:37:09 -0500
committerAMIT J. TENDOLKAR <amit.tendolkar@in.ibm.com>2016-09-30 06:48:47 -0400
commitd72bbca6209a94e2e966d76a2b7206cbfd5c8dca (patch)
tree12e29b2a7e76cc8f69a042577687c763fb1b79bf /src
parent36dc66d7d9bd529a70a12e2152223fc80a23cdbd (diff)
downloadtalos-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.C38
-rw-r--r--src/sbefw/sbemain.C7
-rw-r--r--src/sbefw/sbeutil.H3
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
OpenPOWER on IntegriCloud