#! /bin/sh -e
# local-premount script to load Krita SOM dtbos

PREREQ=""

# Output pre-requisites
prereqs()
{
        echo "$PREREQ"
}

case "$1" in
    prereqs)
        prereqs
        exit 0
        ;;
esac

# Model should contain K26, for instance "ZynqMP SMK-K26 Rev1/B/A"
if ! grep -i -q K26 /sys/firmware/devicetree/base/model; then
    exit 0
fi

printf "Kria module detected, loading dtbo...\n"

som_eeprom=$(find /sys/bus/i2c/devices/*50/eeprom -maxdepth 1 -name eeprom)
cc_eeprom=$(find /sys/bus/i2c/devices/*51/eeprom -maxdepth 1 -name eeprom)

som_name=$(fru-dump -i "$som_eeprom" -b -f "product name")
# our busybox does not support "tr '[:upper:]' '[:lower:]'"
# shellcheck disable=SC2018
carrier_card=$(fru-dump -i "$cc_eeprom" -b -f "product name" | tr 'A-z' 'a-z')
cc_rev=$(fru-dump -i "$cc_eeprom" -b -f revision)

dtbo_path=/usr/share/xlnx-kria-firmware/devicetree
dtbo_file="zynqmp-$carrier_card-rev$cc_rev.dtbo"

printf "SOM: %s CARRIER_CARD: %s REVISION: %s\n" "$som_name" "$carrier_card" "$cc_rev"

if [ -f "$dtbo_path/$dtbo_file" ]; then
    overlay_path="/configfs/device-tree/overlays/"
    printf "Applying %s\n" "$dtbo_file"
    [ ! -d "/configfs" ] && mkdir /configfs
    mount -t configfs configfs /configfs
    cd $overlay_path
    [ ! -d "./full" ] && mkdir full
    [ ! -d "/lib/firmware" ] && mkdir /lib/firmware/
    cp "$dtbo_path/$dtbo_file" /lib/firmware/
    printf "%s" "$dtbo_file" > full/path

    # Load dtbo for display port
    mkdir dp
    dp_dtbo=zynqmp-sck-kv-g-dp.dtbo
    cp "$dtbo_path/$dp_dtbo" /lib/firmware/
    printf "%s" "$dp_dtbo" > dp/path
else
    printf "NO CARRIER DTBO FOUND, PLEASE CHECK %s\n" "$dtbo_path"
fi
