From ebe311eab95449b8e69466ac4d9e14e4b91ab74e Mon Sep 17 00:00:00 2001 From: Thi Tran Date: Wed, 30 Apr 2014 19:09:56 -0500 Subject: SW259646: INITPROC: Hostboot - Missed with SW250563 Change-Id: I1b20a6154dc258a1dbbd6088bd3b505d9064353c CQ:SW259646 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/10862 Reviewed-by: Thi N. Tran Tested-by: Thi N. Tran Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/10867 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III --- .../p8_set_pore_bar/p8_set_pore_bar.C | 142 ++++++++++++++------- .../p8_set_pore_bar/p8_set_pore_bar_errors.xml | 12 +- 2 files changed, 107 insertions(+), 47 deletions(-) (limited to 'src/usr/hwpf/hwp') diff --git a/src/usr/hwpf/hwp/build_winkle_images/p8_set_pore_bar/p8_set_pore_bar.C b/src/usr/hwpf/hwp/build_winkle_images/p8_set_pore_bar/p8_set_pore_bar.C index 38f1a6d02..821a8c4ba 100644 --- a/src/usr/hwpf/hwp/build_winkle_images/p8_set_pore_bar/p8_set_pore_bar.C +++ b/src/usr/hwpf/hwp/build_winkle_images/p8_set_pore_bar/p8_set_pore_bar.C @@ -20,7 +20,7 @@ /* Origin: 30 */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: p8_set_pore_bar.C,v 1.8 2014/01/24 19:24:37 stillgs Exp $ +// $Id: p8_set_pore_bar.C,v 1.9 2014/03/07 14:38:52 stillgs Exp $ // $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/p8_set_pore_bar.C,v $ //------------------------------------------------------------------------------- // *! (C) Copyright International Business Machines Corp. 2011 @@ -644,67 +644,119 @@ fapi::ReturnCode bar_pba_slave_reset(const fapi::Target& i_target, uint32_t id) { - uint32_t poll_count = 0; pba_slvrst_t psr; fapi::ReturnCode rc; - uint32_t l_ecmdRc = 0; + uint32_t e_rc = 0; ecmdDataBufferBase data(64); + + bool poll_failure = false; + uint32_t p; + + uint8_t ec_has_pba_slvrest_bug = 0; + uint8_t attr_mpipl = 0; // Tell PBA to reset the slave, then poll for completion with timeout. // The PBA is always polled at least twice to guarantee that we always // poll once after a timeout. + + do + { + rc = FAPI_ATTR_GET(ATTR_CHIP_EC_FEATURE_HW_BUG_PBASLVRESET, + &i_target, + ec_has_pba_slvrest_bug); + if(rc) + { + FAPI_ERR("Error querying Chip EC feature: " + "ATTR_CHIP_EC_FEATURE_HW_BUG_PBASLVRESET"); + break; + } + + rc = FAPI_ATTR_GET(ATTR_IS_MPIPL, NULL, attr_mpipl); + if(rc) + { + FAPI_ERR("Error querying attribute ATTR_IS_MPIPL"); + break; + } - psr.value = 0; - psr.fields.set = PBA_SLVRST_SET(id); + psr.value = 0; + psr.fields.set = PBA_SLVRST_SET(id); - FAPI_DBG(" PBA_SLVRST%x: 0x%16llx", id, psr.value); + FAPI_DBG(" PBA_SLVRST%x: 0x%16llx", id, psr.value); - l_ecmdRc |= data.setDoubleWord(0, psr.value); - if(l_ecmdRc) - { - FAPI_ERR("Error (0x%x) manipulating ecmdDataBufferBase for PBA_SLVRST", l_ecmdRc); - rc.setEcmdError(l_ecmdRc); - return rc; - } + e_rc |= data.setDoubleWord(0, psr.value); + if(e_rc) + { + FAPI_ERR("Error (0x%x) manipulating ecmdDataBufferBase for PBA_SLVRST", e_rc); + rc.setEcmdError(e_rc); + return rc; + } - rc = fapiPutScom(i_target, PBA_SLVRST_0x00064001, data); - if (rc) - { - FAPI_ERR("Put SCOM error for PBA Slave Reset"); - } - else - { - do + rc = fapiPutScom(i_target, PBA_SLVRST_0x00064001, data); + if (rc) { - rc = fapiGetScom(i_target, PBA_SLVRST_0x00064001, data); - if (rc) + FAPI_ERR("Put SCOM error for PBA Slave Reset"); + break; + } + + // Due to HW228485, skip the check of the in-progress bits for MPIPL + // (after the PBA channels have been used at runtime) as they + // are unreliable in Murano 1.x. + if (attr_mpipl && ec_has_pba_slvrest_bug) + { + FAPI_INF("PBA Reset Polling being skipped due to MPIPL on a chip with PBA reset bug"); + } + else + { + poll_failure = true; + for (p=0; p - + @@ -65,7 +65,7 @@ RC_PROCPM_PBA_SLVRST_TIMED_OUT PBA Slave Reset timed out in p8_set_pore_bar POLLCOUNT - TIMEOUTVALUE + POLLVALUE PSR SLVID @@ -115,11 +115,19 @@ RC_PROCPM_POREBAR_IMAGE_PLACEMENT_ERROR Image address plus image size overflows PBA region in p8_set_pore_bar + + CODE + HIGH + RC_PROCPM_POREBAR_IMAGE_ADDR_ERROR Find of XIP of slw_control_vector failed in p8_set_pore_bar + + CODE + HIGH + -- cgit v1.2.1