diff options
| author | Bill Schwartz <whs@us.ibm.com> | 2013-04-25 10:26:12 -0500 |
|---|---|---|
| committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-05-08 10:50:44 -0500 |
| commit | 750329e0758039e2692b3c26c28a4debb8feea1c (patch) | |
| tree | b969bc3db446d62892f20e002456cea2f7cd21ec /src/usr/hwpf/hwp/mvpd_accessors/getMBvpdPhaseRotatorData.C | |
| parent | 1d3a43698a3abc6c39098c2d4684ab47fb9a41bc (diff) | |
| download | blackbird-hostboot-750329e0758039e2692b3c26c28a4debb8feea1c.tar.gz blackbird-hostboot-750329e0758039e2692b3c26c28a4debb8feea1c.zip | |
Retrieve Phase Rotator Values from CDIMM VPD
Update cvpd dd for VSPD record, including MR keyword
Update fapiGetPlatMBvpdAccess for VSPD record
Create an accessor to retrieve Phase Rotator attributes from MR keyword
Add, but comment out FAPI_ATTR_GET changes until CDIMM vpd is valid (69935).
Change-Id: I053aac1f7477f6e9c6d53bfa68c29cb53f872034
RTC: 59048
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/4212
Reviewed-by: MIKE J. JONES <mjjones@us.ibm.com>
Reviewed-by: ADAM R. MUHLE <armuhle@us.ibm.com>
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/hwpf/hwp/mvpd_accessors/getMBvpdPhaseRotatorData.C')
| -rw-r--r-- | src/usr/hwpf/hwp/mvpd_accessors/getMBvpdPhaseRotatorData.C | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdPhaseRotatorData.C b/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdPhaseRotatorData.C new file mode 100644 index 000000000..f81554342 --- /dev/null +++ b/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdPhaseRotatorData.C @@ -0,0 +1,145 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/hwpf/hwp/mvpd_accessors/getMBvpdPhaseRotatorData.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ +// $Id: getMBvpdPhaseRotatorData.C,v 1.2 2013/04/29 16:44:00 whs Exp $ +/** + * @file getMBvpdPhaseRotatorData.C + * + * @brief get Phase Rotator Data from MBvpd MR keyword + * + */ + +#include <stdint.h> + +// fapi support +#include <fapi.H> +#include <getMBvpdPhaseRotatorData.H> + +extern "C" +{ +using namespace fapi; + +fapi::ReturnCode getMBvpdPhaseRotatorData( + const fapi::Target &i_mbaTarget, + const fapi::MBvpdPhaseRotatorData i_attr, + uint8_t (&o_val)[2]) + +{ + + //MR keyword layout + const uint8_t NUM_MBA = 2; //There are 2 MBAs per Centaur memory buffer + const uint8_t NUM_PORTS = 2; //Each MBA has 2 ports + const uint8_t PHASE_ROTATOR_ATTR_SIZE = 64; //Each port has 64 bytes + // for attributes + struct port_attributes + { + uint8_t port_attr[PHASE_ROTATOR_ATTR_SIZE]; + }; + struct mba_attributes + { + port_attributes mba_port[NUM_PORTS]; + }; + struct mr_keyword + { + mba_attributes mb_mba[NUM_MBA]; + }; + // The actual size of the MR keword is 255 bytes, which is one byte short + // of the mr_keyword struct. One byte is used for the size in the vpd. + // As long as there is at least one reserved attribute, then all will fit. + + fapi::ReturnCode l_fapirc; + fapi::Target l_mbTarget; + uint8_t l_pos = NUM_PORTS; //initialize to out of range value (+1) + mr_keyword * l_pMrBuffer = NULL; // MBvpd MR keyword buffer + uint32_t l_MrBufsize = sizeof(mr_keyword); + + FAPI_DBG("getMBvpdPhaseRotatorData: entry attr=0x%02x ", + i_attr ); + + do { + // find the position of the passed mba on the centuar + l_fapirc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS,&i_mbaTarget,l_pos); + if (l_fapirc) + { + FAPI_ERR(" getMBvpdPhaseRotatorData: Get MBA position failed "); + break; // break out with fapirc + } + FAPI_DBG("getMBvpdPhaseRotatorData: mba %s position=%d", + i_mbaTarget.toEcmdString(), + l_pos); + + // find the Centaur memmory buffer from the passed MBA + l_fapirc = fapiGetParentChip (i_mbaTarget,l_mbTarget); + if (l_fapirc) + { + FAPI_ERR("getMBvpdPhaseRotatorData: Finding the parent mb failed "); + break; // break out with fapirc + } + FAPI_DBG("getMBvpdPhaseRotatorData: parent path=%s ", + l_mbTarget.toEcmdString() ); + + // Read the MR keyword field + l_pMrBuffer = new mr_keyword; + + l_fapirc = fapiGetMBvpdField(fapi::MBVPD_RECORD_VSPD, + fapi::MBVPD_KEYWORD_MR, + l_mbTarget, + reinterpret_cast<uint8_t *>(l_pMrBuffer), + l_MrBufsize); + if (l_fapirc) + { + FAPI_ERR("getMBvpdPhaseRotatorData: Read of MR keyword failed"); + break; // break out with fapirc + } + + // Check that sufficient MR was returned. + uint32_t l_sizeNeeded = l_pos*sizeof(mba_attributes)+ + sizeof(port_attributes)+i_attr; + if (l_MrBufsize < l_sizeNeeded ) + { + FAPI_ERR("getMBvpdPhaseRotatorData:" + " less MR keyword returned than expected %d < %d", + l_MrBufsize, l_sizeNeeded); + FAPI_SET_HWP_ERROR(l_fapirc, RC_MBVPD_INSUFFICIENT_MR_KEYWORD ); + break; // break out with fapirc + } + + // return the requested attributes from the MR keyword buffer + for (uint8_t l_port=0 ; l_port<NUM_PORTS ; l_port++) + { + o_val[l_port]=l_pMrBuffer-> + mb_mba[l_pos].mba_port[l_port].port_attr[i_attr]; + } + + } while (0); + + delete l_pMrBuffer; + l_pMrBuffer = NULL; + + FAPI_DBG("getMBvpdPhaseRotatorData: exit rc=0x%08x (0x%02x,0x%02x)", + static_cast<uint32_t>(l_fapirc), + o_val[0],o_val[1] ); + + return l_fapirc; +} + +} // extern "C" |

