diff options
author | Dan Crowell <dcrowell@us.ibm.com> | 2013-10-11 10:32:06 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-10-14 18:35:57 -0500 |
commit | cb1a0e211ff921287c073028839a410236fe61c8 (patch) | |
tree | da5ed18ddf738029299b02d407522cc158dab72b /src | |
parent | b25e9ea38a25fa0de1339e1eeec15071ba332c04 (diff) | |
download | talos-hostboot-cb1a0e211ff921287c073028839a410236fe61c8.tar.gz talos-hostboot-cb1a0e211ff921287c073028839a410236fe61c8.zip |
Fix for SPIRA-H format
Change-Id: I2f561a4f17731cdcfb5fc263820fb286d2e389f2
RTC: 71881
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/6645
Tested-by: Jenkins Server
Reviewed-by: Douglas R. Gilbert <dgilbert@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/usr/runtime/hdatservice.C | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/src/usr/runtime/hdatservice.C b/src/usr/runtime/hdatservice.C index 15ccf6953..5044da7be 100644 --- a/src/usr/runtime/hdatservice.C +++ b/src/usr/runtime/hdatservice.C @@ -1007,7 +1007,7 @@ errlHndl_t hdatService::findSpira( void ) // is loaded at relative memory address 0x0 hdatNaca_t* naca = reinterpret_cast<hdatNaca_t*> (HDAT_NACA_OFFSET + payload_base); - TRACFCOMP( g_trac_runtime, "NACA=%p", naca ); + TRACFCOMP( g_trac_runtime, "NACA=%.X->%p", HDAT_NACA_OFFSET, naca ); // Do some sanity checks on the NACA if( naca->nacaPhypPciaSupport != 1 ) @@ -1052,7 +1052,7 @@ errlHndl_t hdatService::findSpira( void ) // pointer is also relative to PHYP's zero iv_spiraH = reinterpret_cast<hdatSpira_t*> (naca->spiraH + payload_base); - TRACFCOMP( g_trac_runtime, "SPIRA-H=%p", iv_spiraH ); + TRACFCOMP( g_trac_runtime, "SPIRA-H=%X->%p", naca->spiraH, iv_spiraH ); // Check the headers and version info errhdl = check_header( &(iv_spiraH->hdatHDIF), @@ -1068,9 +1068,10 @@ errlHndl_t hdatService::findSpira( void ) (&(iv_spiraH->hdatDataArea[SPIRAH_HOST_DATA_AREAS])); TRACUCOMP( g_trac_runtime, "SPIRA-S tuple offset=%.8X", tuple_addr ); // need to offset from virtual zero - tuple_addr += payload_base; + //tuple_addr += payload_base; hdat5Tuple_t* tuple = reinterpret_cast<hdat5Tuple_t*>(tuple_addr); TRACUCOMP( g_trac_runtime, "SPIRA-S tuple=%p", tuple ); + errlHndl_t errhdl_s = check_tuple( SPIRA_S, tuple ); if( errhdl_s ) @@ -1081,20 +1082,29 @@ errlHndl_t hdatService::findSpira( void ) } else { - iv_spiraS = reinterpret_cast<hdatSpira_t*> - (tuple->hdatAbsAddr + payload_base); - TRACFCOMP( g_trac_runtime, "SPIRA-S=%p", iv_spiraS ); - - // Check the headers and version info - errhdl_s = check_header( &(iv_spiraH->hdatHDIF), - SPIRAS_HEADER ); + uint64_t tmp_addr = 0; + errhdl_s = getSpiraTupleVA( tuple, tmp_addr ); if( errhdl_s ) { - TRACFCOMP( g_trac_runtime, "SPIRA-S is invalid, will try legacy SPIRA" ); - RUNTIME::UdNaca(naca).addToLog(errhdl_s); - RUNTIME::UdSpira(iv_spiraS).addToLog(errhdl_s); + TRACFCOMP( g_trac_runtime, "Couldn't map SPIRA-S, will try legacy SPIRA" ); iv_spiraS = NULL; } + else + { + iv_spiraS = reinterpret_cast<hdatSpira_t*>(tmp_addr); + TRACFCOMP( g_trac_runtime, "SPIRA-S=%p", iv_spiraS ); + + // Check the headers and version info + errhdl_s = check_header( &(iv_spiraH->hdatHDIF), + SPIRAS_HEADER ); + if( errhdl_s ) + { + TRACFCOMP( g_trac_runtime, "SPIRA-S is invalid, will try legacy SPIRA" ); + RUNTIME::UdNaca(naca).addToLog(errhdl_s); + RUNTIME::UdSpira(iv_spiraS).addToLog(errhdl_s); + iv_spiraS = NULL; + } + } } } @@ -1102,7 +1112,7 @@ errlHndl_t hdatService::findSpira( void ) // pointer is also relative to PHYP's zero iv_spiraL = reinterpret_cast<hdatSpira_t*> (naca->spiraOld + payload_base); - TRACFCOMP( g_trac_runtime, "Legacy SPIRA=%p", iv_spiraL ); + TRACFCOMP( g_trac_runtime, "Legacy SPIRA=%X->%p", naca->spiraOld, iv_spiraL ); // Make sure the SPIRA is valid errhdl_l = verify_hdat_address( iv_spiraL, @@ -1125,6 +1135,11 @@ errlHndl_t hdatService::findSpira( void ) TRACFCOMP( g_trac_runtime, "Legacy SPIRA is not filled in, using SPIRA-H/S" ); iv_spiraL = NULL; } + else + { + TRACFCOMP( g_trac_runtime, "Legacy SPIRA is filled in so we'll use it" ); + iv_spiraS = NULL; + } } // Make sure we have a good SPIRA somewhere |