1#!/bin/sh
2
3set_pdb_cpld_leak_config()
4{
5    if ! GPIOCHIP_NUM="$(basename "$(ls -d /sys/bus/i2c/devices/14-0014/gpiochip*)")"; then
6        echo "can not find gpiochip number"
7        return 1
8    fi
9
10    GPIOPIN_NUM_LEAK_0="8"
11    GPIOPIN_NUM_LEAK_1="9"
12    GPIOPIN_NUM_LEAK_2="10"
13    GPIOPIN_NUM_LEAK_3="11"
14
15    case "$1" in
16        0)
17            gpioset "${GPIOCHIP_NUM}" "${GPIOPIN_NUM_LEAK_0}"=1 "${GPIOPIN_NUM_LEAK_1}"=0 "${GPIOPIN_NUM_LEAK_2}"=0 "${GPIOPIN_NUM_LEAK_3}"=0
18            ;;
19        1)
20            gpioset "${GPIOCHIP_NUM}" "${GPIOPIN_NUM_LEAK_0}"=0 "${GPIOPIN_NUM_LEAK_1}"=1 "${GPIOPIN_NUM_LEAK_2}"=0 "${GPIOPIN_NUM_LEAK_3}"=0
21            ;;
22        2)
23            gpioset "${GPIOCHIP_NUM}" "${GPIOPIN_NUM_LEAK_0}"=0 "${GPIOPIN_NUM_LEAK_1}"=0 "${GPIOPIN_NUM_LEAK_2}"=1 "${GPIOPIN_NUM_LEAK_3}"=0
24            ;;
25        3)
26            gpioset "${GPIOCHIP_NUM}" "${GPIOPIN_NUM_LEAK_0}"=0 "${GPIOPIN_NUM_LEAK_1}"=0 "${GPIOPIN_NUM_LEAK_2}"=0 "${GPIOPIN_NUM_LEAK_3}"=1
27            ;;
28        default)
29            echo "invalid pdb leak config: ${LEAK_CONFIG}"
30            ;;
31    esac
32}
33
34# Create /dev/mem
35if [ ! -c /dev/mem ]; then
36    /bin/mknod /dev/mem c 1 1
37fi
38
39# Disable FMC_WDT2
40FMC_WDT2_CTRL_VAL=$(printf "%d\n" "$(/sbin/devmem 0x1e620064)")
41SET_VAL=$((FMC_WDT2_CTRL_VAL & 0xFFFFFFFE))
42/sbin/devmem 0x1e620064 32 "$SET_VAL"
43
44# Detect boot flash source
45SLOT_FILE="/run/media/slot"
46mkdir -p "$(dirname "${SLOT_FILE}")"
47if [ "$((FMC_WDT2_CTRL_VAL & 0x00000010))" != "0" ]; then
48    echo "1" > "$SLOT_FILE"
49else
50    echo "0" > "$SLOT_FILE"
51fi
52
53# Set PDB CPLD leak event config
54PLAT_CONFIG_FILE="/mnt/data/catalina-platform-config.json"
55if PDB_CPLD_VER=$(/usr/sbin/i2ctransfer -y -f 14 w4@0x40 0xc0 0x00 0x00 0x00 r4); then
56    PDB_CPLD_VER="$(echo "$PDB_CPLD_VER" | awk '{printf "%02x%02x%02x%02x\n", $1, $2, $3, $4}')"
57    echo "PDB CPLD version: $PDB_CPLD_VER"
58    PDB_CPLD_VER_DEC=$(printf "%d" "0x$PDB_CPLD_VER")
59
60    if [ "$PDB_CPLD_VER_DEC" -lt 65536 ]; then
61        echo "PDB CPLD version not support leak event configuration..."
62        echo "Skip leak event configuration"
63    else
64        PDB_LEAK_CONFIG="$(jq '.PDB_LEAK_CONFIG' ${PLAT_CONFIG_FILE})"
65        case "${PDB_LEAK_CONFIG}" in
66            0|1|2|3)
67                echo "Get PDB leak config setting = ${PDB_LEAK_CONFIG}"
68                ;;
69            *)
70                PDB_LEAK_CONFIG=0
71                echo "No PDB leak config available, use default config ${PDB_LEAK_CONFIG}"
72                ;;
73        esac
74        set_pdb_cpld_leak_config "${PDB_LEAK_CONFIG}"
75    fi
76else
77    echo "Unable to get PDB CPLD version..."
78    echo "Skip leak event configuration"
79fi
80
81exit 0
82