summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: d84d107bbf7816731ac90e6579188e3046fa30a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# Maintainer: Eric Woudstra <ericwouds@gmail.com>

# gsctool is only available in certein branches. It is not in the main/master branch.

_gitname="arm-trusted-firmware"
_gitroot="https://github.com/mtk-openwrt/${_gitname}"
#_gitbranch="mtksoc"   # v2.7 DOES NOT REBOOT!
_gitbranch="mtksoc-20210508"
pkgname=bpir64-atf-git
pkgver=r20210508214220.d2c75b2
pkgrel=2
pkgdesc='ATF bpir64 images including fiptool'
url='https://github.com/mtk-openwrt/arm-trusted-firmware.git'
arch=(aarch64)
depends=(linux)
makedepends=(git bpir64-mkimage)
license=(GPL)
source=('bl31-inside-bl2-image.patch'
        'mmc-high-speed.patch'
        'move-bl33-base.patch'
        'incr-fip-decomp-size.patch'
        'no-uboot-bl2.patch'
        'no-uboot-bl31.patch'
        '95-atf.hook'
        'bpir64-writefip'
)
sha256sums=(SKIP SKIP SKIP SKIP SKIP SKIP SKIP SKIP)
install=${pkgname}.install

pkgver() {
  cd "${srcdir}/${_gitname}/"
  printf "r%s.%s" "$(git show -s --format=%cd --date=format:%Y%m%d%H%M%S HEAD)" "$(git rev-parse --short HEAD)"

}

_patch () {
  patch -p1 -N -r - < "${srcdir}/bl31-inside-bl2-image.patch"
  patch -p1 -N -r - < "${srcdir}/mmc-high-speed.patch"
  patch -p1 -N -r - < "${srcdir}/move-bl33-base.patch"
  patch -p1 -N -r - < "${srcdir}/no-uboot-bl2.patch"
  patch -p1 -N -r - < "${srcdir}/no-uboot-bl31.patch"
  if [ ! -z "$(cat ${srcdir}/${_gitname}/plat/mediatek/mt7622/include/platform_def.h | \
            grep FIP_DECOMP_TEMP_SIZE)" ]; then
    patch -p1 -N -r - < "${srcdir}/incr-fip-decomp-size.patch"
  fi
}

prepare() {
  if [[ -d "${srcdir}/${_gitname}/" ]]; then
    cd "${srcdir}/${_gitname}/"
    git fetch
    echo "LOCAL  HEAD: $(git rev-parse HEAD)"
    echo "REMOTE HEAD: $(git rev-parse @{u})"
    if [ "$(git rev-parse HEAD)" != "$(git rev-parse @{u})" ]; then
      git reset --hard
      git fetch --depth 1 origin "${_gitbranch}:${_gitbranch}"
      git checkout "${_gitbranch}"
      _patch
    fi
    echo
  else
    cd "${srcdir}/"
    git clone --branch "${_gitbranch}" --depth=1 "${_gitroot}" "${srcdir}/${_gitname}/"
    cd "${srcdir}/${_gitname}/"
    _patch
    echo
  fi
}

build() {
  cd "${srcdir}/${_gitname}/tools/fiptool"
  sed -i '/-Werror/d' ./Makefile
  make HOSTCCFLAGS+="-D'SHA256(x,y,z)=nop'" LDLIBS=""
  cd "${srcdir}/${_gitname}"
  for _atfdev in sdmmc emmc; do
    _ATFBUILDARGS="PLAT=mt7622 BOOT_DEVICE=$_atfdev DDR3_FLYBY=1 LOG_LEVEL=40"
     sed -i 's/.*entry = get_partition_entry.*/\tentry = get_partition_entry("bpir64-'${_atfdev}'-fip");/' \
           plat/mediatek/mt7622/bl2_boot_mmc.c
    _makeatf="make $_ATFBUILDARGS USE_MKIMAGE=1 MKIMAGE=$(which bpir64-mkimage) DEVICE_HEADER_OFFSET=0"
    touch plat/mediatek/mt7622/platform.mk
    unset LDFLAGS
    unset CFLAGS
    # PRELOADED_BL33_BASE is not being used in mt7622 atf code, so we use it as binairy flags:
    # 0b0001 : incbin BL31.bin inside of BL2 image, disable it during BL31 build because of common code!
    $_makeatf PRELOADED_BL33_BASE=0b0000 bl31
    $_makeatf PRELOADED_BL33_BASE=0b0001 bl2 ${srcdir}/${_gitname}/build/mt7622/release/bl2.img
    dd of=build/mt7622/release/bpir64-atf-${_atfdev}-header.bin bs=1 count=440 if=build/mt7622/release/bl2.img
    dd of=build/mt7622/release/bpir64-atf-${_atfdev}-atf.bin         skip=34   if=build/mt7622/release/bl2.img
  done
}

package() {
  cd "${srcdir}"
  install -m755 -vDt "$pkgdir/usr/bin" bpir64-writefip
  install -Dt "${pkgdir}/usr/share/libalpm/hooks/" -m644 95-atf.hook
  cd "${srcdir}/${_gitname}/tools/fiptool"
  install -m755 -vDt "$pkgdir/usr/bin" fiptool
  cd "${srcdir}/${_gitname}/build/mt7622/release"
  install -Dt "$pkgdir/boot" -m644 bpir64-atf-*.bin
}

# Writing:
#    _device="/dev/"$(lsblk -no pkname /dev/disk/by-partlabel/bpir64-${_atfdev}-atf)
#    _atfdev="/dev/disk/by-partlabel/bpir64-${_atfdev}-atf"
#  echo dd of="$atfdev"        if=/dev/zero 2>/dev/null
#  echo dd of="${device}" bs=1 if=bpir64-atf-${_atfdev}-header
#  echo dd of="$atfdev"        if=bpir64-atf-${_atfdev}-atf