diff --git a/lib/code_update_utils.py b/lib/code_update_utils.py
index ac1efc9..35f9e85 100644
--- a/lib/code_update_utils.py
+++ b/lib/code_update_utils.py
@@ -9,6 +9,7 @@
 import sys
 import tarfile
 import time
+import collections
 from robot.libraries.BuiltIn import BuiltIn
 
 robot_pgm_dir_path = os.path.dirname(__file__) + os.sep
@@ -22,6 +23,24 @@
 from robot.libraries.BuiltIn import BuiltIn
 
 
+def get_bmc_firmware(image_type, sw_dict):
+    r"""
+    Get the dictionary of image based on image type like either BMC or Host.
+
+    Description of argument(s):
+    image_type                     This value is either BMC update or Host update type.
+    sw_dict                        This contain dictionay of firmware inventory properties.
+    """
+
+    temp_dict = collections.OrderedDict()
+    for key, value in sw_dict.items():
+        if value['image_type'] == image_type:
+            temp_dict[key] = value
+        else:
+            pass
+    return temp_dict
+
+
 def verify_no_duplicate_image_priorities(image_purpose):
     r"""
     Check that there are no active images with the same purpose and priority.
diff --git a/lib/redfish_code_update_utils.robot b/lib/redfish_code_update_utils.robot
index a97b06e..ba5fb60 100644
--- a/lib/redfish_code_update_utils.robot
+++ b/lib/redfish_code_update_utils.robot
@@ -18,7 +18,8 @@
 
     ${image_info}=  Redfish.Get Properties  /redfish/v1/UpdateService/FirmwareInventory/${image_id}
 
-    ${sw_functional}=  Run Keyword If  '${image_info["Description"]}' == 'BMC image'
+    ${sw_functional}=  Run Keyword If
+    ...   '${image_info["Description"]}' == 'BMC image' or '${image_info["Description"]}' == 'BMC update'
     ...    Redfish.Get Attribute  /redfish/v1/Managers/bmc  FirmwareVersion
     ...  ELSE
     ...    Redfish.Get Attribute  /redfish/v1/Systems/system  BiosVersion
@@ -114,10 +115,12 @@
     ${manifest}  ${stderr}  ${rc}=  BMC Execute Command  cat /tmp/images/${image_id}/MANIFEST
     Rprint Vars  manifest
 
-    Check Image Update Progress State
-    ...  match_state='Disabled', 'Updating'  image_id=${image_id}
+    Wait Until Keyword Succeeds  1 min  05 sec
+    ...  Check Image Update Progress State  match_state='Disabled', 'Updating'  image_id=${image_id}
+
     # Wait a few seconds to check if the update progress started.
     Sleep  5s
+
     Check Image Update Progress State
     ...  match_state='Updating'  image_id=${image_id}
 
diff --git a/redfish/extended/redfish_bmc_code_update.robot b/redfish/extended/redfish_bmc_code_update.robot
index ebec8a7..5362200 100644
--- a/redfish/extended/redfish_bmc_code_update.robot
+++ b/redfish/extended/redfish_bmc_code_update.robot
@@ -19,6 +19,7 @@
 Library                  ../../lib/gen_robot_valid.py
 Library                  ../../lib/var_funcs.py
 Library                  ../../lib/gen_robot_keyword.py
+Library                  ../../lib/code_update_utils.py
 
 Suite Setup              Suite Setup Execution
 Suite Teardown           Redfish.Logout
@@ -30,7 +31,7 @@
 *** Variables ***
 
 ${FORCE_UPDATE}          ${0}
-
+${LOOP_COUNT}            20
 
 *** Test Cases ***
 
@@ -53,6 +54,15 @@
     ...  Activate Existing Firmware  ${image_version}
     Redfish Update Firmware
 
+
+Redfish Firmware Update Loop
+    [Documentation]  Update the firmware image in loop.
+    [Tags]  Redfish_Firmware_Update_Loop
+    [Template]  Redfish Firmware Update In Loop
+
+    ${LOOP_COUNT}
+
+
 *** Keywords ***
 
 Suite Setup Execution
@@ -65,6 +75,78 @@
     # Checking for file existence.
     Valid File Path  IMAGE_FILE_PATH
 
+
+Redfish Firmware Update In Loop
+    [Documentation]  Update the firmware in loop.
+    [Arguments]  ${update_loop_count}
+
+    # Description of argument(s):
+    # update_loop_count    This value is used to run the firmware update in loop.
+
+    ${before_image_state}=  Get BMC Functional Firmware
+
+    FOR  ${count}  IN RANGE  ${update_loop_count}
+      Print Timen  **************************************
+      Print Timen  * The Current Loop Count is ${count} of ${update_loop_count} *
+      Print Timen  **************************************
+      Redfish Update Firmware
+      ${sw_inv}=  Get Functional Firmware  BMC update
+      ${nonfunctional_sw_inv}=  Get Non Fucntional Firmware  ${sw_inv}  False
+      Run Keyword If  ${nonfunctional_sw_inv['functional']} == False
+      ...  Set BMC Image Priority To Least  ${nonfunctional_sw_inv['version']}  ${nonfunctional_sw_inv}
+      Redfish.Login
+      ${sw_inv}=  Get Functional Firmware  BMC update
+      ${nonfunctional_sw_inv}=  Get Non Fucntional Firmware  ${sw_inv}  False
+      Delete BMC Image
+    END
+
+    ${after_image_state}=  Get BMC Functional Firmware
+    Valid Value  before_image_state["version"]  ['${after_image_state["version"]}']
+
+
+Get BMC Functional Firmware
+    [Documentation]  Get BMC functional firmware details.
+
+    ${sw_inv}=  Get Functional Firmware  BMC update
+    ${sw_inv}=  Get Non Fucntional Firmware  ${sw_inv}  True
+
+    [Return]  ${sw_inv}
+
+
+Get Functional Firmware
+    [Documentation]  Get all the BMC firmware details.
+    [Arguments]  ${image_type}
+
+    # Description of argument(s):
+    # image_type    Image value can be either BMC update or Host update.
+
+    ${software_inventory}=  Get Software Inventory State
+    ${bmc_inv}=  Get BMC Firmware  ${image_type}  ${software_inventory}
+
+    [Return]  ${bmc_inv}
+
+
+Get Non Fucntional Firmware
+    [Documentation]  Get BMC non functional fimware details.
+    [Arguments]  ${sw_inv}  ${functional_sate}
+
+    # Description of argument(s):
+    # sw_inv           This dictionay contains all the BMC fimware details.
+    # functional_sate  Functional state can be either True or False.
+
+    ${resp}=  Filter Struct  ${sw_inv}  [('functional', ${functional_sate})]
+    ${list_inv_dict}=  Get Dictionary Values  ${resp}
+
+    [Return]  ${list_inv_dict}[0]
+
+
+Delete BMC Image
+    [Documentation]  Delete a BMC image from the BMC flash chip.
+
+    ${software_object}=  Get Non Running BMC Software Object
+    Delete Image And Verify  ${software_object}  ${VERSION_PURPOSE_BMC}
+
+
 Activate Existing Firmware
     [Documentation]  Set fimware image to lower priority.
     [Arguments]  ${image_version}
