summaryrefslogtreecommitdiffstats
path: root/src/usr/isteps/istep20
diff options
context:
space:
mode:
authorElizabeth Liner <eliner@us.ibm.com>2016-07-27 15:13:03 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2016-09-26 14:41:38 -0400
commit9b2a0194995ebfdd070cf5facb0743fb08fdc38e (patch)
treebc08dd6d1a00b5350325a531b7e96bbac2d644d6 /src/usr/isteps/istep20
parent1f8764f7c1673eb85a40ab36be14888f84e57545 (diff)
downloadtalos-hostboot-9b2a0194995ebfdd070cf5facb0743fb08fdc38e.tar.gz
talos-hostboot-9b2a0194995ebfdd070cf5facb0743fb08fdc38e.zip
Porting non-hdat from powervm-p8 into master-p8
Change-Id: I49d20a8c64bd5702aeceeff77bc5119f52996d21 RTC:156618 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/29810 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/isteps/istep20')
-rw-r--r--src/usr/isteps/istep20/call_host_load_payload.C34
1 files changed, 28 insertions, 6 deletions
diff --git a/src/usr/isteps/istep20/call_host_load_payload.C b/src/usr/isteps/istep20/call_host_load_payload.C
index 83254264b..74954bc8b 100644
--- a/src/usr/isteps/istep20/call_host_load_payload.C
+++ b/src/usr/isteps/istep20/call_host_load_payload.C
@@ -111,9 +111,11 @@ void* call_host_load_payload (void *io_pArgs)
// Get Payload base/entry from attributes
uint64_t payloadBase = sys->getAttr<TARGETING::ATTR_PAYLOAD_BASE>();
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,INFO_MRK
- "call_load_payload: Payload Base: 0x%08x, Base:0x%08x",
+ "call_load_payload: Payload Base: 0x%08x MB, Base:0x%08x",
payloadBase, (payloadBase * MEGABYTE) );
+ payloadBase = payloadBase * MEGABYTE;
+
// Load payload data in PHYP mode or in Sapphire mode
if(is_sapphire_load() || is_phyp_load())
{
@@ -180,7 +182,7 @@ static errlHndl_t load_pnor_section(PNOR::SectionId i_section,
originalPayloadSize,
i_physAddr );
- uint64_t loadAddr = NULL;
+ void * loadAddr = NULL;
// Use simics optimization if we are running under simics which has very
// slow PNOR access.
if ( Util::isSimicsRunning() )
@@ -199,9 +201,8 @@ static errlHndl_t load_pnor_section(PNOR::SectionId i_section,
// Map in the physical memory we are loading into.
// If we are not xz compressed, the uncompressedSize
// is equal to the original size.
- loadAddr = reinterpret_cast<uint64_t>(
- mm_block_map( reinterpret_cast<void*>( i_physAddr ),
- uncompressedPayloadSize ) );
+ loadAddr = mm_block_map( reinterpret_cast<void*>( i_physAddr ),
+ uncompressedPayloadSize );
// Print out inital progress bar.
#ifdef CONFIG_CONSOLE
@@ -220,7 +221,8 @@ static errlHndl_t load_pnor_section(PNOR::SectionId i_section,
const uint32_t BLOCK_SIZE = 4096;
for ( uint32_t i = 0; i < originalPayloadSize; i += BLOCK_SIZE )
{
- memcpy( reinterpret_cast<void*>( loadAddr + i ),
+ memcpy( reinterpret_cast<void*>(
+ reinterpret_cast<uint64_t>(loadAddr) + i ),
reinterpret_cast<void*>( pnorSectionInfo.vaddr + i ),
std::min( originalPayloadSize - i, BLOCK_SIZE ) );
#ifdef CONFIG_CONSOLE
@@ -304,6 +306,26 @@ static errlHndl_t load_pnor_section(PNOR::SectionId i_section,
}
+ int rc = 0;
+ rc = mm_block_unmap(reinterpret_cast<void *>(loadAddr));
+ if(rc)
+ {
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,ERR_MRK
+ "load_pnor_section: mm_block_unmap returned 1");
+
+ /*@
+ * @errortype
+ * @reasoncode fapi::RC_MM_UNMAP_ERR
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid fapi::MOD_START_XZ_PAYLOAD
+ * @devdesc mm_block_unmap returned incorrectly with 0
+ * @custdesc Error unmapping memory section
+ */
+ err = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ fapi::MOD_START_XZ_PAYLOAD,
+ fapi::RC_MM_UNMAP_ERR,
+ 0,0,0);
+ }
return err;
}
OpenPOWER on IntegriCloud