diff --git a/ipmi/test_ipmi_systeminfo_parameters.robot b/ipmi/test_ipmi_systeminfo_parameters.robot
new file mode 100644
index 0000000..f50ed3d
--- /dev/null
+++ b/ipmi/test_ipmi_systeminfo_parameters.robot
@@ -0,0 +1,709 @@
+*** Settings ***
+
+Documentation       Module to test IPMI System Info Parameters functionality.
+...                 Following parameters are verfied in the script,
+...                 1. Set In Progress - param 0,
+...                 2. System Firmware Version - param 1,
+...                 3. System Name - param 2,
+...                 4. Primary OS Name - param 3,
+...                 5. OS Name - param 4,
+...                 6. Present OS Version Number - param 5.
+
+Library             Collections
+Library             String
+Resource            ../lib/ipmi_client.robot
+Resource            ../lib/openbmc_ffdc.robot
+Library             ../lib/ipmi_utils.py
+Variables           ../data/ipmi_raw_cmd_table.py
+
+Suite Setup         Suite Setup Execution
+Suite Teardown      FFDC On Test Case Fail
+
+Test Teardown       Restore Default Configuration
+
+
+*** Variables ***
+
+# Converting to hexadecimal provides 14 bytes so string length is 0e for param 3, 4, 5.
+${valid_os_version_name}       Version2.12345
+${invalid_os_version}          ${valid_os_version_name}${6789}
+
+
+*** Test Cases ***
+
+Verify System Info Set In Progress
+    [Documentation]  Verify Set In Progress of System Info Parameter,
+    ...  to set the set-in-progress and set complete state via IPMI,
+    ...  and verify whether the state is updated and restored as expected.
+    [Tags]  Verify_System_Info_Set_In_Progress
+
+    # Set In Progress - set complete.
+    Set System Info Set In Progress  0x00
+
+    # Get System Info Parameter for param 0 - Set In Progress.
+    # Check if set-in-progress set to set complete.
+    ${complete}=  Get System Info Set In Progress
+    # ${complete[0]} - parameter version.
+    # ${complete[1]} - Configuration parameter data,
+    # here,  01h (set in progress).
+    Should Be Equal  ${complete[1]}  00
+
+    # Set In Progress - set in progress.
+    Set System Info Set In Progress  0x01
+
+    # Get System Info Parameter for param 0 - Set In Progress.
+    # Check if set-in-progress set to set inprogress.
+    ${inprogress}=  Get System Info Set In Progress
+    # ${inprogress[0]} - parameter version.
+    # ${inprogress[1]} - Configuration parameter data,
+    # here,  01h (set in progress).
+    Should Be Equal  ${inprogress[1]}  01
+
+
+Verify System Info Set In Progress After BMC Reboot
+    [Documentation]  Verify Set In Progress changes to default,
+    ...  after bmc reboot of System Info Parameter via IPMI,
+    ...  and verify whether the default setting is reflected.
+    [Tags]  Verify_System_Info_Set_In_Progress_After_BMC_Reboot
+
+    # Set the parameter 0 - Set_In_Progress to set in progress state.
+    Set System Info Set In Progress  0x01
+
+    # Get System Info Parameter for param 0 - Set In Progress.
+    # Check if set-in-progress set to set in progress.
+    ${inprogress}=  Get System Info Set In Progress
+    # ${inprogress[0]} - parameter version.
+    # ${inprogress[1]} - Configuration parameter data,
+    # here,  01h (set in progress).
+    Should Be Equal  ${inprogress[1]}  01
+
+    # Reboot BMC.
+    IPMI Std MC Reset Cold (off)
+
+    # Since the param 0 - Set In Progress is volatile,
+    # Default value should be updated after BMC reboot.
+    ${state}=  Get System Info Set In Progress
+    # ${state[0]} - parameter version.
+    # ${state[1]} - Configuration parameter data,
+    # here, 00h (set complete), 01h (set in progress),
+    #       10 (commit write), 11 (reserved).
+    Should Be Equal  ${state[1]}  ${set_in_progress}
+
+
+Verify Get System Info Set In Progress With Invalid Data Length
+    [Documentation]  Verify Get System Info Parameter Set In Progress via IPMI with extra bytes,
+    ...  and expect to get the error message for invalid length.
+    [Tags]  Verify_Get_System_Info_Set_In_Progress_With_Invalid_Data_Length
+
+    # Check if the Get System Info Parameter for param 0 - set in progress throws error for invalid data length.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param0_Set_In_Progress']['Get'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param0_Set_In_Progress']['Get'][0]} 0x00
+
+
+Verify Set System Info Set In Progress With Invalid Data Length
+    [Documentation]  Verify Set System Info Parameter Set In Progress via IPMI with extra bytes,
+    ...  and expect to get the error message for invalid length.
+    [Tags]  Verify_Set_System_Info_Set_In_Progress_With_Invalid_Data_Length
+
+    # Check if the Set System Info Parameter for param 0 - set in progress throws error for invalid data length.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param0_Set_In_Progress']['Set'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param0_Set_In_Progress']['Set'][0]} 0x00 0x00
+
+
+Verify Set System Info Set In Progress With Invalid State
+    [Documentation]  Verify Set System Info Parameter Set In Progress via IPMI invalid state,
+    ...  and expect to get the error message for invalid data.
+    [Tags]  Verify_Set_System_Info_Set_In_Progress_With_Invalid_State
+
+    # Check if the Set System Info Parameter for param 0 - set in progress throws error for invalid State.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param0_Set_In_Progress']['Set'][2]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param0_Set_In_Progress']['Set'][0]} 0x04
+
+
+Verify System Info System Firmware Version
+    [Documentation]  Verify System Firmware Version of System Info Parameter via IPMI,
+    ...  and verify whether the version is updated.
+    [Tags]  Verify_System_Info_System_Firmware_Version
+
+    # Generate a random 14 byte data,
+    # i,e 16-byte block for system firmware name string data.
+    # data 1 - Encoding string type,
+    # data 2 - string length (in bytes, 1-based),
+    # data 3 to 16 - system firmware name string data - 14 bytes.
+    ${firmware_version}=  Generate Random String  14  [LETTERS]
+    ${firmware_version}  ${fw_hex_data}=  Identify Request Data  ${firmware_version}
+    # Consider random string generated is 'zwclMXwfczMvcY'.
+    # Set the System Firmware Version of System Info Parameter.
+    Set System Firmware Version  ${firmware_version}
+    # Get the response of System Firmware Version,
+    # and compare against randomly generated data bytes.
+    ${fw_version}=  Get System Firmware Version
+    # The response data will something be like,
+    # ${fw_version}= ["11","00","00","0e","7a","77","63","6c","4d","58","77","66","63","7a","4d","76"].
+    Should Be Equal  ${fw_version[4:]}  ${fw_hex_data}
+
+
+Verify Get System Info System Firmware Version With Invalid Data Length
+    [Documentation]  Verify Get System Info Parameter System Firmware Version via IPMI with extra bytes,
+    ...  and expect to get the error message for invalid length.
+    [Tags]  Verify_Get_System_Info_System_Firmware_Version_With_Invalid_Data_Length
+
+    # Check if the Get System Info Parameter for param 1 - System Firmware Version throws error for invalid data length.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param1_System_Firmware_Version']['Get'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param1_System_Firmware_Version']['Get'][0]} 0x00
+
+
+Verify Set System Info System Firmware Version With Invalid Data Length
+    [Documentation]  Verify Set System Info Parameter System Firmware Version via IPMI with extra bytes,
+    ...  and expect to get the error message for invalid length.
+    [Tags]  Verify_Set_System_Info_System_Firmware_Version_With_Invalid_Data_Length
+
+    # Generate a random 15 byte data,
+    # i,e 16-byte block for system firmware name string data,
+    # data 1 - Encoding string type,
+    # data 2 - string length (in bytes, 1-based),
+    # data 3 to 16 - system firmware name string data - 14 bytes,
+    # data 17 - extra byte.
+    ${firmware_version}=  Generate Random String  15  [LETTERS]
+    ${firmware_version}  ${fw_hex_data}=  Identify Request Data  ${firmware_version}
+    # Consider random string generated is 'zwclMXwfczMvcYz'.
+    # The request data bytes will be 15 bytes, in which 14 bytes are only expected.
+    # Check if the Set System Info Parameter for param 1 - System Firmware Version throws error for invalid request data.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param1_System_Firmware_Version']['Set'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param1_System_Firmware_Version']['Set'][0]} ${firmware_version}
+
+
+Verify System Info System Name
+    [Documentation]  Verify System Name of System Info Parameter via IPMI by setting,
+    ...  a random system name and verify whether it is updated as expected.
+    [Tags]  Verify_System_Info_System_Name
+
+    # Generate a random 14 byte data,
+    # i,e 16-byte block for system firmware name string data,
+    # data 1 - Encoding string type,
+    # data 2 - string length (in bytes, 1-based),
+    # data 3 to 16 - system firmware name string data - 14 bytes.
+    ${system_name}=  Generate Random String  14  [LETTERS]
+    ${system_name}  ${name_hex_data}=  Identify Request Data  ${system_name}
+    # Consider random string generated is 'zwclMXwfczMvcY'.
+
+    # Set System Name for System Info Parameter.
+    Set System Name  ${system_name}
+
+    # Get the response of System Name,
+    # and compare against randomly generated data bytes.
+    ${sys_name}=  Get System Name
+    # The response data will something be like,
+    # ${sys_name}= ["11","00","00","0e","7a","77","63","6c","4d","58","77","66","63","7a","4d","76"].
+    Should Be Equal  ${sys_name[4:]}  ${name_hex_data}
+
+
+Verify Get System Info System Name With Invalid Data Length
+    [Documentation]  Verify Get System Info Parameter System Name via IPMI with extra bytes,
+    ...  and expect to get the error message for invalid length.
+    [Tags]  Verify_Get_System_Info_System_Name_With_Invalid_Data_Length
+
+    # Check if the Get System Info Parameter for param 2 - System Name throws error for invalid request data length.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param2_System_Name']['Get'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param2_System_Name']['Get'][0]} 0x00
+
+
+Verify Set System Info System Name With Invalid Data Length
+    [Documentation]  Verify Set System Info Parameter System Name via IPMI with extra bytes,
+    ...  and expect to get the error message for invalid length.
+    [Tags]  Verify_Set_System_Info_System_Name_With_Invalid_Data_Length
+
+    # Generate a random 15 byte data,
+    # i,e 16-byte block for system firmware name string data,
+    # data 1 - Encoding string type,
+    # data 2 - string length (in bytes, 1-based),
+    # data 3 to 16 - system firmware name string data - 14 bytes,
+    # data 17 - extra byte.
+    ${system_name}=  Generate Random String  15  [LETTERS]
+    ${system_name}  ${name_hex_data}=  Identify Request Data  ${system_name}
+    # Consider random string generated is 'zwclMXwfczMvcYz'.
+    # The request data bytes will be 15 bytes, in which 14 bytes are only exepcted.
+
+    # Check if the Set System Info Parameter for param 2 - System Name throws error for invalid request data.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param2_System_Name']['Set'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param2_System_Name']['Set'][0]} ${system_name}
+
+
+Verify System Info Primary OS Name
+    [Documentation]  Verify Primary OS Name of System Info Parameter via IPMI,
+    ...  by setting a valid os version and verify whether it is updated as expected.
+    [Tags]  Verify_System_Info_Primary_OS_Name
+
+    # os_version_name given in variable section which is a 14 byte data.
+    ${os_name}  ${os_hex_data}=  Identify Request Data  ${valid_os_version_name}
+
+    # Set Primary OS Name of System Info Parameter.
+    Set Primary OS Name  ${os_name}
+
+    # Get Primary OS Name of System Info Parameter.
+    # Compare with the assigned os version name data.
+    ${pr_os}=  Get Primary OS Name
+    # The response data will something be like,
+    # ${pr_os}= ["11","00","00","0e","56","65","72","73","69","6f","6e","32","2e","31","32","33"].
+    Should Be Equal  ${pr_os[4:]}  ${os_hex_data}
+
+
+Verify System Info Primary OS Name After BMC Reboot
+    [Documentation]  Verify setting valid os version name in Primary OS Name,
+    ...  of System Info Parameter and verify it retains after BMC Reboot via IPMI.
+    [Tags]  Verify_System_Info_Primary_OS_Name_After_BMC_Reboot
+
+    # os_version_name given in variable section which is a 14 byte data.
+    ${os_name}  ${os_hex_data}=  Identify Request Data  ${valid_os_version_name}
+
+    # Set Primary OS Name of System Info Parameter.
+    Set Primary OS Name  ${os_name}
+
+    # Get Primary OS Name of System Info Parameter.
+    # Compare with the assigned os version name data.
+    ${pr_os}=  Get Primary OS Name
+    # The response data will something be like,
+    # ${pr_os}= ["11","00","00","0e","56","65","72","73","69","6f","6e","32","2e","31","32","33"].
+    Should Be Equal  ${pr_os[4:]}  ${os_hex_data}
+
+    # Cold Reset Via IPMI
+    IPMI Std MC Reset Cold (off)
+
+    # Since Primary OS Name is non-volatile,
+    # compare with response data of Get Primary OS Name,
+    # with assigned OS version name.
+    ${pr_os}=  Get Primary OS Name
+    # The response data should be,
+    # ${pr_os}= ["11","00","00","0e","56","65","72","73","69","6f","6e","32","2e","31","32","33"].
+    Should Be Equal  ${pr_os[4:]}  ${os_hex_data}
+
+
+Verify Get System Info Primary OS Name With Invalid Data Length
+    [Documentation]  Verify Get System Info Parameter Primary OS Name via IPMI with extra bytes,
+    ...  and expect to get the error message for invalid length.
+    [Tags]  Verify_Get_System_Info_Primary_OS_Name_With_Invalid_Data_Length
+
+    # Check if the Get System Info Parameter for param 3 - Primary OS Name throws error for invalid request data.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param3_Primary_OS_Name']['Get'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param3_Primary_OS_Name']['Get'][0]} 0x00
+
+
+Verify Set System Info Primary OS Name With Invalid Data Length
+    [Documentation]  Verify setting invalid os version name to Primary OS Name,
+    ...  of Set System Info Parameter via IPMI,
+    ...  and expect to get the error message for invalid length.
+    [Tags]  Verify_Set_System_Info_Primary_OS_Name_With_Invalid_Data_Length
+
+    # invalid_os_version given in variable section which is a 15 byte data,
+    # The actual request byte should be 16 byte data where,
+    # data 1 - Encoding string type,
+    # data 2 - string length (in bytes, 1-based),
+    # data 3 to 16 - system firmware name string data - 14 bytes,
+    # Here 15 bytes so, data 17 - extra byte.
+    ${os_name}  ${name_hex_data}=  Identify Request Data  ${invalid_os_version}
+
+    # Check if the Set System Info Parameter for param 3 - Primary OS Name throws error for invalid data request.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param3_Primary_OS_Name']['Set'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param3_Primary_OS_Name']['Set'][0]} ${os_name}
+
+
+Verify System Info OS Name
+    [Documentation]  Verify setting valid os version to OS Name,
+    ...  of System Info Parameter via IPMI and verify whether it updates as expected.
+    [Tags]  Verify_System_Info_OS_Name
+
+    # os_version_name given in variable section which is a 14 byte data.
+    ${os_name}  ${os_hex_data}=  Identify Request Data  ${valid_os_version_name}
+
+    # Set OS Name of System Info Parameters.
+    Set OS Name  ${os_name}
+
+    # Get the OS Name and compare against given os_version_name.
+    ${sysos}=  Get OS Name
+    # The response data will something be like,
+    # ${sysos}= ["11","00","00","0e","56","65","72","73","69","6f","6e","32","2e","31","32","33"].
+    Should Be Equal  ${sysos[4:]}  ${os_hex_data}
+
+
+Verify System Info OS Name After BMC Reboot
+    [Documentation]  Verify setting valid os version name for OS Name,
+    ...  of System Info Parameter and verify it changes to default after BMC Reboot via IPMI.
+    [Tags]  Verify_System_Info_OS_Name_After_BMC_Reboot
+
+    # os_version_name given in variable section which is a 14 byte data.
+    ${os_name}  ${os_hex_data}=  Identify Request Data  ${valid_os_version_name}
+
+    # Set OS Name of System Info Parameters.
+    Set OS Name  ${os_name}
+
+    # Get the OS Name and compare against given os_version_name.
+    ${sysos}=  Get OS Name
+    # The response data will something be like,
+    # ${sysos}= ["11","00","00","0e","56","65","72","73","69","6f","6e","32","2e","31","32","33"].
+    Should Be Equal  ${sysos[4:]}  ${os_hex_data}
+
+    # Cold Reset via IPMI
+    IPMI Std MC Reset Cold (off)
+
+    # Since OS Name is volatile,
+    # compare with response data of Get OS Name,
+    # with default OS Name.
+    ${sysos}=  Get OS Name
+    # Should return default response data.
+    Should Be Equal  ${sysos[2:]}  ${default_os_name}
+
+
+Verify Get System Info OS Name With Invalid Data Length
+    [Documentation]  Verify OS Name of Get System Info Parameter via IPMI,
+    ...  with extra bytes, and expect to get the error message for invalid length.
+    [Tags]  Verify_Get_System_Info_OS_Name_With_Invalid_Data_Length
+
+    # Check if the Get System Info Parameter for param 4 - OS Name throws error for invalid request data.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param4_OS_Name']['Get'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param4_OS_Name']['Get'][0]} 0x00
+
+
+Verify Set System Info OS Name With Invalid Data Length
+    [Documentation]  Verify setting invalid os version name to OS Name,
+    ...  of Get System Info Parameter via IPMI,
+    ...  and expect to get the error message for invalid length.
+    [Tags]  Verify_Set_System_Info_OS_Name_With_Invalid_Data_Length
+
+    # invalid_os_version given in variable section which is a 15 byte data,
+    # The actual request byte should be 16 byte data where,
+    # data 1 - Encoding string type,
+    # data 2 - string length (in bytes, 1-based),
+    # data 3 to 16 - system firmware name string data - 14 bytes,
+    # Here 15 bytes so, data 17 - extra byte.
+    ${os_name}  ${name_hex_data}=  Identify Request Data  ${invalid_os_version}
+
+    # Check if the Set System Info Parameter for param 4 - OS Name throws error for invalid request data.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param4_OS_Name']['Set'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param4_OS_Name']['Set'][0]} ${os_name}
+
+
+Verify System Info Present OS Version Number
+    [Documentation]  Verify setting valid os version for Present OS Version Number,
+    ...  of System Info Parameter via IPMI and verify whether it is updated as expected.
+    [Tags]  Verify_System_Info_Present_OS_Version_Number
+
+    # os_version_name given in variable section which is a 14 byte data.
+    ${os_name}  ${os_hex_data}=  Identify Request Data  ${valid_os_version_name}
+
+    # Set Present OS Version Number for System Info Parameters.
+    Set Present OS Version Number  ${os_name}
+
+    # Get Present OS Version Number for System Info Parameters,
+    # compare with response data of Get OS Name,
+    # with assigned os version name.
+    ${os_version}=  Get Present OS Version Number
+    # The response data will something be like,
+    # ${os_version}= ["11","00","00","0e","56","65","72","73","69","6f","6e","32","2e","31","32","33"].
+    Should Be Equal  ${os_version[4:]}  ${os_hex_data}
+
+
+Verify Get System Info Present OS Version Number With Invalid Data Length
+    [Documentation]  Verify Get System Info Parameter Present OS Version Number via IPMI,
+    ...  with extra bytes, and expect to get the error message for invalid length.
+    [Tags]  Verify_Get_System_Info_Present_OS_Version_Number_With_Invalid_Data_Length
+
+    # Check if the Get System Info Parameter for param 5 - Present OS Version Number throws error for invalid request data.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param5_Present_OS_Version_number']['Get'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param5_Present_OS_Version_number']['Get'][0]} 0x00
+
+
+Verify Set System Info Present OS Version Number With Invalid Data Length
+    [Documentation]  Verify setting invalid os version to Present OS Version Number
+    ...  of Set System Info Parameter via IPMI,
+    ...  and expect to get the error message for invalid length.
+    [Tags]  Verify_Set_System_Info_Present_OS_Version_Number_With_Invalid_Data_Length
+
+    # invalid_os_version given in variable section which is a 15 byte data.
+    # The actual request byte should be 16 byte data where,
+    # data 1 - Encoding string type,
+    # data 2 - string length (in bytes, 1-based),
+    # data 3 to 16 - system firmware name string data - 14 bytes,
+    # Here 15 bytes so, data 17 - extra byte.
+    ${os_name}  ${name_hex_data}=  Identify Request Data  ${invalid_os_version}
+
+    # Check if the Set System Info Parameter for param 5 - Present OS Version Number throws error for invalid request data.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param5_Present_OS_Version_number']['Set'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param5_Present_OS_Version_number']['Set'][0]} ${os_name}
+
+
+*** Keywords ***
+
+Identify Request Data
+    [Documentation]  Convert string to hexadecimal request data with and without prefix 0x.
+    [Arguments]  ${string}
+
+    # Given a string, convert to hexadecimal and prefix with 0x.
+    # Consider random string generated ${string} is 'zwc'.
+    ${fw_ver_hex_list}=  Create List
+    ${hex_data_list}=  Create List
+    ${resp_data_list}=  Split String With Index  ${string}  1
+    # ${resp_data_list} will be ['z', 'w', 'c'].
+    FOR  ${data}  IN  @{resp_data_list}
+        # prefixes 0x by default.
+        # Example : 0x00.
+        ${hex_value}=  Evaluate  hex(ord("${data}"))
+        # provides only hexadecimal bytes.
+        # Example : 00.
+        ${hex}=  Evaluate  hex(ord("${data}"))[2:]
+        # With prefix 0x.
+        Append To List  ${fw_ver_hex_list}  ${hex_value}
+        # Without prefix.
+        Append To List  ${hex_data_list}  ${hex}
+    END
+    ${fw_ver_hex}=  Evaluate  " ".join(${fw_ver_hex_list})
+
+    [Return]  ${fw_ver_hex}  ${hex_data_list}
+
+
+Get System Info Set In Progress
+    [Documentation]  Run Get system info parameter command for set-in-progress and return response data.
+
+    # Get System Info Parameter for param 0 - Set In Progress.
+    ${resp}=  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param0_Set_In_Progress']['Get'][0]}
+    ${resp}=  Split String  ${resp}
+
+    [Return]  ${resp}
+
+
+Set System Info Set In Progress
+    [Documentation]  Set System Info Set In Progress with valid state via IPMI.
+    [Arguments]  ${state}
+
+    # Set System Info Parameter for param 0 - Set In Progress.
+    # ${state} can be can be any - 00 | 01 | 10 | 11.
+    Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param0_Set_In_Progress']['Set'][0]} ${state}
+
+
+Get System Firmware Version
+    [Documentation]  Run Get system info parameter command for system firmware version and return response data.
+
+    # Get System Info Parameter for param 1 - System Firmware Version.
+    ${resp}=  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param1_System_Firmware_Version']['Get'][0]}
+    ${resp}=  Split String  ${resp}
+
+    [Return]  ${resp}
+
+
+Set System Firmware Version
+    [Documentation]  Set System Firmware Version for System Info with valid version.
+    [Arguments]  ${version}
+
+    # Set System Info Parameter for param 1 - System Firmware Version.
+    # ${version} can be any 14 data.
+    Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param1_System_Firmware_Version']['Set'][0]} ${version}
+
+
+Get System Name
+    [Documentation]  Run system info parameter command for system name and return response data.
+
+    # Get System Info Parameter for param 2 - System Name.
+    ${resp}=  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param2_System_Name']['Get'][0]}
+    ${resp}=  Split String  ${resp}
+
+    [Return]  ${resp}
+
+
+Set System Name
+    [Documentation]  Set System Name for System Info with valid name.
+    [Arguments]  ${sys_name}
+
+    # Set System Info Parameter for param 2 - System Name.
+    # ${sys_name} can be any 14 byte data.
+    Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param2_System_Name']['Set'][0]} ${sys_name}
+
+
+Get Primary OS Name
+    [Documentation]  Run Get System Info command for primary OS name and return response data.
+
+    # Get System Info Parameter for param 3 - Primary OS Name.
+    ${resp}=  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param3_Primary_OS_Name']['Get'][0]}
+    ${resp}=  Split String  ${resp}
+
+    [Return]  ${resp}
+
+
+Set Primary OS Name
+    [Documentation]  Set Primary OS Name for System Info with valid os name.
+    [Arguments]  ${os_name}
+
+    # Set System Info Parameter for param 3 - Primary OS Name.
+    # ${os_name} can be any 14 byte data.
+    Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param3_Primary_OS_Name']['Set'][0]} ${os_name}
+
+
+Get OS Name
+    [Documentation]  Run get System Info command for OS name and return response data.
+
+    # Get System Info Parameter for param 4 - OS Name.
+    ${resp}=  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param4_OS_Name']['Get'][0]}
+    ${resp}=  Split String  ${resp}
+
+    [Return]  ${resp}
+
+
+Set OS Name
+    [Documentation]  Set OS Name for System Info with valid os name.
+    [Arguments]  ${os_name}
+
+    # Set System Info Parameter for param 4 - OS Name.
+    # ${os_name} can be any 14 byte data.
+    Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param4_OS_Name']['Set'][0]} ${os_name}
+
+
+Get Present OS Version Number
+    [Documentation]  Run Get System Info command for present os version name and return response.
+
+    # Get System Info Parameter for param 5 - Present OS Version Number.
+    ${resp}=  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param5_Present_OS_Version_number']['Get'][0]}
+    ${resp}=  Split String  ${resp}
+
+    [Return]  ${resp}
+
+
+Set Present OS Version Number
+    [Documentation]  Set Present OS Version Number for System Info with valid os version.
+    [Arguments]  ${os_name}
+
+    # Set System Info Parameter for param 5 - Present OS Version Number.
+    # ${os_name} can be any 14 byte data
+    Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param5_Present_OS_Version_number']['Set'][0]} ${os_name}
+
+
+Add Prefix To List Objects And Join String
+    [Documentation]  Adding prefix '0x' to each list object and join the string.
+    [Arguments]  ${list}
+
+    # ${list} contains list of hexadecimal data.
+
+    # Prefix Bytes with 0x for each data bytes and makes a string of request bytes.
+    # Prefix Bytes function under lib/ipmi_utils.py.
+    # Prefixes every list item with 0x and returns list of prefixed hexadecimal data.
+    ${prefix_list}=  Prefix Bytes  ${list}
+    ${prefix_list}=  Evaluate  " ".join(${prefix_list})
+
+    [Return]  ${prefix_list}
+
+
+Suite Setup Execution
+    [Documentation]  Suite setup execution to fetch all the default response bytes,
+    ...  prefix each byte with 0x and make them a suite variable.
+
+    # Get Default Values of each parameters.
+    # Set In Progress - param 0.
+    ${resp}=  Get System Info Set In Progress
+    # Configuration parameter data - 11 xx (xx can be any - 00 | 01 | 10 | 11).
+    ${set_in_progress}=  Set Variable  ${resp[1]}
+
+    Set Suite Variable  ${set_in_progress}
+
+    # System Firmware Version - param 1.
+    ${resp}=  Get System Firmware Version
+    # Configuration parameter data - 11 x1 x2 xx xx xx xx .. xx (xx - 14 bytes).
+    # x1 - encoding, x2 - string length in bytes.
+    ${sys_fw_version}=  Set Variable  ${resp[2:]}
+    # Prefix all bytes with 0x.
+    ${sys_fw_version_string}=  Add Prefix To List Objects And Join String  ${sys_fw_version}
+
+    Set Suite Variable  ${sys_fw_version}
+    Set Suite Variable  ${sys_fw_version_string}
+
+    # System Name - param 2.
+    ${resp}=  Get System Name
+    # Configuration parameter data - 11 x1 x2 xx xx xx xx .. xx (xx - 14 bytes).
+    # x1 - encoding, x2 - string length in bytes.
+    ${sys_name_default}=  Set Variable  ${resp[2:]}
+    # Prefix all bytes with 0x.
+    ${sys_name_hex_default}=  Add Prefix To List Objects And Join String  ${sys_name_default}
+
+    Set Suite Variable  ${sys_name_default}
+    Set Suite Variable  ${sys_name_hex_default}
+
+    # Primary OS Name - param 3.
+    ${resp}=  Get Primary OS Name
+    # Configuration parameter data - 11 x1 x2 xx xx xx xx .. xx (xx - 14 bytes).
+    # x1 - encoding, x2 - string length in bytes.
+    ${primary_os_name}=  Set Variable  ${resp[2:]}
+    # Prefix all bytes with 0x.
+    ${primary_os_name_hex}=  Add Prefix To List Objects And Join String  ${primary_os_name}
+
+    Set Suite Variable  ${primary_os_name}
+    Set Suite Variable  ${primary_os_name_hex}
+
+    # OS Name - param 4.
+    ${resp}=  Get OS Name
+    # Configuration parameter data - 11 x1 x2 xx xx xx xx .. xx (xx - 14 bytes).
+    # x1 - encoding, x2 - string length in bytes.
+    ${default_os_name}=  Set Variable  ${resp[2:]}
+    # Prefix all bytes with 0x.
+    ${default_os_name_hex}=  Add Prefix To List Objects And Join String  ${default_os_name}
+
+    Set Suite Variable  ${default_os_name}
+    Set Suite Variable  ${default_os_name_hex}
+
+    # Present OS Version Number - param 5.
+    ${resp}=  Get Present OS Version Number
+    # Configuration parameter data - 11 x1 x2 xx xx xx xx .. xx (xx - 14 bytes).
+    # x1 - encoding, x2 - string length in bytes.
+    ${present_os_num}=  Set Variable  ${resp[2:]}
+    # Prefix all bytes with 0x.
+    ${present_os_num_hex}=  Add Prefix To List Objects And Join String  ${present_os_num}
+
+    Set Suite Variable  ${present_os_num}
+    Set Suite Variable  ${present_os_num_hex}
+
+
+Restore Default Configuration
+    [Documentation]  Restore all system info parameter response data to,
+    ...  default data obtained from suite setup.
+
+    # All variable to set are suite variables declared in suite setup.
+
+    # Set In Progress - param 0.
+    Set System Info Set In Progress  0x${set_in_progress}
+
+    # System Firmware Version - param 1.
+    Run IPMI Standard Command  raw 0x06 0x58 0x01 0x00 ${sys_fw_version_string}
+
+    # System Name - param 2.
+    Run IPMI Standard Command  raw 0x06 0x58 0x02 0x00 ${sys_name_hex_default}
+
+    # Primary OS Name - param 3.
+    Run IPMI Standard Command  raw 0x06 0x58 0x03 0x00 ${primary_os_name_hex}
+
+    # OS Name - param 4.
+    Run IPMI Standard Command  raw 0x06 0x58 0x04 0x00 ${default_os_name_hex}
+
+    # Present OS Version Number - param 5.
+    Run IPMI Standard Command  raw 0x06 0x58 0x05 0x00 ${present_os_num_hex}
+
+    FFDC On Test Case Fail
