diff options
author | Dan Crowell <dcrowell@us.ibm.com> | 2016-10-14 13:34:16 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2016-10-21 23:11:21 -0400 |
commit | 4e3309c4745d138b635ea763f59f5bc0f26b9d04 (patch) | |
tree | 16cefed2388667ac2835b447efcac683d4dab9a9 /src/import | |
parent | 1e63707a3f0e0e21b62c864c85307babd945247d (diff) | |
download | talos-hostboot-4e3309c4745d138b635ea763f59f5bc0f26b9d04.tar.gz talos-hostboot-4e3309c4745d138b635ea763f59f5bc0f26b9d04.zip |
Add mapping data to memory vpd error
Failures to find a matching config in the memory vpd will now
include the first 10 rows of data from MR/MT/DQ as FFDC in the
error log.
You will see output like this:
|------------------------------------------------------------------------------|
| User Defined Data |
|------------------------------------------------------------------------------|
| Section Version : 1 |
| Sub-section type : 2 |
| Created by : hwpf |
| HwpReturnCode : RC_GET_MEM_VPD_NO_MATCH_FOUND |
| FFDC: : MAPROW0 |
| 00000000 FFFF0CA0 F0300000 .....0.. |
|------------------------------------------------------------------------------|
Change-Id: Ibeda17d04ceda4b17b58065f21384ffbb3e67aad
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/31261
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
Reviewed-by: ANDRE A. MARIN <aamarin@us.ibm.com>
Reviewed-by: Brian R. Silver <bsilver@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/31265
Reviewed-by: Hostboot Team <hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/import')
-rw-r--r-- | src/import/chips/p9/procedures/hwp/accessors/p9_get_mem_vpd_keyword.C | 50 | ||||
-rw-r--r-- | src/import/chips/p9/procedures/xml/error_info/p9_get_mem_vpd_keyword.xml | 26 |
2 files changed, 66 insertions, 10 deletions
diff --git a/src/import/chips/p9/procedures/hwp/accessors/p9_get_mem_vpd_keyword.C b/src/import/chips/p9/procedures/hwp/accessors/p9_get_mem_vpd_keyword.C index a1ce17203..4b392e682 100644 --- a/src/import/chips/p9/procedures/hwp/accessors/p9_get_mem_vpd_keyword.C +++ b/src/import/chips/p9/procedures/hwp/accessors/p9_get_mem_vpd_keyword.C @@ -58,10 +58,28 @@ enum mappingKeywordEnum MAPPING_LAYOUT_MCS_0 = 0x8000, //mcs position 0 MAPPING_LAYOUT_MCS_15 = 0x0001, //mcs position 15 + MAPPING_LAYOUT_RANKPAIR_00 = 0x8000, //Rank pair 0x00 + MAPPING_LAYOUT_RANKPAIR_01 = 0x4000, //Rank pair 0x01 + MAPPING_LAYOUT_RANKPAIR_02 = 0x2000, //Rank pair 0x02 + MAPPING_LAYOUT_RANKPAIR_04 = 0x1000, //Rank pair 0x04 + MAPPING_LAYOUT_RANKPAIR_10 = 0x0800, //Rank pair 0x10 + MAPPING_LAYOUT_RANKPAIR_11 = 0x0400, //Rank pair 0x11 + MAPPING_LAYOUT_RANKPAIR_12 = 0x0200, //Rank pair 0x12 + MAPPING_LAYOUT_RANKPAIR_14 = 0x0100, //Rank pair 0x14 + MAPPING_LAYOUT_RANKPAIR_20 = 0x0080, //Rank pair 0x20 + MAPPING_LAYOUT_RANKPAIR_21 = 0x0040, //Rank pair 0x21 + MAPPING_LAYOUT_RANKPAIR_22 = 0x0020, //Rank pair 0x22 + MAPPING_LAYOUT_RANKPAIR_24 = 0x0010, //Rank pair 0x24 + MAPPING_LAYOUT_RANKPAIR_40 = 0x0008, //Rank pair 0x40 + MAPPING_LAYOUT_RANKPAIR_41 = 0x0004, //Rank pair 0x41 + MAPPING_LAYOUT_RANKPAIR_42 = 0x0002, //Rank pair 0x42 MAPPING_LAYOUT_RANKPAIR_44 = 0x0001, //Rank pair 0x44 - MAPPING_LAYOUT_FREQ_0 = 0x80, //Frequency index 0 - MAPPING_LAYOUT_FREQ_3 = 0x10, //Frequency index 3 + + MAPPING_LAYOUT_FREQ_0 = 0x80, //Frequency index 0 - 1866 + MAPPING_LAYOUT_FREQ_1 = 0x40, //Frequency index 1 - 2133 + MAPPING_LAYOUT_FREQ_2 = 0x20, //Frequency index 2 - 2400 + MAPPING_LAYOUT_FREQ_3 = 0x10, //Frequency index 3 - 2666 }; struct mappingHeader_t //header is first in mapping keyword @@ -150,6 +168,10 @@ extern "C" size_t l_mapping_layout_maxsize; uint8_t l_mapping_layout_version; + // Fill in a data buffer for FFDC purposes + uint64_t l_ffdc_MAPROW[MAPPING_LAYOUT_MAXROWS]; + memset( l_ffdc_MAPROW, 0, sizeof(l_ffdc_MAPROW) ); + // Validate vpd type and set first keyword name character based on type switch (i_vpd_info.iv_vpd_type) { @@ -253,6 +275,11 @@ extern "C" for (uint8_t i = 0; i < l_mappingHeader->numEntries; i++) { + // Copy data into FFDC buffer + memcpy( &(l_ffdc_MAPROW[i]), + &(l_dqmapping[i]), + sizeof(l_dqmapping[i]) ); + if (l_dqmapping[i].qPosition == l_mcsPos) { l_second = l_dqmapping[i].qNum; @@ -353,6 +380,7 @@ extern "C" l_indexMax = l_mappingHeader->numEntries; } + // Loop through all of the rows until we find a match for (l_index = 0; l_index < l_indexMax; l_index++) { if (MAPPING_LAYOUT_LAST == l_mapping[l_index].keywordChar) @@ -361,6 +389,12 @@ extern "C" //The keyword is zero padded by genMemVpd.pl } + // Copy data into FFDC buffer + memcpy( &(l_ffdc_MAPROW[l_index]), + &(l_mapping[l_index]), + sizeof(l_mapping[l_index]) ); + + // Look for a match if ( (l_mcsMask & (((l_mapping[l_index].mcsMaskMSB) << 8) | //endian sensitive l_mapping[l_index].mcsMaskLSB)) && @@ -385,7 +419,17 @@ extern "C" set_DIMM1RANK(uint64_t(i_vpd_info.iv_rank_count_dimm_1)). set_HEADER(mappingHeader_t(*l_mappingHeader)). set_TARGET(i_target). - set_VPDTYPE(i_vpd_info.iv_vpd_type), + set_VPDTYPE(i_vpd_info.iv_vpd_type). + set_MAPROW0(l_ffdc_MAPROW[0]). + set_MAPROW1(l_ffdc_MAPROW[1]). + set_MAPROW2(l_ffdc_MAPROW[2]). + set_MAPROW3(l_ffdc_MAPROW[3]). + set_MAPROW4(l_ffdc_MAPROW[4]). + set_MAPROW5(l_ffdc_MAPROW[5]). + set_MAPROW6(l_ffdc_MAPROW[6]). + set_MAPROW7(l_ffdc_MAPROW[7]). + set_MAPROW8(l_ffdc_MAPROW[8]). + set_MAPROW9(l_ffdc_MAPROW[9]), "No match in mapping table"); //Was a valid keyword name found? diff --git a/src/import/chips/p9/procedures/xml/error_info/p9_get_mem_vpd_keyword.xml b/src/import/chips/p9/procedures/xml/error_info/p9_get_mem_vpd_keyword.xml index 88de7eba7..98017f1db 100644 --- a/src/import/chips/p9/procedures/xml/error_info/p9_get_mem_vpd_keyword.xml +++ b/src/import/chips/p9/procedures/xml/error_info/p9_get_mem_vpd_keyword.xml @@ -82,6 +82,18 @@ <ffdc>HEADER</ffdc> <ffdc>TARGET</ffdc> <ffdc>VPDTYPE</ffdc> + <!-- Contents of mapping keyword, i.e. MR, MT, DQ --> + <ffdc>MAPROW0</ffdc> + <ffdc>MAPROW1</ffdc> + <ffdc>MAPROW2</ffdc> + <ffdc>MAPROW3</ffdc> + <ffdc>MAPROW4</ffdc> + <ffdc>MAPROW5</ffdc> + <ffdc>MAPROW6</ffdc> + <ffdc>MAPROW7</ffdc> + <ffdc>MAPROW8</ffdc> + <ffdc>MAPROW9</ffdc> + <!-- Should use a variable ffdc for the rows but that isn't supported --> </hwpError> <!-- ********************************************************************* --> <hwpError> @@ -100,13 +112,13 @@ </hwpError> <!-- ********************************************************************* --> <hwpError> - <rc>RC_GET_MEM_VPD_ENTRY_NOT_FOUND</rc> - <description>Entry outside of possible entries</description> - <ffdc>ENTRY</ffdc> - <ffdc>MAX_ENTRIES</ffdc> - <ffdc>VERSION</ffdc> - <ffdc>TARGET</ffdc> - <ffdc>VPDTYPE</ffdc> + <rc>RC_GET_MEM_VPD_ENTRY_NOT_FOUND</rc> + <description>Entry outside of possible entries</description> + <ffdc>ENTRY</ffdc> + <ffdc>MAX_ENTRIES</ffdc> + <ffdc>VERSION</ffdc> + <ffdc>TARGET</ffdc> + <ffdc>VPDTYPE</ffdc> </hwpError> <!-- ********************************************************************* --> </hwpErrors> |