# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)

echo "$BOOTLOADER: creating u-boot.bin"

DESTDIR="$PKG_BUILD/fip"
mkdir -p $DESTDIR

FIPDIR="$(get_build_dir amlogic-boot-fip)/$UBOOT_SYSTEM"

case "${UBOOT_SYSTEM}" in
  box|"")
    # no-op, use vendor booloader
    ;;

  khadas-vim3*|odroid-c4|odroid-hc4)
    if [ "$UBOOT_SYSTEM" = "khadas-vim3" ]; then
      AML_ENCRYPT_BIN="aml_encrypt_g12b"
    else
      AML_ENCRYPT_BIN="aml_encrypt_g12a"
    fi

    cp $FIPDIR/bl301.bin $DESTDIR/
    cp $FIPDIR/acs.bin $DESTDIR/
    cp $FIPDIR/aml_ddr.fw $DESTDIR/
    cp $FIPDIR/bl2.bin $DESTDIR/
    cp $FIPDIR/bl30.bin $DESTDIR/
    cp $FIPDIR/bl31.img $DESTDIR/
    cp $FIPDIR/blx_fix.sh $DESTDIR/
    cp $FIPDIR/ddr3_1d.fw $DESTDIR/
    cp $FIPDIR/ddr4_1d.fw $DESTDIR/
    cp $FIPDIR/ddr4_2d.fw $DESTDIR/
    cp $FIPDIR/diag_lpddr4.fw $DESTDIR/
    cp $FIPDIR/lpddr3_1d.fw $DESTDIR/
    cp $FIPDIR/lpddr4_1d.fw $DESTDIR/
    cp $FIPDIR/lpddr4_2d.fw $DESTDIR/
    cp $FIPDIR/piei.fw $DESTDIR/
    cp $(get_build_dir $BOOTLOADER)/u-boot.bin $DESTDIR/bl33.bin

    $FIPDIR/blx_fix.sh $DESTDIR/bl30.bin \
                       $DESTDIR/zero_tmp \
                       $DESTDIR/bl30_zero.bin \
                       $DESTDIR/bl301.bin \
                       $DESTDIR/bl301_zero.bin \
                       $DESTDIR/bl30_new.bin bl30

    $FIPDIR/blx_fix.sh $DESTDIR/bl2.bin \
                       $DESTDIR/zero_tmp \
                       $DESTDIR/bl2_zero.bin \
                       $DESTDIR/acs.bin \
                       $DESTDIR/bl21_zero.bin \
                       $DESTDIR/bl2_new.bin bl2

    $FIPDIR/$AML_ENCRYPT_BIN --bl30sig --input $DESTDIR/bl30_new.bin \
                                       --output $DESTDIR/bl30_new.bin.g12a.enc \
                                       --level v3
    $FIPDIR/$AML_ENCRYPT_BIN --bl3sig  --input $DESTDIR/bl30_new.bin.g12a.enc \
                                       --output $DESTDIR/bl30_new.bin.enc \
                                       --level v3 --type bl30
    $FIPDIR/$AML_ENCRYPT_BIN --bl3sig  --input $DESTDIR/bl31.img \
                                       --output $DESTDIR/bl31.img.enc \
                                       --level v3 --type bl31
    $FIPDIR/$AML_ENCRYPT_BIN --bl3sig  --input $DESTDIR/bl33.bin --compress lz4 \
                                       --output $DESTDIR/bl33.bin.enc \
                                       --level v3 --type bl33 --compress lz4
    $FIPDIR/$AML_ENCRYPT_BIN --bl2sig  --input $DESTDIR/bl2_new.bin \
                                       --output $DESTDIR/bl2.n.bin.sig
    $FIPDIR/$AML_ENCRYPT_BIN --bootmk \
                             --output $DESTDIR/u-boot.bin \
                             --bl2 $DESTDIR/bl2.n.bin.sig \
                             --bl30 $DESTDIR/bl30_new.bin.enc \
                             --bl31 $DESTDIR/bl31.img.enc \
                             --bl33 $DESTDIR/bl33.bin.enc \
                             --ddrfw1 $DESTDIR/ddr4_1d.fw \
                             --ddrfw2 $DESTDIR/ddr4_2d.fw \
                             --ddrfw3 $DESTDIR/ddr3_1d.fw \
                             --ddrfw4 $DESTDIR/piei.fw \
                             --ddrfw5 $DESTDIR/lpddr4_1d.fw \
                             --ddrfw6 $DESTDIR/lpddr4_2d.fw \
                             --ddrfw7 $DESTDIR/diag_lpddr4.fw \
                             --ddrfw8 $DESTDIR/aml_ddr.fw \
                             --ddrfw9 $DESTDIR/lpddr3_1d.fw \
                             --level v3
    ;;

  odroid-c2)
    $FIPDIR/fip_create --bl30 $FIPDIR/bl30.bin \
                       --bl301 $FIPDIR/bl301.bin \
                       --bl31 $FIPDIR/bl31.bin \
                       --bl33 $(get_build_dir $BOOTLOADER)/u-boot.bin $DESTDIR/fip.bin

    $FIPDIR/fip_create --dump $DESTDIR/fip.bin

    cat $FIPDIR/bl2.package $DESTDIR/fip.bin > $DESTDIR/boot_new.bin

    $FIPDIR/aml_encrypt_gxb --bootsig --input $DESTDIR/boot_new.bin --output $DESTDIR/u-boot.img
    dd if=$DESTDIR/u-boot.img of=$DESTDIR/u-boot.gxbb bs=512 skip=96
    dd if=$FIPDIR/bl1.bin.hardkernel of=$DESTDIR/u-boot.bin.sd.bin conv=fsync,notrunc bs=1 count=442
    dd if=$FIPDIR/bl1.bin.hardkernel of=$DESTDIR/u-boot.bin.sd.bin conv=fsync,notrunc bs=512 skip=1 seek=1
    dd if=$DESTDIR/u-boot.gxbb of=$DESTDIR/u-boot.bin.sd.bin conv=fsync,notrunc bs=512 seek=97
    ;;

  odroid-n2)
    cp $FIPDIR/bl301.bin $DESTDIR/
    cp $FIPDIR/acs.bin $DESTDIR/
    cp $FIPDIR/aml_ddr.fw $DESTDIR/
    cp $FIPDIR/bl2.bin $DESTDIR/
    cp $FIPDIR/bl30.bin $DESTDIR/
    cp $FIPDIR/bl31.img $DESTDIR/
    cp $FIPDIR/blx_fix.sh $DESTDIR/
    cp $FIPDIR/ddr3_1d.fw $DESTDIR/
    cp $FIPDIR/ddr4_1d.fw $DESTDIR/
    cp $FIPDIR/ddr4_2d.fw $DESTDIR/
    cp $FIPDIR/diag_lpddr4.fw $DESTDIR/
    cp $FIPDIR/lpddr4_1d.fw $DESTDIR/
    cp $FIPDIR/lpddr4_2d.fw $DESTDIR/
    cp $FIPDIR/piei.fw $DESTDIR/
    cp $(get_build_dir $BOOTLOADER)/u-boot.bin $DESTDIR/bl33.bin

    $FIPDIR/blx_fix.sh $DESTDIR/bl30.bin \
                       $DESTDIR/zero_tmp \
                       $DESTDIR/bl30_zero.bin \
                       $DESTDIR/bl301.bin \
                       $DESTDIR/bl301_zero.bin \
                       $DESTDIR/bl30_new.bin bl30

    $FIPDIR/blx_fix.sh $DESTDIR/bl2.bin \
                       $DESTDIR/zero_tmp \
                       $DESTDIR/bl2_zero.bin \
                       $DESTDIR/acs.bin \
                       $DESTDIR/bl21_zero.bin \
                       $DESTDIR/bl2_new.bin bl2

    $FIPDIR/aml_encrypt_g12b --bl30sig --input $DESTDIR/bl30_new.bin \
                                       --output $DESTDIR/bl30_new.bin.g12a.enc \
                                       --level v3
    $FIPDIR/aml_encrypt_g12b --bl3sig  --input $DESTDIR/bl30_new.bin.g12a.enc \
                                       --output $DESTDIR/bl30_new.bin.enc \
                                       --level v3 --type bl30
    $FIPDIR/aml_encrypt_g12b --bl3sig  --input $DESTDIR/bl31.img \
                                       --output $DESTDIR/bl31.img.enc \
                                       --level v3 --type bl31
    $FIPDIR/aml_encrypt_g12b --bl3sig  --input $DESTDIR/bl33.bin --compress lz4 \
                                       --output $DESTDIR/bl33.bin.enc \
                                       --level v3 --type bl33 --compress lz4
    $FIPDIR/aml_encrypt_g12b --bl2sig  --input $DESTDIR/bl2_new.bin \
                                       --output $DESTDIR/bl2.n.bin.sig
    $FIPDIR/aml_encrypt_g12b --bootmk \
                             --output $DESTDIR/u-boot.bin \
                             --bl2 $DESTDIR/bl2.n.bin.sig \
                             --bl30 $DESTDIR/bl30_new.bin.enc \
                             --bl31 $DESTDIR/bl31.img.enc \
                             --bl33 $DESTDIR/bl33.bin.enc \
                             --ddrfw1 $DESTDIR/ddr4_1d.fw \
                             --ddrfw2 $DESTDIR/ddr4_2d.fw \
                             --ddrfw3 $DESTDIR/ddr3_1d.fw \
                             --ddrfw4 $DESTDIR/piei.fw \
                             --ddrfw5 $DESTDIR/lpddr4_1d.fw \
                             --ddrfw6 $DESTDIR/lpddr4_2d.fw \
                             --ddrfw7 $DESTDIR/diag_lpddr4.fw \
                             --ddrfw8 $DESTDIR/aml_ddr.fw \
                             --level v3
    ;;

  nanopi-k2)
    cp $FIPDIR/bl2.bin $DESTDIR/
    cp $FIPDIR/acs.bin $DESTDIR/
    cp $FIPDIR/bl21.bin $DESTDIR/
    cp $FIPDIR/bl30.bin $DESTDIR/
    cp $FIPDIR/bl301.bin $DESTDIR/
    cp $FIPDIR/bl31.img $DESTDIR/
    cp $(get_build_dir $BOOTLOADER)/u-boot.bin $DESTDIR/bl33.bin

    $FIPDIR/blx_fix.sh $DESTDIR/bl30.bin \
                       $DESTDIR/zero_tmp \
                       $DESTDIR/bl30_zero.bin \
                       $DESTDIR/bl301.bin \
                       $DESTDIR/bl301_zero.bin \
                       $DESTDIR/bl30_new.bin bl30

    $FIPDIR/fip_create --bl30 $DESTDIR/bl30_new.bin \
                       --bl31 $DESTDIR/bl31.img \
                       --bl33 $DESTDIR/bl33.bin \
                              $DESTDIR/fip.bin

    $FIPDIR/fip_create --dump $DESTDIR/fip.bin

    python3 $FIPDIR/acs_tool.py $DESTDIR/bl2.bin \
                                $DESTDIR/bl2_acs.bin \
                                $DESTDIR/acs.bin 0

    $FIPDIR/blx_fix.sh $DESTDIR/bl2_acs.bin \
                       $DESTDIR/zero_tmp \
                       $DESTDIR/bl2_zero.bin \
                       $DESTDIR/bl21.bin \
                       $DESTDIR/bl21_zero.bin \
                       $DESTDIR/bl2_new.bin bl2

    cat $DESTDIR/bl2_new.bin $DESTDIR/fip.bin > $DESTDIR/boot_new.bin

    $FIPDIR/aml_encrypt_gxb --bootsig --input $DESTDIR/boot_new.bin --output $DESTDIR/u-boot.bin
    ;;

  *) # GXL/GXM
    cp $FIPDIR/bl2.bin $DESTDIR/
    cp $FIPDIR/acs.bin $DESTDIR/
    cp $FIPDIR/bl21.bin $DESTDIR/
    cp $FIPDIR/bl30.bin $DESTDIR/
    cp $FIPDIR/bl301.bin $DESTDIR/
    cp $FIPDIR/bl31.img $DESTDIR/
    cp $(get_build_dir $BOOTLOADER)/u-boot.bin $DESTDIR/bl33.bin

    $FIPDIR/blx_fix.sh $DESTDIR/bl30.bin \
                       $DESTDIR/zero_tmp \
                       $DESTDIR/bl30_zero.bin \
                       $DESTDIR/bl301.bin \
                       $DESTDIR/bl301_zero.bin \
                       $DESTDIR/bl30_new.bin bl30

    python3 $FIPDIR/acs_tool.py $DESTDIR/bl2.bin $DESTDIR/bl2_acs.bin $DESTDIR/acs.bin 0

    $FIPDIR/blx_fix.sh $DESTDIR/bl2_acs.bin \
                       $DESTDIR/zero_tmp \
                       $DESTDIR/bl2_zero.bin \
                       $DESTDIR/bl21.bin \
                       $DESTDIR/bl21_zero.bin \
                       $DESTDIR/bl2_new.bin bl2

    $FIPDIR/aml_encrypt_gxl --bl3enc --input $DESTDIR/bl30_new.bin
    $FIPDIR/aml_encrypt_gxl --bl3enc --input $DESTDIR/bl31.img
    $FIPDIR/aml_encrypt_gxl --bl3enc --input $DESTDIR/bl33.bin
    $FIPDIR/aml_encrypt_gxl --bl2sig --input $DESTDIR/bl2_new.bin --output $DESTDIR/bl2.n.bin.sig
    $FIPDIR/aml_encrypt_gxl --bootmk --output $DESTDIR/u-boot.bin --bl2 $DESTDIR/bl2.n.bin.sig --bl30 $DESTDIR/bl30_new.bin.enc --bl31 $DESTDIR/bl31.img.enc --bl33 $DESTDIR/bl33.bin.enc
    ;;

esac

# Clean up after previous build
rm -rf $INSTALL/usr/share/bootloader/boot.ini
rm -rf $INSTALL/usr/share/bootloader/u-boot*

# Install u-boot
mkdir -p $INSTALL/usr/share/bootloader
if [ $UBOOT_SYSTEM != "box" ]; then
  if [ -f $DESTDIR/u-boot.bin.sd.bin ]; then
    cp -av $DESTDIR/u-boot.bin.sd.bin $INSTALL/usr/share/bootloader
  fi
  if [ -f $DESTDIR/u-boot.bin ]; then
    cp -av $DESTDIR/u-boot.bin $INSTALL/usr/share/bootloader
  fi
fi

# Install boot.ini if it exists
if find_file_path bootloader/${UBOOT_SYSTEM}.ini; then
  cp -av ${FOUND_PATH} $INSTALL/usr/share/bootloader/boot.ini
fi
