diff options
| author | Prachi Gupta <pragupta@us.ibm.com> | 2018-05-31 16:31:01 -0500 |
|---|---|---|
| committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2018-06-06 13:59:44 -0400 |
| commit | 27bf395be2cd9025abc1a48ad74a0b3bc5da97f8 (patch) | |
| tree | 29bb599328e3ab98e1e105a285c9f213cf040871 /src/include | |
| parent | 1db54dcc27d4061114c9466ec5fb72121420c5eb (diff) | |
| download | talos-hostboot-27bf395be2cd9025abc1a48ad74a0b3bc5da97f8.tar.gz talos-hostboot-27bf395be2cd9025abc1a48ad74a0b3bc5da97f8.zip | |
missing memory: istep 7 and 14 changes
There are two cases where hostboot's attention is required in istep7:
- If HRMOR we booted with doesn't fall in the range of proc_mem_to_use's
memory, then the SBE is old. HB will do an sbe update and
request re-ipl
- If HB deconfigured a bunch of dimms in istep7 and ran out of memory,
then we will request a reconfig loop
Then, in istep14, we added another sanity check to make sure we have
memory as expected to prevent unexpected failure after exiting cache
contained mode.
Change-Id: I018f4ce862cc79b5d7bacbe01cc28d1d2b4fc788
CQ:SW430015
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/59696
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/usr/hwas/common/hwas.H | 33 | ||||
| -rw-r--r-- | src/include/usr/isteps/istep_reasoncodes.H | 1 | ||||
| -rw-r--r-- | src/include/usr/targeting/common/util.H | 18 |
3 files changed, 50 insertions, 2 deletions
diff --git a/src/include/usr/hwas/common/hwas.H b/src/include/usr/hwas/common/hwas.H index 06304c29c..120ba0b7d 100644 --- a/src/include/usr/hwas/common/hwas.H +++ b/src/include/usr/hwas/common/hwas.H @@ -258,6 +258,39 @@ errlHndl_t check_for_missing_memory (const TARGETING::Target* i_node, uint8_t & io_proc_mem_to_use, bool & o_found_missing_mem); +/* + * @brief This function takes in proc target and returns group/chip id + * in the following bit format: GGGG CCC + * where G = Group Id and C = Chip Id + * + * @param[in] i_proc: proc target + * @retval: chip info including group and chip id + */ +uint64_t getGroupChipIdInfo (TARGETING::TargetHandle_t i_proc); + +/* + * @brief This function takes in the value of ATTR_PROC_MEM_TO_USE + * and extract out group and chip id + * in the following bit format: GGGG CCC + * where G = Group Id and C = Chip Id + * + * @param[in] i_proc_mem_to_use: Value of ATTR_PROC_MEM_TO_USE + * @param[out] o_grp_id: group id + * @param[out] o_chip_id: chip id + */ +void parseProcMemToUseIntoGrpChipId (uint8_t i_proc_mem_to_use, + uint8_t & o_grp_id, + uint8_t & o_chip_id); + +/* + * @brief This function computes whether current value of + * PROC_MEM_TO_USE matches with the expected value. + * The expected value can change through the IPL because + * we might end up deconfiguring dimms. + * + * @param[out] o_valid: true, if current and expected values are the same + */ +errlHndl_t check_current_proc_mem_to_use_is_still_valid (bool o_valid); }; // end namespace diff --git a/src/include/usr/isteps/istep_reasoncodes.H b/src/include/usr/isteps/istep_reasoncodes.H index aa63ce0d8..31bb8a7bb 100644 --- a/src/include/usr/isteps/istep_reasoncodes.H +++ b/src/include/usr/isteps/istep_reasoncodes.H @@ -126,6 +126,7 @@ namespace ISTEP RC_TURBO_FREQ_MISMATCH = ISTEP_COMP_ID | 0x44, RC_ULTRA_TURBO_FREQ_MISMATCH = ISTEP_COMP_ID | 0x45, RC_NEST_FREQ_MISMATCH = ISTEP_COMP_ID | 0x46, + RC_NO_VALID_MEM_CONFIG = ISTEP_COMP_ID | 0x47, }; }; diff --git a/src/include/usr/targeting/common/util.H b/src/include/usr/targeting/common/util.H index edc67b79e..479cdfa75 100644 --- a/src/include/usr/targeting/common/util.H +++ b/src/include/usr/targeting/common/util.H @@ -158,12 +158,26 @@ bool is_avp_load(void); /** * @brief Utility function to obtain the highest known address in the system */ -uint64_t get_top_mem_addr(void); +uint64_t get_top_mem_addr(); + +/** + * @brief Utility function to obtain the highest known address in a given proc + * + * @param[in] i_proc: Proc that we want to calculate the top address for + */ +uint64_t get_top_mem_addr(Target* i_proc); /** * @brief Utility function to obtain the lowest known address in the system */ -uint64_t get_bottom_mem_addr(void); +uint64_t get_bottom_mem_addr(); + +/** + * @brief Utility function to obtain the lowest known address in a given proc + * + * @param[in] i_proc: Proc that we want to calculate the bottom address for + */ +uint64_t get_bottom_mem_addr(Target* i_proc); /** * Order two processor targets by NODE_ID then CHIP_ID. |

