summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/hwpf')
-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
3 files changed, 63 insertions, 27 deletions
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
OpenPOWER on IntegriCloud