diff --git a/systest/io_storage_ucode_update.robot b/systest/io_storage_ucode_update.robot
new file mode 100644
index 0000000..775c9da
--- /dev/null
+++ b/systest/io_storage_ucode_update.robot
@@ -0,0 +1,72 @@
+*** Settings ***
+Documentation  Update internal storage devices uCode for solid-state
+...  drives (SSDs) and hard disk drives (HDDs).
+
+# TEST PARAMETERS:
+#   OPENBMC_HOST                The BMC host name or IP address.
+#   OPENBMC_PASSWORD            The BMC password.
+#   OPENBMC_USERNAME            The BMC user name.
+#   OS_HOST                     The OS host name or IP address.
+#   OS_USERNAME                 The OS user name.
+#   OS_PASSWORD                 The OS password.
+#   SDA_UCODE_FILE_PATH         The path of the ucode file, on the OS
+#                               for the sda disk (e.g "Code_File.bin").
+#   SDA_DESIRED_LEVEL           The expected firmware level for sda
+#                               after the firmware update (e.g "MJ06").
+#   SDB_UCODE_FILE_PATH         The path of the ucode file, on the OS
+#                               for the sdb disk (e.g "Code_File.bin").
+#   SDB_DESIRED_LEVEL           The expected firmware level for sdb
+#                               after the firmware update (e.g "MK06").
+
+Resource            ../syslib/utils_os.robot
+Library             ../lib/gen_robot_valid.py
+Library             ../lib/firmware_utils.py
+
+
+Test Setup          Test Setup Execution
+Test Teardown       FFDC On Test Case Fail
+
+
+*** Variables ***
+
+
+*** Test Cases ***
+
+Load Microcode On Hard Disks
+    [Documentation]  Load the microcode onto the hard disks.
+    [Tags]  Load_Microcode_On_Hard_Disks
+
+    # Load firmware.
+    ${sda_update_cmd}=  Catenate  hdparm --yes-i-know-what-i-am-doing
+    ...  --please-destroy-my-drive --fwdownload ${SDA_UCODE_FILE_PATH}
+    ...  /dev/sda
+    ${sdb_update_cmd}=  Catenate  hdparm --yes-i-know-what-i-am-doing
+    ...  --please-destroy-my-drive --fwdownload ${SDB_UCODE_FILE_PATH}
+    ...  /dev/sdb
+
+    OS Execute Command  ${sda_update_cmd}
+    OS Execute Command  ${sdb_update_cmd}
+
+
+Reboot OS And Verify Code Update
+    [Documentation]  Reboot the OS and verify that the firmware revision
+    ...  now reflects the desired levels.
+    [Tags]  Reboot_OS_And_Verify_Code_Update
+
+    Host Reboot
+    &{sdb_info}=  Get Hard Disk Info  /dev/sdb
+    &{sda_info}=  Get Hard Disk Info  /dev/sda
+    Should Be Equal  ${sdb_info['firmware_revision']}
+    ...  ${SDB_DESIRED_LEVEL}  msg=Update failed for SDB.
+    Should Be Equal  ${sda_info['firmware_revision']}
+    ...  ${SDA_DESIRED_LEVEL}  msg=Update failed for SDA.
+
+
+*** Keywords ***
+Test Setup Execution
+    [Documentation]  Do initial setup tasks.
+
+    Rvalid Value  SDB_DESIRED_LEVEL
+    Rvalid Value  SDA_DESIRED_LEVEL
+    Rvalid Value  SDB_UCODE_FILE_PATH
+    Rvalid Value  SDA_UCODE_FILE_PATH
\ No newline at end of file
diff --git a/systest/ucode_update.robot b/systest/ucode_update.robot
deleted file mode 100644
index d94f5ae..0000000
--- a/systest/ucode_update.robot
+++ /dev/null
@@ -1,114 +0,0 @@
-*** Settings ***
-Documentation  Update internal storage devices uCode for solid-state drives
-...  (SSDs) and hard disk drives (HDDs).
-# TEST REQUIREMENTS:
-# 1. Firmware file must be suffixed with an underscore, followed by the size
-# range it supports in terabytes, e.g: if IBM_5100_MJ06.bin supports 960 GB to
-# 1.92TB then change the file name to IBM_5100_MJ06_.96-1.92T.bin
-# 2. uCode files on OS should be in root/SSD_HDDucode and
-# supported extensions are ".lod" (for HDDs) and ".bin" (for SSDS).
-
-# TEST PARAMETERS:
-#   OPENBMC_HOST                The BMC host name or IP address.
-#   OPENBMC_PASSWORD            The BMC password.
-#   OPENBMC_USERNAME            The BMC user name.
-#   OS_HOST                     The OS host name or IP address.
-#   OS_USERNAME        .        The OS Host user name.
-#   OS_PASSWORD        .        The OS Host password.
-
-Resource            ../syslib/utils_os.robot
-Library             ../lib/utils_files.py
-Library             ../lib/firmware_utils.py
-Library             ../lib/bmc_ssh_utils.py
-
-Test Setup          Test Setup Execution
-Test Teardown       FFDC On Test Case Fail
-
-
-*** Variables ***
-
-
-*** Test Cases ***
-
-Perform Update On Hard Disks
-    [Documentation]  Perform update on hard disks.
-    [Tags]  Perform_Update_On_Hard_Disks
-    Update Hard Disk  ${sdb_info}  sdb
-    Update Hard Disk  ${sda_info}  sda
-
-
-Reboot OS And Verify uCode Update
-    [Documentation]  Reboot the OS and verify that the update was successful.
-    [Tags]  Reboot_OS_And_Verify_uCode_Update
-    Host Reboot
-    &{sdb_post_update}=  Get Hard Disk Info  /dev/sdb
-    &{sda_post_update}=  Get Hard Disk Info  /dev/sda
-    Should Not Be Equal  ${sda_info['firmware_revision']}  ${sda_post_update['firmware_revision']}
-    ...  msg=Failed sda uCode update - firmware revision values was unchanged.
-    Log  sda uCode update complete.
-    Should Not Be Equal  ${sdb_info['firmware_revision']}  ${sdb_post_update['firmware_revision']}
-    ...  msg=Failed sdb uCode update - firmware revision values was unchanged.
-    Log  sdb uCode update complete.
-
-
-*** Keywords ***
-
-Test Setup Execution
-    [Documentation]  Get info for hard disks and set suite variables.
-    &{sdb_info}=  Get Hard Disk Info  /dev/sdb
-    &{sda_info}=  Get Hard Disk Info  /dev/sda
-    Log  ${sdb_info}
-    Log  ${sda_info}
-    Set Suite Variable  &{sdb_info}
-    Set Suite Variable  &{sda_info}
-
-
-Update Hard Disk
-    [Documentation]  Update hard disk.
-    [Arguments]  ${hard_disk_info}  ${device_name}
-
-    # Description of argument(s):
-    # hard_disk_info  A dictionary of firwmare information for the device
-    #                 which can be obtained via a call to
-    #                 'Get Hard Disk Info'.
-
-    # name            The name of the hard disk, e.g: sdb, sda.
-
-    ${ucode_dir_name}=  Set Variable  SSD_HDDucode
-    ${ext}=  Set Variable If
-    ...  "${hard_disk_info['ro']}" == "0"  bin
-    ...  "${hard_disk_info['ro']}" == "1"  lod
-    ${file_names}  ${stderr}  ${rc}=  OS Execute Command
-    ...  cd /${OS_USERNAME}/${ucode_dir_name}/ && ls *.${ext}
-    ${file_list}=  Split String  ${file_names}
-    ${ucode_file}=  Find uCode File
-    ...  ${file_list}  ${hard_disk_info['size'][:-1]}
-    ${disk_update}=  Catenate  hdparm --yes-i-know-what-i-am-doing
-    ...  --please-destroy-my-drive --fwdownload
-    ...  /${OS_USERNAME}/${ucode_dir_name}/${ucode_file} /dev/${device_name}
-    OS Execute Command  ${disk_update}
-
-Find uCode File
-    [Documentation]  Return uCode file that corresponds to device size.
-    [Arguments]  ${file_names}  ${device_size}
-
-    # Description of argument(s):
-    # file_list          A list of available ucode file.
-    # size               The size of the hard disk.
-    # For example, given the following input:
-    #
-    # file_list:
-    #  file_list[0]:   IBM_5100_MJ06_.96-1.92T.bin
-    #  file_list[1]:   IBM_5100_MK06_2-3.84T.bin
-    # device_size:     1.8T
-    # This keyword will return "IBM_5100_MJ06_.96-1.92T.bin".
-
-    :FOR  ${file_name}  IN  @{file_names}
-    \  ${range_string}=  Remove String Using Regexp  ${file_name}  .*_  T.*
-    \  ${range}=  Split String  ${range_string}  -
-    \  Return From Keyword If
-    ...  "${device_size}" >= "${range[0]}" and "${device_size}" <= "${range[1]}"
-    ...  ${file_name}
-
-    Fail  msg=Failed to find uCode file in list: ${file_names}.
-    [Return]  ${file_name}
\ No newline at end of file
