diff --git a/systest/Generate_OS_Inventory.robot b/systest/Generate_OS_Inventory.robot
deleted file mode 100755
index ddca239..0000000
--- a/systest/Generate_OS_Inventory.robot
+++ /dev/null
@@ -1,23 +0,0 @@
-***Settings***
-Documentation      This module generates an inventory file using lshw
-...                commands.  It will create a JSON file and a YAML file. It
-...                will get the processor, memory and specified I/O devices.
-...                Requires access to lshw, and json2yaml OS commands. This
-...                robot file should be run as root or sudo for lshw.
-
-Library            String
-Library            Collections
-Library            OperatingSystem
-Resource           ../syslib/utils_os.robot
-
-***Variables***
-
-# Path of the JSON Inventory file.
-${json_inventory_file_path}  ${EXECDIR}/os_inventory_final.json
-
-***Test Case***
-
-Create An Inventory
-    [Documentation]  Snapshot system inventory to a JSON file.
-    [Tags]  Inventory_Test
-    Create JSON Inventory File  ${json_inventory_file_path}
diff --git a/systest/adapter_ucode_update.robot b/systest/adapter_ucode_update.robot
deleted file mode 100644
index b54bca4..0000000
--- a/systest/adapter_ucode_update.robot
+++ /dev/null
@@ -1,106 +0,0 @@
-*** Settings ***
-
-Documentation  Verify that the uCode can be updated on supported
-...  Non-Volatile Memory Express (NVMe) adapters on RedHat.
-
-# TEST PARAMETERS:
-#   OPENBMC_HOST                The BMC host name or IP address.
-#   OPENBMC_USERNAME            The BMC user name.
-#   OPENBMC_PASSWORD            The BMC password.
-#   OS_HOST                     The OS host name or IP address.
-#   OS_USERNAME                 The OS user name.
-#   OS_PASSWORD                 The OS Host password.
-#   ADAPTER_UCODE_URL           The url for the microcode file to be
-#                               loaded.
-#   DEVICE NAMES                A comma-seperated list containing the
-#                               names of devices to be upgraded
-#                               (e.g "nvme0n1,nvme1n1").
-#
-# Example:
-#   robot -v ADAPTER_UCODE_URL:http://someurl.com/ucode/file.img
-#   -v DEVICE_NAMES:nvme0n1,nvme1n1 adapter_ucode_update.robot
-
-Resource         ../syslib/utils_install.robot
-
-Suite Setup      Suite Setup Execution
-Test Teardown    FFDC On Test Case Fail
-
-*** Variables ***
-
-
-*** Test Cases ***
-
-Load And Activate uCode On Adapters
-    [Documentation]  Load and activate firmware on the given adapters.
-    [Tags]  Load_And_Activate_uCode_On_Adapters
-
-    Printn
-    # Format parms.
-    # Ensure that nvme (pci-e storage utility) tool exists.
-    ${device_names}=  Split String  ${DEVICE_NAMES}  ,
-    OS Execute Command  yes | yum install nvme-cli
-    Tool Exist  nvme
-    # Load and activate firmware on the devices.
-    :FOR  ${device_name}  in  @{device_names}
-    \  Load And Activate Firmware On Device  ${device_name}
-
-
-Reboot And Verify Code Update
-    [Documentation]  Reboot the OS and verify that the firmware update
-    ...  was successful.
-    [Tags]  Reboot_And_Verify_Code_Update
-
-    Host Reboot
-    # Reboot and verify success
-    ${stdout}  ${stderr}  ${rc}  OS Execute Command
-    ...  nvme list | grep nvme0 | awk '{print $NF'}
-    Should Contain  ${image_file_name}  ${stdout}
-    ...  msg=The code update was not successful.
-
-
-*** Keywords ***
-
-Load And Activate Firmware On Device
-    [Documentation]  Load and activate firmware on device specified.
-    [Arguments]  ${device_name}  ${image_file_name}=${image_file_name}
-
-    # Description of argument(s):
-    # device_name              The name of the NVMe device to be loaded
-    #                          and activated (e.g. "nvme0n1").
-    # image_file_name          The name of the firmware image file.
-
-    :FOR  ${slot_id}  IN RANGE  1  4
-    \  Execute Commands On Slot
-    \  ...  ${device_name}  ${slot_id}  ${image_file_name}
-
-
-Execute Commands On Slot
-    [Documentation]  Execute load and activate commands on given slot.
-    [Arguments]  ${device_name}  ${slot_id}
-    ...  ${image_file_name}=${image_file_name}
-
-    # Description of argument(s):
-    # device_name              The name of the NVMe device to be loaded
-    #                          and activated (e.g. "nvme0n1").
-    # slot_id                  The NVMe device slot id to be activated
-    #                          (e.g. "0","1", etc.).
-    # image_file_name          The name of the firmware image file.
-
-    ${stdout}  ${stderr}  ${rc}  OS Execute Command
-    ...  nvme fw-download /dev/${device_name} --fw=${image_file_name}
-    Should Contain  ${stdout}  Firmware download success
-    ...  msg=${image_file_name} could not be loaded on slot:${slot}
-    ${stdout}  ${stderr}  ${rc}  OS Execute Command
-    ...  nvme fw-activate /dev/${device_name} -a 0 -s ${slot_id}
-    Should Contain  ${stdout}  Success activating firmware
-    ...  msg=Could not activate slot:${slot_id} on ${device_name}.
-
-
-Suite Setup Execution
-    [Documentation]  Setup parms used in suite and download ucode file.
-
-    ${stdout}  ${stderr}  ${rc}=  OS Execute Command
-    ...  wget ${ADAPTER_UCODE_URL}
-    ${image_dir_path_url}  ${image_file_name}=
-    ...  Split Path  ${ADAPTER_UCODE_URL}
-    Set Global Variable  ${image_file_name}
diff --git a/systest/io_storage_compability.robot b/systest/io_storage_compability.robot
deleted file mode 100644
index e62c14f..0000000
--- a/systest/io_storage_compability.robot
+++ /dev/null
@@ -1,60 +0,0 @@
-*** Settings ***
-Documentation  Test to stress IO Storage compatibility.
-
-# Test Parameters:
-
-# OS_HOST         The OS host name or IP address.
-# OS_USERNAME     The OS username to login.
-# OS_PASSWORD     The OS password for the OS login.
-# LOOP_COUNT      The times loop will be executed delimited by user.
-
-Library           ../lib/gen_print.py
-Library           ../lib/gen_robot_print.py
-Resource          ../syslib/utils_os.robot
-
-Suite Setup       Suite Setup Execution
-Suite Teardown    Suite Teardown Execution
-
-
-*** Variables ***
-${LOOP_COUNT}  ${1}
-${ITERATION}  ${0}
-${HTX_MDT_PROFILE}  mdt.hdbuster
-
-
-*** Test Cases ***
-
-IO Storage Compatibility Stress
-    [Documentation]  Stress storage cards.
-    [Tags]  IO_Storage_Compatibility_Stress
-
-    Run MDT Profile
-    Print Timen  Running HTX. Please wait.
-    Repeat Keyword  ${LOOP_COUNT} times
-    ...  Run Keywords
-    ...  Set Suite Variable  ${ITERATION}  ${ITERATION +1}
-    ...  AND  Rprint Vars  ITERATION
-    ...  AND  Loop HTX
-    Shutdown HTX Exerciser
-
-
-*** Keywords ***
-
-Loop HTX
-    [Documentation]  Run HTX for an hour and check status every 10 minutes.
-    Repeat Keyword  1 hour
-    ...  Run Keywords  Check HTX Run Status
-    ...  AND  Sleep  10 min
-
-
-Suite Setup Execution
-    [Documentation]  Start setup tasks.
-
-    Create Default MDT Profile
-
-
-Suite Teardown Execution
-    [Documentation]  Execute suite teardown tasks.
-
-    Collect HTX Log Files
-    FFDC On Test Case Fail
diff --git a/systest/io_storage_ucode_update.robot b/systest/io_storage_ucode_update.robot
deleted file mode 100644
index 775c9da..0000000
--- a/systest/io_storage_ucode_update.robot
+++ /dev/null
@@ -1,72 +0,0 @@
-*** 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/os_install_boot_stress.robot b/systest/os_install_boot_stress.robot
deleted file mode 100644
index e3c1f08..0000000
--- a/systest/os_install_boot_stress.robot
+++ /dev/null
@@ -1,78 +0,0 @@
-*** Settings ***
-
-Documentation  Install RHEL OS and run an HTX bootme.
-
-# TEST PARAMETERS:
-#   OPENBMC_HOST                The BMC host name or IP address.
-#   OPENBMC_USERNAME            The BMC user name.
-#   OPENBMC_PASSWORD            The BMC password.
-#   OS_HOST                     The OS host name or IP address.
-#   OS_USERNAME                 The OS Host user name.
-#   OS_PASSWORD                 The OS Host password.
-#   FTP_USERNAME                The FTP username.
-#   FTP_PASSWORD                The FTP password.
-#   OS_REPO_URL                 The URL for the OS to be installed.
-#                               (e.g "ftp.com/redhat/RHEL/Server/os/").
-#   Optional Parameters:
-#     HTX_DURATION              The duration of the HTX run (e.g 2h,3m)
-#                               Defaults to 2h.
-#     HTX_INTERVAL              The time delay between checks of HTX
-#                               status, defaults to 10m.
-#     HTX_LOOPS                 The number of times to loop through
-#                               htx, defualts to 2.
-#     DEBUG                     If this is set, extra debug information
-#                               will be printed out, defaults to 1.
-
-Resource             ../syslib/utils_install.robot
-
-Suite Teardown  Collect HTX Log Files
-
-*** Variables ***
-${HTX_DURATION}      2h
-${HTX_INTERVAL}      10m
-${HTX_LOOPS}         2
-${DEBUG}             1
-
-
-*** Test Cases ***
-OS Install
-    [Documentation]  Install the given OS through the network.
-    [Tags]  OS_Install
-
-    ${cmd}=  Catenate  sol_utils.tcl --os_host=${OS_HOST}
-    ...  --os_password=${OS_PASSWORD} --os_username=${OS_USERNAME}
-    ...  --openbmc_host=${OPENBMC_HOST}
-    ...  --openbmc_password=${OPENBMC_PASSWORD}
-    ...  --openbmc_username=${OPENBMC_USERNAME}
-    ...  --proc_name=install_os  --debug=${DEBUG}
-    ...  --ftp_username=${FTP_USERNAME}  --ftp_password=${FTP_PASSWORD}
-    ...  --os_repo_url=${os_repo_url}
-    ${rc}  ${out_buf}=  Cmd Fnc  ${cmd}
-
-
- Configure Yum Repository For FTP3
-    [Documentation]  Configure Yum repository for ftp3 server on pegas.
-    ...  This is needed for HTX to be installed.
-    [Tags]  Configure_Yum_Repository_For_FTP3
-
-    ${cmd}=  Catenate
-     ...  printf "[pegas-ga-ftp3-server]\nname=pegas-ga-ftp3-server
-     ...  \nbaseurl=ftp://${FTP_USERNAME}:${FTP_PASSWORD}@${OS_REPO_URL}
-     ...  \nenabled=1\ngpgcheck=0"  > /etc/yum.repos.d/pegas_ga.repo
-    ${stdout}  ${stderr}  ${rc}=  OS Execute Command  ${cmd}
-    ${stdout}  ${stderr}  ${rc}=  OS Execute Command  yum update
-    Should Be Empty  ${stderr}
-    ...  msg=Yum update returned an error. Verify ftp credentials.
-
-
-Install HTX And Run Bootme
-    [Documentation]  Install HTX and start extended bootme run.
-    [Tags]  Install_HTX_And_Run_Bootme
-
-    Install HTX On RedHat  ${htx_rpm}
-    Login To OS
-    Repeat Keyword  ${HTX_LOOPS} times  Run Keywords
-    ...  Run MDT Profile
-    ...  AND  Repeat Keyword  ${HTX_DURATION}
-    ...  Check HTX Run Status  ${HTX_INTERVAL}
-    ...  AND  Shutdown HTX Exerciser
diff --git a/systest/test_io_eeh.robot b/systest/test_io_eeh.robot
deleted file mode 100644
index b5a18f7..0000000
--- a/systest/test_io_eeh.robot
+++ /dev/null
@@ -1,277 +0,0 @@
-*** Settings ***
-Documentation  Verify the EEH recovery on the controllers connected to the
-...  PCI. This injects an EEH error to every controller installed on the
-...  server.
-
-# Test Parameters:
-
-# TYPE                EEH error function to use.
-# OPENBMC_HOST        The BMC host name or IP address.
-# OS_HOST             The OS host name or IP Address.
-# OS_USERNAME         The OS login userid (usually root).
-# OS_PASSWORD         The password for the OS login.
-# HTX_DURATION        Duration of HTX run (e.g. "8 hours", "30 minutes").
-# HTX_INTERVAL        The time delay between consecutive checks of HTX
-#                     status, for example, 30s.
-#                     In summary: Run HTX for $HTX_DURATION, checking
-#                     every $HTX_INTERVAL.
-
-# The injection command:
-# echo <pe_num>:<mode>:<type>:<address>:<mask> > /sys/kernel/debug/powerpc/PCIxxxx/err_injct
-# Input arguments to injection command:
-#   pe_num:  Determined from the output of
-#            'cat /sys/bus/pci/devices/xxxx:xx:xx.x/eeh_pe_config_addr'
-#            where the xxxx.xx.xx.x is the PCI location of the device you want.
-#   mode:    0 for 32-bit BARs and 64-bit non-prefetchable BARs
-#            1 for 64-bit prefetchable BARs
-#   type:    Error function to use:
-#            0 to inject on an MMIO load
-#            4 to inject on a config load--Not recommended for standard
-#            injection trials.
-#            6 to inject on an MMIO writes
-#            10 to inject on a CFG write
-#   address: If you do not care to specify which endpoint under the
-#            slot is to be frozen, use a value of '0'.
-#   mask:    If you do not care to specify which endpoint under the
-#            slot is to be frozen, use a value of '0'.
-#   xxxx:    The PCI domain location of the device.
-
-# Example:
-# echo 5:0:6:3fe280810000:fffffffffffff800 > /sys/kernel/debug/powerpc/PCI0005/err_injct
-# Expected output:
-# HTX Runs mdt.hdbuster or net.mdt and doesn't log errors after error injections.
-
-# Glossary:
-# EEH:
-#   Enhanced I/O Error Handling is an error-recovery mechanism for errors that
-#   occur during load and store operations on the PCI bus.
-# MDT:
-#   Master device table is a collection of hardware devices on the system for
-#   which HTX exercisers can be run.
-# mdt.hdbuster:
-#   MDT for disk storage device testing. Uses 0s and FFs for data patterns.
-# net.mdt:
-#   MDT used to test network adapters.
-# HTX error log file /tmp/htxerr
-#   Records all the errors that occur. If there's no error during the test, it
-#   should be empty.
-#   TODO: Check if monitoring dmesg entries adds value.
-
-Library         SSHLibrary
-Library         String
-Library         ../lib/bmc_ssh_utils.py
-Resource        ../lib/resource.robot
-Resource        ../syslib/utils_os.robot
-
-Suite Setup     Suite Setup Execution
-Suite Teardown  Collect HTX Log Files
-Test Teardown   FFDC On Test Case Fail
-
-*** Variables ***
-${HTX_DURATION}  8 horus
-${HTX_INTERVAL}  15 minutes
-${TYPE}  0
-
-*** Test Cases ***
-Test Integrated IO Adapters EEH
-    [Documentation]  Inject EEH errors in every integrated ethernet controller
-    ...  and check if errors are logged.
-    [Tags]  Test_IO_Adapters_EEH
-
-    # Setting HTX_MDT_PROFILE to be used in 'Run MDT Profile' keyword
-    Set Suite Variable  ${HTX_MDT_PROFILE}  net.mdt
-    # Setting lspci_cmd to be used by 'Get PCI' keyword.
-    Set Test Variable  ${lspci_cmd}  lspci -D | grep "Ethernet controller"
-    @{pci_list}=  Get PCI
-    @{pci_list}=  Split Integrated Or External PCI  ${TRUE}  ${pci_list}
-    #Preconfigure Net MDT
-    Run MDT Profile
-    Repeat Keyword  ${HTX_DURATION}  Cycle Through PCIs  ${pci_list}
-    Shutdown HTX Exerciser
-
-Test External IO Adapters EEH
-    [Documentation]  Inject EEH errors in every external ethernet controller
-    ...  and check if errors are logged.
-    [Tags]  Test_IO_Adapters_EEH
-
-    # Setting HTX_MDT_PROFILE to be used in 'Run MDT Profile' keyword
-    Set Suite Variable  ${HTX_MDT_PROFILE}  net.mdt
-    # Setting lspci_cmd to be used by 'Get PCI' keyword.
-    Set Test Variable  ${lspci_cmd}  lspci -D | grep "Ethernet controller"
-    @{pci_list}=  Get PCI
-    @{pci_list}=  Split Integrated Or External PCI  ${FALSE}  ${pci_list}
-    Preconfigure Net MDT
-    Run MDT Profile
-    Repeat Keyword  ${HTX_DURATION}  Cycle Through PCIs  ${pci_list}
-    Shutdown HTX Exerciser
-
-Test IO Storage EEH
-    [Documentation]  Inject EEH Errors and check if errors are logged in htx.
-    [Tags]  Test_IO_Storage_EEH
-
-    # Setting HTX_MDT_PROFILE to be used in 'Run MDT Profile' keyword
-    Set Suite Variable  ${HTX_MDT_PROFILE}  mdt.hdbuster  children=true
-    # Setting lspci_cmd to be used by 'Get PCI' keyword.
-    Set Test Variable  ${lspci_cmd}  lspci -D | grep Marvell
-    # Setting pci_list to be used in 'Cycle Through PCIs' keyword
-    @{pci_list}=  Get PCI
-    Set Test Variable  @{pci_list}
-    Run MDT Profile
-    Repeat Keyword  ${HTX_DURATION}  Cycle Through PCIs  ${pci_list}
-    Shutdown HTX Exerciser
-
-*** Keywords ***
-Cycle Through PCIs
-    [Documentation]  Run a cycle to make error injections to every PCI
-    ...  in the pci_list.
-    [Arguments]  ${pci_list}=${EMPTY}
-    # Descroption of argument(s):
-    # pci_list   A list that contains the PCIs selected (integrated/external).
-    #            Every object in the list is the PCI address as domain number
-    #            (0 to ffff), bus (0 to ff), slot (0 to 1f) and function
-    #            (0 to 7). (e.g. "0005:01:00.1").
-
-    :FOR  ${pci}  IN  @{pci_list}
-    \  Inject EEH Error  ${pci}
-    \  Check HTX Run Status
-    \  Run Key U  sleep \ ${HTX_INTERVAL}
-
-Preconfigure Net MDT
-    [Documentation]  Run build_net to preconfigure the interfaces to be
-    ...  injected with the EEH error.
-
-    OS Execute Command  build_net help y y
-    ${output}  ${stderr}  ${rc}=  OS Execute Command
-    ...  pingum | egrep "All networks ping Ok"
-    Should Contain  ${output}  All networks ping Ok
-
-Inject EEH Error
-    [Documentation]  Build and inject the EEH error command.
-    [Arguments]  ${pci}=${EMPTY}
-    # Description of argument(s):
-    # pci   PCI address as domain number (0 to ffff), bus (0 to ff),
-    #       slot (0 to 1f) and function (0 to 7).
-    #       (e.g. "0000:00:1f.2").
-
-    ${sub_cmd}=  Make Injection Command  ${pci}
-    ${pci}=  Fetch From Left  ${pci}  :
-    ${cmd}=  Catenate  echo ${sub_cmd} >
-    ...  /sys/kernel/debug/powerpc/PCI${pci}/err_injct_inboundA
-    ${output}  ${stderr}  ${rc}=  OS Execute Command  ${cmd}
-
-Get PCI
-    [Documentation]  Obtain the PCI IDs for every ethernet controller.
-    ${output}  ${stderr}  ${rc}=  OS Execute Command
-    ...  ${lspci_cmd} | cut -d " " -f1
-    @{pci_list}=  Split To Lines  ${output}
-    [Return]  @{pci_list}
-
-Split Integrated Or External PCI
-    [Documentation]  Separate a list of internal or external PCIs according to
-    ...  the test case.
-    [Arguments]  ${integrated}=${TRUE}  ${pci_list}=${EMPTY}
-    # Description of argument(s):
-    # integrated    Boolean variable to determine if the adapters are external
-    #               or integrated to the system.
-    # tmp_pci_list  List of PCIs (e.g. ["0000:00:00.0", "0001:00:00.0"]).
-
-    @{new_pci_list}=  Create List
-    :FOR  ${pci}  IN  @{pci_list}
-    \  ${output}  ${stderr}  ${rc}=  OS Execute Command
-    ...  lscfg -vl ${pci} | grep "Location Code"
-    \  ${status}  ${err_result}=  Run Keyword And Ignore Error
-    ...  Should Contain  ${output}  SLOT
-    \  Run Keyword If  '${status}' == 'PASS' and '${integrated}' == '${FALSE}'
-    ...  Append To List  ${new_pci_list}  ${pci}
-    ...  ELSE IF  '${status}' == 'FAIL' and '${integrated}' == '${TRUE}'
-    ...  Append To List  ${new_pci_list}  ${pci}
-    [Return]  ${new_pci_list}
-
-Make Injection Command
-    [Documentation]  Create the string that will inject the EEH error.
-    [Tags]  Create_Injection_Command
-    [Arguments]  ${pci}=${EMPTY}
-    # Description of argument(s):
-    # pci   PCI address as domain number (0 to ffff), bus (0 to ff),
-    #       slot (0 to 1f) and function (0 to 7).
-    #       (e.g. "0000:00:1f.2").
-
-    ${pe_num}=  Get PE Num  ${pci}
-    ${mode}=  Get Mode  ${pci}
-    ${address}=  Get Address  ${pci}
-    ${mask}=  Get Mask  ${pci}
-    ${result}=  Catenate  SEPARATOR=:
-    ...  ${pe_num}  ${mode}  ${TYPE}  ${address}  ${mask}
-    [Return]  ${result}
-
-Get PE Num
-    [Documentation]  Return the PE configuration address of the PCI sent.
-    [Tags]  Get_PE_Number
-    [Arguments]  ${pci}=${EMPTY}
-    # Description of argument(s):
-    # pci   PCI address as domain number (0 to ffff), bus (0 to ff),
-    #       slot (0 to 1f) and function (0 to 7).
-    #       (e.g. "0000:00:1f.2").
-
-    ${output}  ${stderr}  ${rc}=  OS Execute Command
-    ...  cut -d "x" -f2 /sys/bus/pci/devices/${pci}/eeh_pe_config_addr
-    [Return]  ${output}
-
-Get Mode
-    [Documentation]  Return the "mode" field value.
-    [Tags]  Get_Mode
-    [Arguments]  ${pci}=${EMPTY}
-    # Description of argument(s):
-    # pci   PCI address as domain number (0 to ffff), bus (0 to ff),
-    #       slot (0 to 1f) and function (0 to 7).
-    #       (e.g. "0000:00:1f.2").
-
-    ${cmd_buf}=  Catenate  lspci -bvs ${pci} | grep "Memory at" |
-    ...  grep "64-bit" | wc -l
-    ${output}  ${stderr}  ${rc}=  OS Execute Command  ${cmd_buf}
-    ${mode}=  Set Variable If  '${output}'=='0'  0  1
-    [Return]  ${mode}
-
-Get Address
-    [Documentation]  Obtain the PCI address.
-    [Arguments]  ${pci}=${EMPTY}
-    # Description of argument(s):
-    # pci   PCI address as domain number (0 to ffff), bus (0 to ff),
-    #       slot (0 to 1f) and function (0 to 7).
-    #       (e.g. "0000:00:1f.2").
-
-    ${cmd_buf}=  Catenate  lspci -vv -s ${pci} | grep "Memory at"
-    ...  | cut -d " " -f5 | head -n 1
-    ${output}  ${stderr}  ${rc}=  OS Execute Command  ${cmd_buf}
-    [Return]  ${output}
-
-Get Mask
-    [Documentation]  Return the selected PCI mask.
-    [Arguments]  ${pci}=${EMPTY}
-    # Description of argument(s):
-    # pci   PCI address as domain number (0 to ffff), bus (0 to ff),
-    #       slot (0 to 1f) and function (0 to 7).
-    #       (e.g. "0000:00:1f.2").
-
-    ${cmd_buf}=  Catenate  lspci -vv -s ${pci} | grep "Memory at"
-    ...    | head -n 1 | cut -d "=" -f2
-    ${stdout}  ${stderr}  ${rc}=  OS Execute Command  ${cmd_buf}
-    ${sze}=  Get Substring  ${stdout}  -2  -1
-    ${size}=  Get Substring  ${stdout}  0  -2
-    ${size}=  Convert To Integer  ${size}
-    ${size}=  Run Keyword If  '${sze}' == 'M'
-    ...    Evaluate  ${size}*1024*1024
-    ...  ELSE IF  '${sze}' == 'K'
-    ...    Evaluate  ${size}*1024
-    Log To Console  ${size}
-    ${size}=  Convert To Hex  ${size}
-    ${mask}=  Evaluate  "{:f>16}".format(${size})
-    [Return]  ${mask}
-
-Suite Setup Execution
-    [Documentation]  Do suite setup tasks.
-
-    Boot To OS
-    Tool Exist  lspci
-    Tool Exist  htxcmdline
-    Create Default MDT Profile
\ No newline at end of file
diff --git a/systest/test_io_storage_eeh.robot b/systest/test_io_storage_eeh.robot
deleted file mode 100644
index c2086e7..0000000
--- a/systest/test_io_storage_eeh.robot
+++ /dev/null
@@ -1,182 +0,0 @@
-*** Settings ***
-Documentation  Verify EEH recovery on the integrated storage controller.
-Library     SSHLibrary
-Library     String
-Library     ../lib/bmc_ssh_utils.py
-Resource    ../lib/resource.robot
-Resource    ../syslib/utils_os.robot
-
-# Test Parameters:
-# TYPE                EEH error function to use, default is 4.
-# OPENBMC_HOST        The BMC host name or IP address.
-# OS_HOST             The OS host name or IP Address.
-# OS_USERNAME         The OS login userid (usually root).
-# OS_PASSWORD         The password for the OS login.
-# HTX_DURATION        Duration of HTX run, for example, 8 hours, or
-#                     30 minutes.
-# HTX_INTERVAL        The time delay between consecutive checks of HTX
-#                     status, for example, 30s.
-#                     In summary: Run HTX for $HTX_DURATION, checking
-#                     every $HTX_INTERVAL.
-# This test case verifies the correct operation of EEH on the integrated
-# storage controller. It should be verified with all supported distros.
-# The injection command:
-# echo <pe_num>:<mode>:<type>:<address>:<mask> > /sys/kernel/debug/powerpc/PCIxxxx/err_injct
-# Input arguments to injection command:
-#   pe_num: determined from the output of
-#          'cat /sys/bus/pci/devices/xxxx:xx:xx.x/eeh_pe_config_addr'
-#          where the xxxx.xx.xx.x is the PCI location of the device you want.
-#   mode: 0 for 32-bit BARs and 64-bit non-prefetchable BARs
-#         1 for 64-bit prefetchable BARs
-#   type: error function to use:
-#          0 to inject on an MMIO load
-#          4 to inject on a config load--Not recommended for standard
-#            injection trials.
-#          6 to inject on an MMIO writes
-#         10 to inject on a CFG write
-#   address, mask: if you do not care to specify which endpoint under the
-#      slot is to be frozen, use a value of '0' for both the address and mask.
-#   xxxx: the PCI domain location of the device.
-# Example:
-# echo 5:0:6:3fe280810000:fffffffffffff800 > /sys/kernel/debug/powerpc/PCI0005/err_injct
-# Expected output:
-# HTX Runs mdt.hdbuster and doesn't log errors after error injections.
-# Glossary:
-# EEH:
-#   Enhanced I/O Error Handling is an error-recovery mechanism for errors that
-#   occur during load and store operations on the PCI bus.
-# MDT:
-#   Master device table is a collection of hardware devices on the system for
-#   which HTX exercisers can be run.
-# mdt.hdbuster:
-#   MDT for disk storage device testing. Uses 0s and FFs for data patterns.
-# HTX error log file /tmp/htxerr
-#   Records all the errors that occur. If there's no error during the test, it
-#   should be empty.
-#   TODO: Check if monitoring dmesg entries adds value.
-
-Suite Setup  Suite Setup Execution
-Suite Teardown  Collect HTX Log Files
-Test Teardown  FFDC On Test Case Fail
-
-*** Variables ***
-${HTX_DURATION}  4 hours
-${HTX_INTERVAL}  15 minutes
-${TYPE}  4
-${lspci_cmd}  lspci -D | grep Marvell
-
-*** Test Cases ***
-Test EEH Operation
-    [Documentation]  Inject EEH Errors and check if errors are logged in htx.
-    [Tags]  Test_EEH_Operation
-
-    Run MDT Profile
-    Repeat Keyword  ${HTX_DURATION}  Run Keywords
-    ...  Inject EEH Error  AND  Check HTX Run Status  AND  Sleep  ${HTX_INTERVAL}
-    Shutdown HTX Exerciser
-
-*** Keywords ***
-Inject EEH Error
-    [Documentation]  Inject EEH error to a PE (Partitionable Endpoint).
-
-    Log  Building the injection command.
-    ${pci}=  Get PCI
-    ${sub_cmd}=  Make Injection Command  ${pci}
-    ${pci}=  Fetch From Left  ${pci}  :
-    ${cmd}=  Convert To String
-    ...  echo ${sub_cmd} > /sys/kernel/debug/powerpc/PCI${pci}/err_injct
-    Log  Proceeding with injection:\n${cmd}\n
-    ${output}  ${stderr}  ${rc}=  OS Execute Command  ${cmd}
-    Log  ${output}
-
-Get PCI
-    [Documentation]  Get the PCI ID for the Marvell adapter.
-
-    ${output}  ${stderr}  ${rc}=  OS Execute Command
-    ...  ${lspci_cmd} | cut -d " " -f1 | head -n 1
-    [Return]  ${output}
-
-Get Pe Num
-    [Documentation]  Get the PE (partitionable endpoint) configuration
-    ...              address for the specified PCI.
-    [Arguments]  ${pci}=${EMPTY}
-    # Description of argument(s):
-    # pci   PCI address as domain number (0 to ffff), bus (0 to ff),
-    #       slot (0 to 1f) and function (0 to 7).
-    #       (e.g. "0000:00:1f.2").
-
-    ${output}  ${stderr}  ${rc}=  OS Execute Command
-    ...  cut -d "x" -f2 /sys/bus/pci/devices/${pci}/eeh_pe_config_addr
-    [Return]  ${output}
-
-Get Mode
-    [Documentation]  Determine the 'mode' field value, by checking the device's
-    ...  memory information.
-    [Arguments]  ${pci}=${EMPTY}
-    # Description of argument(s):
-    # pci   PCI address as domain number (0 to ffff), bus (0 to ff),
-    #       slot (0 to 1f) and function (0 to 7).
-    #       (e.g. "0000:00:1f.2").
-
-    ${cmd_buf}=  Catenate  lspci -bvs ${pci} | grep "Memory at " |
-    ...  grep "64-bit, prefetchable" | wc -l
-    ${output}  ${stderr}  ${rc}=  OS Execute Command  ${cmd_buf}
-    ${mode}=  Set Variable If  '${output}' == '0'  0  1
-    [Return]  ${mode}
-
-Get Address
-    [Documentation]  Determine the PE address field.
-    [Arguments]  ${pci}=${EMPTY}
-    # Description of argument(s):
-    # pci   PCI address as domain number (0 to ffff), bus (0 to ff),
-    #       slot (0 to 1f) and function (0 to 7).
-    #       (e.g. "0000:00:1f.2").
-
-    ${output}  ${stderr}  ${rc}=  OS Execute Command
-    ...  lspci -vv -s ${pci} | grep "Memory at " | cut -d " " -f5 | head -n 1
-    [Return]  ${output}
-
-Get Mask
-    [Documentation]  Determine the adress' mask field.
-    [Arguments]  ${pci}=${EMPTY}
-    # Description of argument(s):
-    # pci   PCI address as domain number (0 to ffff), bus (0 to ff),
-    #       slot (0 to 1f) and function (0 to 7).
-    #       (e.g. "0000:00:1f.2").
-
-    ${output}  ${stderr}  ${rc}=  OS Execute Command
-    ...  lspci -vv -s ${pci} | grep "Memory at" | head -n 1
-    ${size_left}=  Fetch From Right  ${output}  size=
-    ${size_right}=  Fetch From Left  ${size_left}  K
-    ${size1}=  Convert To Integer  ${size_right}
-    ${size}=  Evaluate  ${size1}*1024
-    ${size_hex}=  Convert To Hex  ${size}
-    ${mask}=  Evaluate  "{:f>16}".format(${size_hex})
-    [Return]  ${mask}
-
-Make Injection Command
-    [Documentation]  Concatenate the fields to form a valid injection command.
-    [Arguments]  ${pci}=${EMPTY}
-    # Description of argument(s):
-    # pci   PCI address as domain number (0 to ffff), bus (0 to ff),
-    #       slot (0 to 1f) and function (0 to 7).
-    #       (e.g. "0000:00:1f.2").
-
-    ${pe_num}=  Get Pe Num  ${pci}
-    ${mode}=  Get Mode  ${pci}
-    ${addr}=  Get Address  ${pci}
-    ${mask}=  Get Mask  ${pci}
-    ${res}=  Catenate  SEPARATOR=:
-    ...  ${pe_num}  ${mode}  ${TYPE}  ${addr}  ${mask}
-    [Return]  ${res}
-
-Suite Setup Execution
-    [Documentation]  Do suite setup tasks.
-
-    Boot To OS
-    Tool Exist  lspci
-    Tool Exist  htxcmdline
-    # HTX_MDT_PROFILE:   MDT to use in the 'Run MDT Profile' external keyword.
-    # It's set to mdt.hdbuster in the Suite Setup, so it's not a -v argument.
-    Set Suite Variable  ${HTX_MDT_PROFILE}  mdt.hdbuster  children=true
-    Create Default MDT Profile
diff --git a/systest/test_system_hardware_ranges.robot b/systest/test_system_hardware_ranges.robot
deleted file mode 100644
index 7e8e929..0000000
--- a/systest/test_system_hardware_ranges.robot
+++ /dev/null
@@ -1,179 +0,0 @@
-*** Settings ***
-
-Documentation  Verify that both the air and water cooled systems are
-...  operating in the allowable ranges for fans, power and temperature
-...  during idle and stress up at the OS.
-
-
-# TEST PARAMETERS:
-#   OPENBMC_HOST                The BMC host name or IP address.
-#   OPENBMC_USERNAME            The BMC user name.
-#   OPENBMC_PASSWORD            The BMC password.
-#   OS_HOST                     The OS host name or IP address.
-#   OS_USERNAME                 The OS user name.
-#   OS_PASSWORD                 The OS Host password.
-#   HTX_DURATION                Duration of the HTX run (e.g 1h, 20m).
-#   HTX_INTERVAL                The time delay between consecutive
-#                               checks for temperature, fan and power
-#                               ranges.
-#   HTX_MDT_PROFILE             The MDT Profile to run.
-#
-#   The parameters below should be comma-separated lists,
-#   (e.g "500,800"). See default ranges below.
-#   These ranges can vary based on the type of system under test.
-#
-#      FAN_SPEED_RANGE_IDLE     The allowable range of fan speeds,
-#                               expressed as RPMs, when the machine is
-#                               at an idle state.
-#      FAN_SPEED_RANGE_STRESS   The allowable range of fan speeds,
-#                               expressed as RPMs, when the machine is
-#                               at a stressed state.
-#      TEMPERATURE_RANGE_IDLE   The allowed range for temperature,
-#                               expressed as Celsius degrees, when
-#                               the machine is at an idle state.
-#      TEMPERATURE_RANGE_STRESS The allowable range for temperature,
-#                               expressed as Celsius degrees, when
-#                               the machine is at a stressed state.
-#      POWER_RANGE_IDLE         The allowable range for power, expressed
-#                               in Watts, while the machine is at an
-#                               idle state.
-#      POWER_RANGE_STRESS       The allowable range for power, expressed
-#                               in Watts, while the machine is at a
-#                               stressed state.
-
-
-Resource           ../syslib/utils_os.robot
-Resource           ../lib/fan_utils.robot
-Library            ../lib/gen_robot_valid.py
-Suite Setup         Suite Setup Execution
-Test Teardown      FFDC On Test Case Fail
-Suite Teardown     Shutdown HTX Exerciser
-
-*** Variables ***
-# Default Ranges.
-@{FAN_SPEED_RANGE_IDLE}=        0  6000
-@{FAN_SPEED_RANGE_STRESS}=      3000  8000
-@{TEMPERATURE_RANGE_IDLE}=      30  45
-@{TEMPERATURE_RANGE_STRESS}=    35  100
-@{POWER_RANGE_IDLE}=            15  60
-@{POWER_RANGE_STRESS}=          30  350
-
-
-*** Test Cases ***
-
-Verify Fan Speeds During Idle State
-    [Documentation]  Verify the fan speeds are within acceptable range
-    ...  while the system is idle.
-    [Tags]  Verify_Fan_Speeds_During_Idle_State
-
-    Verify Fan Speeds  ${FAN_SPEED_RANGE_IDLE}
-
-
-Verify Temperature During Idle State
-    [Documentation]  Verify the temperature values are within acceptable
-    ...  range while the system is idle.
-    [Tags]  Verify_Temperature_During_Idle_State
-
-    Verify Temperatures  ${TEMPERATURE_RANGE_IDLE}
-
-
-Verify Power During Idle State
-    [Documentation]  Verify the power values are within acceptable range
-    ...  while the system is idle.
-    [Tags]  Verify_Power_During_Idle_State
-
-    Verify Power Values  ${POWER_RANGE_IDLE}
-
-
-Test Hardware Limits During Stress
-    [Documentation]  Verify the hardware under stress is within
-    ...  acceptable range.
-    [Tags]  Test_Hardware_Limits_During_Stress
-
-    # Run HTX and verify, within intervals, that the hardware ranges
-    # are within the allowable ranges.
-    Run MDT Profile
-    Repeat Keyword  ${HTX_DURATION}  Run Keywords
-    ...  Verify Fan Speeds  ${FAN_SPEED_RANGE_STRESS}
-    ...  AND  Verify Temperatures  ${TEMPERATURE_RANGE_STRESS}
-    ...  AND  Verify Power Values  ${POWER_RANGE_STRESS}
-    ...  AND  Run Key  Sleep \ ${HTX_INTERVAL}
-
-
-*** Keywords ***
-
-Verify Fan Speeds
-    [Documentation]  Verify that the fan speeds are within the required
-    ...  range.
-    [Arguments]  ${range}
-
-    # Description of argument(s):
-    # range                     A 2-element list comprised of the lower
-    #                           and upper values which constitute the
-    #                           valid range for the fan speeds.
-    #                           (e.g [500,800]).
-
-    # Get the fans with the lowest and highest fan speeds. Verify that
-    # the speeds are within the proper range.
-    ${fan_objects}=  Read Properties  ${SENSORS_URI}fan_tach/enumerate
-    ${fan_speeds}=  Evaluate
-    ...  [ x['Value'] for x in $fan_objects.values() ]
-    ${max_fan_speed}  Evaluate  max(map(int, $fan_speeds))
-    ${min_fan_speed}  Evaluate  min(map(int, $fan_speeds))
-    Rvalid Range  max_fan_speed  ${range}
-    Rvalid Range  min_fan_speed  ${range}
-
-
-Verify Temperatures
-    [Documentation]  Verify that the temperature values are within the
-    ...  required range.
-    [Arguments]  ${range}
-
-    # Description of argument(s):
-    # range                     The allowable range for the temperature,
-    #                           values (e.g [20,60]).
-
-    # Get the lowest and highest temperatures for GPUs, verify
-    # that it is within the proper range.
-    ${gpu_max_temperature}=  Get GPU Max Temperature
-    ${gpu_min_temperature}=  Get GPU Min Temperature
-    Rvalid Range  gpu_max_temperature  ${range}
-    Rvalid Range  gpu_min_temperature  ${range}
-    # Verify for CPUs.
-    ${cpu_highest_temp}=  Get CPU Max Temperature
-    ${cpu_lowest_temp}=  Get CPU Min Temperature
-    Rvalid Range  cpu_highest_temp  ${range}
-    Rvalid Range  cpu_lowest_temp  ${range}
-
-
-Verify Power Values
-    [Documentation]  Verify that the power values for GPUs and CPUs
-    ...  are within the required range.
-    [Arguments]  ${range}
-
-    # Description of argument(s):
-    # range                     The allowable range for power values,
-    #                           (e.g [15,30]).
-
-    ${gpu_max}=  Get GPU Max Power
-    ${gpu_min}=  Get GPU Min Power
-    ${gpu_max_power}=  Evaluate  int(round(${gpu_max}))
-    ${gpu_min_power}=  Evaluate  int(round(${gpu_min}))
-    Rvalid Range  gpu_max_power  ${range}
-    Rvalid Range  gpu_min_power  ${range}
-
-    ${p0}=  Read Properties  ${SENSORS_URI}power/p0_power
-    ${p1}=  Read Properties  ${SENSORS_URI}power/p1_power
-    # The scaling factor for fans is -6 for CPU power values.
-    ${p0_value}=  Evaluate  ${p0}['Value']/1000000
-    ${p1_value}=  Evaluate  ${p1}['Value']/1000000
-    Rvalid Range  p0_value  ${range}
-    Rvalid Range  p1_value  ${range}
-
-
-Suite Setup Execution
-    [Documentation]  Do suite setup tasks.
-
-    REST Power On  stack_mode=skip
-    ${htx_running}=  Is HTX Running
-    Should Not Be True  ${htx_running}  msg=HTX needs to be shutdown.
\ No newline at end of file
diff --git a/systest/verify_usb_ports.robot b/systest/verify_usb_ports.robot
deleted file mode 100644
index 86581f4..0000000
--- a/systest/verify_usb_ports.robot
+++ /dev/null
@@ -1,81 +0,0 @@
-*** Settings ***
-
-Documentation  Verify that connected USB device can be detected by the
-...  OS and exercised in HTX or written to.
-
-# TEST PARAMETERS:
-#   OPENBMC_HOST                The BMC host name or IP address.
-#   OPENBMC_USERNAME            The BMC user name.
-#   OPENBMC_PASSWORD            The BMC password.
-#   OS_HOST                     The OS host name or IP address.
-#   OS_USERNAME                 The OS user name.
-#   OS_PASSWORD                 The OS Host password.
-#   USB_DEVICE_NAME             The USB device to be used in test.
-#   TIMEOUT                     Amount of time to wait for the device
-#                               being exercised to reach 1 cycle.
-
-Resource           ../syslib/utils_os.robot
-
-Test Setup         Test Setup Execution
-Test Teardown      Test Teardown Execution
-
-*** Variables ***
-
-
-*** Test Cases ***
-
-Verify Write To USB Device
-    [Documentation]  Verify that the given device can be written to.
-    [Tags]  Verify_Write_To_USB_Device
-
-    OS Execute Command  mkdir -p /mount-dev/
-    OS Execute Command  mount -rw /dev/${USB_DEVICE_NAME} /mount-dev/
-    ${stdout}  ${stderr}  ${rc}=  OS Execute Command
-    ...  echo "Write to file" /mount-dev/file.txt  ignore_err=1
-    Should Be Empty  ${stderr}  msg=Could not write to USB device.
-
-
-Exercise USB Device
-    [Documentation]  Verify that the given device can be exercised with
-    ...  HTX.
-    [Tags]  Exercise_USB_Device
-
-    Run MDT Profile
-    # If the htxcmdline -status does not include this device then it is
-    # not a device that can be exercised with HTX, fail.
-    ${stdout}  ${stderr}  ${rc}  OS Execute Command
-    ...  htxcmdline -status | grep ${USB_DEVICE_NAME}
-
-    Wait Until Keyword Succeeds
-    ...  ${TIMEOUT}  10s  Verify Device Cycle Completion
-
-
-*** Keywords ***
-
-Verify Device Cycle Completion
-    [Documentation]  Verify that the USB device has completed at least
-    ...  one HTX cycle.
-
-    # Grep htxcmdline -status to get the device's cycle count.
-    ${stdout}  ${stderr}  ${rc}=  OS Execute Command
-    ...  htxcmdline -status | grep ${USB_DEVICE_NAME} | awk '{print $5}'
-    Should Not Be Empty  ${stdout}  msg=Device is not running HTX
-    Run Keyword If  ${stdout} < 1
-    ...  FAIL  msg=Device has not completed at least one cycle.
-
-
-Test Setup Execution
-    [Documentation]  Do initial test setup task(s).
-
-    OS Execute Command  ls /dev/${USB_DEVICE_NAME}
-
-
-Test Teardown Execution
-    [Documentation]  Perform post test case tasks.
-
-    # Even if the tests fails, device should be unmounted and HTX idle.
-    Run Keyword If  '${TEST_NAME}' == 'Verify Write To USB Device'
-    ...    OS Execute Command  umount /mount-dev/
-    ...  ELSE
-    ...    Shutdown HTX Exerciser
-    FFDC On Test Case Fail
\ No newline at end of file
