From 01e0ceedf0ca40293998558e4577ba0152a4ab73 Mon Sep 17 00:00:00 2001 From: Prasad Bg Ranganath Date: Thu, 16 Feb 2017 02:21:43 -0600 Subject: SBE:putring - fix risk level tor offset Change-Id: Iceae19d79cb30df8d23da0042ca7dd76328487da Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/36548 Tested-by: Jenkins Server Tested-by: FSP CI Jenkins Reviewed-by: Sachin Gupta --- src/hwpf/src/plat_ring_traverse.C | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/hwpf/src/plat_ring_traverse.C b/src/hwpf/src/plat_ring_traverse.C index 0c7c8df9..9b4466a7 100644 --- a/src/hwpf/src/plat_ring_traverse.C +++ b/src/hwpf/src/plat_ring_traverse.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER sbe Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2016 */ +/* Contributors Listed Below - COPYRIGHT 2016,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -145,6 +145,8 @@ fapi2::ReturnCode getRS4ImageFromTor( uint8_t l_chipletID = i_target.getChipletNumber(); uint16_t l_cpltRingVariantSz = 0; uint32_t l_sectionOffset = 0; + uint8_t l_CC_offset = 0; + uint8_t l_RL_offset = 1; switch(l_chipLetType) { case PERV_TYPE: // PERV @@ -349,6 +351,8 @@ fapi2::ReturnCode getRS4ImageFromTor( l_sectionOffset = i_sectionTOR->TOC_EQ_COMMON_RING; + l_CC_offset = 1; + l_RL_offset = 2; if(INSTANCE_RING == l_ringType) { l_sectionOffset = i_sectionTOR->TOC_EQ_INSTANCE_RING; @@ -363,6 +367,8 @@ fapi2::ReturnCode getRS4ImageFromTor( sizeof(l_cpltRingVariantSz)); l_sectionOffset = i_sectionTOR->TOC_EC_COMMON_RING; + l_CC_offset = 1; + l_RL_offset = 2; if(INSTANCE_RING == l_ringType) { l_sectionOffset = i_sectionTOR->TOC_EC_INSTANCE_RING; @@ -431,7 +437,7 @@ fapi2::ReturnCode getRS4ImageFromTor( // 3. Risk Level - SBE_TRACE ("ring tor address %08X\n",(uint32_t)l_ringTorAddr); + SBE_TRACE ("ring tor address %08X",(uint32_t)l_ringTorAddr); // If there are non-base variants of the ring, we'll have to check // attributes to determine the sequence of ring apply. @@ -443,21 +449,25 @@ fapi2::ReturnCode getRS4ImageFromTor( fapi2::Target (), l_iplPhase); - // 4 : Cache Contained mode - if(CACHE_CONTAINED_MODE == l_iplPhase) + // 4 : Use Cache Contained mode _if_ present, else fall back + // to normal ring + if((CACHE_CONTAINED_MODE == l_iplPhase) + && *(l_ringTorAddr + l_CC_offset)) { - l_ringTorAddr += CACHE_CONTAINED_MODE_OFFSET_IN_TOR; + l_ringTorAddr += l_CC_offset; } else { // Check if this is risk-level IPL + // _if_ present, else fall back to normal ring uint8_t l_riskLevel; FAPI_ATTR_GET(fapi2::ATTR_RISK_LEVEL, fapi2::Target (), l_riskLevel); - if(RISK_LEVEL_MODE == l_riskLevel) + if((RISK_LEVEL_MODE == l_riskLevel) && + *(l_ringTorAddr + l_RL_offset)) { - l_ringTorAddr += RISK_LEVEL_MODE_OFFSET_IN_TOR; + l_ringTorAddr += l_RL_offset; } } } -- cgit v1.2.1