diff options
Diffstat (limited to 'src/include/usr/hwpf')
4 files changed, 158 insertions, 11 deletions
diff --git a/src/include/usr/hwpf/fapi/fapiMBvpdAccess.H b/src/include/usr/hwpf/fapi/fapiMBvpdAccess.H index 1370fee0c..270b48dff 100644 --- a/src/include/usr/hwpf/fapi/fapiMBvpdAccess.H +++ b/src/include/usr/hwpf/fapi/fapiMBvpdAccess.H @@ -53,6 +53,7 @@ namespace fapi MBVPD_RECORD_VER0 = 0x01, MBVPD_RECORD_MER0 = 0x02, MBVPD_RECORD_VSPD = 0x03, + MBVPD_RECORD_VINI = 0x04, }; enum MBvpdKeyword @@ -67,6 +68,7 @@ namespace fapi MBVPD_KEYWORD_MW = 0x07, MBVPD_KEYWORD_MV = 0x08, MBVPD_KEYWORD_AM = 0x09, + MBVPD_KEYWORD_VZ = 0x0a, }; } diff --git a/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdPhaseRotatorData.H b/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdPhaseRotatorData.H index 88616a179..cb07272af 100644 --- a/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdPhaseRotatorData.H +++ b/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdPhaseRotatorData.H @@ -36,8 +36,35 @@ namespace fapi { +// The MBvpdPhaseRotatorData enumeration is used on the FAPI_ATTR_GET and +// getMBvpdPhaseRotatorData HWP accessor interface. The lower byte (6 bits) +// matches the offset of the vpd field in the MR keyword. This is a convenient +// use of the value for efficiency to index into the vpd keyword data. +// +// Most of the attributes are byte values and can be returned to the requester +// directly. There are some that require special processing. For those, a +// special processing flag is added into the value. This also distinguishes +// values which have the same offset. -// values match offset into MR keyword data +// special processing flags to be added on to the MBvpdPhaseRotatorData value + enum MBvpdPhaseRotatorSpecial + { + PHASE_ROT_HIGH_NIBBLE = 0x0100, //bits 4:7 shifted right 4 + PHASE_ROT_LOW_NIBBLE = 0x0200, //bits 0:3 + PHASE_ROT_PORT00=0x0300, // return vpd port 0 value for 0 and 1 + PHASE_ROT_PORT11=0x0400, // return vpd port 1 value for 0 and 1 + }; +// mask to isolate special processing flags +const uint16_t PHASE_ROT_SPECIAL_MASK = 0x0700; + +// The offset changed for some of the attributes going from v5.3 of the vpd +// layout to v6.0 and after. There is a work around to use the proper offset +// based on the version +// Flag to be added into MBvpdPhaseRotatorData value for attributes that need +// to be checked for the work around. +const uint8_t PHASE_ROT_CHK60 = 0x40; // check version for offset to use + +// base values match offset into MR keyword data enum MBvpdPhaseRotatorData { PHASE_ROT_M0_CLK_P0 = 0x00, @@ -88,11 +115,24 @@ namespace fapi PHASE_ROT_M1_CNTL_CSN3 = 0x2d, PHASE_ROT_M1_CNTL_ODT0 = 0x2e, PHASE_ROT_M1_CNTL_ODT1 = 0x2f, -// The max value is 0x3f. The MR keyword is 255 bytes. There is only room for -// 63 attributes per port. There are 4 x 64 byte sections, -// but the last one is 1 byte short. + // DRAM_2N_MODE reserved = 0x30, + PHASE_ROT_TSYS_ADR = 0x31 | PHASE_ROT_CHK60 | PHASE_ROT_PORT00, + PHASE_ROT_TSYS_DP18 = 0x31 | PHASE_ROT_CHK60 | PHASE_ROT_PORT11, +// Use these offsets for vpd less than version 6.0 + PHASE_ROT_RLO_V53 = 0x31 | PHASE_ROT_HIGH_NIBBLE, + PHASE_ROT_WLO_V53 = 0x31 | PHASE_ROT_LOW_NIBBLE, + PHASE_ROT_GPO_V53= 0x32, + PHASE_ROT_TSYS_ADR_V53 = 0x33 | PHASE_ROT_PORT00, + PHASE_ROT_TSYS_DP18_V53 = 0x33 | PHASE_ROT_PORT11, + // invalid value + PHASE_ROT_INVALID = 0x3f, }; } +// The max base offset value is 0x3e. The MR keyword is 255 bytes. +// There is only room for 63 attributes per port. There are 4 x 64 byte +// sections, but the last one is 1 byte short. See diagram below... +const uint8_t PHASE_ROT_OFFSET_MASK = 0x003f; // mask attr to isolate base + // vpd offsetk // function pointer typedef definition for HWP call support typedef fapi::ReturnCode (*getMBvpdPhaseRotatorData_FP_t) @@ -108,6 +148,25 @@ extern "C" * There are Phase Rotator attributes for the mba's 2 ports in cvpd * record VSPD keyword MR. Each attribute has 2 bytes, one for each port. * There are two mba per memory buffer, position 0 and position 1. + * The Termination Data attributes are retrieved from cvpd record VSPD + * keyword MT. + * + * cpvd record VSPD keyword MR + * ----------------------------------- + * | mba position 0 | + * | ----------------------------- | + * | | port 0 (Port A) 64 bytes | | + * | |---------------------------| | + * | | port 1 (Port B) 64 bytes | | + * | ----------------------------- | + * |---------------------------------| + * | mba postion 1 | + * | ----------------------------- | + * | | port 0 (Port C) 64 bytes | | + * | |---------------------------| | + * | | port 1 (Port D) 63 bytes | | + * | ----------------------------- | + * ----------------------------------- * * @param i_mbaTarget - mba target * @param i_attr - Phase Rotator Data attribute enumerator diff --git a/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdTermData.H b/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdTermData.H index 57a6f111f..4679bdf30 100644 --- a/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdTermData.H +++ b/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdTermData.H @@ -37,8 +37,34 @@ namespace fapi { -// Values match offset into MT keyword cvpd data -// There are multiple types of output values. The type is shown in the comment +// The MBvpdTermData enumeration is used on the FAPI_ATTR_GET and +// getMBvpdTermData HWP accessor interface. The lower byte (6 bits) +// matches the offset of the vpd field in the MT keyword. This is a convenient +// use of the value for efficiency to index into the vpd keyword data. +// +// Most of the vpd attribute values can be returned to the requester directly. +// There are some that require special processing. For those, a +// special processing flag is added into the value. This also distinguishes +// values which have the same offset. + +// special processing flags to be added on to the MBvpdTermData value + enum MBvpdTermDataSpecial + { + TERM_DATA_HIGH_NIBBLE = 0x0100, //bits 4:7 shifted right 4 + TERM_DATA_LOW_NIBBLE = 0x0200, //bits 0:3 + }; +// mask to isolate special processing flags +const uint16_t TERM_DATA_SPECIAL_MASK = 0x0300; + +// The vpd keyword changed for some of the attributes going from v5.3 of the vpd +// layout to v6.0 and after. There is a work around to use the previous +// keyword based on the vpd version. +// Flag to be added into MBvpdTermData value for attributes that need to be +// checked for work around. +const uint8_t TERM_DATA_CHK60 = 0x40; // check version for keyword to use + +// There are multiple types of output values. The type is shown in the comment. +// The base offset value is incremented based on the vpd data type. enum MBvpdTermData { TERM_DATA_DRAM_RON = 0x00, //uint8_t [2][2] @@ -60,11 +86,19 @@ namespace fapi TERM_DATA_CEN_SLEW_RATE_ADDR = 0x33, //uint8_t [2] TERM_DATA_CEN_SLEW_RATE_CLK = 0x34, //uint8_t [2] TERM_DATA_CEN_SLEW_RATE_SPCKE = 0x35, //uint8_t [2] -// The max value is 0x3e. The MT keyword is 255 bytes divided into four -// 64 byte sections, but the last one is 1 byte short. There is only room for -// 63 bytes of attributes per section. +// TERM_DATA_CKE_PRI_MAP is a uint16 in the vpd data. It is returned as +// as a uint32. The offset is incremented by only 2 to get the next vpd value. + TERM_DATA_CKE_PRI_MAP = 0x36, //uint32_t [2] + TERM_DATA_CKE_PWR_MAP = 0x38, //uint32_t [2] + TERM_DATA_RLO = 0x3c|TERM_DATA_CHK60|TERM_DATA_HIGH_NIBBLE, //uint8_t[2] + TERM_DATA_WLO = 0x3c|TERM_DATA_CHK60|TERM_DATA_LOW_NIBBLE, //uint8_t[2] + TERM_DATA_GPO = 0x3d|TERM_DATA_CHK60, //uint8_t[2] }; } +// The max base offset value is 0x3e. The MT keyword is 255 bytes. +// There is only room for 63 attributes per port. There are 4 x 64 byte +// sections, but the last one is 1 byte short. See diagram below... +const uint8_t TERM_DATA_OFFSET_MASK = 0x003f; //mask attr to isolate base offset // Template class that is specialized for each attribute specifying it's type template<const fapi::MBvpdTermData A> @@ -107,6 +141,16 @@ template<>class MBvpdTermDataSize<fapi::TERM_DATA_CEN_SLEW_RATE_CLK> { public: typedef uint8_t Type[2]; }; template<>class MBvpdTermDataSize<fapi::TERM_DATA_CEN_SLEW_RATE_SPCKE> { public: typedef uint8_t Type[2]; }; +template<>class MBvpdTermDataSize<fapi::TERM_DATA_CKE_PRI_MAP> + { public: typedef uint32_t Type[2]; }; +template<>class MBvpdTermDataSize<fapi::TERM_DATA_CKE_PWR_MAP> + { public: typedef uint32_t Type[2]; }; +template<>class MBvpdTermDataSize<fapi::TERM_DATA_RLO> + { public: typedef uint8_t Type[2]; }; +template<>class MBvpdTermDataSize<fapi::TERM_DATA_WLO> + { public: typedef uint8_t Type[2]; }; +template<>class MBvpdTermDataSize<fapi::TERM_DATA_GPO> + { public: typedef uint8_t Type[2]; }; // Template function that checks that the type is as expected. // This can be optionally called before calling the main HWP in order diff --git a/src/include/usr/hwpf/plat/fapiPlatAttributeService.H b/src/include/usr/hwpf/plat/fapiPlatAttributeService.H index 670b5125f..270cd543f 100644 --- a/src/include/usr/hwpf/plat/fapiPlatAttributeService.H +++ b/src/include/usr/hwpf/plat/fapiPlatAttributeService.H @@ -37,6 +37,8 @@ * bofferdn 09/13/2011 Support fapi->hb mapping * thi 01/28/2013 Add SPD CUSTOM attr * dedahle 06/20/2013 Add Bad DIMM DQ Bitmap attr + * whs 08/15/2013 79615 Clock Mapping, + * DIMM timing and TSYS */ #ifndef FAPIPLATATTRIBUTESERVICE_H_ @@ -553,7 +555,6 @@ fapi::ReturnCode fapiPlatDimmGetSpareDram ( const fapi::Target * i_pTarget, uint8_t &o_data); - } // namespace platAttrSvc } // namespace fapi @@ -1203,6 +1204,16 @@ fapi::ReturnCode fapiPlatDimmGetSpareDram ( fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ fapi::FAPI_RC_SUCCESS : fapi::platAttrSvc::fapiPlatGetPhaseRotatorData\ (PTARGET, PHASE_ROT_M1_CNTL_ODT1, VAL) +#endif +#define ATTR_VPD_TSYS_ADR_GETMACRO(ID, PTARGET, VAL)\ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ + fapi::FAPI_RC_SUCCESS : fapi::platAttrSvc::fapiPlatGetPhaseRotatorData\ + (PTARGET, PHASE_ROT_TSYS_ADR, VAL) +#define ATTR_VPD_TSYS_DP18_GETMACRO(ID, PTARGET, VAL)\ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ + fapi::FAPI_RC_SUCCESS : fapi::platAttrSvc::fapiPlatGetPhaseRotatorData\ + (PTARGET, PHASE_ROT_TSYS_DP18, VAL) +#if RTC69935 // TODO: RTC 69935: remove the no op sets once work around in // mss_eff_config_termination.C is removed #define ATTR_EFF_CEN_PHASE_ROT_M0_CLK_P0_SETMACRO(ID, PTARGET, VAL)\ @@ -1434,7 +1445,38 @@ fapi::ReturnCode fapiPlatDimmGetSpareDram ( (checkTermDataType<fapi::TERM_DATA_CEN_SLEW_RATE_SPCKE>(VAL), \ fapi::platAttrSvc::fapiPlatGetTermData\ (PTARGET, fapi::TERM_DATA_CEN_SLEW_RATE_SPCKE , VAL, sizeof(VAL))) - +#endif +#define ATTR_VPD_RLO_GETMACRO(ID, PTARGET, VAL)\ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ + fapi::FAPI_RC_SUCCESS :\ + (checkTermDataType<fapi::TERM_DATA_RLO>(VAL), \ + fapi::platAttrSvc::fapiPlatGetTermData\ + (PTARGET, fapi::TERM_DATA_RLO , VAL, sizeof(VAL))) +#define ATTR_VPD_WLO_GETMACRO(ID, PTARGET, VAL)\ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ + fapi::FAPI_RC_SUCCESS :\ + (checkTermDataType<fapi::TERM_DATA_WLO>(VAL), \ + fapi::platAttrSvc::fapiPlatGetTermData\ + (PTARGET, fapi::TERM_DATA_WLO , VAL, sizeof(VAL))) +#define ATTR_VPD_GPO_GETMACRO(ID, PTARGET, VAL)\ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ + fapi::FAPI_RC_SUCCESS :\ + (checkTermDataType<fapi::TERM_DATA_GPO>(VAL), \ + fapi::platAttrSvc::fapiPlatGetTermData\ + (PTARGET, fapi::TERM_DATA_GPO , VAL, sizeof(VAL))) +#define ATTR_VPD_CKE_PRI_MAP_GETMACRO(ID, PTARGET, VAL)\ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ + fapi::FAPI_RC_SUCCESS :\ + (checkTermDataType<fapi::TERM_DATA_CKE_PRI_MAP>(VAL), \ + fapi::platAttrSvc::fapiPlatGetTermData\ + (PTARGET, fapi::TERM_DATA_CKE_PRI_MAP , VAL, sizeof(VAL))) +#define ATTR_VPD_CKE_PWR_MAP_GETMACRO(ID, PTARGET, VAL)\ + fapi::AttrOverrideSync::getAttrOverrideFunc(fapi::ID, PTARGET, &VAL) ?\ + fapi::FAPI_RC_SUCCESS :\ + (checkTermDataType<fapi::TERM_DATA_CKE_PWR_MAP>(VAL), \ + fapi::platAttrSvc::fapiPlatGetTermData\ + (PTARGET, fapi::TERM_DATA_CKE_PWR_MAP , VAL, sizeof(VAL))) +#if RTC69935 #define ATTR_EFF_DRAM_RON_SETMACRO(ID, PTARGET, VAL)\ fapi::FAPI_RC_SUCCESS #define ATTR_EFF_DRAM_RTT_NOM_SETMACRO(ID, PTARGET, VAL)\ |