summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/include/usr/targeting/common/util.H5
-rw-r--r--src/include/usr/vmmconst.h4
-rw-r--r--src/usr/hwpf/hwp/build_winkle_images/build_winkle_images.C2
-rw-r--r--src/usr/hwpf/hwp/occ/occ.C47
-rw-r--r--src/usr/hwpf/hwp/start_payload/start_payload.C41
-rw-r--r--src/usr/targeting/common/util.C39
-rw-r--r--src/usr/targeting/common/xmltohb/simics_MURANO.system.xml8
-rw-r--r--src/usr/targeting/common/xmltohb/simics_VENICE.system.xml18
8 files changed, 124 insertions, 40 deletions
diff --git a/src/include/usr/targeting/common/util.H b/src/include/usr/targeting/common/util.H
index e0bb80bf5..d1e2cff0f 100644
--- a/src/include/usr/targeting/common/util.H
+++ b/src/include/usr/targeting/common/util.H
@@ -113,6 +113,11 @@ bool is_sapphire_load(void);
*/
bool is_avp_load(void);
+/**
+ * @brief Utility function to obtain the highest known address in the system
+ */
+uint64_t get_top_mem_addr(void);
+
}
#endif // __TARGETING_COMMON_UTIL_H
diff --git a/src/include/usr/vmmconst.h b/src/include/usr/vmmconst.h
index 544f0d32f..6190e719e 100644
--- a/src/include/usr/vmmconst.h
+++ b/src/include/usr/vmmconst.h
@@ -130,6 +130,10 @@ enum BlockPriority
#define VMM_OCC_COMMON_END \
(VMM_OCC_COMMON_START_ADDR + VMM_OCC_COMMON_SIZE)
+/** Total Memory required for HOMERs and OCC Common */
+#define VMM_ALL_HOMER_OCC_MEMORY_SIZE \
+ (VMM_OCC_COMMON_SIZE+VMM_HOMER_REGION_SIZE)
+
/**
* Test Constants
diff --git a/src/usr/hwpf/hwp/build_winkle_images/build_winkle_images.C b/src/usr/hwpf/hwp/build_winkle_images/build_winkle_images.C
index ff6e936f7..6a67bcd7c 100644
--- a/src/usr/hwpf/hwp/build_winkle_images/build_winkle_images.C
+++ b/src/usr/hwpf/hwp/build_winkle_images/build_winkle_images.C
@@ -382,7 +382,7 @@ void* call_host_build_winkle( void *io_pArgs )
l_memBase = get_top_mem_addr();
assert (l_memBase != 0,
"host_build_winkle: Top of memory was 0!");
- l_memBase -= VMM_HOMER_REGION_SIZE;
+ l_memBase -= VMM_ALL_HOMER_OCC_MEMORY_SIZE;
}
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"HOMER base = %x", l_memBase);
diff --git a/src/usr/hwpf/hwp/occ/occ.C b/src/usr/hwpf/hwp/occ/occ.C
index cea9c392c..e39d1e73f 100644
--- a/src/usr/hwpf/hwp/occ/occ.C
+++ b/src/usr/hwpf/hwp/occ/occ.C
@@ -36,6 +36,7 @@
#include <targeting/common/commontargeting.H>
#include <targeting/common/utilFilter.H>
#include <targeting/common/targetservice.H>
+#include <targeting/common/util.H>
// fapi support
#include <fapi.H>
@@ -185,12 +186,16 @@ namespace HBOCC
* @param[in] i_target Target proc to load
* @param[in] i_homerVirtAddrBase Virtual
* address of current
- * procs HOMER
+ * proc's HOMER
+ * @param[in] i_homerPhysAddrBase Physical
+ * address of current
+ * proc's HOMER
*
* @return errlHndl_t Error log image load failed
*/
errlHndl_t load(Target* i_target,
- void* i_homerVirtAddrBase)
+ void* i_homerVirtAddrBase,
+ uint64_t i_homerPhysAddrBase)
{
errlHndl_t l_errl = NULL;
uint64_t targHomer = 0;
@@ -202,15 +207,13 @@ namespace HBOCC
ENTER_MRK"HBOCC:load()" );
do{
-
//Figure out OCC image offset for Target
//OCC image offset = HOMER_SIZE*ProcPosition +
// OCC offset within HOMR (happens to be zero)
uint8_t tmpPos = i_target->getAttr<ATTR_POSITION>();
tmpOffset = tmpPos*VMM_HOMER_INSTANCE_SIZE +
HOMER_OFFSET_TO_OCC_IMG;
- targHomer = VMM_HOMER_REGION_START_ADDR +
- tmpOffset;
+ targHomer = i_homerPhysAddrBase + tmpOffset;
occVirt =
reinterpret_cast<void *>
(reinterpret_cast<uint64_t>(i_homerVirtAddrBase)
@@ -284,7 +287,8 @@ namespace HBOCC
// BAR3 is the OCC Common Area
// Bar size is in MB, obtained value of 8MB from Tim Hallett
const uint64_t bar3_size_MB = VMM_OCC_COMMON_SIZE_IN_MB;
- const uint64_t occ_common_addr = VMM_OCC_COMMON_START_ADDR;
+ const uint64_t occ_common_addr = i_homerPhysAddrBase
+ + VMM_HOMER_REGION_SIZE;
TRACUCOMP( g_fapiImpTd,
INFO_MRK"OCC Common Address: 0x%.8X, size=0x%.8X",
@@ -349,12 +353,16 @@ namespace HBOCC
* @param[in] i_homerVirtAddrBase Base Virtual
* address of all HOMER
* images
+ * @param[in] i_homerPhysAddrBase Base Physical
+ * address of all HOMER
+ * images
*
* @return errlHndl_t Error log image load failed
*/
errlHndl_t loadnStartOcc(Target* i_target0,
Target* i_target1,
- void* i_homerVirtAddrBase)
+ void* i_homerVirtAddrBase,
+ uint64_t i_homerPhysAddrBase)
{
errlHndl_t l_errl = NULL;
@@ -386,7 +394,8 @@ namespace HBOCC
//==============================
l_errl = load(i_target0,
- i_homerVirtAddrBase);
+ i_homerVirtAddrBase,
+ i_homerPhysAddrBase);
if(l_errl != NULL)
{
TRACFCOMP( g_fapiImpTd, ERR_MRK"loadnStartOcc: load failed for target 0" );
@@ -396,7 +405,8 @@ namespace HBOCC
if(i_target1 != NULL)
{
l_errl = load(i_target1,
- i_homerVirtAddrBase);
+ i_homerVirtAddrBase,
+ i_homerPhysAddrBase);
if(l_errl != NULL)
{
TRACFCOMP( g_fapiImpTd, ERR_MRK"loadnStartOcc: load failed for target 1" );
@@ -525,9 +535,20 @@ namespace HBOCC
assert(VMM_HOMER_REGION_SIZE <= THIRTYTWO_GB,
"loadnStartAllOccs: Unsupported HOMER Region size");
+ //If running Sapphire need to place this at the top of memory
+ uint64_t homerPhysAddrBase = VMM_HOMER_REGION_START_ADDR;
+ if(TARGETING::is_sapphire_load())
+ {
+ homerPhysAddrBase = TARGETING::get_top_mem_addr();
+ assert (homerPhysAddrBase != 0,
+ "loadnStartAllOccs: Top of memory was 0!");
+ homerPhysAddrBase -= VMM_ALL_HOMER_OCC_MEMORY_SIZE;
+ }
+ TRACFCOMP( g_fapiTd, "HOMER is at %.16X", homerPhysAddrBase );
+
//Map entire homer region into virtual memory
homerVirtAddrBase =
- mm_block_map(reinterpret_cast<void*>(VMM_HOMER_REGION_START_ADDR),
+ mm_block_map(reinterpret_cast<void*>(homerPhysAddrBase),
VMM_HOMER_REGION_SIZE);
TargetHandleList procChips;
@@ -565,7 +586,8 @@ namespace HBOCC
{
l_errl = loadnStartOcc(*itr,
NULL,
- homerVirtAddrBase);
+ homerVirtAddrBase,
+ homerPhysAddrBase);
if(l_errl)
{
TRACFCOMP( g_fapiImpTd, ERR_MRK"loadnStartAllOccs: loadnStartOcc failed!" );
@@ -614,7 +636,8 @@ namespace HBOCC
TRACUCOMP( g_fapiImpTd, INFO_MRK"loadnStartAllOccs: calling loadnStartOcc." );
l_errl = loadnStartOcc(targ0,
targ1,
- homerVirtAddrBase);
+ homerVirtAddrBase,
+ homerPhysAddrBase);
if(l_errl)
{
TRACFCOMP( g_fapiImpTd, ERR_MRK"loadnStartAllOccs: loadnStartOcc failed!" );
diff --git a/src/usr/hwpf/hwp/start_payload/start_payload.C b/src/usr/hwpf/hwp/start_payload/start_payload.C
index b55ea4cbe..86f0e39c5 100644
--- a/src/usr/hwpf/hwp/start_payload/start_payload.C
+++ b/src/usr/hwpf/hwp/start_payload/start_payload.C
@@ -224,10 +224,11 @@ void* call_host_runtime_setup( void *io_pArgs )
= sys->getAttr<TARGETING::ATTR_PAYLOAD_KIND>();
- //Only run OCC in AVP mode. Run the rest in !AVP mode
- if( is_avp_load() )
+ //Start OCC in AVP (or Sapphire mode for now)
+ if( is_avp_load() || is_sapphire_load() )
{
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "Skipping host_runtime_setup in AVP mode. Starting OCC" );
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "Starting OCC" );
+
//Load modules needed by OCC
bool occ_loaded = false;
@@ -274,8 +275,9 @@ void* call_host_runtime_setup( void *io_pArgs )
}
break;
}
- else if( is_sapphire_load() &&
- INITSERVICE::spLess())
+
+ if( is_sapphire_load() &&
+ INITSERVICE::spLess())
{
// Write the devtree out when in SPLess
// Sapphire mode
@@ -288,19 +290,16 @@ void* call_host_runtime_setup( void *io_pArgs )
break;
}
}
- else //PHYP or SAPPHIRE with FSP
+ else if( TARGETING::PAYLOAD_KIND_PHYP == payload_kind )
{
- //If PHYP then clean the PORE BARs
- if( TARGETING::PAYLOAD_KIND_PHYP == payload_kind )
+ //If PHYP then clear out the PORE BARs
+ l_err = clearPoreBars();
+ if( l_err )
{
- l_err = clearPoreBars();
- if( l_err )
- {
- break;
- }
+ break;
}
- //Update the MDRT value
+ //Update the MDRT value (for MS Dump)
l_err = RUNTIME::write_MDRT_Count();
if(l_err != NULL)
{
@@ -319,6 +318,20 @@ void* call_host_runtime_setup( void *io_pArgs )
break;
}
}
+ else if( TARGETING::PAYLOAD_KIND_NONE == payload_kind )
+ {
+ // Write the HostServices attributes into mainstore
+ // for our testcases
+ l_err = RUNTIME::populate_attributes();
+ if ( l_err )
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "Could not populate attributes" );
+ // break from do loop if error occured
+ break;
+ }
+ }
+
// - Update HDAT/DEVTREE with tpmd logs
diff --git a/src/usr/targeting/common/util.C b/src/usr/targeting/common/util.C
index a53f2c88a..d592d411f 100644
--- a/src/usr/targeting/common/util.C
+++ b/src/usr/targeting/common/util.C
@@ -32,6 +32,7 @@
//******************************************************************************
#include <targeting/common/attributes.H>
#include <targeting/common/targetservice.H>
+#include <targeting/common/utilFilter.H>
namespace TARGETING
{
@@ -194,5 +195,43 @@ bool is_avp_load(void)
|| (mnfg_flags & TARGETING::MNFG_FLAG_BIT_MNFG_HDAT_AVP_ENABLE));
}
+/**
+ * @brief Utility function to obtain the highest known address in the system
+ */
+uint64_t get_top_mem_addr(void)
+{
+ uint64_t top_addr = 0;
+
+ do
+ {
+ // Get all functional proc chip targets
+ TARGETING::TargetHandleList l_cpuTargetList;
+ TARGETING::getAllChips(l_cpuTargetList, TYPE_PROC);
+
+ for ( size_t proc = 0; proc < l_cpuTargetList.size(); proc++ )
+ {
+ TARGETING::Target * l_pProc = l_cpuTargetList[proc];
+
+ //Not checking success here as fail results in no change to
+ // top_addr
+ uint64_t l_mem_bases[8] = {0,};
+ uint64_t l_mem_sizes[8] = {0,};
+ l_pProc->tryGetAttr<TARGETING::ATTR_PROC_MEM_BASES>(l_mem_bases);
+ l_pProc->tryGetAttr<TARGETING::ATTR_PROC_MEM_SIZES>(l_mem_sizes);
+
+ for (size_t i=0; i< 8; i++)
+ {
+ if(l_mem_sizes[i]) //non zero means that there is memory present
+ {
+ top_addr = std::max(top_addr,
+ l_mem_bases[i] + l_mem_sizes[i]);
+ }
+ }
+ }
+ }while(0);
+
+ return top_addr;
+}
+
}
diff --git a/src/usr/targeting/common/xmltohb/simics_MURANO.system.xml b/src/usr/targeting/common/xmltohb/simics_MURANO.system.xml
index 61c47d4c6..0bc8b5cd5 100644
--- a/src/usr/targeting/common/xmltohb/simics_MURANO.system.xml
+++ b/src/usr/targeting/common/xmltohb/simics_MURANO.system.xml
@@ -211,7 +211,7 @@
<default>10</default>
</attribute>
<attribute><id>PM_SPIVID_FREQUENCY</id>
- <default>0b11</default>
+ <default>0x3</default>
</attribute>
<!-- End pm_plat_attributes.xml -->
<attribute><id>MAX_EXS_PER_PROC_CHIP</id>
@@ -364,7 +364,7 @@
<default>1250</default>
</attribute>
<attribute><id>PM_SPIVID_PORT_ENABLE</id>
- <default>0b100</default><!-- PORT0NONRED -->
+ <default>0x4</default><!-- PORT0NONRED -->
</attribute>
<attribute><id>PM_SLEEP_TYPE</id></attribute>
<attribute><id>PM_APSS_CHIP_SELECT</id>
@@ -1119,7 +1119,7 @@
<default>1250</default>
</attribute>
<attribute><id>PM_SPIVID_PORT_ENABLE</id>
- <default>0b000</default><!-- NONE -->
+ <default>0x0</default><!-- NONE -->
</attribute>
<attribute><id>PM_SLEEP_ENTRY</id></attribute>
<attribute><id>PM_SLEEP_EXIT</id></attribute>
@@ -2636,7 +2636,7 @@
<default>1250</default>
</attribute>
<attribute><id>PM_SPIVID_PORT_ENABLE</id>
- <default>0b000</default><!-- NONE -->
+ <default>0x0</default><!-- NONE -->
</attribute>
<attribute><id>PM_SLEEP_ENTRY</id></attribute>
<attribute><id>PM_SLEEP_EXIT</id></attribute>
diff --git a/src/usr/targeting/common/xmltohb/simics_VENICE.system.xml b/src/usr/targeting/common/xmltohb/simics_VENICE.system.xml
index 79db7a86f..0af784c87 100644
--- a/src/usr/targeting/common/xmltohb/simics_VENICE.system.xml
+++ b/src/usr/targeting/common/xmltohb/simics_VENICE.system.xml
@@ -337,7 +337,7 @@
<default>1250</default>
</attribute>
<attribute><id>PM_SPIVID_PORT_ENABLE</id>
- <default>0b111</default><!-- REDUNDANT -->
+ <default>0x7</default><!-- REDUNDANT -->
</attribute>
<attribute><id>PM_SLEEP_ENTRY</id></attribute>
<attribute><id>PM_SLEEP_EXIT</id></attribute>
@@ -1458,7 +1458,7 @@
<default>1250</default>
</attribute>
<attribute><id>PM_SPIVID_PORT_ENABLE</id>
- <default>0b111</default><!-- REDUNDANT -->
+ <default>0x7</default><!-- REDUNDANT -->
</attribute>
<attribute><id>PM_SLEEP_ENTRY</id></attribute>
<attribute><id>PM_SLEEP_EXIT</id></attribute>
@@ -2579,7 +2579,7 @@
<default>1250</default>
</attribute>
<attribute><id>PM_SPIVID_PORT_ENABLE</id>
- <default>0b111</default><!-- REDUNDANT -->
+ <default>0x7</default><!-- REDUNDANT -->
</attribute>
<attribute><id>PM_SLEEP_ENTRY</id></attribute>
<attribute><id>PM_SLEEP_EXIT</id></attribute>
@@ -3699,7 +3699,7 @@
<default>1250</default>
</attribute>
<attribute><id>PM_SPIVID_PORT_ENABLE</id>
- <default>0b111</default><!-- REDUNDANT -->
+ <default>0x7</default><!-- REDUNDANT -->
</attribute>
<attribute><id>PM_SLEEP_ENTRY</id></attribute>
<attribute><id>PM_SLEEP_EXIT</id></attribute>
@@ -4818,7 +4818,7 @@
<default>1250</default>
</attribute>
<attribute><id>PM_SPIVID_PORT_ENABLE</id>
- <default>0b111</default><!-- REDUNDANT -->
+ <default>0x7</default><!-- REDUNDANT -->
</attribute>
<attribute><id>PM_SLEEP_ENTRY</id></attribute>
<attribute><id>PM_SLEEP_EXIT</id></attribute>
@@ -5906,7 +5906,7 @@
<default>1250</default>
</attribute>
<attribute><id>PM_SPIVID_PORT_ENABLE</id>
- <default>0b111</default><!-- REDUNDANT -->
+ <default>0x7</default><!-- REDUNDANT -->
</attribute>
<attribute><id>PM_SLEEP_ENTRY</id></attribute>
<attribute><id>PM_SLEEP_EXIT</id></attribute>
@@ -6992,7 +6992,7 @@
<default>1250</default>
</attribute>
<attribute><id>PM_SPIVID_PORT_ENABLE</id>
- <default>0b111</default><!-- REDUNDANT -->
+ <default>0x7</default><!-- REDUNDANT -->
</attribute>
<attribute><id>PM_SLEEP_ENTRY</id></attribute>
<attribute><id>PM_SLEEP_EXIT</id></attribute>
@@ -8079,7 +8079,7 @@
<default>1250</default>
</attribute>
<attribute><id>PM_SPIVID_PORT_ENABLE</id>
- <default>0b111</default><!-- REDUNDANT -->
+ <default>0x7</default><!-- REDUNDANT -->
</attribute>
<attribute><id>PM_SLEEP_ENTRY</id></attribute>
<attribute><id>PM_SLEEP_EXIT</id></attribute>
@@ -16093,7 +16093,7 @@
<default>1250</default>
</attribute>
<attribute><id>PM_SPIVID_PORT_ENABLE</id>
- <default>0b111</default><!-- REDUNDANT -->
+ <default>0x7</default><!-- REDUNDANT -->
</attribute>
<attribute><id>PM_SLEEP_ENTRY</id></attribute>
<attribute><id>PM_SLEEP_EXIT</id></attribute>
OpenPOWER on IntegriCloud