summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndres Lugo-Reyes <aalugore@us.ibm.com>2016-09-12 12:37:44 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2016-10-05 11:09:16 -0400
commit7849bdd4dd2c4d912a27f99ef543665d3bf873ce (patch)
tree9633c617adb7f6b19775bd4ef6fd216eb3028c96 /src
parentbc356f272c67790cf307cdb4af53308129b492b0 (diff)
downloadtalos-hostboot-7849bdd4dd2c4d912a27f99ef543665d3bf873ce.tar.gz
talos-hostboot-7849bdd4dd2c4d912a27f99ef543665d3bf873ce.zip
Add call to update SBE image if nest freq changed in istep 7.3
Change-Id: I529056bf1380238f5064f18b39bc09ec97e7a112 RTC: 157659 Depends-on: Idea9e3ae8d08052e960c00c225522bbe8da3ea5e Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/29521 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Matt Derksen <v2cibmd@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src')
-rwxr-xr-xsrc/build/simics/standalone.simics6
-rw-r--r--src/include/usr/initservice/mboxRegs.H17
-rw-r--r--src/include/usr/isteps/istep06list.H1
-rw-r--r--src/include/usr/isteps/istep07list.H1
-rw-r--r--src/include/usr/targeting/common/target.H5
-rwxr-xr-xsrc/usr/i2c/i2c.H2
-rw-r--r--src/usr/isteps/istep06/call_host_voltage_config.C17
-rw-r--r--src/usr/isteps/istep07/call_mss_freq.C65
-rw-r--r--src/usr/runtime/common/hsvc_sysdata.C1
-rw-r--r--src/usr/sbe/sbe_update.C86
-rw-r--r--src/usr/sbe/sbe_update.H2
-rwxr-xr-xsrc/usr/targeting/common/genHwsvMrwXml.pl26
-rw-r--r--src/usr/targeting/common/target.C32
-rw-r--r--src/usr/targeting/common/xmltohb/attribute_types.xml1
-rw-r--r--src/usr/targeting/common/xmltohb/simics_NIMBUS.system.xml8
-rwxr-xr-xsrc/usr/targeting/common/xmltohb/target_types.xml1
-rw-r--r--src/usr/targeting/common/xmltohb/vbu_NIMBUS.system.xml1
17 files changed, 216 insertions, 56 deletions
diff --git a/src/build/simics/standalone.simics b/src/build/simics/standalone.simics
index 5196add02..d86ace7bc 100755
--- a/src/build/simics/standalone.simics
+++ b/src/build/simics/standalone.simics
@@ -43,7 +43,9 @@ try {
###################################
echo "Enable the SBE"
# Set mailbox scratch registers so that the SBE starts in plck mode
-($hb_masterproc).proc_chip.invoke parallel_store SCOM 0x5003F "20000000_00000000" 64
+# Set Boot Freq valid bit (bit 3) and valid data bit (bit 7)
+($hb_masterproc).proc_chip.invoke parallel_store SCOM 0x5003F "31000000_00000000" 64
($hb_masterproc).proc_chip.invoke parallel_store SCOM 0x5003A "00000000_00000000" 64
-($hb_masterproc).proc_chip.invoke parallel_store SCOM 0x5003B "00000001_00000000" 64
+# Set the Nest PLL Bucket ID to 3 in the 4th byte of Mbox Scratch Reg 4
+($hb_masterproc).proc_chip.invoke parallel_store SCOM 0x5003B "00000003_00000000" 64
($hb_masterproc).proc_chip.invoke parallel_store FSIMBOX 0x01 "80000000" 32
diff --git a/src/include/usr/initservice/mboxRegs.H b/src/include/usr/initservice/mboxRegs.H
index e70e7a147..cb1a60d05 100644
--- a/src/include/usr/initservice/mboxRegs.H
+++ b/src/include/usr/initservice/mboxRegs.H
@@ -72,6 +72,23 @@ namespace SPLESS
} PACKED;
};
+ // Mailbox Scratch Register 8
+ union MboxScratch8_t
+ {
+ uint32_t data32;
+ struct
+ {
+ uint32_t validFwFunctionalEqEc :1; //0
+ uint32_t validSbeI2cBusSpeed :1; //1
+ uint32_t validFwMode :1; //2
+ uint32_t validBootFreq :1; //3
+ uint32_t validHwpControlFlags :1; //4
+ uint32_t validMasterSlaveChipNode :1; //5
+ uint32_t validDrtmPayloadAddr :1; //6
+ uint32_t validBytes :1; //7
+ uint32_t reserved :24; //8:31
+ } PACKED;
+ };
};
};
diff --git a/src/include/usr/isteps/istep06list.H b/src/include/usr/isteps/istep06list.H
index 923525911..fa9ca4129 100644
--- a/src/include/usr/isteps/istep06list.H
+++ b/src/include/usr/isteps/istep06list.H
@@ -233,6 +233,7 @@ const TaskInfo g_istep06[] = {
const DepModInfo g_istep06Dependancies = {
{
DEP_LIB(libistep06.so),
+ DEP_LIB(libsbe.so),
#ifdef CONFIG_IPLTIME_CHECKSTOP_ANALYSIS
DEP_LIB(libocc.so),
#endif
diff --git a/src/include/usr/isteps/istep07list.H b/src/include/usr/isteps/istep07list.H
index 821759bcf..ebb91f894 100644
--- a/src/include/usr/isteps/istep07list.H
+++ b/src/include/usr/isteps/istep07list.H
@@ -151,6 +151,7 @@ const DepModInfo g_istep07Dependancies = {
{
DEP_LIB(libistep07.so),
DEP_LIB(libisteps_mss.so),
+ DEP_LIB(libsbe.so),
NULL
}
};
diff --git a/src/include/usr/targeting/common/target.H b/src/include/usr/targeting/common/target.H
index ae7f64e90..acc2c7e78 100644
--- a/src/include/usr/targeting/common/target.H
+++ b/src/include/usr/targeting/common/target.H
@@ -687,8 +687,11 @@ const char* Target::getAttrAsString() const
* @param[in] i_sys - top level system target to set attributes for
* @param[in] i_newNestFreq - the new nest frequency to base all the attributes
* off of.
+ * @param[in] i_i2cBusDiv - The i2c bus divisor
*/
-void setFrequencyAttributes(Target * i_sys, uint32_t i_newNestFreq);
+void setFrequencyAttributes(Target * i_sys,
+ uint32_t i_newNestFreq,
+ uint32_t i_i2cBusDiv);
// WARNING: The following #include imports any platform specific template
diff --git a/src/usr/i2c/i2c.H b/src/usr/i2c/i2c.H
index 05f11d551..776b9b834 100755
--- a/src/usr/i2c/i2c.H
+++ b/src/usr/i2c/i2c.H
@@ -86,7 +86,7 @@ ALWAYS_INLINE inline uint64_t i2cGetNestFreq()
TARGETING::Target * sysTarget = NULL;
tS.getTopLevelTarget( sysTarget );
- return sysTarget->getAttr<TARGETING::ATTR_NEST_FREQ_MHZ>();
+ return sysTarget->getAttr<TARGETING::ATTR_FREQ_PB_MHZ>();
};
static uint64_t g_I2C_NEST_FREQ_MHZ = i2cGetNestFreq();
diff --git a/src/usr/isteps/istep06/call_host_voltage_config.C b/src/usr/isteps/istep06/call_host_voltage_config.C
index f2d822594..19b35adde 100644
--- a/src/usr/isteps/istep06/call_host_voltage_config.C
+++ b/src/usr/isteps/istep06/call_host_voltage_config.C
@@ -40,7 +40,8 @@
#include <p9_pm_get_poundv_bucket.H>
#include <p9_setup_evid.H>
-
+//SBE
+#include <sbe/sbeif.H>
using namespace TARGETING;
@@ -70,6 +71,7 @@ void* call_host_voltage_config( void *io_pArgs )
uint32_t l_vddBootVoltage = 0; //ATTR_VDD_BOOT_VOLTAGE
uint32_t l_vdnBootVoltage = 0; //ATTR_VDN_BOOT_VOLTAGE
uint32_t l_vcsBootVoltage = 0; //ATTR_VCS_BOOT_VOLTAGE
+ uint32_t l_nestFreq = 0; //ATTR_FREQ_PB_MHZ
bool l_firstPass = true;
@@ -85,6 +87,18 @@ void* call_host_voltage_config( void *io_pArgs )
// Get the system target
targetService().getTopLevelTarget(l_sys);
+ // Set the Nest frequency to whatever we boot with
+ l_err = SBE::getBootNestFreq( l_nestFreq );
+
+ if( l_err )
+ {
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "call_host_voltage_config.C::"
+ "Failed getting the boot nest frequency from the SBE");
+ }
+
+ l_sys->setAttr<TARGETING::ATTR_FREQ_PB_MHZ>( l_nestFreq );
+
// Get the child proc chips
getChildAffinityTargets( l_procList,
l_sys,
@@ -277,7 +291,6 @@ void* call_host_voltage_config( void *io_pArgs )
l_nominalFreq, l_floorFreq, l_ceilingFreq,
l_turboFreq, l_ultraTurboFreq );
- // TODO RTC:157890 need interface to look at the SBE and set NEST_FREQ_MHZ and PREV_NEST_FREQ_MHZ to whatever we boot from
} while( 0 );
if( l_err )
diff --git a/src/usr/isteps/istep07/call_mss_freq.C b/src/usr/isteps/istep07/call_mss_freq.C
index 1fd5438d9..591b871ae 100644
--- a/src/usr/isteps/istep07/call_mss_freq.C
+++ b/src/usr/isteps/istep07/call_mss_freq.C
@@ -113,7 +113,22 @@ void* call_mss_freq( void *io_pArgs )
}
} // End memBuf loop
+ // Set PB frequency to ASYNC_FREQ_MHZ
+ TARGETING::Target * l_sys = nullptr;
+ TARGETING::targetService().getTopLevelTarget( l_sys );
+
+ uint32_t l_originalNest = l_sys->getAttr<TARGETING::ATTR_FREQ_PB_MHZ>();
+ uint32_t l_asyncFreq =
+ l_sys->getAttr<TARGETING::ATTR_ASYNC_NEST_FREQ_MHZ>();
+ l_sys->setAttr<TARGETING::ATTR_FREQ_PB_MHZ>(l_asyncFreq);
+
+ // Save MC_SYNC_MODE
+ TARGETING::Target * l_masterProc = nullptr;
+ TARGETING::targetService()
+ .masterProcChipTargetHandle( l_masterProc );
+ uint8_t l_prevSyncMode =
+ l_masterProc->getAttr<TARGETING::ATTR_MC_SYNC_MODE>();
if(l_StepError.getErrorHandle() == NULL)
@@ -158,35 +173,49 @@ void* call_mss_freq( void *io_pArgs )
"WARNING skipping p9_mss_freq_system HWP due to error detected in p9_mss_freq HWP. An error should have been committed.");
}
-/* TODO RTC: 157659 Trigger SBE update if nest frequency changed
- // Check to see if the nest frequency changed
- TARGETING::targetService().getTopLevelTarget( l_sys );
- l_newNest = l_sys->getAttr<TARGETING::ATTR_NEST_FREQ_MHZ>();
- l_originalNest = l_sys->getAttr<TARGETING::ATTR_PREV_NEST_FREQ_MHZ>();
- // Trigger sbe update if the nest frequency changed.
+ // Check MC_SYNC_MODE
+ uint8_t l_mcSyncMode = l_masterProc->getAttr<TARGETING::ATTR_MC_SYNC_MODE>();
+ uint32_t l_newNest = 0;
+
+ // TODO RTC: 161197 Remove logic to set nest based off sync mode
+ // Set the nest frequency based off mc_sync_mode
+ if( l_mcSyncMode == 0 )
+ {
+ l_newNest = l_sys->getAttr<TARGETING::ATTR_ASYNC_NEST_FREQ_MHZ>();
+ }
+ else
+ {
+ TARGETING::TargetHandleList l_mcbists;
+ TARGETING::getAllChiplets(l_mcbists, TARGETING::TYPE_MCBIST);
+ l_newNest = l_mcbists.at(0)->getAttr<TARGETING::ATTR_MSS_FREQ>();
+ }
+ l_sys->setAttr<TARGETING::ATTR_FREQ_PB_MHZ>( l_newNest );
+ // TODO RTC: 161596 - Set ATTR_NEST_FREQ_MHZ as well until we know it is not being used anymore
+ l_sys->setAttr<TARGETING::ATTR_NEST_FREQ_MHZ>( l_newNest );
- if( l_newNest != l_originalNest )
+ //Trigger sbe update if the nest frequency changed.
+ if( (l_newNest != l_originalNest) || (l_mcSyncMode != l_prevSyncMode) )
{
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "The nest frequency or sync mode changed!"
+ " Original Nest: %d New Nest: %d"
+ " Original syncMode: %d New syncMode: %d",
+ l_originalNest, l_newNest, l_prevSyncMode, l_mcSyncMode );
l_err = SBE::updateProcessorSbeSeeproms();
if( l_err )
{
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
"call_mss_freq.C - Error calling updateProcessorSbeSeeproms");
+
+ // Create IStep error log and cross reference to error that occurred
+ l_StepError.addErrorDetails( l_err );
+
+ // Commit Error
+ errlCommit( l_err, HWPF_COMP_ID );
}
}
-*/
-
- // TODO RTC:138226
- // 3c) FW examines current synchronous mode nest freq and will customize the
- // SBE and reboot if necessary on the master only
- // (slaves get data via mbox scratch registers)
- /* FAPI_INVOKE_HWP(l_err, p9_xip_customize,
- const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_proc_target,
- const fapi2::Target<fapi2::TARGET_TYPE_SYSTEM>& i_system_target,
- void* io_image);
- */
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_freq exit" );
diff --git a/src/usr/runtime/common/hsvc_sysdata.C b/src/usr/runtime/common/hsvc_sysdata.C
index c17a28e2a..73f52b265 100644
--- a/src/usr/runtime/common/hsvc_sysdata.C
+++ b/src/usr/runtime/common/hsvc_sysdata.C
@@ -118,6 +118,7 @@ HSVC_LOAD_ATTR( ATTR_MEMB_DMI_REFCLOCK_RCVR_TERM );
HSVC_LOAD_ATTR( ATTR_MEM_FILTER_PLL_SOURCE );
HSVC_LOAD_ATTR( ATTR_MNFG_FLAGS );
HSVC_LOAD_ATTR( ATTR_MULTI_SCOM_BUFFER_MAX_SIZE );
+// TODO RTC:161596 - Remove references to deprecated NEST_FREQ_MHZ
HSVC_LOAD_ATTR( ATTR_NEST_FREQ_MHZ );
HSVC_LOAD_ATTR( ATTR_PCI_REFCLOCK_RCVR_TERM );
HSVC_LOAD_ATTR( ATTR_PIB_I2C_NEST_PLL );
diff --git a/src/usr/sbe/sbe_update.C b/src/usr/sbe/sbe_update.C
index d414a6931..ad1895d95 100644
--- a/src/usr/sbe/sbe_update.C
+++ b/src/usr/sbe/sbe_update.C
@@ -84,7 +84,6 @@ static bool g_mbox_query_done = false;
static bool g_mbox_query_result = false;
static bool g_istep_mode = false;
static bool g_update_both_sides = false;
-static uint32_t g_current_nest_freq = 0;
using namespace ERRORLOG;
using namespace TARGETING;
@@ -186,9 +185,6 @@ namespace SBE
}
}
- // Collect ATTR_NEST_FREQ_MHZ for reference later
- g_current_nest_freq = sys->getAttr<ATTR_NEST_FREQ_MHZ>();
-
//Make sure procedure constants keep within expected range.
assert((FIXED_SEEPROM_WORK_SPACE <= VMM_SBE_UPDATE_SIZE/2),
"updateProcessorSbeSeeproms() FIXED_SEEPROM_WORK_SPACE "
@@ -2468,6 +2464,8 @@ namespace SBE
bool crc_check_dirty = false;
bool isSimics_check = false;
+ TARGETING::Target * l_sys = nullptr;
+
do{
/**************************************************************/
@@ -2695,8 +2693,9 @@ namespace SBE
if ( io_sbeState.update_actions & UPDATE_SBE )
{
+ TARGETING::targetService().getTopLevelTarget( l_sys );
io_sbeState.new_seeprom_ver.nest_freq_mhz =
- g_current_nest_freq;
+ l_sys->getAttr<TARGETING::ATTR_FREQ_PB_MHZ>();
}
else
{
@@ -3340,6 +3339,56 @@ namespace SBE
}
}
+/////////////////////////////////////////////////////////////////////
+ void setNestFreqAttributes(uint32_t i_nestFreq)
+ {
+
+ errlHndl_t l_err = nullptr;
+ uint64_t l_mboxScratchReg4 = 0;
+ INITSERVICE::SPLESS::MboxScratch4_t l_scratch4;
+ size_t l_indexSize = sizeof(l_mboxScratchReg4);
+ uint32_t l_i2cBusDiv = 0;
+
+ // Call targeting function to update NEST_FREQ
+ TargetService& tS = targetService();
+ TARGETING::Target * l_sys = nullptr;
+ TARGETING::Target * l_masterProc = nullptr;
+
+ (void) tS.getTopLevelTarget( l_sys );
+ assert( l_sys, "setNestFreqAttributes() system target is NULL");
+
+ (void) tS.masterProcChipTargetHandle( l_masterProc );
+ assert( l_masterProc, "setNestFreqAttributes() "
+ "Master Proc target is NULL");
+
+ // Get the i2c bus divisor
+ l_err = deviceRead( l_masterProc,
+ &l_mboxScratchReg4,
+ l_indexSize,
+ DEVICE_SCOM_ADDRESS(
+ INITSERVICE::SPLESS::MBOX_SCRATCH_REG4) );
+
+ if( l_err )
+ {
+ TRACFCOMP( g_trac_sbe,
+ "setNestFreqAttributes::"
+ "Failed to get the bucket index from scom address");
+ errlCommit( l_err, SBE_COMP_ID );
+ }
+
+ l_scratch4.data32 = static_cast<uint32_t>(l_mboxScratchReg4 >> 32);
+
+ // The Nest PLL Bucket ID ranges 1-5. Subtract 1 for zero-based indexing
+ l_i2cBusDiv = NEST_PLL_FREQ_I2CDIV_LIST[l_scratch4.nestPllBucket-1];
+
+ TRACFCOMP(g_trac_sbe, "setNestFreqAttributes(): "
+ "UPDATE_NEST_FREQ to %d ",
+ i_nestFreq);
+
+ TARGETING::setFrequencyAttributes(l_sys,
+ i_nestFreq,
+ l_i2cBusDiv );
+ }
/////////////////////////////////////////////////////////////////////
errlHndl_t performUpdateActions(sbeTargetState_t& io_sbeState)
@@ -4400,11 +4449,17 @@ namespace SBE
size_t i_seeprom_num,
bool & o_mismatch)
{
+
+ TARGETING::Target * l_sys = nullptr;
+ TARGETING::targetService().getTopLevelTarget( l_sys );
+ uint32_t l_current_nest_freq =
+ l_sys->getAttr<TARGETING::ATTR_FREQ_PB_MHZ>();
+
TRACUCOMP( g_trac_sbe,
ENTER_MRK"checkSeepromNestFreq: tgt=0x%X current_freq=%d, "
"default_freq=%d, version=0x%X, i_seeprom_nest_freq=%d, "
"seeprom_num=%d",
- TARGETING::get_huid(i_tgt), g_current_nest_freq,
+ TARGETING::get_huid(i_tgt), l_current_nest_freq,
i_default_nest_freq, i_struct_version,
i_seeprom_nest_freq, i_seeprom_num);
@@ -4416,14 +4471,14 @@ namespace SBE
{
// Only version that tracks the nest freq when the image was
// customized
- if ( g_current_nest_freq == i_seeprom_nest_freq )
+ if ( l_current_nest_freq == i_seeprom_nest_freq )
{
TRACUCOMP( g_trac_sbe,"checkSeepromNestFreq: tgt=0x%X: "
"Seeprom%d: ver%d found and current "
"nest_freq(%d) and image nest_freq(%d) match",
TARGETING::get_huid(i_tgt),
i_seeprom_num, i_struct_version,
- g_current_nest_freq,
+ l_current_nest_freq,
i_seeprom_nest_freq);
}
else
@@ -4434,7 +4489,7 @@ namespace SBE
"nest_freq(%d) and image nest_freq(%d) DO NOT match",
TARGETING::get_huid(i_tgt),
i_seeprom_num, i_struct_version,
- g_current_nest_freq, i_seeprom_nest_freq);
+ l_current_nest_freq, i_seeprom_nest_freq);
}
}
@@ -4442,14 +4497,14 @@ namespace SBE
{
// Either uninitialized, simics, corrupted, etc
// Assume SBE image created with the module's default frequency
- if ( g_current_nest_freq == i_default_nest_freq )
+ if ( l_current_nest_freq == i_default_nest_freq )
{
TRACUCOMP( g_trac_sbe,"checkSeepromNestFreq: tgt=0x%X: "
"Seeprom%d: ver=0x%X found and current "
"nest_freq(%d) and default nest_freq(%d) match",
TARGETING::get_huid(i_tgt),
i_seeprom_num, i_struct_version,
- g_current_nest_freq, i_default_nest_freq);
+ l_current_nest_freq, i_default_nest_freq);
}
else
{
@@ -4460,7 +4515,7 @@ namespace SBE
"DO NOT match. ",
TARGETING::get_huid(i_tgt),
i_seeprom_num, i_struct_version,
- g_current_nest_freq, i_default_nest_freq);
+ l_current_nest_freq, i_default_nest_freq);
}
}
@@ -4498,6 +4553,7 @@ namespace SBE
if( l_err )
{
TRACFCOMP(g_trac_sbe,
+ "getBootNestFreq::"
"Failed to get the bucket index from scom address");
errlCommit(l_err, SBE_COMP_ID);
break;
@@ -4567,9 +4623,9 @@ namespace SBE
break;
}
- TRACFCOMP( g_trac_sbe,"checkNestFreqSettings(): ATTR_NEST_FREQ_MHZ"
- "=%d, Boot Frequency=%d",
- g_current_nest_freq, default_nest_freq);
+ TRACFCOMP( g_trac_sbe,"checkNestFreqSettings(): ATTR_FREQ_PB_MHZ"
+ " Boot Frequency=%d",
+ default_nest_freq);
TRACUCOMP( g_trac_sbe,"checkNestFreqSettings(): "
"seeprom0 ver=%d freq=%d seeprom1 ver=%d freq=%d",
io_sbeState.seeprom_0_ver.struct_version,
diff --git a/src/usr/sbe/sbe_update.H b/src/usr/sbe/sbe_update.H
index babfc4be9..56d4bdb33 100644
--- a/src/usr/sbe/sbe_update.H
+++ b/src/usr/sbe/sbe_update.H
@@ -614,7 +614,7 @@ namespace SBE
/**
* @brief Checks the Nest Frequency value stored in the the version struct
- * and compares it ot the NEST_FREQ_MHZ attribute of the system
+ * and compares it ot the FREQ_PB_MHZ attribute of the system
*
* @param[io/out] io_sbeState Struct containing SBE State of the target
* and is updated based on the situation
diff --git a/src/usr/targeting/common/genHwsvMrwXml.pl b/src/usr/targeting/common/genHwsvMrwXml.pl
index cacb849c4..4809472a8 100755
--- a/src/usr/targeting/common/genHwsvMrwXml.pl
+++ b/src/usr/targeting/common/genHwsvMrwXml.pl
@@ -371,6 +371,32 @@ else
push @systemAttr, ['SUPPORTS_DYNAMIC_MEM_VOLT', 0];
}
+
+my $nestFreq = $reqPol->{'proc_pb_frequency'}->{content};
+
+
+if($nestFreq == 1600)
+{
+ push @systemAttr, ['NEST_PLL_BUCKET', 1];
+}
+elsif ($nestFreq == 1866)
+{
+ push @systemAttr, ['NEST_PLL_BUCKET', 2];
+}
+elsif ($nestFreq == 2000)
+{
+ push @systemAttr, ['NEST_PLL_BUCKET', 3];
+}
+elsif ($nestFreq == 2133)
+{
+ push @systemAttr, ['NEST_PLL_BUCKET', 4];
+}
+elsif ($nestFreq == 2400)
+{
+ push @systemAttr, ['NEST_PLL_BUCKET', 5];
+}
+
+
my %domainProgram = ( MSS_VDD_PROGRAM => $reqPol->{'mss_vdd_program'},
MSS_VCS_PROGRAM => $reqPol->{'mss_vcs_program'},
MSS_AVDD_PROGRAM => $reqPol->{'mss_avdd_program'},
diff --git a/src/usr/targeting/common/target.C b/src/usr/targeting/common/target.C
index 5daad8ad4..dc6e0fbbe 100644
--- a/src/usr/targeting/common/target.C
+++ b/src/usr/targeting/common/target.C
@@ -691,29 +691,23 @@ bool Target::uninstallWriteAttributeCallback()
//******************************************************************************
// setFrequencyAttributes
//******************************************************************************
-void setFrequencyAttributes(Target * i_sys, uint32_t i_newNestFreq)
+void setFrequencyAttributes( Target * i_sys,
+ uint32_t i_newNestFreq,
+ uint32_t i_i2cBusDiv )
{
-
// Calculate the new value for PIB_I2C_NEST_PLL using old freq attributes.
uint32_t l_oldPll = i_sys->getAttr<TARGETING::ATTR_PIB_I2C_NEST_PLL>();
- uint32_t l_oldNestFreq = i_sys->getAttr<TARGETING::ATTR_NEST_FREQ_MHZ>();
+ uint32_t l_oldNestFreq = i_sys->getAttr<TARGETING::ATTR_FREQ_PB_MHZ>();
uint32_t l_newPll = (i_newNestFreq * l_oldPll)/l_oldNestFreq;
//NEST_FREQ
+ //TODO RTC: 161596 - Remove references to deprecated NEST_FREQ_MHZ
i_sys->setAttr<TARGETING::ATTR_NEST_FREQ_MHZ>(i_newNestFreq);
TRACFCOMP(g_trac_targeting,
"ATTR_NEST_FREQ_MHZ getting set from %d to %d",
l_oldNestFreq,
i_newNestFreq );
- //FREQ_X_MHZ
- uint32_t l_freqX = i_newNestFreq * 2;
- i_sys->setAttr<TARGETING::ATTR_FREQ_X_MHZ>(l_freqX);
- TRACFCOMP(g_trac_targeting,
- "ATTR_FREQ_X_MHZ getting set to from %d to %d",
- l_oldNestFreq*2,
- l_freqX );
-
//FREQ_PB_MHZ
uint32_t l_freqPb = i_newNestFreq;
i_sys->setAttr<TARGETING::ATTR_FREQ_PB_MHZ>(l_freqPb);
@@ -729,7 +723,21 @@ void setFrequencyAttributes(Target * i_sys, uint32_t i_newNestFreq)
l_oldPll,
l_newPll);
- return;
+ // Get the processor targets to set the i2c bus divisor.
+ TARGETING::TargetHandleList l_procList;
+ TARGETING::getAllChips( l_procList,
+ TARGETING::TYPE_PROC,
+ true ); // true: return functional procs
+
+ TargetHandleList::iterator l_procTarget;
+
+ for( l_procTarget = l_procList.begin();
+ l_procTarget != l_procList.end();
+ ++l_procTarget )
+ {
+ (*l_procTarget)->setAttr<TARGETING::ATTR_I2C_BUS_DIV_REF>(i_i2cBusDiv);
+ }
+
}
diff --git a/src/usr/targeting/common/xmltohb/attribute_types.xml b/src/usr/targeting/common/xmltohb/attribute_types.xml
index 209e5c66d..a87ac8c69 100644
--- a/src/usr/targeting/common/xmltohb/attribute_types.xml
+++ b/src/usr/targeting/common/xmltohb/attribute_types.xml
@@ -6434,6 +6434,7 @@ firmware notes: Used as override attribute for pstate procedure
<attribute>
<id>NEST_FREQ_MHZ</id>
+ <!-- TODO RTC: 161596 - Remove deprecated NEST_FREQ_MHZ -->
<description>
Nest frequency in MHz
</description>
diff --git a/src/usr/targeting/common/xmltohb/simics_NIMBUS.system.xml b/src/usr/targeting/common/xmltohb/simics_NIMBUS.system.xml
index 8358f796d..bb34ad1f2 100644
--- a/src/usr/targeting/common/xmltohb/simics_NIMBUS.system.xml
+++ b/src/usr/targeting/common/xmltohb/simics_NIMBUS.system.xml
@@ -94,12 +94,12 @@
</default>
</attribute>
<attribute>
- <id>NEST_FREQ_MHZ</id>
- <default>0x960</default>
+ <id>ASYNC_NEST_FREQ_MHZ</id>
+ <default>0x7D0</default>
</attribute>
<attribute>
- <id>FREQ_PB_MHZ</id>
- <default>0x7D0</default>
+ <id>REQUIRED_SYNCH_MODE</id>
+ <default>2</default>
</attribute>
<attribute>
<id>REQUIRED_SYNCH_MODE</id>
diff --git a/src/usr/targeting/common/xmltohb/target_types.xml b/src/usr/targeting/common/xmltohb/target_types.xml
index 2c9be0238..145940113 100755
--- a/src/usr/targeting/common/xmltohb/target_types.xml
+++ b/src/usr/targeting/common/xmltohb/target_types.xml
@@ -608,6 +608,7 @@
<attribute><id>FREQ_A_MHZ</id></attribute>
<attribute><id>FREQ_PB_MHZ</id></attribute>
<attribute><id>ASYNC_NEST_FREQ_MHZ</id></attribute>
+ <!-- TODO RTC: 161596 - Remove references to deprecated NEST_FREQ_MHZ -->
<attribute><id>NEST_FREQ_MHZ</id></attribute>
<attribute><id>PREV_NEST_FREQ_MHZ</id></attribute>
<attribute><id>FREQ_PCIE_MHZ</id></attribute>
diff --git a/src/usr/targeting/common/xmltohb/vbu_NIMBUS.system.xml b/src/usr/targeting/common/xmltohb/vbu_NIMBUS.system.xml
index 71baab7bd..e1fe230ce 100644
--- a/src/usr/targeting/common/xmltohb/vbu_NIMBUS.system.xml
+++ b/src/usr/targeting/common/xmltohb/vbu_NIMBUS.system.xml
@@ -93,6 +93,7 @@
<field><id>reserved</id><value>0</value></field>
</default>
</attribute>
+ <!-- TODO RTC: 161596 Remove references to deprecated NEST_FREQ_MHZ -->
<attribute>
<id>NEST_FREQ_MHZ</id>
<default>0x960</default>
OpenPOWER on IntegriCloud