'VÏu¢Âh=Î  –        †3ä Fedora Update Script              Ž    # --------------------------------------------------------------
# Version Check
# --------------------------------------------------------------
# Define the current script version
setenv current_update_ver 3

# Check if an update version is already stored in env_update_ver
if test -n "${env_update_ver}"; then
    # If the current script version is less than or equal to the stored version, abort.
    if test ${current_update_ver} -le ${env_update_ver}; then
        echo "Current update script version (${current_update_ver}) is not higher than installed version (${env_update_ver}). Aborting update."
        exit
    fi
fi

# Set the new update version into the environment
setenv env_update_ver ${current_update_ver}
setenv current_update_ver

# --------------------------------------------------------------
# Do not override bootcmd_bak if already set (backup is used only once)
# --------------------------------------------------------------
if test -z "${bootcmd_bak}"; then
    setenv bootcmd_bak "$bootcmd"
fi

# --------------------------------------------------------------
# Check if environment has already been updated
# --------------------------------------------------------------
# if test "${bootcmd_set}" -eq 1; then
#     echo "Environment has been set. Type 'run env_recover' to reset bootcmd to factory reset."
#     exit
# fi

echo "Setting environment for Fedora RISC-V update (version ${env_update_ver})"
# setenv bootcmd_set 1

# ----------------------------
# Storage Device Configuration
# ----------------------------
setenv storage_init 'pci enum; usb start; nvme scan; mmc rescan; sata init;'
setenv storage_list 'mmc usb nvme sata'

# ----------------------
# Environment Import Logic
# ----------------------
setenv import_env 'env import -t $loadaddr $filesize'
setenv envfile '/uEnv_EIC7700.txt'

# ----------------------
# Bootloader Core Logic
# ----------------------
setenv boot_attempt '
    if load ${dev_type} ${dev_num}:1 $loadaddr $envfile; then
        echo "[INFO] Loaded environment from ${dev_type} ${dev_num}:1";
        run import_env;
        boot;
    fi'

setenv storage_check '
    for dev_type in ${storage_list}; do
        echo "Checking ${dev_type} devices...";
        for dev_num in 0 1; do
            if ${dev_type} dev ${dev_num}; then
                echo "Attempting boot from ${dev_type}#${dev_num}";
                run boot_attempt;
            fi;
        done;
    done'

# ----------------------
# Main Boot Sequence
# ----------------------
# Do not override bootcmd_bak if already set above.
setenv bootcmd "run storage_init; run storage_check; $bootcmd"

setenv env_recover '
    # Recover bootcmd from backup (bootcmd_bak remains untouched if previously set)
    setenv bootcmd "$bootcmd_bak";
    setenv storage_init;
    setenv storage_list;
    setenv import_env;
    setenv boot_attempt;
    setenv storage_check;
    setenv bootcmd_bak;
    setenv env_recover;
    # setenv bootcmd_set;
    setenv envfile;
    setenv env_update_ver;
    saveenv;
    echo "Environment reset! Type `reset` to reboot machine."
'

saveenv

echo "Type 'run env_recover' to reset Env"
echo "Env Update complete! Type 'boot' to boot Fedora"
# boot

