diff --git a/meta-ampere/meta-jade/recipes-ampere/platform/ampere-fault-monitor.bbappend b/meta-ampere/meta-jade/recipes-ampere/platform/ampere-fault-monitor.bbappend
index 2f3e457..38cb4c6 100644
--- a/meta-ampere/meta-jade/recipes-ampere/platform/ampere-fault-monitor.bbappend
+++ b/meta-ampere/meta-jade/recipes-ampere/platform/ampere-fault-monitor.bbappend
@@ -4,11 +4,9 @@
 
 SRC_URI += " \
             file://ampere_fault_monitor.sh \
-            file://ampere_check_gpio_fault.sh \
            "
 
 do_install() {
     install -d ${D}/${sbindir}
     install -m 755 ${WORKDIR}/ampere_fault_monitor.sh ${D}/${sbindir}/
-    install -m 755 ${WORKDIR}/ampere_check_gpio_fault.sh ${D}/${sbindir}/
 }
diff --git a/meta-ampere/meta-jade/recipes-ampere/platform/ampere-fault-monitor/ampere_check_gpio_fault.sh b/meta-ampere/meta-jade/recipes-ampere/platform/ampere-fault-monitor/ampere_check_gpio_fault.sh
deleted file mode 100755
index 141c50c..0000000
--- a/meta-ampere/meta-jade/recipes-ampere/platform/ampere-fault-monitor/ampere_check_gpio_fault.sh
+++ /dev/null
@@ -1,205 +0,0 @@
-#!/bin/bash
-
-# This script monitors S0/S1 fault GPIO and detects errors or warnings from CPUs
-#
-# According to OpenBMC_Software_Funcional_Specification, section 3.16,
-#
-# When the BMC detects the GPIO_FAULT signal indicating an SCP booting failure:
-# •  If a non-critical error/warning from the SCP occurs, the BMC blinks the Fault LED once.
-# •  If a critical error from the SCP occurs, the BMC turns on the Fault LED.
-# The BMC monitors the GPIO_FAULT signal from the SCP during SCP booting to determine whether
-# the error is non-critical or critical. A fatal error is indicated when the signal is On and then Off
-# continuously, followed by a “quiet” period of about three seconds, and this pattern repeats. If the “quiet”
-# period is longer than three seconds, the error is non-fatal. The BMC must set up appropriate debounce
-# times to detect such errors. The BMC is expected to turn on the Fault LED forever for fatal errors, or to
-# turn on the Fault LED and turn it off when the fault clears for non-fatal errors.
-#
-# Usage: <app_name> <socket 0/1>
-
-# shellcheck source=/dev/null
-source /usr/sbin/gpio-lib.sh
-
-# global variables
-	error_flag='/tmp/fault_err'
-	warning_flag='/tmp/fault_warning'
-
-	duty_cycle=250000
-	scan_pulse=100000
-	blank_num=8
-
-	curr_pattern=0
-	prev_pattern=0
-
-	gpio_status=0
-	repeat=0
-
-	socket=$1
-
-	socket1_present=15
-	socket1_status=1
-
-	S0_fault_gpio=73
-	S1_fault_gpio=201
-
-map_event_name() {
-	case $curr_pattern in
-		1)
-			event_name="RAS_GPIO_INVALID_LCS"
-			;;
-		2)
-			event_name="RAS_GPIO_FILE_HDR_INVALID"
-			;;
-		3)
-			event_name="RAS_GPIO_FILE_INTEGRITY_INVALID"
-			;;
-		4)
-			event_name="RAS_GPIO_KEY_CERT_AUTH_ERR"
-			;;
-		5)
-			event_name="RAS_GPIO_CNT_CERT_AUTH_ERR"
-			;;
-		6)
-			event_name="RAS_GPIO_I2C_HARDWARE_ERR"
-			;;
-		7)
-			event_name="RAS_GPIO_CRYPTO_ENGINE_ERR"
-			;;
-		8)
-			event_name="RAS_GPIO_ROTPK_EFUSE_INVALID"
-			;;
-		9)
-			event_name="RAS_GPIO_SEED_EFUSE_INVALID"
-			;;
-		10)
-			event_name="RAS_GPIO_LCS_FROM_EFUSE_INVALID"
-			;;
-		11)
-			event_name="RAS_GPIO_PRIM_ROLLBACK_EFUSE_INVALID"
-			;;
-		12)
-			event_name="RAS_GPIO_SEC_ROLLBACK_EFUSE_INVALID"
-			;;
-		13)
-			event_name="RAS_GPIO_HUK_EFUSE_INVALID"
-			;;
-		14)
-			event_name="RAS_GPIO_CERT_DATA_INVALID"
-			;;
-		15)
-			event_name="RAS_GPIO_INTERNAL_HW_ERR"
-			;;
-		*)
-			event_name="NOT_SUPPORT"
-			;;
-	esac
-}
-
-detect_patern_repeat() {
-	local prev=0
-	local curr=0
-	local cnt=13
-
-	while true
-	do
-		usleep $scan_pulse
-		gpio_status=$(cat /sys/class/gpio/gpio"$gpio_Id"/value)
-		prev=$curr
-		curr=$gpio_status
-		if [ "$prev" == 0 ] && [ "$curr" == 1 ]; then
-			# patern start repeating, check if previous and current pattern are the same
-			repeat=1
-			break
-		fi
-		if [ "$cnt" == 0 ]; then
-			map_event_name
-			echo "detected a warning from fault GPIO #$fault_gpio $socket, event $event_name"
-			# pattern not repeat, this is a warning, turn on warning flag
-			touch $warning_flag
-			break
-		fi
-		cnt=$(( cnt - 1 ))
-	done
-}
-
-detect_pattern() {
-	local cnt_falling_edge=0
-	local cnt_blank=0
-
-	local prev=0
-	local curr=0
-
-	while true
-	do
-		prev=$curr
-		curr=$gpio_status
-		# count the falling edges, if they appear, just reset cnt_blank
-		if [ "$prev" == 1 ] && [ "$curr" == 0 ]; then
-			cnt_falling_edge=$(( cnt_falling_edge + 1 ))
-			cnt_blank=0
-			continue
-		# check if we are in the quite gap
-		elif [ "$prev" == 0 ] && [ "$curr" == 0 ]; then
-			cnt_blank=$(( cnt_blank + 1 ))
-			if [ "$cnt_blank" == "$blank_num" ]; then
-				# echo "pattern number falling_edge=$cnt_falling_edge blank=$cnt_blank"
-				curr_pattern=$cnt_falling_edge
-				# after count all falling edges, now check if patern repeat after 3s
-				detect_patern_repeat
-				break
-			fi
-		fi
-		usleep $scan_pulse
-		gpio_status=$(cat /sys/class/gpio/gpio"$gpio_Id"/value)
-	done
-}
-
-gpio_config_input() {
-	echo "$gpio_Id" > /sys/class/gpio/export
-	echo "in" > /sys/class/gpio/gpio"${gpio_Id}"/direction
-}
-
-init_sysfs_fault_gpio() {
-	gpio_Id=$(gpio_number "$fault_gpio")
-	if [ -d /sys/class/gpio/gpio"$gpio_Id" ]; then
-		return
-	fi
-	gpio_config_input "$fault_gpio"
-}
-
-# init
-if [ "$socket" == "0" ]; then
-	fault_gpio=$S0_fault_gpio
-else
-	socket1_status=$(gpioget 0 "$socket1_present")
-	if [ "$socket1_status" == 1 ]; then
-		echo "socket 1 not present"
-		exit 1
-	fi
-	fault_gpio=$S1_fault_gpio
-fi
-
-init_sysfs_fault_gpio
-
-# daemon start
-while true
-do
-	# detect when pattern starts
-	if [ "$gpio_status" == 1 ]; then
-		# now, there is something on gpio, check if that is a pattern
-		detect_pattern
-		if [ "$repeat" == 1 ] && [ "$prev_pattern" == "$curr_pattern" ]; then
-			map_event_name
-			echo "detected an error from fault GPIO #$fault_gpio $socket, event#$curr_pattern $event_name"
-			touch $error_flag
-			repeat=0
-		fi
-		prev_pattern=$curr_pattern
-		curr_pattern=0
-		continue
-	fi
-	usleep $duty_cycle
-	gpio_status=$(cat /sys/class/gpio/gpio"$gpio_Id"/value)
-
-done
-
-exit 1
diff --git a/meta-ampere/meta-jade/recipes-ampere/platform/ampere-fault-monitor/ampere_fault_monitor.sh b/meta-ampere/meta-jade/recipes-ampere/platform/ampere-fault-monitor/ampere_fault_monitor.sh
index 44cbb11..8f9637c 100644
--- a/meta-ampere/meta-jade/recipes-ampere/platform/ampere-fault-monitor/ampere_fault_monitor.sh
+++ b/meta-ampere/meta-jade/recipes-ampere/platform/ampere-fault-monitor/ampere_fault_monitor.sh
@@ -4,7 +4,6 @@
 
 # shellcheck disable=SC2004
 # shellcheck disable=SC2046
-# shellcheck source=/dev/null
 
 # common variables
 	warning_fault_flag='/tmp/fault_warning'
diff --git a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-fault-monitor.bbappend b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-fault-monitor.bbappend
index 2f3e457..38cb4c6 100644
--- a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-fault-monitor.bbappend
+++ b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-fault-monitor.bbappend
@@ -4,11 +4,9 @@
 
 SRC_URI += " \
             file://ampere_fault_monitor.sh \
-            file://ampere_check_gpio_fault.sh \
            "
 
 do_install() {
     install -d ${D}/${sbindir}
     install -m 755 ${WORKDIR}/ampere_fault_monitor.sh ${D}/${sbindir}/
-    install -m 755 ${WORKDIR}/ampere_check_gpio_fault.sh ${D}/${sbindir}/
 }
diff --git a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-fault-monitor/ampere_check_gpio_fault.sh b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-fault-monitor/ampere_check_gpio_fault.sh
deleted file mode 100755
index 9922420..0000000
--- a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-fault-monitor/ampere_check_gpio_fault.sh
+++ /dev/null
@@ -1,351 +0,0 @@
-#!/bin/bash
-
-# This script monitors S0/S1 GPIO fault and detects errors from CPUs
-#
-# So far, there is no specification describes the behavior of LED when an error (a pattern is detected) occurs.
-# So when detecting a pattern, we simply set the gpio fault flag and turn on the SYS LED.
-#
-# The Parttern will in the format:
-# <minor_byte> <quite_gap_1second> <major_byte> <stop_condition_low_for_3seconds>
-#
-# Ex: pattern minor_byte=0x03, major_byte=0x02, you will see the waveform like
-# _1010100...(quite gap, low for 1 second)..0111111111000000000111111111110000000000...(stop condition, low for 3 seconds)..
-#
-# Usage: <app_name> <socket 0/1>
-#
-# shellcheck source=/dev/null
-source /usr/sbin/gpio-lib.sh
-
-# global variables
-    error_flag='/tmp/gpio_fault'
-
-    # the command "cat /sys/class/gpio/gpio"$gpio_Id"/value" itself, takes 10ms~35ms to complete, depends on CPU loading
-    polling_minor_byte_rate=0
-    polling_major_byte_rate=200000
-    polling_rate=$polling_minor_byte_rate
-
-    # the mount of low to ensure that already get out of minor_byte and is in quite gap
-    # this value depends on the polling_minor_byte_rate
-    max_low_in_minor_byte=9
-
-    # the mount of low to ensure that already get out of major_byte and is in stop condition
-    # this value depends on the polling_major_byte_rate
-    max_low_in_major_byte=9
-
-    max_low=$max_low_in_minor_byte
-
-    # state machines:
-    # detecting_minor_byte=0
-    # detecting_major_byte=1
-    curr_state=0
-
-    minor_byte=0
-    major_byte=0
-
-    gpio_status=0
-
-    socket=$1
-
-    socket1_present=151
-    socket1_status=1
-
-    S0_fault_gpio='s0-fault-alert'
-    S1_fault_gpio='s1-fault-alert'
-
-map_event_name() {
-    case $major_byte in
-        2)
-            event_major="FAULT_LED_BOOT_ERROR"
-            case $minor_byte in
-                1)
-                    event_minor="SOC_BOOTDEV_INIT_SEC_ERROR"
-                    ;;
-                2)
-                    event_minor="SECJMP_FAIL_ERROR"
-                    ;;
-                3)
-                    event_minor="UART_INIT_WARN"
-                    ;;
-                4)
-                    event_minor="UART_TX_WARN"
-                    ;;
-                5)
-                    event_minor="SOC_ROMPATCH_BAD_ERROR"
-                    ;;
-                6)
-                    event_minor="SOC_ROMPATCH_RANGE_ERROR"
-                    ;;
-                7)
-                    event_minor="SPI_INIT_ERROR"
-                    ;;
-                8)
-                    event_minor="SPI_TX_ERROR"
-                    ;;
-                9)
-                    event_minor="SPINOR_UNKNOW_DEVICE_WARN"
-                    ;;
-                10)
-                    event_minor="EEPROM_BAD_NVP_HEADER_WARN"
-                    ;;
-                11)
-                    event_minor="EEPROM_BAD_NVP_FIELD_WARN"
-                    ;;
-                12)
-                    event_minor="EEPROM_BAD_CHECKSUM_ERROR_WARN"
-                    ;;
-                13)
-                    event_minor="I2C_DMA_ERROR"
-                    ;;
-                14)
-                    event_minor="I2C_TIMEOUT_ERROR"
-                    ;;
-                15)
-                    event_minor="SOC_BOOTDEV_SPI_LOAD_ERROR"
-                    ;;
-                16)
-                    event_minor="SOC_BOOTDEV_AUTHENTICATION_ERROR"
-                    ;;
-                17)
-                    event_minor="PCP_POWERUP_FAILED"
-                    ;;
-                18)
-                    event_minor="PCP_POWERDOWN_FAILED"
-                    ;;
-                19)
-                    event_minor="CPUPLL_INIT_FAILED"
-                    ;;
-                20)
-                    event_minor="MESHPLL_INIT_FAILED"
-                    ;;
-                *)
-                    event_minor="NOT_SUPPORT"
-            esac
-            ;;
-        3)
-            event_major="FAULT_LED_FW_LOAD_ERROR"
-            case $minor_byte in
-                9)
-                    event_minor="LFS_ERROR"
-                    ;;
-                *)
-                    event_minor="NOT_SUPPORT"
-            esac
-            ;;
-        4)
-            event_major="FAULT_LED_SECURITY_ERROR"
-            case $minor_byte in
-                1)
-                    event_minor="SEC_INVALID_KEY_CERT"
-                    ;;
-                2)
-                    event_minor="SEC_INVALID_CONT_CERT"
-                    ;;
-                3)
-                    event_minor="SEC_INVALID_ROOT_KEY"
-                    ;;
-                4)
-                    event_minor="SEC_INVALID_SECPRO_KEY"
-                    ;;
-                5)
-                    event_minor="SEC_INVALID_KEY_CERT_SIG"
-                    ;;
-                6)
-                    event_minor="SEC_INVALID_CONT_CERT_SIG"
-                    ;;
-                7)
-                    event_minor="SEC_INVALID_IMAGE_HASH"
-                    ;;
-                8)
-                    event_minor="SEC_INVALID_PRI_VERSION"
-                    ;;
-                9)
-                    event_minor="SEC_HUK_MISMATCH"
-                    ;;
-                10)
-                    event_minor="SEC_FUSE_BLOW_CERT_WITHOUT_SPECIAL_BOOT_PIN"
-                    ;;
-                11)
-                    event_minor="SEC_INVALID_CERT_SUBTYPE_STRUCT"
-                    ;;
-                12)
-                    event_minor="SEC_TMMCFG_FAIL"
-                    ;;
-                13)
-                    event_minor="SEC_INVALID_LCS_FROM_EFUSE"
-                    ;;
-                14)
-                    event_minor="SEC_EFUSE_WRITE_FAILED"
-                    ;;
-                15)
-                    event_minor="SEC_INVALID_CERT_VALUE"
-                    ;;
-                16)
-                    event_minor="SEC_INVALID_CERT_VERSION"
-                    ;;
-                *)
-                    event_minor="NOT_SUPPORT"
-                    ;;
-            esac
-            ;;
-        5)
-            event_major="FAULT_LED_EXCEPTION_ERROR"
-            case $minor_byte in
-                1)
-                    event_minor="KERNEL_EXCEPTION_UNKNOWN_REASON_ERROR"
-                    ;;
-                2)
-                    event_minor="KERNEL_EXCEPTION_HARD_FAULT_ERROR"
-                    ;;
-                3)
-                    event_minor="KERNEL_EXCEPTION_BUS_FAULT_ERROR"
-                    ;;
-                4)
-                    event_minor="KERNEL_EXCEPTION_MEMMANAGE_FAULT_ERROR"
-                    ;;
-                5)
-                    event_minor="KERNEL_EXCEPTION_USAGE_FAULT_ERROR"
-                    ;;
-                *)
-                    event_minor="NOT_SUPPORT"
-                    ;;
-            esac
-            ;;
-        *)
-            event_major="NOT_SUPPORT"
-            ;;
-    esac
-}
-
-set_unset_gpio_fault_flag() {
-    if [ ! -f $error_flag ] && [ "$1" == 1 ] ; then
-        touch $error_flag
-    elif [ -f $error_flag ] && [ "$1" == 0 ]; then
-        rm $error_flag
-    fi
-}
-
-toggle_state() {
-    if [ "$curr_state" == 0 ]; then
-        curr_state=1
-        polling_rate=$polling_major_byte_rate
-    else
-        curr_state=0
-        polling_rate=$polling_minor_byte_rate
-        map_event_name
-        echo "detected major_byte=$event_major, minor_byte=$event_minor"
-        set_unset_gpio_fault_flag 1
-    fi
-}
-
-save_pulse_of_byte() {
-    if [ "$curr_state" == 0 ]; then
-        minor_byte=$1
-        #echo "minor_byte=$1"
-    else
-        major_byte=$1
-        #echo "major_byte=$1"
-    fi
-}
-
-# we do not care the pulse is 50ms or 500ms, what we care is that the number of high pulses
-cnt_falling_edge_in_byte() {
-    local cnt_falling_edge=0
-    local cnt_low=0
-
-    local prev=0
-    local curr=0
-
-    while true
-    do
-        prev=$curr
-        curr=$gpio_status
-        # count the falling edges, if they occur, just reset cnt_low
-        if [ "$prev" == 1 ] && [ "$curr" == 0 ]; then
-            cnt_falling_edge=$(( cnt_falling_edge + 1 ))
-            cnt_low=0
-            continue
-        # check if we are in the quite gap or stop condition
-        elif [ "$prev" == 0 ] && [ "$curr" == 0 ]; then
-            cnt_low=$(( cnt_low + 1 ))
-            if [ "$cnt_low" == "$max_low" ]; then
-                save_pulse_of_byte "$cnt_falling_edge"
-                toggle_state
-                break
-            fi
-        fi
-        usleep $polling_rate
-        gpio_status=$(cat /sys/class/gpio/gpio"$gpio_Id"/value)
-    done
-}
-
-gpio_config_input() {
-    echo "$gpio_Id" > /sys/class/gpio/export
-    echo "in" > /sys/class/gpio/gpio"${gpio_Id}"/direction
-}
-
-gpio_number() {
-    local offset
-    local gpioPin
-    local str
-
-    str=$(gpiofind "$1")
-    if [ "$?" == '1' ]; then
-        echo -1
-    else
-        gpioid=$(echo "$str"|cut -c 9)
-        offset=$(echo "$str"|cut -d " " -f 2)
-        gpioPin=$(("$offset" + ${AST2600_GPIO_BASE[$gpioid]}))
-        echo "$gpioPin"
-    fi
-}
-
-init_sysfs_fault_gpio() {
-    gpio_Id=$(gpio_number "$fault_gpio")
-    if [ "$gpio_Id" == "-1" ]; then
-        echo "Invalid GPIO number"
-        exit 1
-    fi
-
-    if [ -d /sys/class/gpio/gpio"$gpio_Id" ]; then
-        return
-    fi
-    gpio_config_input "$gpio_Id"
-}
-
-# init
-if [ "$socket" == "0" ]; then
-	fault_gpio="$S0_fault_gpio"
-else
-	socket1_status=$(gpioget 0 "$socket1_present")
-	if [ "$socket1_status" == 1 ]; then
-		echo "socket 1 not present"
-		exit 0
-	fi
-	fault_gpio=$S1_fault_gpio
-fi
-
-init_sysfs_fault_gpio
-
-# daemon start
-while true
-do
-    # detect when pattern starts
-    if [ "$gpio_status" == 1 ]; then
-        if [ "$curr_state" == 0 ]; then
-            # detecting minor byte, set up minor byte variables
-            max_low=$max_low_in_minor_byte
-            polling_rate=$polling_minor_byte_rate
-        else
-            # detecting major byte, set up major byte variables
-            max_low=$max_low_in_major_byte
-            polling_rate=$polling_major_byte_rate
-        fi
-        # now, there is something on gpio, check if that is a byte pattern
-        cnt_falling_edge_in_byte
-    fi
-
-    usleep $polling_rate
-    gpio_status=$(cat /sys/class/gpio/gpio"$gpio_Id"/value)
-done
-
-exit 1
diff --git a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-fault-monitor/ampere_fault_monitor.sh b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-fault-monitor/ampere_fault_monitor.sh
index e176629..299e13b 100644
--- a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-fault-monitor/ampere_fault_monitor.sh
+++ b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-fault-monitor/ampere_fault_monitor.sh
@@ -2,7 +2,7 @@
 # This script monitors fan, over-temperature, PSU, CPU/SCP failure and update fault LED status
 
 # shellcheck disable=SC2004
-# shellcheck source=/dev/null
+# shellcheck source=meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/gpio-lib.sh
 source /usr/sbin/gpio-lib.sh
 
 # common variables
