1*** Settings *** 2Documentation Update the BMC code on a target BMC via Redifsh. 3 4# Test Parameters: 5# IMAGE_FILE_PATH The path to the BMC image file. 6# 7# Firmware update states: 8# Enabled Image is installed and either functional or active. 9# Disabled Image installation failed or ready for activation. 10# Updating Image installation currently in progress. 11 12Resource ../../lib/resource.robot 13Resource ../../lib/bmc_redfish_resource.robot 14Resource ../../lib/openbmc_ffdc.robot 15Resource ../../lib/common_utils.robot 16Resource ../../lib/code_update_utils.robot 17Resource ../../lib/redfish_code_update_utils.robot 18Resource ../../lib/utils.robot 19Library ../../lib/gen_robot_valid.py 20Library ../../lib/var_funcs.py 21Library ../../lib/gen_robot_keyword.py 22Library ../../lib/code_update_utils.py 23 24Suite Setup Suite Setup Execution 25Suite Teardown Redfish.Logout 26Test Setup Printn 27Test Teardown FFDC On Test Case Fail 28 29Force Tags BMC_Code_Update 30 31*** Variables *** 32 33${FORCE_UPDATE} ${0} 34${LOOP_COUNT} 20 35 36*** Test Cases *** 37 38Redfish BMC Code Update 39 [Documentation] Update the firmware image. 40 [Tags] Redfish_BMC_Code_Update 41 42 ${image_version}= Get Version Tar ${IMAGE_FILE_PATH} 43 Rprint Vars image_version 44 45 ${bmc_release_info}= Get BMC Release Info 46 ${functional_version}= Set Variable ${bmc_release_info['version_id']} 47 Rprint Vars functional_version 48 49 ${post_code_update_actions}= Get Post Boot Action 50 ${state}= Get Pre Reboot State 51 Rprint Vars state 52 53 # Check if the existing firmware is functional. 54 Pass Execution If '${functional_version}' == '${image_version}' 55 ... The existing ${image_version} firmware is already functional. 56 57 ${sw_inv}= Get Functional Firmware BMC image 58 ${nonfunctional_sw_inv}= Get Non Functional Firmware ${sw_inv} False 59 60 # Redfish active software image API. 61 Run Keyword If not ${FORCE_UPDATE} 62 ... Run Keyword If '${nonfunctional_sw_inv['version']}' == '${image_version}' 63 ... Run Keywords Switch Backup Firmware Image To Functional AND 64 ... Wait For Reboot start_boot_seconds=${state['epoch_seconds']} AND 65 ... Redfish Verify BMC Version ${IMAGE_FILE_PATH} AND 66 ... Pass Execution The firmware ${image_version} is backup image. 67 68 # Firmware inventory record of the given image version. 69 ${image_info}= Get Software Inventory State By Version ${image_version} 70 71 ${image_info_len}= Get Length ${image_info} 72 73 # REST delete the image to fresh code update for a given same image object 74 # which is already ACTIVE but on the alternate side. Irrespective of when 75 # REST is disabled in near future or the below operation fails, is purely 76 # done to give a chance. 77 78 Run Keyword If '${image_info_len}' != 0 79 ... Run Keywords Print Timen 80 ... The ${image_version} version is installed but not functional, try delete and continue firmware update. 81 ... AND 82 ... Run Keyword And Ignore Error 83 ... Delete Software Object /xyz/openbmc_project/software/${image_info['image_id']} 84 85 Redfish Update Firmware 86 87 88Redfish Firmware Update Loop 89 [Documentation] Update the firmware image in loop. 90 [Tags] Redfish_Firmware_Update_Loop 91 [Template] Redfish Firmware Update In Loop 92 93 ${LOOP_COUNT} 94 95 96*** Keywords *** 97 98Suite Setup Execution 99 [Documentation] Do the suite setup. 100 101 Redfish.Login 102 # Delete BMC dump and Error logs. 103 Run Keyword And Ignore Error Delete All BMC Dump 104 Run Keyword And Ignore Error Redfish Delete All BMC Dumps 105 Run Keyword And Ignore Error Redfish Purge Event Log 106 # Checking for file existence. 107 Valid File Path IMAGE_FILE_PATH 108 109 110Redfish Firmware Update In Loop 111 [Documentation] Update the firmware in loop. 112 [Arguments] ${update_loop_count} 113 114 # Description of argument(s): 115 # update_loop_count This value is used to run the firmware update in loop. 116 117 ${before_image_state}= Get BMC Functional Firmware 118 ${temp_update_loop_count}= Evaluate ${update_loop_count} + 1 119 120 FOR ${count} IN RANGE 1 ${temp_update_loop_count} 121 Print Timen ************************************** 122 Print Timen * The Current Loop Count is ${count} of ${update_loop_count} * 123 Print Timen ************************************** 124 Redfish Update Firmware 125 ${sw_inv}= Get Functional Firmware BMC update 126 ${nonfunctional_sw_inv}= Get Non Functional Firmware ${sw_inv} False 127 Run Keyword If ${nonfunctional_sw_inv['functional']} == False 128 ... Set BMC Image Priority To Least ${nonfunctional_sw_inv['version']} ${nonfunctional_sw_inv} 129 Redfish.Login 130 ${sw_inv}= Get Functional Firmware BMC update 131 ${nonfunctional_sw_inv}= Get Non Functional Firmware ${sw_inv} False 132 Delete BMC Image 133 END 134 135 ${after_image_state}= Get BMC Functional Firmware 136 Valid Value before_image_state["version"] ['${after_image_state["version"]}'] 137 138 139Delete BMC Image 140 [Documentation] Delete a BMC image from the BMC flash chip. 141 142 ${software_object}= Get Non Running BMC Software Object 143 Delete Image And Verify ${software_object} ${VERSION_PURPOSE_BMC} 144 145 146Activate Existing Firmware 147 [Documentation] Set firmware image to lower priority. 148 [Arguments] ${image_version} 149 150 # Description of argument(s): 151 # image_version Version of image. 152 153 ${software_inventory_record}= Get Software Inventory State By Version 154 ... ${image_version} 155 ${num_keys}= Get Length ${software_inventory_record} 156 157 Rprint Vars software_inventory_record 158 159 # If no software inventory record was found, there is no existing 160 # firmware for the given version and therefore no action to be taken. 161 Return From Keyword If not ${num_keys} 162 163 # Check if the existing firmware is functional. 164 Pass Execution If ${software_inventory_record['functional']} 165 ... The existing ${image_version} firmware is already functional. 166 167 # If existing firmware is not functional, then set the priority to least. 168 Print Timen The existing ${image_version} firmware is not yet functional. 169 Set BMC Image Priority To Least ${image_version} ${software_inventory_record} 170 171 Pass Execution The existing ${image_version} firmware is now functional. 172 173 174Get Image Priority 175 [Documentation] Get Current Image Priority. 176 [Arguments] ${image_version} 177 178 # Description of argument(s): 179 # image_version The Firmware image version (e.g. 2.8.0-dev-1107-g512028d95). 180 181 ${software_info}= Read Properties 182 ... ${SOFTWARE_VERSION_URI}/enumerate quiet=1 183 # Get only the record associated with our image_version. 184 185 ${software_info}= Filter Struct 186 ... ${software_info} [('Version', '${image_version}')] 187 # Convert from dict to list. 188 ${software_info}= Get Dictionary Values ${software_info} 189 190 [Return] ${software_info[0]['Priority']} 191 192 193Set BMC Image Priority To Least 194 [Documentation] Set BMC image priority to least value. 195 [Arguments] ${image_version} ${software_inventory} 196 197 # Description of argument(s): 198 # image_version The Firmware image version (e.g. 2.8.0-dev-1107-g512028d95). 199 # software_inventory Software inventory details. 200 201 ${least_priority}= Get Least Value Priority Image ${VERSION_PURPOSE_BMC} 202 ${cur_priority}= Get Image Priority ${image_version} 203 Rprint Vars least_priority cur_priority 204 205 Return From Keyword If '${least_priority}' == ${cur_priority} 206 Set Host Software Property 207 ... ${SOFTWARE_VERSION_URI}${software_inventory['image_id']} 208 ... Priority ${least_priority} 209 210 Redfish OBMC Reboot (off) 211 212 213Redfish Update Firmware 214 [Documentation] Update the BMC firmware via redfish interface. 215 216 ${post_code_update_actions}= Get Post Boot Action 217 ${state}= Get Pre Reboot State 218 Rprint Vars state 219 Run Keyword And Ignore Error Set ApplyTime policy=OnReset 220 Redfish Upload Image And Check Progress State 221 ${tar_version}= Get Version Tar ${IMAGE_FILE_PATH} 222 ${image_info}= Get Software Inventory State By Version ${tar_version} 223 Run Key ${post_code_update_actions['${image_info["image_type"]}']['OnReset']} 224 Redfish.Login 225 Redfish Verify BMC Version ${IMAGE_FILE_PATH} 226 227