diff --git a/bin/gen_list.sh b/bin/gen_list.sh
index 080e61a..2c464dd 100755
--- a/bin/gen_list.sh
+++ b/bin/gen_list.sh
@@ -6,7 +6,7 @@
 # example.
 
 if ! test "${default_delim+defined}" ; then
-  readonly default_delim=" "
+    readonly default_delim=" "
 fi
 
 # Performance note:  It is important for these functions to run quickly.  One way to increase their speed is
@@ -15,104 +15,104 @@
 # the functions.  The cost of this is that it makes the functions slightly more difficult to read.
 
 
-function add_list_element {
-  # local list_element="${1}"
-  # local list_name="${2}"
-  # local delim="${3:-${default_delim}}"
-  # local position="${4:-back}"
+function add_list_element() {
+    # local list_element="${1}"
+    # local list_name="${2}"
+    # local delim="${3:-${default_delim}}"
+    # local position="${4:-back}"
 
-  # Add the list_element to the list named in list_name.
+    # Add the list_element to the list named in list_name.
 
-  # Description of argument(s):
-  # list_element                    The list element to be added.
-  # list_name                       The name of the list to be modified.
-  # delim                           The delimiter used to separate list elements.
-  # position                        Indicates the position in the list where the new element should be added
-  #                                 ("front"/"back").
+    # Description of argument(s):
+    # list_element                    The list element to be added.
+    # list_name                       The name of the list to be modified.
+    # delim                           The delimiter used to separate list elements.
+    # position                        Indicates the position in the list where the new element should be added
+    #                                 ("front"/"back").
 
-  if [ -z "${!2}" ] ; then
-    # The list is blank. Simply assign it the list_element value and return.
-    eval "${2}=\"${1}\""
-    return
-  fi
+    if [ -z "${!2}" ] ; then
+        # The list is blank. Simply assign it the list_element value and return.
+        eval "${2}=\"${1}\""
+        return
+    fi
 
-  if [ "${4:-back}" == "back" ] ; then
-    # Append the list_element to the back of the list and return.
-    eval "${2}=\"\${${2}}\${3-${default_delim}}\${1}\""
-    return
-  fi
+    if [ "${4:-back}" == "back" ] ; then
+        # Append the list_element to the back of the list and return.
+        eval "${2}=\"\${${2}}\${3-${default_delim}}\${1}\""
+        return
+    fi
 
-  # Append the list_element to the front of the list and return.
-  eval "${2}=\"\${1}\${3-${default_delim}}\${${2}}\""
+    # Append the list_element to the front of the list and return.
+    eval "${2}=\"\${1}\${3-${default_delim}}\${${2}}\""
 
 }
 
 
-function remove_list_element {
-  # local list_element="${1}"
-  # local list_name="${2}"
-  local delim="${3:-${default_delim}}"
+function remove_list_element() {
+    # local list_element="${1}"
+    # local list_name="${2}"
+    local delim="${3:-${default_delim}}"
 
-  # Remove all occurrences of list_element from the list named in list_name.
+    # Remove all occurrences of list_element from the list named in list_name.
 
-  # Description of argument(s):
-  # list_element                    The list element to be removed.
-  # list_name                       The name of the list to be modified.
-  # delim                           The delimiter used to separate list elements.
+    # Description of argument(s):
+    # list_element                    The list element to be removed.
+    # list_name                       The name of the list to be modified.
+    # delim                           The delimiter used to separate list elements.
 
-  local __rle_new_list__="${!2}"
+    local __rle_new_list__="${!2}"
 
-  # Special case: The list contains one element which matches the specified list element:
-  if [ "${1}" == "${__rle_new_list__}" ] ; then
-    eval ${2}=\"\"
-    return
-  fi
+    # Special case: The list contains one element which matches the specified list element:
+    if [ "${1}" == "${__rle_new_list__}" ] ; then
+        eval ${2}=\"\"
+        return
+    fi
 
-  # Replace all occurrences of list_element that are bounded by the delimiter on both sides.
-  __rle_new_list__="${__rle_new_list__//${delim}${1}${delim}/${delim}}"
-  # Replace list_item if it occurs at the beginning of the string and is bounded on the right by the
-  # delimiter.
-  __rle_new_list__="${__rle_new_list__#${1}${delim}}"
-  # Replace list_item if it occurs at the end of the string and is bounded on the left by the delimiter.
-  __rle_new_list__="${__rle_new_list__%${delim}${1}}"
+    # Replace all occurrences of list_element that are bounded by the delimiter on both sides.
+    __rle_new_list__="${__rle_new_list__//${delim}${1}${delim}/${delim}}"
+    # Replace list_item if it occurs at the beginning of the string and is bounded on the right by the
+    # delimiter.
+    __rle_new_list__="${__rle_new_list__#${1}${delim}}"
+    # Replace list_item if it occurs at the end of the string and is bounded on the left by the delimiter.
+    __rle_new_list__="${__rle_new_list__%${delim}${1}}"
 
-  # Set caller's variable to new value.
-  eval ${2}=\"\${__rle_new_list__}\"
+    # Set caller's variable to new value.
+    eval ${2}=\"\${__rle_new_list__}\"
 
 }
 
 
-function cleanup_path_slashes {
-  local var_name="${1}" ; shift
+function cleanup_path_slashes() {
+    local var_name="${1}" ; shift
 
-  # For the variable named in var_name, replace all multiple-slashes with single slashes and strip any
-  # trailing slash.
+    # For the variable named in var_name, replace all multiple-slashes with single slashes and strip any
+    # trailing slash.
 
-  # Description of argument(s):
-  # var_name                        The name of the variable whose contents are to be changed.
+    # Description of argument(s):
+    # var_name                        The name of the variable whose contents are to be changed.
 
-  local cmd_buf
+    local cmd_buf
 
-  cmd_buf="${var_name}=\$(echo \"\${${var_name}}\" | sed -re 's#[/]+#/#g' -e 's#/\$##g')"
-  eval "${cmd_buf}"
+    cmd_buf="${var_name}=\$(echo \"\${${var_name}}\" | sed -re 's#[/]+#/#g' -e 's#/\$##g')"
+    eval "${cmd_buf}"
 
 }
 
 
-function remove_path {
-  local dir_path="${1}" ; shift
-  local path_var="${1:-PATH}" ; shift
+function remove_path() {
+    local dir_path="${1}" ; shift
+    local path_var="${1:-PATH}" ; shift
 
-  # Remove all occurrences of dir_path from the path variable named in path_var.
+    # Remove all occurrences of dir_path from the path variable named in path_var.
 
-  # Note that this function will remove extraneous slashes from the elements of path_var.
+    # Note that this function will remove extraneous slashes from the elements of path_var.
 
-  # Description of argument(s):
-  # dir_path                        The directory to be removed from the path variable.
-  # path_var                        The name of a variable containing directory paths separated by colons.
+    # Description of argument(s):
+    # dir_path                        The directory to be removed from the path variable.
+    # path_var                        The name of a variable containing directory paths separated by colons.
 
-  cleanup_path_slashes dir_path || return 1
-  cleanup_path_slashes ${path_var} || return 1
-  remove_list_element "${dir_path}" "${path_var}" : || return 1
+    cleanup_path_slashes dir_path || return 1
+    cleanup_path_slashes ${path_var} || return 1
+    remove_list_element "${dir_path}" "${path_var}" : || return 1
 
 }
diff --git a/bin/gen_setup.sh b/bin/gen_setup.sh
index 2aed0ea..148fe4b 100755
--- a/bin/gen_setup.sh
+++ b/bin/gen_setup.sh
@@ -13,43 +13,43 @@
 shopt -s extglob
 
 
-function get_pgm_path_info {
-  local program_path_var="${1:-program_path}" ; shift
-  local program_name_var="${1:-program_name}" ; shift
-  local program_dir_path_var="${1:-program_dir_path}" ; shift
-  local follow_links="${1:-0}" ; shift
+function get_pgm_path_info() {
+    local program_path_var="${1:-program_path}" ; shift
+    local program_name_var="${1:-program_name}" ; shift
+    local program_dir_path_var="${1:-program_dir_path}" ; shift
+    local follow_links="${1:-0}" ; shift
 
-  # Determine the program path, name and dir path and assign them to the variables indicated by the caller.
+    # Determine the program path, name and dir path and assign them to the variables indicated by the caller.
 
-  # Description of argument(s):
-  # program_path_var                The name of the variable to receive the program path.
-  # program_name_var                The name of the variable to receive the program name.
-  # program_dir_path_var            The name of the variable to receive the program dir path.
-  # follow_links                    If the program running is actually a link to another file, use that file
-  #                                 when calculating the above values.
+    # Description of argument(s):
+    # program_path_var                The name of the variable to receive the program path.
+    # program_name_var                The name of the variable to receive the program name.
+    # program_dir_path_var            The name of the variable to receive the program dir path.
+    # follow_links                    If the program running is actually a link to another file, use that file
+    #                                 when calculating the above values.
 
-  local _spn_loc_program_path_="${0}"
+    local _spn_loc_program_path_="${0}"
 
-  # The program name is the program path minus all characters up to and including the first slash.
-  local _spn_loc_program_name_=${_spn_loc_program_path_##*/}
-  # The program dir path is the program path minus everything from the last slash to the end of the string.
-  local _spn_loc_program_dir_path_=${_spn_loc_program_path_%${_spn_loc_program_name_}}
+    # The program name is the program path minus all characters up to and including the first slash.
+    local _spn_loc_program_name_=${_spn_loc_program_path_##*/}
+    # The program dir path is the program path minus everything from the last slash to the end of the string.
+    local _spn_loc_program_dir_path_=${_spn_loc_program_path_%${_spn_loc_program_name_}}
 
-  # If program dir path does not start with a slash then it is relative.  Convert it to absolute.
-  if [ "${_spn_loc_program_dir_path_:0:1}" != "/" ] ; then
-    _spn_loc_program_dir_path_="$(readlink -f ${_spn_loc_program_dir_path_})/"
-    # Re-assemble the parts into program path variable.
-    _spn_loc_program_path_="${_spn_loc_program_dir_path_}${_spn_loc_program_name_}"
-  fi
+    # If program dir path does not start with a slash then it is relative.  Convert it to absolute.
+    if [ "${_spn_loc_program_dir_path_:0:1}" != "/" ] ; then
+        _spn_loc_program_dir_path_="$(readlink -f ${_spn_loc_program_dir_path_})/"
+        # Re-assemble the parts into program path variable.
+        _spn_loc_program_path_="${_spn_loc_program_dir_path_}${_spn_loc_program_name_}"
+    fi
 
-  if (( follow_links )) ; then
-    _spn_loc_program_path_=$(readlink -f ${_spn_loc_program_path_})
-    # Re-calculate program_name in case it is different now.
-    _spn_loc_program_name_=${_spn_loc_program_path_##*/}
-  fi
+    if (( follow_links )) ; then
+        _spn_loc_program_path_=$(readlink -f ${_spn_loc_program_path_})
+        # Re-calculate program_name in case it is different now.
+        _spn_loc_program_name_=${_spn_loc_program_path_##*/}
+    fi
 
-  # Set caller's variables.
-  cmd_buf="${program_path_var}=\"\${_spn_loc_program_path_}\" ; ${program_name_var}=\"\${_spn_loc_program_name_}\" ; ${program_dir_path_var}=\"\${_spn_loc_program_dir_path_}\""
-  eval "${cmd_buf}"
+    # Set caller's variables.
+    cmd_buf="${program_path_var}=\"\${_spn_loc_program_path_}\" ; ${program_name_var}=\"\${_spn_loc_program_name_}\" ; ${program_dir_path_var}=\"\${_spn_loc_program_dir_path_}\""
+    eval "${cmd_buf}"
 
 }
diff --git a/bin/jenkins_funcs.sh b/bin/jenkins_funcs.sh
index 5524cac..61c55ce 100755
--- a/bin/jenkins_funcs.sh
+++ b/bin/jenkins_funcs.sh
@@ -3,171 +3,171 @@
 # This file contains bash functions which may be of use to our Jenkins jobs.
 
 
-function process_git {
-  # Do not echo all commands to terminal.
-  set +x
-  local git_dir_path="${1}" ; shift || :
-  local post_clone_command="${1}" ; shift || :
+function process_git() {
+    # Do not echo all commands to terminal.
+    set +x
+    local git_dir_path="${1}" ; shift || :
+    local post_clone_command="${1}" ; shift || :
 
-  # Do git processing for this Jenkins job which includes:
-  # - Recognizing existing git repo if appropriate.
-  # - Cloning git repo.
-  # - Running caller's post_clone_command.
+    # Do git processing for this Jenkins job which includes:
+    # - Recognizing existing git repo if appropriate.
+    # - Cloning git repo.
+    # - Running caller's post_clone_command.
 
-  # Description of argument(s):
-  # git_dir_path                    The location of the git dir path (e.g.
-  #                                 "/home/johndoe/git/").  If the
-  #                                 git_dir_path already exists and it was
-  #                                 specified explicitly by the user, this
-  #                                 function will neither clone the git repo
-  #                                 to this path nor run the
-  #                                 post_clone_commands, i.e. the indicated
-  #                                 git repo will be used as-is.
-  # post_clone_command              Any valid bash command to be run after git
-  #                                 clone of openbmc-test-automation. Note
-  #                                 that this is intended primarily for Open
-  #                                 BMC Test code developers who may wish to
-  #                                 cherry pick code changes for testing.
+    # Description of argument(s):
+    # git_dir_path                    The location of the git dir path (e.g.
+    #                                 "/home/johndoe/git/").  If the
+    #                                 git_dir_path already exists and it was
+    #                                 specified explicitly by the user, this
+    #                                 function will neither clone the git repo
+    #                                 to this path nor run the
+    #                                 post_clone_commands, i.e. the indicated
+    #                                 git repo will be used as-is.
+    # post_clone_command              Any valid bash command to be run after git
+    #                                 clone of openbmc-test-automation. Note
+    #                                 that this is intended primarily for Open
+    #                                 BMC Test code developers who may wish to
+    #                                 cherry pick code changes for testing.
 
-  if [ -d "${git_dir_path}" -a "${git_dir_path}" != "${WORKSPACE}" ] ; then
-    echo "\"${git_dir_path}\" already exists and is not the standard" \
-         "location of \"${WORKSPACE}\" so no git processing is required."
-    return
-  fi
+    if [ -d "${git_dir_path}" -a "${git_dir_path}" != "${WORKSPACE}" ] ; then
+        echo "\"${git_dir_path}\" already exists and is not the standard" \
+            "location of \"${WORKSPACE}\" so no git processing is required."
+        return
+    fi
 
-  # Echo all subsequent commands to terminal.
-  set -x
-  mkdir -p "${git_dir_path}" || return 1
-  cd "${git_dir_path}" || return 1
+    # Echo all subsequent commands to terminal.
+    set -x
+    mkdir -p "${git_dir_path}" || return 1
+    cd "${git_dir_path}" || return 1
 
-  echo "Remove old git repo files."
-  rm -Rf ./openbmc-build-scripts
-  rm -Rf ./openbmc-test-automation
+    echo "Remove old git repo files."
+    rm -Rf ./openbmc-build-scripts
+    rm -Rf ./openbmc-test-automation
 
-  git clone https://gerrit.openbmc-project.xyz/openbmc/openbmc-build-scripts\
-    || return 1
-  git clone https://github.com/openbmc/openbmc-test-automation.git || return 1
+    git clone https://gerrit.openbmc-project.xyz/openbmc/openbmc-build-scripts\
+        || return 1
+    git clone https://github.com/openbmc/openbmc-test-automation.git || return 1
 
-  if [ ! -z "${post_clone_command}" ] ; then
-    cd openbmc-test-automation || return 1
-    echo "Run the caller's post clone command."
-    eval "${post_clone_command}" || return 1
-  fi
+    if [ ! -z "${post_clone_command}" ] ; then
+        cd openbmc-test-automation || return 1
+        echo "Run the caller's post clone command."
+        eval "${post_clone_command}" || return 1
+    fi
 
 }
 
 
-function process_docker {
-  # Do not echo all commands to terminal.
-  set +x
-  local git_dir_path="${1}" ; shift || :
+function process_docker() {
+    # Do not echo all commands to terminal.
+    set +x
+    local git_dir_path="${1}" ; shift || :
 
-  # Source the docker script to prepare our environment for calling docker.
+    # Source the docker script to prepare our environment for calling docker.
 
-  # Description of argument(s):
-  # git_dir_path                    The location of the git dir path (e.g.
-  #                                 "/home/johndoe/git/") to be used.
+    # Description of argument(s):
+    # git_dir_path                    The location of the git dir path (e.g.
+    #                                 "/home/johndoe/git/") to be used.
 
-  # Set global DOCKER_IMG_NAME.
-  DOCKER_IMG_NAME="openbmc/obmc-docker-image"
+    # Set global DOCKER_IMG_NAME.
+    DOCKER_IMG_NAME="openbmc/obmc-docker-image"
 
-  echo "Build the docker image required to execute the robot tests."
-  # Echo all subsequent commands to terminal.
-  set -x
-  cd "${git_dir_path}openbmc-build-scripts" || return 1
-  . "./scripts/build-qemu-robot-docker.sh" || return 1
+    echo "Build the docker image required to execute the robot tests."
+    # Echo all subsequent commands to terminal.
+    set -x
+    cd "${git_dir_path}openbmc-build-scripts" || return 1
+    . "./scripts/build-qemu-robot-docker.sh" || return 1
 
-  cd "${git_dir_path}" || return 1
+    cd "${git_dir_path}" || return 1
 
 }
 
 
 if ! test "${stock_robot_program_parms+defined}" ; then
-  readonly stock_robot_program_parms="openbmc_host openbmc_username"\
-" openbmc_password os_host os_username os_password quiet debug test_mode"
-  readonly master_robot_gen_parms="console consolecolors outputdir output log"\
-" report loglevel include"
+    readonly stock_robot_program_parms="openbmc_host openbmc_username"\
+        " openbmc_password os_host os_username os_password quiet debug test_mode"
+    readonly master_robot_gen_parms="console consolecolors outputdir output log"\
+        " report loglevel include"
 fi
-function run_docker_robot {
-  # Do not echo all commands to terminal.
-  set +x
-  local robot_file_path="${1}" ; shift || :
-  local robot_pgm_parms="${1-}" ; shift || :
-  local robot_gen_parms="${1:-${master_robot_gen_parms}}" ; shift || :
+function run_docker_robot() {
+    # Do not echo all commands to terminal.
+    set +x
+    local robot_file_path="${1}" ; shift || :
+    local robot_pgm_parms="${1-}" ; shift || :
+    local robot_gen_parms="${1:-${master_robot_gen_parms}}" ; shift || :
 
-  # Compose a robot command string and run it in a docker environment.
+    # Compose a robot command string and run it in a docker environment.
 
-  # Description of argument(s):
-  # robot_file_path                 The file path of the robot file (with or
-  #                                 without .robot suffix).  This file path is
-  #                                 relative to the base git repository.
-  # robot_pgm_parms                 A space-separated list of parms which are
-  #                                 to be passed to the robot program via the
-  #                                 -v robot parameter.  These parms will be
-  #                                 processed in addition to the
-  #                                 stock_robot_program_parms listed above.
-  # robot_gen_parms                 A space-separated list of general robot
-  #                                 parameters understood by the robot program
-  #                                 (e.g. consolecolors, etc).
+    # Description of argument(s):
+    # robot_file_path                 The file path of the robot file (with or
+    #                                 without .robot suffix).  This file path is
+    #                                 relative to the base git repository.
+    # robot_pgm_parms                 A space-separated list of parms which are
+    #                                 to be passed to the robot program via the
+    #                                 -v robot parameter.  These parms will be
+    #                                 processed in addition to the
+    #                                 stock_robot_program_parms listed above.
+    # robot_gen_parms                 A space-separated list of general robot
+    #                                 parameters understood by the robot program
+    #                                 (e.g. consolecolors, etc).
 
-  # Strip, then re-append ".robot" so that the user can pass with or without
-  # the .robot suffix.
-  robot_file_path="${robot_file_path%.robot}.robot"
+    # Strip, then re-append ".robot" so that the user can pass with or without
+    # the .robot suffix.
+    robot_file_path="${robot_file_path%.robot}.robot"
 
-  # Determine the robot_file_name form the robot_file_path.
-  local robot_file_name="${robot_file_path%.robot}"
-  robot_file_name="${robot_file_name##*/}"
-  local robot_short_file_name="${robot_file_name%.robot}"
+    # Determine the robot_file_name form the robot_file_path.
+    local robot_file_name="${robot_file_path%.robot}"
+    robot_file_name="${robot_file_name##*/}"
+    local robot_short_file_name="${robot_file_name%.robot}"
 
-  # Set default values for robot_gen_parms.
-  local dft_console=dotted
-  local dft_consolecolors=off
-  local dft_outputdir=/status_dir
-  local dft_output=${robot_short_file_name}.output.xml
-  local dft_log=${robot_short_file_name}.log.html
-  local dft_report=${robot_short_file_name}.report.html
-  local dft_loglevel='TRACE'
-  local dft_include=''
+    # Set default values for robot_gen_parms.
+    local dft_console=dotted
+    local dft_consolecolors=off
+    local dft_outputdir=/status_dir
+    local dft_output=${robot_short_file_name}.output.xml
+    local dft_log=${robot_short_file_name}.log.html
+    local dft_report=${robot_short_file_name}.report.html
+    local dft_loglevel='TRACE'
+    local dft_include=''
 
-  local cmd_buf
-  # Loop through robot general parms setting any that have no value to a
-  # default value (defined above).
-  for parm_name in ${robot_gen_parms} ; do
-    # If the parm already has a value, continue to next loop iteration.
-    [ ! -z "${!parm_name-}" ] && continue || :
-    cmd_buf="${parm_name}=\"\${dft_${parm_name}}\""
-    eval ${cmd_buf}
-  done
+    local cmd_buf
+    # Loop through robot general parms setting any that have no value to a
+    # default value (defined above).
+    for parm_name in ${robot_gen_parms} ; do
+        # If the parm already has a value, continue to next loop iteration.
+        [ ! -z "${!parm_name-}" ] && continue || :
+        cmd_buf="${parm_name}=\"\${dft_${parm_name}}\""
+        eval ${cmd_buf}
+    done
 
-  local robot_cmd_buf='robot'
-  # Process our stock robot program parms along with the caller's
-  # robot_pgm_parms to add to the robot_cmd_buf.
-  local parm_name
-  local escape_quote_char="'\''"
-  for parm_name in ${stock_robot_program_parms} ${robot_pgm_parms} ; do
-    [ -z "${parm_name-}" ] && continue
-    robot_cmd_buf="${robot_cmd_buf} -v ${parm_name}:${!parm_name-}"
-  done
+    local robot_cmd_buf='robot'
+    # Process our stock robot program parms along with the caller's
+    # robot_pgm_parms to add to the robot_cmd_buf.
+    local parm_name
+    local escape_quote_char="'\''"
+    for parm_name in ${stock_robot_program_parms} ${robot_pgm_parms} ; do
+        [ -z "${parm_name-}" ] && continue
+        robot_cmd_buf="${robot_cmd_buf} -v ${parm_name}:${!parm_name-}"
+    done
 
-  # Process the robot general parms to add to the robot_cmd_buf.
-  for parm_name in ${robot_gen_parms} ; do
-    robot_cmd_buf="${robot_cmd_buf} --${parm_name}=${!parm_name-}"
-  done
+    # Process the robot general parms to add to the robot_cmd_buf.
+    for parm_name in ${robot_gen_parms} ; do
+        robot_cmd_buf="${robot_cmd_buf} --${parm_name}=${!parm_name-}"
+    done
 
-  # Finally append the robot file path to the robot_cmd_buf.
-  additional_parms=" ${additional_parms-}"
-  robot_cmd_buf="${robot_cmd_buf}${additional_parms} ${HOME}/openbmc-test"
-  robot_cmd_buf="${robot_cmd_buf}-automation/${robot_file_path}"
+    # Finally append the robot file path to the robot_cmd_buf.
+    additional_parms=" ${additional_parms-}"
+    robot_cmd_buf="${robot_cmd_buf}${additional_parms} ${HOME}/openbmc-test"
+    robot_cmd_buf="${robot_cmd_buf}-automation/${robot_file_path}"
 
-  # Run the docker container to execute the code update.
-  # The test results will be put in ${WORKSPACE}.
+    # Run the docker container to execute the code update.
+    # The test results will be put in ${WORKSPACE}.
 
-  cmd_buf="docker run --user=root --env=HOME=${HOME} --env=PYTHONPATH=${HOME}"
-  cmd_buf="${cmd_buf}/openbmc-test-automation/lib --workdir=${HOME} --volume"
-  cmd_buf="${cmd_buf}=${git_dir_path}:${HOME} --volume=${WORKSPACE}:/status_"
-  cmd_buf="${cmd_buf}dir --tty ${DOCKER_IMG_NAME} python -m ${robot_cmd_buf}"
-  # Echo all subsequent commands to terminal.
-  set -x
-  eval "${cmd_buf}"
+    cmd_buf="docker run --user=root --env=HOME=${HOME} --env=PYTHONPATH=${HOME}"
+    cmd_buf="${cmd_buf}/openbmc-test-automation/lib --workdir=${HOME} --volume"
+    cmd_buf="${cmd_buf}=${git_dir_path}:${HOME} --volume=${WORKSPACE}:/status_"
+    cmd_buf="${cmd_buf}dir --tty ${DOCKER_IMG_NAME} python -m ${robot_cmd_buf}"
+    # Echo all subsequent commands to terminal.
+    set -x
+    eval "${cmd_buf}"
 
 }
diff --git a/bin/plug_ins/Mem_tracker/memcheck.sh b/bin/plug_ins/Mem_tracker/memcheck.sh
index 836604e..4ee9977 100755
--- a/bin/plug_ins/Mem_tracker/memcheck.sh
+++ b/bin/plug_ins/Mem_tracker/memcheck.sh
@@ -22,128 +22,127 @@
 # pid  The pid for which you desire statistics. If this is not specified,
 # statistics will be gathered for all active pids.
 
-function get_parms {
+function get_parms() {
 
-  # Get program parms.
+    # Get program parms.
 
-  pids="${1:-$(ls /proc | grep -v [A-Za-z])}" ; shift
+    pids="${1:-$(ls /proc | grep -v [A-Za-z])}" ; shift
 
-  return 0
+    return 0
 
 }
 
 
-function exit_function {
+function exit_function() {
 
-  # Used to clean up tmp files.
+    # Used to clean up tmp files.
 
-  rm -f ${temp_file_list}
-  return
+    rm -f ${temp_file_list}
+    return
 
 }
 
 
-function validate_parms {
+function validate_parms() {
 
-  # Validate program parameters.
+    # Validate program parameters.
 
-  # Making sure only root can run our script.
-  if [ "${USER}" != "root" ] ; then
-    echo "This script must be run as root" 1>&2
-    return 1
-  fi
+    # Making sure only root can run our script.
+    if [ "${USER}" != "root" ] ; then
+        echo "This script must be run as root" 1>&2
+        return 1
+    fi
 
-  trap "exit_function $signal \$?" EXIT
-  return 0
+    trap "exit_function $signal \$?" EXIT
+    return 0
 
 }
 
 
-function get_process_mem {
+function get_process_mem() {
 
-  local pid="${1}" ; shift
-  # Count memory statistic for passed pid.
+    local pid="${1}" ; shift
+    # Count memory statistic for passed pid.
 
-  # Description of argument(s):
-  # pid  The process ID for which you desire statistics.
-  [ ! -f /proc/${pid}/status -o ! -f /proc/${pid}/smaps ] && return 0
+    # Description of argument(s):
+    # pid  The process ID for which you desire statistics.
+    [ ! -f /proc/${pid}/status -o ! -f /proc/${pid}/smaps ] && return 0
 
-  # pss_total      Total proportional set size of a process.
-  # private_total  Total number of clean and dirty private pages in the
-  #                mapping.
-  # shared_total   The difference between pss_total and private_total.
+    # pss_total      Total proportional set size of a process.
+    # private_total  Total number of clean and dirty private pages in the
+    #                mapping.
+    # shared_total   The difference between pss_total and private_total.
 
-  local pss_total private_total shared_total sum name
-  pss_total=$(grep -e "^Pss:" /proc/${pid}/smaps | awk '{print $2}' | awk '{sum += $1} END {print sum}')
-  private_total=$(grep -e "^Private" /proc/${pid}/smaps | awk '{print $2}' | awk '{sum += $1} END {print sum}')
+    local pss_total private_total shared_total sum name
+    pss_total=$(grep -e "^Pss:" /proc/${pid}/smaps | awk '{print $2}' | awk '{sum += $1} END {print sum}')
+    private_total=$(grep -e "^Private" /proc/${pid}/smaps | awk '{print $2}' | awk '{sum += $1} END {print sum}')
 
-  [ -z "${pss_total}" -o -z "${private_total}" ] && return 0
-  (( shared_total=pss_total-private_total ))
-  name=$(cut -d "" -f 1 /proc/${pid}/cmdline)
-  (( sum=shared_total+private_total ))
-  echo -e "${private_total} + ${shared_total} = ${sum} ${name}"
+    [ -z "${pss_total}" -o -z "${private_total}" ] && return 0
+    (( shared_total=pss_total-private_total ))
+    name=$(cut -d "" -f 1 /proc/${pid}/cmdline)
+    (( sum=shared_total+private_total ))
+    echo -e "${private_total} + ${shared_total} = ${sum} ${name}"
 
 }
 
 
-function mainf {
+function mainf() {
 
-  get_parms "$@" || return 1
+    get_parms "$@" || return 1
 
-  validate_parms || return 1
+    validate_parms || return 1
 
-  # To ensure temp files not exist.
-  rm -f ${temp_file_list}
+    # To ensure temp files not exist.
+    rm -f ${temp_file_list}
 
-  for pid in ${pids} ; do
-    get_process_mem ${pid} >> ${temp_file_path_1}
-  done
+    for pid in ${pids} ; do
+        get_process_mem ${pid} >> ${temp_file_path_1}
+    done
 
-  # This is used to sort results by memory usage.
-  sort -gr -k 5 ${temp_file_path_1} > ${temp_file_path_2}
+    # This is used to sort results by memory usage.
+    sort -gr -k 5 ${temp_file_path_1} > ${temp_file_path_2}
 
-  # Find duplicates in the process list output and combine them.  In such
-  # cases, adjust the process name by including a (<count>) suffix.  In the
-  # following example of output, 4 instances of "phosphor-hwmon-readd" have
-  # been combined.
-  # 974848 + 925696 = 1900544       phosphor-hwmon-readd(4)
-  for proc_name in $(awk '{print $6}' ${temp_file_path_2} | sort -u) ; do
-    count=$(awk -v src=${proc_name} '{if ($6==src) {print $6}}' ${temp_file_path_2} | wc -l)
-    [ "${count}" = "1" ] && count_string="" || count_string="(${count})"
-    vmsize_in_kb=$(awk -v src=${proc_name} '{if ($6==src) {print $1}}' ${temp_file_path_2} | awk '{sum += $1} END {print sum}')
-    vmrss_in_kb=$(awk -v src=${proc_name} '{if ($6==src) {print $3}}' ${temp_file_path_2} | awk '{sum += $1} END {print sum}')
-    total=$(awk '{print $5}' ${temp_file_path_2} | awk '{sum += $1} END {print sum}')
-    (( sum=vmrss_in_kb+vmsize_in_kb ))
-    echo -e "${vmsize_in_kb}  + ${vmrss_in_kb} = ${sum} \t ${proc_name}${count_string}" >> ${temp_file_path_3}
-  done
+    # Find duplicates in the process list output and combine them.  In such
+    # cases, adjust the process name by including a (<count>) suffix.  In the
+    # following example of output, 4 instances of "phosphor-hwmon-readd" have
+    # been combined.
+    # 974848 + 925696 = 1900544       phosphor-hwmon-readd(4)
+    for proc_name in $(awk '{print $6}' ${temp_file_path_2} | sort -u) ; do
+        count=$(awk -v src=${proc_name} '{if ($6==src) {print $6}}' ${temp_file_path_2} | wc -l)
+        [ "${count}" = "1" ] && count_string="" || count_string="(${count})"
+        vmsize_in_kb=$(awk -v src=${proc_name} '{if ($6==src) {print $1}}' ${temp_file_path_2} | awk '{sum += $1} END {print sum}')
+        vmrss_in_kb=$(awk -v src=${proc_name} '{if ($6==src) {print $3}}' ${temp_file_path_2} | awk '{sum += $1} END {print sum}')
+        total=$(awk '{print $5}' ${temp_file_path_2} | awk '{sum += $1} END {print sum}')
+        (( sum=vmrss_in_kb+vmsize_in_kb ))
+        echo -e "${vmsize_in_kb}  + ${vmrss_in_kb} = ${sum} \t ${proc_name}${count_string}" >> ${temp_file_path_3}
+    done
 
-  # Sort once more.
-  sort -gr -k 5 ${temp_file_path_3} > ${temp_file_path_1}
+    # Sort once more.
+    sort -gr -k 5 ${temp_file_path_3} > ${temp_file_path_1}
 
-  # Read results from temp file and convert it to csv.
-  csv_line1=""
-  csv_line2=""
-  while read line ; do
-    while read private plus_operator shared equal_sign sum name ; do
-      (( sum == 0 )) && continue
-      csv_line1+=",${name}"
-      csv_line2+=",${sum}"
-    done<<<${line}
-  done < ${temp_file_path_1}
+    # Read results from temp file and convert it to csv.
+    csv_line1=""
+    csv_line2=""
+    while read line ; do
+        while read private plus_operator shared equal_sign sum name ; do
+            (( sum == 0 )) && continue
+            csv_line1+=",${name}"
+            csv_line2+=",${sum}"
+        done <<<${line}
+    done < ${temp_file_path_1}
 
-  # Strip leading commas.
-  csv_line1="${csv_line1#,}"
-  csv_line2="${csv_line2#,}"
-  { echo "${csv_line1}" ; echo "${csv_line2}" ; } >> ${csv_file_path}
+    # Strip leading commas.
+    csv_line1="${csv_line1#,}"
+    csv_line2="${csv_line2#,}"
+    { echo "${csv_line1}" ; echo "${csv_line2}" ; } >> ${csv_file_path}
 
-  return 0
+    return 0
 
 }
 
 # Main
 
-  mainf "${@}"
-  rc="${?}"
-  exit "${rc}"
-
+mainf "${@}"
+rc="${?}"
+exit "${rc}"
 
diff --git a/bin/run_robot_pgm_jenk.sh b/bin/run_robot_pgm_jenk.sh
index 1fa668c..9191387 100755
--- a/bin/run_robot_pgm_jenk.sh
+++ b/bin/run_robot_pgm_jenk.sh
@@ -32,25 +32,25 @@
 git_dir_path="${git_dir_path%/}/"
 
 
-function mainf {
+function mainf() {
 
-  # Delete leftover output from prior runs.
-  rm -f ${WORKSPACE}*.html ${WORKSPACE}*.xml || return 1
-  process_git "${git_dir_path}" "${post_clone_command-}" || return 1
-  process_docker "${git_dir_path}" || return 1
+    # Delete leftover output from prior runs.
+    rm -f ${WORKSPACE}*.html ${WORKSPACE}*.xml || return 1
+    process_git "${git_dir_path}" "${post_clone_command-}" || return 1
+    process_docker "${git_dir_path}" || return 1
 
-  if [ -z "${robot_file_path-}" ] ; then
-    echo "robot_file_path is blank so no there is no need to continue."
-    return
-  fi
+    if [ -z "${robot_file_path-}" ] ; then
+        echo "robot_file_path is blank so no there is no need to continue."
+        return
+    fi
 
-  run_docker_robot "${robot_file_path}" || return 1
+    run_docker_robot "${robot_file_path}" || return 1
 
 }
 
 
 # Main
 
-  mainf "${@}"
-  rc="${?}"
-  exit "${rc}"
+mainf "${@}"
+rc="${?}"
+exit "${rc}"
diff --git a/bin/select_version b/bin/select_version
index d6fca43..4ba61eb 100755
--- a/bin/select_version
+++ b/bin/select_version
@@ -24,86 +24,86 @@
 program_uppercase_name=${program_name^^}
 
 
-function get_target_program_path {
-  local target_program_path_var="${1:-target_program_path}" ; shift
+function get_target_program_path() {
+    local target_program_path_var="${1:-target_program_path}" ; shift
 
-  # Get the full path to the "real" program and assign it to the variable named in target_program_path_var.
+    # Get the full path to the "real" program and assign it to the variable named in target_program_path_var.
 
-  # Description of argument(s):
-  # target_program_path_var         The name of the variable to receive the result.
+    # Description of argument(s):
+    # target_program_path_var         The name of the variable to receive the result.
 
-  # Example result:
+    # Example result:
 
-  # /usr/bin/python3
+    # /usr/bin/python3
 
-  local version_var_name
-  local alternate_program_name
-  local base_program_path
-  local base_program_name
-  local candidate
-  local candidates
-  local base_file_path
+    local version_var_name
+    local alternate_program_name
+    local base_program_path
+    local base_program_name
+    local candidate
+    local candidates
+    local base_file_path
 
-  # The typical use of this program would be to create a link to it like this:
-  # ln -s select_version python
-  # That being the case, get the name of this actual program (rather than the name of the link to it).
-  base_program_path=$(readlink -f "${0}")
-  base_program_name=${base_program_path##*/}
+    # The typical use of this program would be to create a link to it like this:
+    # ln -s select_version python
+    # That being the case, get the name of this actual program (rather than the name of the link to it).
+    base_program_path=$(readlink -f "${0}")
+    base_program_name=${base_program_path##*/}
 
-  if [ "${program_name}" == "${base_program_name}" ] ; then
-    {
-      echo -n "**ERROR** ${base_program_name} should never be called directly."
-      echo "  Only links to ${base_program_name} should be called."
-    } >&2
-    exit 1
-  fi
-
-  # Compose the version_var_name value (e.g. PYTHON_VERSION).
-  version_var_name=${program_uppercase_name}_VERSION
-  # Compose the alternate_program_name (e.g. python3).
-  alternate_program_name=${program_name}${!version_var_name}
-
-  # Now use the "type" built-in to search the PATH variable for a list of target program candidates.
-  candidates=$(type -ap ${alternate_program_name})
-
-  # Example candidates:
-  # /home/robot/openbmc-test-automation/bin/python
-  # /usr/bin/python
-
-  # In this example, the first candidate is actually a link to
-  # /home/robot/openbmc-test-automation/bin/select_version.  As such it will be rejected.
-
-  for candidate in ${candidates}
-  do
-    if [ -L "${candidate}" ] ; then
-      # The candidate is a link so we need to see if it's a link to this program file.
-      base_file_path=$(readlink "${candidate}")
-      [ "${base_file_path}" == "${base_program_name}" ] && continue
+    if [ "${program_name}" == "${base_program_name}" ] ; then
+        {
+            echo -n "**ERROR** ${base_program_name} should never be called directly."
+            echo "  Only links to ${base_program_name} should be called."
+        } >&2
+        exit 1
     fi
 
-    # The candidate is NOT a link so it qualifies as the desired target program path.
-    eval ${target_program_path_var}=\"\${candidate}\"
-    return
+    # Compose the version_var_name value (e.g. PYTHON_VERSION).
+    version_var_name=${program_uppercase_name}_VERSION
+    # Compose the alternate_program_name (e.g. python3).
+    alternate_program_name=${program_name}${!version_var_name}
 
-  done
+    # Now use the "type" built-in to search the PATH variable for a list of target program candidates.
+    candidates=$(type -ap ${alternate_program_name})
+
+    # Example candidates:
+    # /home/robot/openbmc-test-automation/bin/python
+    # /usr/bin/python
+
+    # In this example, the first candidate is actually a link to
+    # /home/robot/openbmc-test-automation/bin/select_version.  As such it will be rejected.
+
+    for candidate in ${candidates}
+    do
+        if [ -L "${candidate}" ] ; then
+            # The candidate is a link so we need to see if it's a link to this program file.
+            base_file_path=$(readlink "${candidate}")
+            [ "${base_file_path}" == "${base_program_name}" ] && continue
+        fi
+
+        # The candidate is NOT a link so it qualifies as the desired target program path.
+        eval ${target_program_path_var}=\"\${candidate}\"
+        return
+
+    done
 
 }
 
 
 # Main
 
-  get_target_program_path target_program_path
+get_target_program_path target_program_path
 
-  # Compose program path var name (e.g. PYTHON_PGM_PATH).
-  pgm_path_var_name=${program_uppercase_name}_PGM_PATH
-  # Set and export pgm_path_var_name (e.g. PYTHON_PGM_PATH=/usr/bin/python3).  This value can be used by
-  # child programs for debug.
-  eval export ${pgm_path_var_name}=${target_program_path}
+# Compose program path var name (e.g. PYTHON_PGM_PATH).
+pgm_path_var_name=${program_uppercase_name}_PGM_PATH
+# Set and export pgm_path_var_name (e.g. PYTHON_PGM_PATH=/usr/bin/python3).  This value can be used by
+# child programs for debug.
+eval export ${pgm_path_var_name}=${target_program_path}
 
-  if [ "${1}" == "--print_only" ] ; then
+if [ "${1}" == "--print_only" ] ; then
     echo "${target_program_path}"
-  else
+else
     # Use exec in order to replace this process with the target process.
     exec ${target_program_path} "${@}"
-  fi
+fi
 
diff --git a/templates/bash_simple_template b/templates/bash_simple_template
index 306a105..4d68687 100755
--- a/templates/bash_simple_template
+++ b/templates/bash_simple_template
@@ -8,56 +8,56 @@
 # parm1                             Bla, bla, bla (e.g. "example data").
 
 
-function get_parms {
+function get_parms() {
 
-  # Get program parms.
+    # Get program parms.
 
-  parm1="${1}" ; shift
+    parm1="${1}" ; shift
 
-  return 0
+    return 0
 
 }
 
 
-function exit_function {
+function exit_function() {
 
-  return
+    return
 
 }
 
-function validate_parms {
+function validate_parms() {
 
-  # Validate program parameters.
+    # Validate program parameters.
 
-  # Your validation code here.
+    # Your validation code here.
 
-  if [ -z "${parm1}" ] ; then
-    echo "**ERROR** You must provide..." >&2
-    return 1
-  fi
+    if [ -z "${parm1}" ] ; then
+        echo "**ERROR** You must provide..." >&2
+        return 1
+    fi
 
-  trap "exit_function $signal \$?" EXIT
+    trap "exit_function $signal \$?" EXIT
 
-  return 0
+    return 0
 
 }
 
 
-function mainf {
+function mainf() {
 
-  get_parms "$@" || return 1
+    get_parms "$@" || return 1
 
-  validate_parms || return 1
+    validate_parms || return 1
 
-  # Your code here...
+    # Your code here...
 
-  return 0
+    return 0
 
 }
 
 
 # Main
 
-  mainf "${@}"
-  rc="${?}"
-  exit "${rc}"
+mainf "${@}"
+rc="${?}"
+exit "${rc}"
diff --git a/tools/convert_ip_to_dummy b/tools/convert_ip_to_dummy
index 79f0f25..880518e 100755
--- a/tools/convert_ip_to_dummy
+++ b/tools/convert_ip_to_dummy
@@ -14,15 +14,15 @@
 
 # Validate arguments.
 if [ -z "${ip_addr}" ] ; then
-  echo "**ERROR** You must provide an IP address as the first positional" \
-       "parameter." >&2
-  exit 1
+    echo "**ERROR** You must provide an IP address as the first positional" \
+        "parameter." >&2
+    exit 1
 fi
 
 if [ -z "${file_path}" ] ; then
-  echo "**ERROR** You must provide a file path as the second positional" \
-       "parameter." >&2
-  exit 1
+    echo "**ERROR** You must provide a file path as the second positional" \
+        "parameter." >&2
+    exit 1
 fi
 
 ip_addr_regex=`echo ${ip_addr} | sed 's/\(\.\)/\\\./g'`
diff --git a/tools/generate_test_document b/tools/generate_test_document
index 23ea10a..eda7b9b 100755
--- a/tools/generate_test_document
+++ b/tools/generate_test_document
@@ -7,88 +7,88 @@
 # test_case_doc_file_path  The test case document file path to be stored.
 
 
-function get_parms {
+function get_parms() {
 
-  # Get program parms.
+    # Get program parms.
 
-  test_dir_path="${1}" ; shift
-  test_case_doc_file_path="${1}" ; shift
+    test_dir_path="${1}" ; shift
+    test_case_doc_file_path="${1}" ; shift
 
-  return 0
-
-}
-
-
-function validate_parms {
-
-  # Validate program parameters.
-
-  num_parms="${1}" ; shift
-
-  (( ${num_parms} == 0 )) && return 0
-
-  if [ -z "${test_dir_path}" ] ; then
-    echo "**ERROR** You must provide test directory as the first positional" \
-         "parameter." >&2
-    return 1
-  fi
-
-  if [ -z "${test_case_doc_file_path}" ] ; then
-    echo "**ERROR** You must provide file path as the second positional" \
-         "parameter." >&2
-    return 1
-  fi
-
-  return 0
-
-}
-
-
-function generate_all_test_document {
-
-  # Generate all test case documents
-
-  local ret_code=0
-  python -m robot.testdoc tests testsdirectoryTCdocs.html || ret_code=1
-  python -m robot.testdoc extended extendeddirectoryTCdocs.html || ret_code=1
-  python -m robot.testdoc gui guidirectoryTCdocs.html || ret_code=1
-  python -m robot.testdoc systest systestdirectoryTCdocs.html || ret_code=1
-  python -m robot.testdoc xcat xcatdirectoryTCdocs.html || ret_code=1
-  python -m robot.testdoc mnfg mnfgdirectoryTCdocs.html || ret_code=1
-  python -m robot.testdoc tools toolsdirectoryTCdocs.html || ret_code=1
-  python -m robot.testdoc ./openpower/ras rasdirectoryTCdocs.html || ret_code=1
-  python -m robot.testdoc ./openpower/secureboot securebootdirectoryTCdocs.html\
-  || ret_code=1
-  python -m robot.testdoc network networkdirectoryTCdocs.html ||\
-  ret_code=1
-
-  return ${ret_code}
-}
-
-
-function main_function {
-
-  get_parms "$@" || return 1
-
-  validate_parms $# || return 1
-
-  if (( ${num_parms} == 0 )) ; then
-    generate_all_test_document || return 1
     return 0
-  fi
 
-  echo ${test_dir_path} ${test_case_doc_file_path}
-  python -m robot.testdoc ${test_dir_path} ${test_case_doc_file_path}\
-    || return 1
+}
 
-  return 0
+
+function validate_parms() {
+
+    # Validate program parameters.
+
+    num_parms="${1}" ; shift
+
+    (( ${num_parms} == 0 )) && return 0
+
+    if [ -z "${test_dir_path}" ] ; then
+        echo "**ERROR** You must provide test directory as the first positional" \
+            "parameter." >&2
+        return 1
+    fi
+
+    if [ -z "${test_case_doc_file_path}" ] ; then
+        echo "**ERROR** You must provide file path as the second positional" \
+            "parameter." >&2
+        return 1
+    fi
+
+    return 0
+
+}
+
+
+function generate_all_test_document() {
+
+    # Generate all test case documents
+
+    local ret_code=0
+    python -m robot.testdoc tests testsdirectoryTCdocs.html || ret_code=1
+    python -m robot.testdoc extended extendeddirectoryTCdocs.html || ret_code=1
+    python -m robot.testdoc gui guidirectoryTCdocs.html || ret_code=1
+    python -m robot.testdoc systest systestdirectoryTCdocs.html || ret_code=1
+    python -m robot.testdoc xcat xcatdirectoryTCdocs.html || ret_code=1
+    python -m robot.testdoc mnfg mnfgdirectoryTCdocs.html || ret_code=1
+    python -m robot.testdoc tools toolsdirectoryTCdocs.html || ret_code=1
+    python -m robot.testdoc ./openpower/ras rasdirectoryTCdocs.html || ret_code=1
+    python -m robot.testdoc ./openpower/secureboot securebootdirectoryTCdocs.html\
+        || ret_code=1
+    python -m robot.testdoc network networkdirectoryTCdocs.html ||\
+        ret_code=1
+
+    return ${ret_code}
+}
+
+
+function main_function() {
+
+    get_parms "$@" || return 1
+
+    validate_parms $# || return 1
+
+    if (( ${num_parms} == 0 )) ; then
+        generate_all_test_document || return 1
+        return 0
+    fi
+
+    echo ${test_dir_path} ${test_case_doc_file_path}
+    python -m robot.testdoc ${test_dir_path} ${test_case_doc_file_path}\
+        || return 1
+
+    return 0
 
 }
 
 
 # Main
 
-  main_function "${@}"
-  rc="${?}"
-  exit "${rc}"
+main_function "${@}"
+rc="${?}"
+exit "${rc}"
 
diff --git a/tools/ras/probe_cpus.sh b/tools/ras/probe_cpus.sh
index a1fa03c..16a4e5a 100755
--- a/tools/ras/probe_cpus.sh
+++ b/tools/ras/probe_cpus.sh
@@ -9,37 +9,37 @@
 
 function usage()
 {
-        echo "This script runs on HOST OS and gives core-id"
-        echo "corresponding to the chip-id."
-        echo "usage:"
-        echo "        $0 [cpu] [-L]"
-        echo
-        echo "option:"
-        echo "        [cpu]"
-        echo "          Logical cpu id."
-        echo "        -L"
-        echo "          Show processor layout."
-        echo "        -h"
-        echo "          Show this help."
-        exit 1
+    echo "This script runs on HOST OS and gives core-id"
+    echo "corresponding to the chip-id."
+    echo "usage:"
+    echo "        $0 [cpu] [-L]"
+    echo
+    echo "option:"
+    echo "        [cpu]"
+    echo "          Logical cpu id."
+    echo "        -L"
+    echo "          Show processor layout."
+    echo "        -h"
+    echo "          Show this help."
+    exit 1
 }
 
 function parse_args()
 {
-        while getopts "hL" OPTION
-        do
+    while getopts "hL" OPTION
+    do
         case $OPTION in
-                L)
-                        SHOW_LAYOUT=1
-                        ;;
-                *)
-                        usage
-                        exit 1
-                        ;;
+            L)
+                SHOW_LAYOUT=1
+                ;;
+            *)
+                usage
+                exit 1
+                ;;
         esac
-        done
+    done
 
-        CPU=${!OPTIND}
+    CPU=${!OPTIND}
 }
 
 parse_args $*
@@ -60,20 +60,20 @@
 
 for cpu_file in $(find $CPU_SYS_DIR -name "cpu[0-9]*")
 do
-        cpu=$(basename $cpu_file | tr -dc '0-9')
-        [ -n "$cpu" ] && NR_CPUS=$(expr $NR_CPUS + 1)
+    cpu=$(basename $cpu_file | tr -dc '0-9')
+    [ -n "$cpu" ] && NR_CPUS=$(expr $NR_CPUS + 1)
 
-        CPU_VALID[$cpu]=0
-        [ -n "$CPU" ] && [ $cpu != $CPU ] && continue
-        [ ! -e $cpu_file/pir ] && continue
+    CPU_VALID[$cpu]=0
+    [ -n "$CPU" ] && [ $cpu != $CPU ] && continue
+    [ ! -e $cpu_file/pir ] && continue
 
-        CPU_VALID[$cpu]=1
+    CPU_VALID[$cpu]=1
 
-        CPU_FILE[$cpu]=$cpu_file
-        pir=$(cat $cpu_file/pir)
-        CPU_PIR[$cpu]=$pir
-        CORE_ID[$cpu]=$(perl -e '{ printf("%d", (0x'$pir' >> 2) & 0x3f); }')
-        CHIP_ID[$cpu]=$(perl -e '{ printf("%x", (0x'$pir' >> 8) & 0x7f); }')
+    CPU_FILE[$cpu]=$cpu_file
+    pir=$(cat $cpu_file/pir)
+    CPU_PIR[$cpu]=$pir
+    CORE_ID[$cpu]=$(perl -e '{ printf("%d", (0x'$pir' >> 2) & 0x3f); }')
+    CHIP_ID[$cpu]=$(perl -e '{ printf("%x", (0x'$pir' >> 8) & 0x7f); }')
 done
 
 i=0
@@ -85,41 +85,41 @@
 CPU_LIST=" "
 while [ $i -lt $NR_CPUS ]
 do
-        [ ${CPU_VALID[$i]} -eq 0 ] && i=$(expr $i + 1) && continue
+    [ ${CPU_VALID[$i]} -eq 0 ] && i=$(expr $i + 1) && continue
 
-        [ "$chip_id" != "${CHIP_ID[$i]}" ] && core_id=-1 && prev_eq_id=-1 && prev_ex_id=-1
-        chip_id=${CHIP_ID[$i]}
-        if [ "$core_id" != ${CORE_ID[$i]} ]
-        then
-                if [ $num_threads -ne 0 ]; then
-                        echo "THREADS: $num_threads CPUs: $CPU_LIST"
-                        CPU_LIST=" "
-                fi
-                CPU_LIST="$CPU_LIST$i "
-                echo -n "CHIP ID: ${CHIP_ID[$i]} "
-                echo -n "CORE ID: ${CORE_ID[$i]} "
-                CHIP_CORES[$chip_id]="${CHIP_CORES[$chip_id]},${CORE_ID[$i]}"
-                CORE_MATRIX[$chip_id,${CORE_ID[$i]}]=1
-                eq_id=$(perl -e '{ printf("%d", (('${CORE_ID[$i]}' & 0x1c) >> 2)); }')
-                if [ $eq_id != $prev_eq_id ]
-                then
-                        CHIP_EQ[$chip_id]="${CHIP_EQ[$chip_id]},$eq_id"
-                        prev_eq_id=$eq_id
-                fi
-                ex_id=$(perl -e '{ printf("%d", (('${CORE_ID[$i]}') >> 1)); }')
-                if [ $ex_id != $prev_ex_id ]
-                then
-                        CHIP_EX[$chip_id]="${CHIP_EX[$chip_id]},$ex_id"
-                        prev_ex_id=$ex_id
-                fi
-                num_threads=1
-        else
-                CPU_LIST="$CPU_LIST$i "
-                num_threads=$(expr $num_threads + 1)
+    [ "$chip_id" != "${CHIP_ID[$i]}" ] && core_id=-1 && prev_eq_id=-1 && prev_ex_id=-1
+    chip_id=${CHIP_ID[$i]}
+    if [ "$core_id" != ${CORE_ID[$i]} ]
+    then
+        if [ $num_threads -ne 0 ]; then
+            echo "THREADS: $num_threads CPUs: $CPU_LIST"
+            CPU_LIST=" "
         fi
-        core_id=${CORE_ID[$i]}
+        CPU_LIST="$CPU_LIST$i "
+        echo -n "CHIP ID: ${CHIP_ID[$i]} "
+        echo -n "CORE ID: ${CORE_ID[$i]} "
+        CHIP_CORES[$chip_id]="${CHIP_CORES[$chip_id]},${CORE_ID[$i]}"
+        CORE_MATRIX[$chip_id,${CORE_ID[$i]}]=1
+        eq_id=$(perl -e '{ printf("%d", (('${CORE_ID[$i]}' & 0x1c) >> 2)); }')
+        if [ $eq_id != $prev_eq_id ]
+        then
+            CHIP_EQ[$chip_id]="${CHIP_EQ[$chip_id]},$eq_id"
+            prev_eq_id=$eq_id
+        fi
+        ex_id=$(perl -e '{ printf("%d", (('${CORE_ID[$i]}') >> 1)); }')
+        if [ $ex_id != $prev_ex_id ]
+        then
+            CHIP_EX[$chip_id]="${CHIP_EX[$chip_id]},$ex_id"
+            prev_ex_id=$ex_id
+        fi
+        num_threads=1
+    else
+        CPU_LIST="$CPU_LIST$i "
+        num_threads=$(expr $num_threads + 1)
+    fi
+    core_id=${CORE_ID[$i]}
 
-        i=$(expr $i + 1)
+    i=$(expr $i + 1)
 done
 echo "THREADS: $num_threads CPUs: $CPU_LIST"
 
@@ -127,13 +127,13 @@
 echo "-----------------------------"
 for chip_id in ${!CHIP_CORES[@]}
 do
-        echo "p[$chip_id]"
-        CHIP_CORES[$chip_id]="$(echo ${CHIP_CORES[$chip_id]} | cut -c 2-)"
-        CHIP_EQ[$chip_id]="$(echo ${CHIP_EQ[$chip_id]} | cut -c 2-)"
-        CHIP_EX[$chip_id]="$(echo ${CHIP_EX[$chip_id]} | cut -c 2-)"
-        echo "   eq[${CHIP_EQ[$chip_id]}]"
-        echo "   ex[${CHIP_EX[$chip_id]}]"
-        echo "    c[${CHIP_CORES[$chip_id]}]"
+    echo "p[$chip_id]"
+    CHIP_CORES[$chip_id]="$(echo ${CHIP_CORES[$chip_id]} | cut -c 2-)"
+    CHIP_EQ[$chip_id]="$(echo ${CHIP_EQ[$chip_id]} | cut -c 2-)"
+    CHIP_EX[$chip_id]="$(echo ${CHIP_EX[$chip_id]} | cut -c 2-)"
+    echo "   eq[${CHIP_EQ[$chip_id]}]"
+    echo "   ex[${CHIP_EX[$chip_id]}]"
+    echo "    c[${CHIP_CORES[$chip_id]}]"
 done
 echo "-----------------------------"
 
@@ -144,59 +144,59 @@
 
 function print_header()
 {
-        local _row_=$1
+    local _row_=$1
 
-        for q in 0 2 4
-        do
-                quad=$(perl -e '{ printf("%02d", ('$q' + '$_row_')); }')
-                echo -n "        +---EQ$quad----+ "
-        done
-        echo
+    for q in 0 2 4
+    do
+        quad=$(perl -e '{ printf("%02d", ('$q' + '$_row_')); }')
+        echo -n "        +---EQ$quad----+ "
+    done
+    echo
 }
 
 function print_core_info()
 {
-        local _row_=$1
-        local _cpos_=$2   # Core position
+    local _row_=$1
+    local _cpos_=$2   # Core position
 
-        for q in 0 2 4
-        do
-                quad=$(perl -e '{ printf("%02d", ('$q' + '$_row_')); }')
-                core_id=$(perl -e '{ printf("%d", ('$_cpos_' + ('$quad' * 4))); }')
-                core_id_str=$(perl -e '{ printf("%-2d", ('$_cpos_' + ('$quad' * 4))); }')
-                ex=$(perl -e '{ printf("%-2d", ('$core_id' >> 1)); }')
-                if [ -n "${CORE_MATRIX[$chip_id,$core_id]}" ]
-                then
-                        echo -n "        |EX-$ex   C$core_id_str|"
-                else
-                        echo -n "        |           |"
-                fi
-        done
-        echo
-        if [ $_cpos_ -eq 3 ]
+    for q in 0 2 4
+    do
+        quad=$(perl -e '{ printf("%02d", ('$q' + '$_row_')); }')
+        core_id=$(perl -e '{ printf("%d", ('$_cpos_' + ('$quad' * 4))); }')
+        core_id_str=$(perl -e '{ printf("%-2d", ('$_cpos_' + ('$quad' * 4))); }')
+        ex=$(perl -e '{ printf("%-2d", ('$core_id' >> 1)); }')
+        if [ -n "${CORE_MATRIX[$chip_id,$core_id]}" ]
         then
-                echo "        +-----------+         +-----------+        +-----------+"
+            echo -n "        |EX-$ex   C$core_id_str|"
         else
-                echo "        + - - - - - +        + - - - - - +        + - - - - - +"
+            echo -n "        |           |"
         fi
+    done
+    echo
+    if [ $_cpos_ -eq 3 ]
+    then
+        echo "        +-----------+         +-----------+        +-----------+"
+    else
+        echo "        + - - - - - +        + - - - - - +        + - - - - - +"
+    fi
 }
 
 echo
 echo "----------Processor Layout-------------------"
 for chip_id in ${!CHIP_CORES[@]}
 do
-        echo "p[$chip_id]"
+    echo "p[$chip_id]"
 
-        for row in 0 1
+    for row in 0 1
+    do
+        print_header $row
+        for core_pos in 0 1 2 3
         do
-                print_header $row
-                for core_pos in 0 1 2 3
-                do
-                        print_core_info $row $core_pos
-                done
-                echo
-
+            print_core_info $row $core_pos
         done
         echo
 
+    done
+    echo
+
 done
diff --git a/tools/ras/scom_addr_p9.sh b/tools/ras/scom_addr_p9.sh
index a7c5ff0..7325225 100755
--- a/tools/ras/scom_addr_p9.sh
+++ b/tools/ras/scom_addr_p9.sh
@@ -3,16 +3,16 @@
 
 function usage()
 {
-        echo
-        echo "This script runs on HOST OS and gives translated SCOM address."
-        echo "usage: $0: <scom_addr> <core_id>"
-        echo
-        echo "  <scom_addr>:"
-        echo "     SCOM address that needs translation (e.g. '10010800')."
-        echo "  <core_id>:"
-        echo "     Core id as obtained from probe_cpu.sh."
-        echo "     Should be between 0-23 (e.g. '0')."
-        exit 1
+    echo
+    echo "This script runs on HOST OS and gives translated SCOM address."
+    echo "usage: $0: <scom_addr> <core_id>"
+    echo
+    echo "  <scom_addr>:"
+    echo "     SCOM address that needs translation (e.g. '10010800')."
+    echo "  <core_id>:"
+    echo "     Core id as obtained from probe_cpu.sh."
+    echo "     Should be between 0-23 (e.g. '0')."
+    exit 1
 }
 
 [ $# -lt 2 ] && usage
diff --git a/tools/sensors_dbus_list.sh b/tools/sensors_dbus_list.sh
index 597edc1..6cab294 100755
--- a/tools/sensors_dbus_list.sh
+++ b/tools/sensors_dbus_list.sh
@@ -10,15 +10,15 @@
 
 for dobj in $dbus_obj
 do
-  echo DBUS object:$dobj
-  dbus_cmd_out=`busctl tree $dobj --list | grep /sensors/`
+    echo DBUS object:$dobj
+    dbus_cmd_out=`busctl tree $dobj --list | grep /sensors/`
 
-  for i in $dbus_cmd_out
-  do
-    exist=`busctl introspect $dobj $i | grep yz.openbmc_project.Sensor.Value`
-    if [ ! -z "$exist" ]; then
-      cmd_value=` busctl get-property $dobj $i xyz.openbmc_project.Sensor.Value Value`
-      echo $i Value=${cmd_value##*d}
-    fi
-  done
+    for i in $dbus_cmd_out
+    do
+        exist=`busctl introspect $dobj $i | grep yz.openbmc_project.Sensor.Value`
+        if [ ! -z "$exist" ]; then
+            cmd_value=` busctl get-property $dobj $i xyz.openbmc_project.Sensor.Value Value`
+            echo $i Value=${cmd_value##*d}
+        fi
+    done
 done
