diff --git a/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/ampere_power_util.sh b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/ampere_power_util.sh
index 2c8ba3d91..d9ca2ed 100644
--- a/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/ampere_power_util.sh
+++ b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/ampere_power_util.sh
@@ -1,131 +1,120 @@
 #!/bin/bash
-#ampere_platform_config.sh is platform configuration file
+
+# shellcheck source=/dev/null
 source /usr/sbin/gpio-defs.sh
 
 # Usage of this utility
 function usage() {
-  echo "usage: power-util mb [status|shutdown_ack|force_reset|soft_off]";
+	echo "Usage:"
+	echo "  ampere_power_util.sh mb [status|shutdown_ack|force_reset|soft_off]";
 }
 
 power_status() {
-  st=$(busctl get-property xyz.openbmc_project.State.Chassis /xyz/openbmc_project/state/chassis0 xyz.openbmc_project.State.Chassis CurrentPowerState | cut -d"." -f6)
-  if [ "$st" == "On\"" ]; then
-  echo "on"
-  else
-  echo "off"
-  fi
+	st=$(busctl get-property xyz.openbmc_project.State.Chassis /xyz/openbmc_project/state/chassis0 xyz.openbmc_project.State.Chassis CurrentPowerState | cut -d"." -f6)
+	if [ "$st" == "On\"" ]; then
+		echo "on"
+	else
+		echo "off"
+	fi
 }
 
 shutdown_ack() {
-  if [ -f "/run/openbmc/host@0-softpoweroff" ]; then
-    echo "Receive shutdown ACK triggered after softportoff the host."
-    touch /run/openbmc/host@0-softpoweroff-shutdown-ack
-  else
-    echo "Receive shutdown ACK triggered"
-    sleep 3
-    systemctl start obmc-chassis-poweroff@0.target
-  fi
+	if [ -f "/run/openbmc/host@0-softpoweroff" ]; then
+		echo "Receive shutdown ACK triggered after softportoff the host."
+		touch /run/openbmc/host@0-softpoweroff-shutdown-ack
+	else
+		echo "Receive shutdown ACK triggered"
+		sleep 3
+		systemctl start obmc-chassis-poweroff@0.target
+	fi
 }
 
 soft_off() {
-  # Trigger shutdown_req
-  touch /run/openbmc/host@0-softpoweroff
-  gpioset -l $GPIO_CHIP0_IDX $S0_SHD_REQ_L=1
-  sleep 1s
-  gpioset -l $GPIO_CHIP0_IDX $S0_SHD_REQ_L=0
+	# Trigger shutdown_req
+	touch /run/openbmc/host@0-softpoweroff
+	gpioset -l 0 "$S0_SHD_REQ_L"=1
+	sleep 1s
+	gpioset -l 0 "$S0_SHD_REQ_L"=0
 
-  # Wait for shutdown_ack from the host in 30 seconds
-  cnt=30
-  while [ $cnt -gt 0 ];
-  do
-    # Wait for SHUTDOWN_ACK and create the host@0-softpoweroff-shutdown-ack
-    if [ -f "/run/openbmc/host@0-softpoweroff-shutdown-ack" ]; then
-      break
-    fi
-    sleep 1
-    cnt=$((cnt - 1))
-  done
-  # Softpoweroff is successed
-  sleep 2
-  rm -rf /run/openbmc/host@0-softpoweroff
-  if [ -f "/run/openbmc/host@0-softpoweroff-shutdown-ack" ]; then
-    rm -rf /run/openbmc/host@0-softpoweroff-shutdown-ack
-  fi
-  echo 0
+	# Wait for shutdown_ack from the host in 30 seconds
+	cnt=30
+	while [ $cnt -gt 0 ];
+	do
+		# Wait for SHUTDOWN_ACK and create the host@0-softpoweroff-shutdown-ack
+		if [ -f "/run/openbmc/host@0-softpoweroff-shutdown-ack" ]; then
+			break
+		fi
+		sleep 1
+		cnt=$((cnt - 1))
+	done
+	# Softpoweroff is successed
+	sleep 2
+	rm -rf /run/openbmc/host@0-softpoweroff
+	if [ -f "/run/openbmc/host@0-softpoweroff-shutdown-ack" ]; then
+		rm -rf /run/openbmc/host@0-softpoweroff-shutdown-ack
+	fi
+	echo 0
 }
 
 force_reset() {
-  if [ -f "/run/openbmc/host@0-softpoweroff" ]; then
-    # In graceful host reset, after trigger os shutdown,
-    # the phosphor-state-manager will call force-warm-reset
-    # in this case the force_reset should wait for shutdown_ack from host
-    cnt=30
-    while [ $cnt -gt 0 ];
-    do
-      if [ -f "/run/openbmc/host@0-softpoweroff-shutdown-ack" ]; then
-        break
-      fi
-      echo "Waiting for shutdown-ack count down $cnt"
-      sleep 1
-      cnt=$((cnt - 1))
-    done
-    # The host OS is failed to shutdown
-    if [ $cnt == 0 ]; then
-      echo "Shutdown-ack time out after 30s."
-      exit 0
-    fi
-  fi
-  echo "Triggering sysreset pin"
-  gpioset -l $GPIO_CHIP0_IDX $S0_SYSRESET_L=1
-  sleep 1
-  gpioset -l $GPIO_CHIP0_IDX $S0_SYSRESET_L=0
+	if [ -f "/run/openbmc/host@0-softpoweroff" ]; then
+		# In graceful host reset, after trigger os shutdown,
+		# the phosphor-state-manager will call force-warm-reset
+		# in this case the force_reset should wait for shutdown_ack from host
+		cnt=30
+		while [ $cnt -gt 0 ];
+		do
+			if [ -f "/run/openbmc/host@0-softpoweroff-shutdown-ack" ]; then
+				break
+			fi
+			echo "Waiting for shutdown-ack count down $cnt"
+			sleep 1
+			cnt=$((cnt - 1))
+		done
+		# The host OS is failed to shutdown
+		if [ $cnt == 0 ]; then
+			echo "Shutdown-ack time out after 30s."
+			exit 0
+		fi
+	fi
+	echo "Triggering sysreset pin"
+	gpioset -l 0 "$S0_SYSRESET_L"=1
+	sleep 1
+	gpioset -l 0 "$S0_SYSRESET_L"=0
 }
 
 if [ $# -lt 2 ]; then
-  echo "Total number of parameter=$#"
-  echo "Insufficient parameter"
-  usage;
-  exit 0;
+	echo "Total number of parameter=$#"
+	echo "Insufficient parameter"
+	usage;
+	exit 0;
 fi
 
-if [ $1 != "mb" ]; then
-  echo "Invalid parameter1=$1"
-  usage;
-  exit 0;
+if [ "$1" != "mb" ]; then
+	echo "Invalid parameter1=$1"
+	usage;
+	exit 0;
 fi
 
-# check if power guard enabled
-dir="/run/systemd/system/"
-file="reboot-guard.conf"
-units=("reboot" "poweroff" "halt")
-for unit in "${units[@]}"; do
-  if [ -f ${dir}${unit}.target.d/${file} ]; then
-    echo "PowerGuard enabled, cannot do power control, exit!!!"
-    exit -1
-  fi
-done
+mkdir -p /run/openbmc/
 
-if [ ! -d "/run/openbmc/" ]; then
-  mkdir -p "/run/openbmc/"
-fi
-
-if [ $2 == "shutdown_ack" ]; then
-  shutdown_ack
-elif [ $2 == "status" ]; then
-  power_status
-elif [ $2 == "force_reset" ]; then
-  force_reset
-elif [ $2 == "soft_off" ]; then
-  ret=$(soft_off)
-  if [ $ret == 0 ]; then
-    echo "The host is already softoff"
-  else
-    echo "Failed to softoff the host"
-  fi
-  exit $ret;
+if [ "$2" == "shutdown_ack" ]; then
+	shutdown_ack
+elif [ "$2" == "status" ]; then
+	power_status
+elif [ "$2" == "force_reset" ]; then
+	force_reset
+elif [ "$2" == "soft_off" ]; then
+	ret=$(soft_off)
+	if [ "$ret" == 0 ]; then
+		echo "The host is already softoff"
+	else
+		echo "Failed to softoff the host"
+	fi
+	exit "$ret";
 else
-  echo "Invalid parameter2=$2"
-  usage;
+	echo "Invalid parameter2=$2"
+	usage;
 fi
 
 exit 0;
