summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdTermData.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/hwpf/hwp/mvpd_accessors/getMBvpdTermData.C')
-rw-r--r--src/usr/hwpf/hwp/mvpd_accessors/getMBvpdTermData.C1444
1 files changed, 0 insertions, 1444 deletions
diff --git a/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdTermData.C b/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdTermData.C
deleted file mode 100644
index 54a2443ff..000000000
--- a/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdTermData.C
+++ /dev/null
@@ -1,1444 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mvpd_accessors/getMBvpdTermData.C $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2013,2014 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* You may obtain a copy of the License at */
-/* */
-/* http://www.apache.org/licenses/LICENSE-2.0 */
-/* */
-/* Unless required by applicable law or agreed to in writing, software */
-/* distributed under the License is distributed on an "AS IS" BASIS, */
-/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
-/* implied. See the License for the specific language governing */
-/* permissions and limitations under the License. */
-/* */
-/* IBM_PROLOG_END_TAG */
-// $Id: getMBvpdTermData.C,v 1.18 2014/11/24 15:47:48 cswenson Exp $
-/**
- * @file getMBvpdTermData.C
- *
- * @brief get Termination Data from MBvpd MT keyword
- *
- */
-#include <stdint.h>
-
-// fapi support
-#include <fapi.H>
-#include <fapiUtil.H>
-#include <getMBvpdTermData.H>
-#include <getMBvpdPhaseRotatorData.H>
-#include <getMBvpdVersion.H>
-
-// Used to ensure attribute enums are equal at compile time
-class Error_ConstantsDoNotMatch;
-template<const bool MATCH> void checkConstantsMatch()
-{
- Error_ConstantsDoNotMatch();
-}
-template <> inline void checkConstantsMatch<true>() {}
-
-extern "C"
-{
-using namespace fapi;
-
-// local procedures
-fapi::ReturnCode translate_DRAM_RON (const fapi::MBvpdTermData i_attr,
- uint8_t & io_value);
-fapi::ReturnCode translate_DRAM_RTT_NOM (const fapi::MBvpdTermData i_attr,
- uint8_t & io_value);
-fapi::ReturnCode translate_DRAM_RTT_WR (const fapi::MBvpdTermData i_attr,
- uint8_t & io_value);
-fapi::ReturnCode translate_DRAM_WR_VREF (const fapi::MBvpdTermData i_attr,
- uint32_t & io_value);
-fapi::ReturnCode translate_CEN_RD_VREF (const fapi::MBvpdTermData i_attr,
- uint32_t & io_value);
-fapi::ReturnCode translate_SLEW_RATE (const fapi::MBvpdTermData i_attr,
- uint8_t & io_value);
-
-// ----------------------------------------------------------------------------
-// HWP accessor to get Termination Data for MBvpd MT keyword
-// ----------------------------------------------------------------------------
-fapi::ReturnCode getMBvpdTermData(
- const fapi::Target &i_mbaTarget,
- const fapi::MBvpdTermData i_attr,
- void * o_pVal,
- const uint32_t i_valSize)
-{
- //MT keyword layout
- //The following constants are for readibility. They need to stay in sync
- // with the attributes and vpd 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 NUM_DIMMS = 2; //Each port has 2 DIMMs
- const uint8_t NUM_RANKS = 4; //Number of ranks
- const uint8_t TERM_DATA_ATTR_SIZE = 64; //Each port has 64 bytes
- // for attributes
- struct port_attributes
- {
- uint8_t port_attr[TERM_DATA_ATTR_SIZE];
- };
- struct mba_attributes
- {
- port_attributes mba_port[NUM_PORTS];
- };
- struct mt_keyword
- {
- mba_attributes mb_mba[NUM_MBA];
- };
- // The actual size of the MT keyword is 255 bytes, which is one byte short
- // of the mt_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.
- const uint32_t MT_KEYWORD_SIZE = 255; // keyword size
-
- fapi::ReturnCode l_fapirc;
- fapi::Target l_mbTarget;
- uint8_t l_pos = NUM_PORTS; //initialize to out of range value (+1)
- mt_keyword * l_pMtBuffer = NULL; // MBvpd MT keyword buffer
- uint32_t l_MtBufsize = sizeof(mt_keyword);
- uint32_t l_sizeCheck = 0; //invalid size
- // Mask off to isolate vpd offset. MBvpdTermData value is offset into vpd.
- // Also protects against indexing out of bounds
- uint8_t l_attrOffset = i_attr & TERM_DATA_OFFSET_MASK;
-
- FAPI_DBG("getMBvpdTermData: entry attr=0x%02x, size=%d ",
- i_attr,i_valSize );
-
- do {
- // validate proper output variable size for the attribute
- switch (i_attr)
- {
- case TERM_DATA_DRAM_RON:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_DRAM_RON>::Type);
- break;
- case TERM_DATA_DRAM_RTT_NOM:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_DRAM_RTT_NOM>::Type);
- break;
- case TERM_DATA_DRAM_RTT_WR:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_DRAM_RTT_WR>::Type);
- break;
- case TERM_DATA_ODT_RD:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_ODT_RD>::Type);
- break;
- case TERM_DATA_ODT_WR:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_ODT_WR>::Type);
- break;
- case TERM_DATA_DIMM_RCD_IBT:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_DIMM_RCD_IBT>::Type);
- break;
- case TERM_DATA_DIMM_RCD_OUTPUT_TIMING:
- l_sizeCheck=
- sizeof
- (MBvpdTermDataSize<TERM_DATA_DIMM_RCD_OUTPUT_TIMING>::Type);
- break;
- case TERM_DATA_CEN_RD_VREF:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_CEN_RD_VREF>::Type);
- break;
- case TERM_DATA_DRAM_WR_VREF:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_DRAM_WR_VREF>::Type);
- break;
- case TERM_DATA_DRAM_WRDDR4_VREF:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_DRAM_WRDDR4_VREF>::Type);
- break;
- case TERM_DATA_CEN_RCV_IMP_DQ_DQS:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_CEN_RCV_IMP_DQ_DQS>::Type);
- break;
- case TERM_DATA_CEN_DRV_IMP_DQ_DQS:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_CEN_DRV_IMP_DQ_DQS>::Type);
- break;
- case TERM_DATA_CEN_DRV_IMP_CNTL:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_CEN_DRV_IMP_CNTL>::Type);
- break;
- case TERM_DATA_CEN_DRV_IMP_ADDR:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_CEN_DRV_IMP_ADDR>::Type);
- break;
- case TERM_DATA_CEN_DRV_IMP_CLK:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_CEN_DRV_IMP_CLK>::Type);
- break;
- case TERM_DATA_CEN_DRV_IMP_SPCKE:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_CEN_DRV_IMP_SPCKE>::Type);
- break;
- case TERM_DATA_CEN_SLEW_RATE_DQ_DQS:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_CEN_SLEW_RATE_DQ_DQS>::Type);
- break;
- case TERM_DATA_CEN_SLEW_RATE_CNTL:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_CEN_SLEW_RATE_CNTL>::Type);
- break;
- case TERM_DATA_CEN_SLEW_RATE_ADDR:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_CEN_SLEW_RATE_ADDR>::Type);
- break;
- case TERM_DATA_CEN_SLEW_RATE_CLK:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_CEN_SLEW_RATE_CLK>::Type);
- break;
- case TERM_DATA_CEN_SLEW_RATE_SPCKE:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_CEN_SLEW_RATE_SPCKE>::Type);
- break;
- case TERM_DATA_CKE_PRI_MAP:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_CKE_PRI_MAP>::Type);
- break;
- case TERM_DATA_CKE_PWR_MAP:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_CKE_PWR_MAP>::Type);
- break;
- case TERM_DATA_RLO:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_RLO>::Type);
- break;
- case TERM_DATA_WLO:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_WLO>::Type);
- break;
- case TERM_DATA_GPO:
- l_sizeCheck=
- sizeof (MBvpdTermDataSize<TERM_DATA_GPO>::Type);
- break;
- default: // Hard to do, but needs to be caught
- FAPI_ERR("getMBvpdTermData: invalid attribute ID 0x%02x",
- i_attr);
- const fapi::MBvpdTermData & ATTR_ID = i_attr;
- FAPI_SET_HWP_ERROR(l_fapirc, RC_MBVPD_INVALID_ATTRIBUTE_ID);
- break; // break out with fapirc
- }
- if (l_fapirc)
- {
- break; // break out with fapirc
- }
- if (l_sizeCheck != i_valSize)
- {
- FAPI_ERR("getMBvpdTermData:"
- " output variable size does not match expected %d != %d",
- l_sizeCheck, i_valSize);
- const uint32_t & EXPECTED_SIZE = l_sizeCheck;
- const uint32_t & PASSED_SIZE = i_valSize;
- FAPI_SET_HWP_ERROR(l_fapirc, RC_MBVPD_INVALID_OUTPUT_VARIABLE_SIZE);
- break; // break out with fapirc
- }
-
- // 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(" getMBvpdTermData: Get MBA position failed ");
- break; // break out with fapirc
- }
- FAPI_DBG("getMBvpdTermData: 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("getMBvpdTermData: Finding the parent mb failed ");
- break; // break out with fapirc
- }
- FAPI_DBG("getMBvpdTermData: parent path=%s ",
- l_mbTarget.toEcmdString() );
-
- // Check if the old vpd layout is different for this attr
- if (TERM_DATA_CHK60 & i_attr) // need to check vpd version for this attr
- {
- uint32_t l_vpdVersion = 0;
- const uint32_t VPD_VERSION_V60=0x3130; // Version 6.0 is ascii "10"
-
- // get vpd version
- FAPI_EXEC_HWP(l_fapirc,
- getMBvpdVersion,
- i_mbaTarget,
- l_vpdVersion);
-
- if (l_fapirc)
- {
- FAPI_ERR("getMBvpdTermData: getMBvpdVersion failed");
- break; // break out with fapirc
- }
- FAPI_DBG("getMBvpdTermData: vpd version=0x%08x",
- l_vpdVersion);
-
- // Check if work around needed
- if (l_vpdVersion < VPD_VERSION_V60)
- {
- MBvpdPhaseRotatorData l_phaseRotAttr = PHASE_ROT_INVALID;
-
- if (TERM_DATA_RLO == i_attr)
- {
- l_phaseRotAttr = PHASE_ROT_RLO_V53;
- }
- else if (TERM_DATA_WLO == i_attr)
- {
- l_phaseRotAttr = PHASE_ROT_WLO_V53;
- }
- else if (TERM_DATA_GPO == i_attr)
- {
- l_phaseRotAttr = PHASE_ROT_GPO_V53;
- }
- else // not expected
- {
- FAPI_ERR("getMBvpdTermData: invalid attribute ID 0x%02x",
- i_attr);
- const fapi::MBvpdTermData & ATTR_ID = i_attr;
- FAPI_SET_HWP_ERROR(l_fapirc, RC_MBVPD_INVALID_ATTRIBUTE_ID);
- break; // break out with fapirc
- }
-
- // Retrieve these attributes from the MR keyword
- FAPI_EXEC_HWP(l_fapirc,
- getMBvpdPhaseRotatorData,
- i_mbaTarget,
- l_phaseRotAttr,
- *((uint8_t (*)[2])o_pVal));
- break; // break out with Phase Rotator data fapirc
- }
- }
-
- // Read the MT keyword field
- l_pMtBuffer = new mt_keyword;
-
- uint8_t l_customDimm = 0;
-
- l_fapirc = FAPI_ATTR_GET(ATTR_EFF_CUSTOM_DIMM,&i_mbaTarget,
- l_customDimm);
- if(l_fapirc)
- {
- FAPI_ERR("getMBvpdTermData: Read of Custom Dimm failed");
- break;
- }
-
- //if custom_dimm = 0, use isdimm
- if(fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_NO == l_customDimm)
- {
- //MT keyword is located in the SPDX record,
- //and found by using ATTR_SPD_NUM_RANKS
- //T1: one dimm, rank 1 T2: one dimm, rank 2 T4: one dimm, rank 4
- //T5: two dimm, rank 1 T6: two dimm, rank 2 T8: two dimm, rank 4
- fapi::ATTR_SPD_NUM_RANKS_Type l_spd_dimm_ranks[2][2] = {
- {fapi::ENUM_ATTR_SPD_NUM_RANKS_RX,
- fapi::ENUM_ATTR_SPD_NUM_RANKS_RX},
- {fapi::ENUM_ATTR_SPD_NUM_RANKS_RX,
- fapi::ENUM_ATTR_SPD_NUM_RANKS_RX}
- };
- uint8_t l_mba_port;
- uint8_t l_mba_dimm;
-
- std::vector<fapi::Target> l_target_dimm_array;
- l_fapirc = fapiGetAssociatedDimms(i_mbaTarget, l_target_dimm_array,
- fapi::TARGET_STATE_PRESENT);
- if(l_fapirc)
- {
- FAPI_ERR("getMBvpdTermData: read of Associated Dimms failed");
- break;
- }
-
- for(uint8_t l_dimm_index=0; l_dimm_index<l_target_dimm_array.size();
- l_dimm_index+=1)
- {
- l_fapirc = FAPI_ATTR_GET(ATTR_MBA_PORT,
- &l_target_dimm_array[l_dimm_index],
- l_mba_port);
- if(l_fapirc)
- {
- FAPI_ERR("getMBvpdTermData: read of ATTR_MBA_PORT failed");
- break;
- }
- l_fapirc = FAPI_ATTR_GET(ATTR_MBA_DIMM,
- &l_target_dimm_array[l_dimm_index],
- l_mba_dimm);
- if(l_fapirc)
- {
- FAPI_ERR("getMBvpdTermData: read of ATTR_MBA_DIMM failed");
- break;
- }
-
- l_fapirc = FAPI_ATTR_GET(ATTR_SPD_NUM_RANKS,
- &l_target_dimm_array[l_dimm_index],
- l_spd_dimm_ranks[l_mba_port][l_mba_dimm]);
- if(l_fapirc)
- {
- FAPI_ERR("getMBvpdTermData: read of ATTR_SPD_NUM_RANKS failed");
- break;
- }
- }
- if(l_fapirc)
- {
- break;
- }
-
- fapi::ATTR_SPD_NUM_RANKS_Type l_rankCopy =
- fapi::ENUM_ATTR_SPD_NUM_RANKS_RX;
- uint8_t l_dimmInvalid = 0;
- bool l_double_drop = false;
- /* Mismatched rank numbers between the paired ports is an error
- * that should deconfigure the parent MBA so the data for that
- * MBA should never be fetched. The same is for mismatched slot 1
- * and slot 0 on the same port
- */
-
- //single or double drop
- if( (l_spd_dimm_ranks[0][1] == fapi::ENUM_ATTR_SPD_NUM_RANKS_RX)
- && (l_spd_dimm_ranks[1][1] == fapi::ENUM_ATTR_SPD_NUM_RANKS_RX) )
- {
- //if the two match, it's a valid case.
- if(l_spd_dimm_ranks[0][0] == l_spd_dimm_ranks[1][0])
- {
- //0000, set to 1
- if(l_spd_dimm_ranks[0][0]
- == fapi::ENUM_ATTR_SPD_NUM_RANKS_RX)
- {
- l_rankCopy = 1;
- //throwing error for all empty
- FAPI_ERR("No dimm's found");
- const uint8_t DIMM_P0S0 = l_spd_dimm_ranks[0][0];
- const uint8_t DIMM_P0S1 = l_spd_dimm_ranks[0][1];
- const uint8_t DIMM_P1S0 = l_spd_dimm_ranks[1][0];
- const uint8_t DIMM_P1S1 = l_spd_dimm_ranks[1][1];
- FAPI_SET_HWP_ERROR(l_fapirc, RC_MBVPD_DIMMS_NOT_FOUND);
- break;
-
- //either 0101,0202,0404.
- }
- else
- {
- l_rankCopy = l_spd_dimm_ranks[0][0];
- }
- }else
- {
- //throwing error for invalid dimm combination
- l_dimmInvalid = 1;
- }
- //if all 4 are the same, its double ranked
- }else if(l_spd_dimm_ranks[0][1] == l_spd_dimm_ranks[0][0] &&
- l_spd_dimm_ranks[1][1] == l_spd_dimm_ranks[1][0] &&
- l_spd_dimm_ranks[0][1] == l_spd_dimm_ranks[1][1])
- {
- //either 1111,2222,4444
- l_rankCopy = l_spd_dimm_ranks[0][0];
- l_double_drop = true;
- }else
- {
- //throwing error for invalid dimm combination
- l_dimmInvalid = 1;
- }
-
- if(l_dimmInvalid)
- {
- FAPI_ERR("There is an invalid combination of dimm's found");
- const uint8_t INVALID_DIMM_P0S0 = l_spd_dimm_ranks[0][0];
- const uint8_t INVALID_DIMM_P0S1 = l_spd_dimm_ranks[0][1];
- const uint8_t INVALID_DIMM_P1S0 = l_spd_dimm_ranks[1][0];
- const uint8_t INVALID_DIMM_P1S1 = l_spd_dimm_ranks[1][1];
- const fapi::Target & MBA = i_mbaTarget;
- FAPI_SET_HWP_ERROR(l_fapirc, RC_MBVPD_INVALID_DIMM_FOUND);
- break;
- }
-
- fapi::MBvpdKeyword l_MT_Keyword = fapi::MBVPD_KEYWORD_T1;
- switch (l_rankCopy)
- {
- case fapi::ENUM_ATTR_SPD_NUM_RANKS_R1:
- if( l_double_drop ) {
- l_MT_Keyword = fapi::MBVPD_KEYWORD_T5;
- } else {
- l_MT_Keyword = fapi::MBVPD_KEYWORD_T1;
- }
- break;
- case fapi::ENUM_ATTR_SPD_NUM_RANKS_R2:
- if( l_double_drop ) {
- l_MT_Keyword = fapi::MBVPD_KEYWORD_T6;
- } else {
- l_MT_Keyword = fapi::MBVPD_KEYWORD_T2;
- }
- break;
- case fapi::ENUM_ATTR_SPD_NUM_RANKS_R4:
- if( l_double_drop ) {
- l_MT_Keyword = fapi::MBVPD_KEYWORD_T8;
- } else {
- l_MT_Keyword = fapi::MBVPD_KEYWORD_T4;
- }
- break;
- default:
- FAPI_ERR("Invalid dimm rank : 0x%02x",l_rankCopy);
- const uint8_t & RANK_NUM = l_rankCopy;
- FAPI_SET_HWP_ERROR(l_fapirc, RC_MBVPD_INVALID_MT_DATA);
- break;
- }
- if(l_fapirc)
- {
- break;
- }
-
- l_fapirc = fapiGetMBvpdField(fapi::MBVPD_RECORD_SPDX,
- l_MT_Keyword,
- l_mbTarget,
- reinterpret_cast<uint8_t *>(l_pMtBuffer),
- l_MtBufsize);
- if (l_fapirc)
- {
- FAPI_ERR("getMBvpdTermData: Read of Tx (%d) keyword failed",l_MT_Keyword);
- break; // break out with fapirc
- }
- //else custom_dimm is 1 and we need to use the CDIMM
- }
- else
- {
- l_fapirc = fapiGetMBvpdField(fapi::MBVPD_RECORD_VSPD,
- fapi::MBVPD_KEYWORD_MT,
- l_mbTarget,
- reinterpret_cast<uint8_t *>(l_pMtBuffer),
- l_MtBufsize);
- if (l_fapirc)
- {
- FAPI_ERR("getMBvpdTermData: Read of MT keyword failed");
- break; // break out with fapirc
- }
- }
-
-
- // Check that sufficient MT was returned.
- if (l_MtBufsize < MT_KEYWORD_SIZE )
- {
- FAPI_ERR("getMBvpdTermData:"
- " less MT keyword returned than expected %d < %d",
- l_MtBufsize, MT_KEYWORD_SIZE);
- const uint32_t & KEYWORD = fapi::MBVPD_KEYWORD_MT;
- const uint32_t & RETURNED_SIZE = l_MtBufsize;
- const fapi::Target & CHIP_TARGET = l_mbTarget;
- FAPI_SET_HWP_ERROR(l_fapirc, RC_MBVPD_INSUFFICIENT_VPD_RETURNED );
- break; // break out with fapirc
- }
-
- // return data according to the attribute varible type
- // The value of the attribute is used as an index into the MT buffer
- switch (i_attr)
- {
- // return the uint8_t [2][2] attributes from the MT keyword buffer
- // requires translation
- case TERM_DATA_DRAM_RON:
- {
- uint8_t (* l_pVal)[2][2] = (uint8_t (*)[2][2])o_pVal;
- uint8_t l_value = 0;
-
- for (uint8_t l_port=0; l_port<NUM_PORTS;l_port++)
- {
- for (uint8_t l_j=0; l_j<NUM_DIMMS; l_j++)
- {
- l_value = l_pMtBuffer->
- mb_mba[l_pos].mba_port[l_port].port_attr[l_attrOffset+l_j];
- l_fapirc = translate_DRAM_RON(i_attr,l_value);
- if (l_fapirc)
- {
- break; // break with error
- }
- (*l_pVal)[l_port][l_j] = l_value;
- }
- if (l_fapirc)
- {
- break; // break with error
- }
- }
- break;
- }
- // return the uint8_t [2][2][4] attributes from the MT keyword
- // requires translation
- case TERM_DATA_DRAM_RTT_NOM:
- case TERM_DATA_DRAM_RTT_WR:
- {
- uint8_t (* l_pVal)[2][2][4] = (uint8_t (*)[2][2][4])o_pVal;
- uint8_t l_value = 0;
-
- for (uint8_t l_port=0; l_port<NUM_PORTS;l_port++)
- {
- for (uint8_t l_j=0; l_j<NUM_DIMMS; l_j++)
- {
- for (uint8_t l_k=0; l_k<NUM_RANKS; l_k++)
- {
- l_value = l_pMtBuffer->
- mb_mba[l_pos].mba_port[l_port].port_attr[l_attrOffset+(l_j*NUM_RANKS)+l_k];
- if (TERM_DATA_DRAM_RTT_NOM == i_attr)
- {
- l_fapirc=translate_DRAM_RTT_NOM(i_attr,l_value);
- }
- else
- {
- l_fapirc=translate_DRAM_RTT_WR(i_attr,l_value);
- }
- if (l_fapirc)
- {
- break; // break with error
- }
- (*l_pVal)[l_port][l_j][l_k] = l_value;
- }
- if (l_fapirc)
- {
- break; // break with error
- }
- }
- if (l_fapirc)
- {
- break; // break with error
- }
- }
- break;
- }
- // return the uint8_t [2][2][4] attributes from the MT keyword
- case TERM_DATA_ODT_RD:
- case TERM_DATA_ODT_WR:
- {
- uint8_t (* l_pVal)[2][2][4] = (uint8_t (*)[2][2][4])o_pVal;
- for (uint8_t l_port=0; l_port<NUM_PORTS;l_port++)
- {
- for (uint8_t l_j=0; l_j<NUM_DIMMS; l_j++)
- {
- for (uint8_t l_k=0; l_k<NUM_RANKS; l_k++)
- {
- (*l_pVal)[l_port][l_j][l_k] = l_pMtBuffer->
- mb_mba[l_pos].mba_port[l_port].port_attr[l_attrOffset+(l_j*NUM_RANKS)+l_k];
- }
- }
- }
- break;
- }
- // return the uint32_t [2][2] attributes from the MT keyword
- case TERM_DATA_DIMM_RCD_IBT:
- {
- uint32_t (* l_pVal)[2][2] = (uint32_t (*)[2][2])o_pVal;
-
- // cdimm
- if(fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_NO != l_customDimm)
- {
- for (uint8_t l_port=0; l_port<NUM_PORTS;l_port++)
- {
- for (uint8_t l_j=0; l_j<NUM_DIMMS; l_j++)
- {
- (*l_pVal)[l_port][l_j] = TERM_DATA_IBT_CDIMM;
- }
- }
- }
- // isdimm
- else
- {
- // get vpd version (in ascii)
- uint32_t l_vpdVersion = 0;
- FAPI_EXEC_HWP(l_fapirc,
- getMBvpdVersion,
- i_mbaTarget,
- l_vpdVersion);
- if (l_fapirc)
- {
- FAPI_ERR("getMBvpdTermData: TERM_DATA_DIMM_RCD_IBT - getMBvpdVersion failed");
- break; // break out with fapirc
- }
-
- for (uint8_t l_port=0; l_port<NUM_PORTS;l_port++)
- {
- for (uint8_t l_j=0; l_j<NUM_DIMMS; l_j++)
- {
- if (l_vpdVersion < 0x3133) // ascii "13"
- {
- (*l_pVal)[l_port][l_j] = TERM_DATA_IBT_PRE13;
- }
- // else use the VPD value
- else
- {
- (*l_pVal)[l_port][l_j] = l_pMtBuffer->
- mb_mba[l_pos].mba_port[l_port].port_attr[l_attrOffset+l_j];
- }
- }
- }
- }
- break;
- }
- // return the uint8_t [2][2] attributes from the MT keyword
- case TERM_DATA_DIMM_RCD_OUTPUT_TIMING:
- {
- uint8_t (* l_pVal)[2][2] = (uint8_t (*)[2][2])o_pVal;
-
- // cdimm
- if(fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_NO != l_customDimm)
- {
- for (uint8_t l_port=0; l_port<NUM_PORTS;l_port++)
- {
- for (uint8_t l_j=0; l_j<NUM_DIMMS; l_j++)
- {
- (*l_pVal)[l_port][l_j] =
- TERM_DATA_OUTPUT_TIMING_CDIMM;
- }
- }
- }
- // isdimm
- else
- {
- // get vpd version (in ascii)
- uint32_t l_vpdVersion = 0;
- FAPI_EXEC_HWP(l_fapirc,
- getMBvpdVersion,
- i_mbaTarget,
- l_vpdVersion);
- if (l_fapirc)
- {
- FAPI_ERR("getMBvpdTermData: TERM_DATA_DIMM_RCD_OUTPUT_TIMING - getMBvpdVersion failed");
- break; // break out with fapirc
- }
-
- for (uint8_t l_port=0; l_port<NUM_PORTS;l_port++)
- {
- for (uint8_t l_j=0; l_j<NUM_DIMMS; l_j++)
- {
- if (l_vpdVersion < 0x3133) // ascii "13"
- {
- (*l_pVal)[l_port][l_j] =
- TERM_DATA_OUTPUT_TIMING_PRE13;
- }
- // else use the VPD value
- // use the same vpd value for dimm0 and dimm1
- else
- {
- (*l_pVal)[l_port][l_j] = l_pMtBuffer->
- mb_mba[l_pos].mba_port[l_port].port_attr[l_attrOffset];
- }
- }
-
- }
- }
- break;
- }
- // return the uint32_t [2] attributes from the MT keyword buffer
- // requires translation
- case TERM_DATA_CEN_RD_VREF:
- {
- uint32_t (* l_pVal)[2] = (uint32_t (*)[2])o_pVal;
- uint32_t l_value = 0;
-
- for (uint8_t l_port=0; l_port<2;l_port++)
- {
- l_value = l_pMtBuffer->
- mb_mba[l_pos].mba_port[l_port].port_attr[l_attrOffset];
- l_fapirc = translate_CEN_RD_VREF(i_attr,l_value);
- if (l_fapirc)
- {
- break; // break with error
- }
- (*l_pVal)[l_port] = l_value;
- }
- break;
- }
- // return the uint32_t [2] attributes from the MT keyword buffer
- // requires translation
- case TERM_DATA_DRAM_WR_VREF:
- {
- uint32_t (* l_pVal)[2] = (uint32_t (*)[2])o_pVal;
- uint32_t l_value = 0;
-
- // get vpd version (in ascii)
- uint32_t l_vpdVersion = 0;
- FAPI_EXEC_HWP(l_fapirc,
- getMBvpdVersion,
- i_mbaTarget,
- l_vpdVersion);
- if (l_fapirc)
- {
- FAPI_ERR("getMBvpdTermData: TERM_DATA_DRAM_WR_VREF - getMBvpdVersion failed");
- break; // break out with fapirc
- }
-
- for (uint8_t l_port=0; l_port<2;l_port++)
- {
- // cdimm or version < "13" ascii
- if( (fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_NO != l_customDimm) ||
- (l_vpdVersion < 0x3133) )
- {
- // data is in the last byte of the uint32
- uint32_t * l_pWord = (uint32_t *)&l_pMtBuffer->
- mb_mba[l_pos].mba_port[l_port].port_attr[l_attrOffset];
- l_value = FAPI_BE32TOH(* l_pWord);
- }
- // isdimm and version "13" or greater
- else
- {
- // data is in the first byte of the uint32
- l_value = l_pMtBuffer->
- mb_mba[l_pos].mba_port[l_port].port_attr[l_attrOffset];
- }
-
- l_fapirc = translate_DRAM_WR_VREF(i_attr,l_value);
- if (l_fapirc)
- {
- break; // break with error
- }
- (*l_pVal)[l_port] = l_value;
- }
- break;
- }
- // return the uint64_t attributes from the MT keyword buffer
- // need to consider endian since they are word fields
- case TERM_DATA_CKE_PWR_MAP:
- {
- uint64_t (* l_pVal) = (uint64_t (*))o_pVal;
-
- uint32_t * l_pWord = (uint32_t *)&l_pMtBuffer->
- mb_mba[l_pos].mba_port[0].port_attr[l_attrOffset];
- uint32_t l_port0 = FAPI_BE32TOH(*l_pWord);
-
- l_pWord = (uint32_t *)&l_pMtBuffer->
- mb_mba[l_pos].mba_port[1].port_attr[l_attrOffset];
- uint32_t l_port1 = FAPI_BE32TOH(*l_pWord);
-
- (*l_pVal) = ( ((static_cast<uint64_t>(l_port0))<<32) |
- (static_cast<uint64_t>(l_port1)) );
-
- break;
- }
- // return the uint16_t [2] attributes from the MT keyword buffer
- // into the return uint32_t [2]
- // need to consider endian since they are word fields
- case TERM_DATA_CKE_PRI_MAP:
- {
- uint32_t (* l_pVal)[2] = (uint32_t (*)[2])o_pVal;
- (*l_pVal)[0] = l_pMtBuffer->
- mb_mba[l_pos].mba_port[0].port_attr[l_attrOffset+1]; //LSB
- (*l_pVal)[0] |= (l_pMtBuffer->
- mb_mba[l_pos].mba_port[0].port_attr[l_attrOffset]<<8); //MSB
- (*l_pVal)[1] = l_pMtBuffer->
- mb_mba[l_pos].mba_port[1].port_attr[l_attrOffset+1]; //LSB
- (*l_pVal)[1] |= (l_pMtBuffer->
- mb_mba[l_pos].mba_port[1].port_attr[l_attrOffset]<<8); //MSB
- break;
- }
- // return the uint8_t [2] attributes from the MT keyword buffer
- // requires translation
- case TERM_DATA_CEN_SLEW_RATE_DQ_DQS:
- case TERM_DATA_CEN_SLEW_RATE_CNTL:
- case TERM_DATA_CEN_SLEW_RATE_ADDR:
- case TERM_DATA_CEN_SLEW_RATE_CLK:
- case TERM_DATA_CEN_SLEW_RATE_SPCKE:
- {
- uint8_t (* l_pVal)[2] = (uint8_t (*)[2])o_pVal;
- uint8_t l_value = 0;
-
- for (uint8_t l_port=0; l_port<NUM_PORTS;l_port++)
- {
- l_value= l_pMtBuffer->
- mb_mba[l_pos].mba_port[l_port].port_attr[i_attr];
- l_fapirc = translate_SLEW_RATE(i_attr,l_value);
- if (l_fapirc)
- {
- break; // break with error
- }
- (*l_pVal)[l_port] = l_value;
- }
- break;
- }
- // return the uint8_t [2] attributes from the MT keyword buffer
- case TERM_DATA_DRAM_WRDDR4_VREF:
- case TERM_DATA_CEN_RCV_IMP_DQ_DQS:
- case TERM_DATA_CEN_DRV_IMP_DQ_DQS:
- case TERM_DATA_CEN_DRV_IMP_CNTL:
- case TERM_DATA_CEN_DRV_IMP_ADDR:
- case TERM_DATA_CEN_DRV_IMP_CLK:
- case TERM_DATA_CEN_DRV_IMP_SPCKE:
- case TERM_DATA_RLO:
- case TERM_DATA_WLO:
- case TERM_DATA_GPO:
- {
- uint8_t (* l_pVal)[2] = (uint8_t (*)[2])o_pVal;
-
- // pull data from keyword buffer
- uint8_t l_port0 = l_pMtBuffer->
- mb_mba[l_pos].mba_port[0].port_attr[l_attrOffset];
- uint8_t l_port1 = l_pMtBuffer->
- mb_mba[l_pos].mba_port[1].port_attr[l_attrOffset];
-
- // isolate special processing flags
- uint32_t l_special = i_attr & TERM_DATA_SPECIAL_MASK;
- switch (l_special)
- {
- case TERM_DATA_LOW_NIBBLE: // return low nibble
- l_port0 = l_port0 & 0x0F;
- l_port1 = l_port1 & 0x0F;
- break;
-
- case TERM_DATA_HIGH_NIBBLE: // return high nibble
- l_port0 = ((l_port0 & 0xF0)>>4);
- l_port1 = ((l_port1 & 0xF0)>>4);
- break;
- default:
- ; // data is ok directly from keyword buffer
- }
-
- (*l_pVal)[0] = l_port0;
- (*l_pVal)[1] = l_port1;
- break;
- }
- }
-
-
- } while (0);
-
- delete l_pMtBuffer;
- l_pMtBuffer = NULL;
-
- FAPI_DBG("getMBvpdTermData: exit rc=0x%08x)",
- static_cast<uint32_t>(l_fapirc));
-
- return l_fapirc;
-}
-
-// ----------------------------------------------------------------------------
-// Translate vpd values to attribute enumeration for ATTR_VPD_DRAM_RON
-// ----------------------------------------------------------------------------
-fapi::ReturnCode translate_DRAM_RON (const fapi::MBvpdTermData i_attr,
- uint8_t & io_value)
-{
- fapi::ReturnCode l_fapirc;
- const uint8_t VPD_DRAM_RON_INVALID = 0x00;
- const uint8_t VPD_DRAM_RON_OHM34 = 0x07;
- const uint8_t VPD_DRAM_RON_OHM40 = 0x03;
-
- switch (io_value)
- {
- case VPD_DRAM_RON_INVALID:
- io_value=fapi::ENUM_ATTR_VPD_DRAM_RON_INVALID;
- break;
- case VPD_DRAM_RON_OHM34:
- io_value=fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34;
- break;
- case VPD_DRAM_RON_OHM40:
- io_value=fapi::ENUM_ATTR_VPD_DRAM_RON_OHM40;
- break;
- default:
- FAPI_ERR("Unsupported VPD encode for ATTR_VPD_DRAM_RON 0x%02x",
- io_value);
- const fapi::MBvpdTermData & ATTR_ID = i_attr;
- const uint8_t & VPD_VALUE = io_value;
- FAPI_SET_HWP_ERROR(l_fapirc, RC_MBVPD_TERM_DATA_UNSUPPORTED_VPD_ENCODE);
- break;
- }
-
- return l_fapirc;
-}
-
-// ----------------------------------------------------------------------------
-// Translate vpd values to attribute enumeration for ATTR_VPD_DRAM_RTT_NOM
-// ----------------------------------------------------------------------------
-fapi::ReturnCode translate_DRAM_RTT_NOM (const fapi::MBvpdTermData i_attr,
- uint8_t & io_value)
-{
- fapi::ReturnCode l_fapirc;
- const uint8_t DRAM_RTT_NOM_DISABLE = 0x00;
- const uint8_t DRAM_RTT_NOM_OHM20 = 0x04;
- const uint8_t DRAM_RTT_NOM_OHM30 = 0x05;
- const uint8_t DRAM_RTT_NOM_OHM34 = 0x07;
- const uint8_t DRAM_RTT_NOM_OHM40 = 0x03;
- const uint8_t DRAM_RTT_NOM_OHM48 = 0x85;
- const uint8_t DRAM_RTT_NOM_OHM60 = 0x01;
- const uint8_t DRAM_RTT_NOM_OHM80 = 0x06;
- const uint8_t DRAM_RTT_NOM_OHM120 = 0x02;
- const uint8_t DRAM_RTT_NOM_OHM240 = 0x84;
-
- switch(io_value)
- {
- case DRAM_RTT_NOM_DISABLE:
- io_value=fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE;
- break;
- case DRAM_RTT_NOM_OHM20:
- io_value= fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM20;
- break;
- case DRAM_RTT_NOM_OHM30:
- io_value= fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM30;
- break;
- case DRAM_RTT_NOM_OHM34:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM34;
- break;
- case DRAM_RTT_NOM_OHM40:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40;
- break;
- case DRAM_RTT_NOM_OHM48:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM48;
- break;
- case DRAM_RTT_NOM_OHM60:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM60;
- break;
- case DRAM_RTT_NOM_OHM80:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM80;
- break;
- case DRAM_RTT_NOM_OHM120:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM120;
- break;
- case DRAM_RTT_NOM_OHM240:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM240;
- break;
- default:
- FAPI_ERR("Unsupported VPD encode for ATTR_VPD_DRAM_RTT_NOM 0x%02x",
- io_value);
- const fapi::MBvpdTermData & ATTR_ID = i_attr;
- const uint8_t & VPD_VALUE = io_value;
- FAPI_SET_HWP_ERROR(l_fapirc, RC_MBVPD_TERM_DATA_UNSUPPORTED_VPD_ENCODE);
- break;
- }
-
- return l_fapirc;
-}
-
-// ----------------------------------------------------------------------------
-// Translate vpd values to attribute enumeration for ATTR_VPD_DRAM_RTT_WR
-// ----------------------------------------------------------------------------
-fapi::ReturnCode translate_DRAM_RTT_WR (const fapi::MBvpdTermData i_attr,
- uint8_t & io_value)
-{
- fapi::ReturnCode l_fapirc;
- const uint8_t DRAM_RTT_WR_DISABLE = 0x00;
- const uint8_t DRAM_RTT_WR_OHM60 = 0x01;
- const uint8_t DRAM_RTT_WR_OHM120 = 0x02;
-
- switch(io_value)
- {
- case DRAM_RTT_WR_DISABLE:
- io_value=fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE;
- break;
- case DRAM_RTT_WR_OHM60:
- io_value= fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60;
- break;
- case DRAM_RTT_WR_OHM120:
- io_value= fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120;
- break;
- default:
- FAPI_ERR("Unsupported VPD encode for ATTR_VPD_DRAM_RTT_WR 0x%02x",
- io_value);
- const fapi::MBvpdTermData & ATTR_ID = i_attr;
- const uint8_t & VPD_VALUE = io_value;
- FAPI_SET_HWP_ERROR(l_fapirc, RC_MBVPD_TERM_DATA_UNSUPPORTED_VPD_ENCODE);
- break;
- }
-
- return l_fapirc;
-}
-
-// ----------------------------------------------------------------------------
-// Translate vpd values to attribute enumeration for ATTR_VPD_DRAM_WR_VREF
-// ----------------------------------------------------------------------------
-fapi::ReturnCode translate_DRAM_WR_VREF (const fapi::MBvpdTermData i_attr,
- uint32_t & io_value)
-{
- fapi::ReturnCode l_fapirc;
- // The following intentionally skips 0x0a..0x0f, 0x1a..0x1f, and 0x2a..0x2f
- const uint8_t WR_VREF_VDD420 = 0x00;
- const uint8_t WR_VREF_VDD425 = 0x01;
- const uint8_t WR_VREF_VDD430 = 0x02;
- const uint8_t WR_VREF_VDD435 = 0x03;
- const uint8_t WR_VREF_VDD440 = 0x04;
- const uint8_t WR_VREF_VDD445 = 0x05;
- const uint8_t WR_VREF_VDD450 = 0x06;
- const uint8_t WR_VREF_VDD455 = 0x07;
- const uint8_t WR_VREF_VDD460 = 0x08;
- const uint8_t WR_VREF_VDD465 = 0x09;
- const uint8_t WR_VREF_VDD470 = 0x10;
- const uint8_t WR_VREF_VDD475 = 0x11;
- const uint8_t WR_VREF_VDD480 = 0x12;
- const uint8_t WR_VREF_VDD485 = 0x13;
- const uint8_t WR_VREF_VDD490 = 0x14;
- const uint8_t WR_VREF_VDD495 = 0x15;
- const uint8_t WR_VREF_VDD500 = 0x16;
- const uint8_t WR_VREF_VDD505 = 0x17;
- const uint8_t WR_VREF_VDD510 = 0x18;
- const uint8_t WR_VREF_VDD515 = 0x19;
- const uint8_t WR_VREF_VDD520 = 0x20;
- const uint8_t WR_VREF_VDD525 = 0x21;
- const uint8_t WR_VREF_VDD530 = 0x22;
- const uint8_t WR_VREF_VDD535 = 0x23;
- const uint8_t WR_VREF_VDD540 = 0x24;
- const uint8_t WR_VREF_VDD545 = 0x25;
- const uint8_t WR_VREF_VDD550 = 0x26;
- const uint8_t WR_VREF_VDD555 = 0x27;
- const uint8_t WR_VREF_VDD560 = 0x28;
- const uint8_t WR_VREF_VDD565 = 0x29;
- const uint8_t WR_VREF_VDD570 = 0x30;
- const uint8_t WR_VREF_VDD575 = 0x31;
-
- switch(io_value)
- {
- case WR_VREF_VDD420:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD420;
- break;
- case WR_VREF_VDD425:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD425;
- break;
- case WR_VREF_VDD430:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD430;
- break;
- case WR_VREF_VDD435:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD435;
- break;
- case WR_VREF_VDD440:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD440;
- break;
- case WR_VREF_VDD445:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD445;
- break;
- case WR_VREF_VDD450:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD450;
- break;
- case WR_VREF_VDD455:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD455;
- break;
- case WR_VREF_VDD460:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD460;
- break;
- case WR_VREF_VDD465:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD465;
- break;
- case WR_VREF_VDD470:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD470;
- break;
- case WR_VREF_VDD475:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD475;
- break;
- case WR_VREF_VDD480:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD480;
- break;
- case WR_VREF_VDD485:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD485;
- break;
- case WR_VREF_VDD490:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD490;
- break;
- case WR_VREF_VDD495:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD495;
- break;
- case WR_VREF_VDD500:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500;
- break;
- case WR_VREF_VDD505:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD505;
- break;
- case WR_VREF_VDD510:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD510;
- break;
- case WR_VREF_VDD515:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD515;
- break;
- case WR_VREF_VDD520:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD520;
- break;
- case WR_VREF_VDD525:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD525;
- break;
- case WR_VREF_VDD530:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD530;
- break;
- case WR_VREF_VDD535:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD535;
- break;
- case WR_VREF_VDD540:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD540;
- break;
- case WR_VREF_VDD545:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD545;
- break;
- case WR_VREF_VDD550:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD550;
- break;
- case WR_VREF_VDD555:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD555;
- break;
- case WR_VREF_VDD560:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD560;
- break;
- case WR_VREF_VDD565:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD565;
- break;
- case WR_VREF_VDD570:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD570;
- break;
- case WR_VREF_VDD575:
- io_value = fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD575;
- break;
- default:
- FAPI_ERR("Unsupported VPD encode for ATTR_VPD_DRAM_WR_VREF 0x%08x",
- io_value);
- const fapi::MBvpdTermData & ATTR_ID = i_attr;
- const uint32_t & VPD_VALUE = io_value;
- FAPI_SET_HWP_ERROR(l_fapirc, RC_MBVPD_TERM_DATA_UNSUPPORTED_VPD_ENCODE);
- break;
- }
-
- return l_fapirc;
-}
-
-// ----------------------------------------------------------------------------
-// Translate vpd values to attribute enumeration for ATTR_VPD_CEN_RD_VREF
-// ----------------------------------------------------------------------------
-fapi::ReturnCode translate_CEN_RD_VREF (const fapi::MBvpdTermData i_attr,
- uint32_t & io_value)
-{
- fapi::ReturnCode l_fapirc;
- const uint8_t RD_VREF_VDD61000 = 0x15;
- const uint8_t RD_VREF_VDD59625 = 0x14;
- const uint8_t RD_VREF_VDD58250 = 0x13;
- const uint8_t RD_VREF_VDD56875 = 0x12;
- const uint8_t RD_VREF_VDD55500 = 0x11;
- const uint8_t RD_VREF_VDD54125 = 0x10;
- const uint8_t RD_VREF_VDD52750 = 0x09;
- const uint8_t RD_VREF_VDD51375 = 0x08;
- const uint8_t RD_VREF_VDD50000 = 0x07;
- const uint8_t RD_VREF_VDD48625 = 0x06;
- const uint8_t RD_VREF_VDD47250 = 0x05;
- const uint8_t RD_VREF_VDD45875 = 0x04;
- const uint8_t RD_VREF_VDD44500 = 0x03;
- const uint8_t RD_VREF_VDD43125 = 0x02;
- const uint8_t RD_VREF_VDD41750 = 0x01;
- const uint8_t RD_VREF_VDD40375 = 0x00;
- const uint8_t RD_VREF_VDD81000 = 0x31;
- const uint8_t RD_VREF_VDD79625 = 0x30;
- const uint8_t RD_VREF_VDD78250 = 0x29;
- const uint8_t RD_VREF_VDD76875 = 0x28;
- const uint8_t RD_VREF_VDD75500 = 0x27;
- const uint8_t RD_VREF_VDD74125 = 0x26;
- const uint8_t RD_VREF_VDD72750 = 0x25;
- const uint8_t RD_VREF_VDD71375 = 0x24;
- const uint8_t RD_VREF_VDD70000 = 0x23;
- const uint8_t RD_VREF_VDD68625 = 0x22;
- const uint8_t RD_VREF_VDD67250 = 0x21;
- const uint8_t RD_VREF_VDD65875 = 0x20;
- const uint8_t RD_VREF_VDD64500 = 0x19;
- const uint8_t RD_VREF_VDD63125 = 0x18;
- const uint8_t RD_VREF_VDD61750 = 0x17;
- const uint8_t RD_VREF_VDD60375 = 0x16;
-
- switch(io_value)
- {
- case RD_VREF_VDD61000:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD61000;
- break;
- case RD_VREF_VDD59625:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD59625;
- break;
- case RD_VREF_VDD58250:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD58250;
- break;
- case RD_VREF_VDD56875:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD56875;
- break;
- case RD_VREF_VDD55500:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD55500;
- break;
- case RD_VREF_VDD54125:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD54125;
- break;
- case RD_VREF_VDD52750:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD52750;
- break;
- case RD_VREF_VDD51375:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD51375;
- break;
- case RD_VREF_VDD50000:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000;
- break;
- case RD_VREF_VDD48625:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD48625;
- break;
- case RD_VREF_VDD47250:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD47250;
- break;
- case RD_VREF_VDD45875:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD45875;
- break;
- case RD_VREF_VDD44500:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD44500;
- break;
- case RD_VREF_VDD43125:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD43125;
- break;
- case RD_VREF_VDD41750:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD41750;
- break;
- case RD_VREF_VDD40375:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD40375;
- break;
- case RD_VREF_VDD81000:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD81000;
- break;
- case RD_VREF_VDD79625:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD79625;
- break;
- case RD_VREF_VDD78250:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD78250;
- break;
- case RD_VREF_VDD76875:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD76875;
- break;
- case RD_VREF_VDD75500:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD75500;
- break;
- case RD_VREF_VDD74125:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD74125;
- break;
- case RD_VREF_VDD72750:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD72750;
- break;
- case RD_VREF_VDD71375:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD71375;
- break;
- case RD_VREF_VDD70000:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD70000;
- break;
- case RD_VREF_VDD68625:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD68625;
- break;
- case RD_VREF_VDD67250:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD67250;
- break;
- case RD_VREF_VDD65875:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD65875;
- break;
- case RD_VREF_VDD64500:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD64500;
- break;
- case RD_VREF_VDD63125:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD63125;
- break;
- case RD_VREF_VDD61750:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD61750;
- break;
- case RD_VREF_VDD60375:
- io_value = fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD60375;
- break;
- default:
- FAPI_ERR("Unsupported VPD encode for ATTR_VPD_CEN_RD_VREF 0x%08x",
- io_value);
- const fapi::MBvpdTermData & ATTR_ID = i_attr;
- const uint32_t & VPD_VALUE = io_value;
- FAPI_SET_HWP_ERROR(l_fapirc, RC_MBVPD_TERM_DATA_UNSUPPORTED_VPD_ENCODE);
- break;
- }
-
- return l_fapirc;
-}
-
-// ----------------------------------------------------------------------------
-// Translate vpd values to attribute enumeration for
-// ATTR_VPD_CEN_SLEW_RATE_DQ_DQS
-// ATTR_VPD_CEN_SLEW_RATE_ADDR
-// ATTR_VPD_CEN_SLEW_RATE_CLK
-// ATTR_VPD_CEN_SLEW_RATE_SPCKE
-// ATTR_VPD_CEN_SLEW_RATE_CNTL
-// They all have the same mapping and can share a translation procedure
-// ----------------------------------------------------------------------------
-fapi::ReturnCode translate_SLEW_RATE (const fapi::MBvpdTermData i_attr,
- uint8_t & io_value)
-{
- fapi::ReturnCode l_fapirc;
- const uint8_t SLEW_RATE_3V_NS = 0x03;
- const uint8_t SLEW_RATE_4V_NS = 0x04;
- const uint8_t SLEW_RATE_5V_NS = 0x05;
- const uint8_t SLEW_RATE_6V_NS = 0x06;
- const uint8_t SLEW_RATE_MAXV_NS = 0x0F;
-
-// Ensure that the enums are equal so that one routine can be shared
- checkConstantsMatch<(uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_3V_NS==
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS>();
- checkConstantsMatch<(uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_3V_NS==
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS>();
- checkConstantsMatch<(uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_3V_NS==
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS>();
- checkConstantsMatch<(uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_3V_NS==
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS>();
-
- checkConstantsMatch<(uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS==
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_4V_NS>();
- checkConstantsMatch<(uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS==
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_4V_NS>();
- checkConstantsMatch<(uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS==
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_4V_NS>();
- checkConstantsMatch<(uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS==
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_4V_NS>();
-
- checkConstantsMatch<(uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_5V_NS==
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_5V_NS>();
- checkConstantsMatch<(uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_5V_NS==
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_5V_NS>();
- checkConstantsMatch<(uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_5V_NS==
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_5V_NS>();
- checkConstantsMatch<(uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_5V_NS==
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_5V_NS>();
-
- checkConstantsMatch<(uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_6V_NS==
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_6V_NS>();
- checkConstantsMatch<(uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_6V_NS==
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_6V_NS>();
- checkConstantsMatch<(uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_6V_NS==
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_6V_NS>();
- checkConstantsMatch<(uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_6V_NS==
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_6V_NS>();
-
- checkConstantsMatch<
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_MAXV_NS==
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_MAXV_NS>();
- checkConstantsMatch<
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_MAXV_NS==
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_MAXV_NS>();
- checkConstantsMatch<
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_MAXV_NS==
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_MAXV_NS>();
- checkConstantsMatch<
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_MAXV_NS==
- (uint8_t)ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_MAXV_NS>();
-
- switch(io_value)
- {
- case SLEW_RATE_3V_NS:
- io_value = fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_3V_NS;
- break;
- case SLEW_RATE_4V_NS:
- io_value = fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS;
- break;
- case SLEW_RATE_5V_NS:
- io_value = fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_5V_NS;
- break;
- case SLEW_RATE_6V_NS:
- io_value = fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_6V_NS;
- break;
- case SLEW_RATE_MAXV_NS:
- io_value = fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_MAXV_NS;
- break;
- default:
- FAPI_ERR("Unsupported VPD encode for ATTR_VPD_CEN_SLEW_RATE 0x%02x",
- io_value);
- const fapi::MBvpdTermData & ATTR_ID = i_attr;
- const uint8_t & VPD_VALUE = io_value;
- FAPI_SET_HWP_ERROR(l_fapirc, RC_MBVPD_TERM_DATA_UNSUPPORTED_VPD_ENCODE);
- break;
- }
-
- return l_fapirc;
-}
-
-} // extern "C"
-
OpenPOWER on IntegriCloud