aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/mediatek/image/mt7623.mk
diff options
context:
space:
mode:
authorDaniel Golle <daniel@makrotopia.org>2021-07-10 16:35:47 +0100
committerDaniel Golle <daniel@makrotopia.org>2021-07-20 04:16:48 +0100
commit86a61e716efe2e0ef2f4ce9b2fdd7a532661ef56 (patch)
tree9d933bb05ab52a825301b54f71ebc4d384d08e66 /target/linux/mediatek/image/mt7623.mk
parent6b2000b6ff19165d33b7f67fb7275334cbf80395 (diff)
downloadupstream-86a61e716efe2e0ef2f4ce9b2fdd7a532661ef56.tar.gz
upstream-86a61e716efe2e0ef2f4ce9b2fdd7a532661ef56.tar.bz2
upstream-86a61e716efe2e0ef2f4ce9b2fdd7a532661ef56.zip
mediatek: rework Bananapi BPi-R2
* introduce recovery (=initramfs) vs. production dual boot scheme * make use of uImage.FIT (instead of FAT partition) * generate images using build steps (instead of external scripts) * simplify sysupgrade and config restore (thanks to uImage.FIT) * make sure mmc devices are ordered persistently (set DT aliases) This commit breaks sysupgrade from existing installations, you will have to re-install using the sdcard.img.gz image. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Diffstat (limited to 'target/linux/mediatek/image/mt7623.mk')
-rw-r--r--target/linux/mediatek/image/mt7623.mk144
1 files changed, 104 insertions, 40 deletions
diff --git a/target/linux/mediatek/image/mt7623.mk b/target/linux/mediatek/image/mt7623.mk
index 56f67c0e89..c404b333ba 100644
--- a/target/linux/mediatek/image/mt7623.mk
+++ b/target/linux/mediatek/image/mt7623.mk
@@ -1,59 +1,123 @@
KERNEL_LOADADDR := 0x80008000
DEVICE_VARS += UBOOT_TARGET UBOOT_OFFSET UBOOT_ENVSIZE
-ifneq ($(CONFIG_MTK_BOOT_PARTSIZE),)
-BOOTFS_BLOCK_SIZE := 1024
-BOOTFS_BLOCKS := $(shell echo $$(($(CONFIG_MTK_BOOT_PARTSIZE)*1024*1024/$(BOOTFS_BLOCK_SIZE))))
-endif
+# The bootrom of MT7623 expects legacy MediaTek headers present in
+# exactly the location also used for the primary GPT partition table.
+# (*MMC_BOOT and BRLYT)
+# Hence only MSDOS/MBR partitioning can work here.
+#
+# ------------------------ Sector Offset
+# | MBR + SDMMC_BOOT | 0 0x0
+# |----------------------|
+# | BRLYT header | 1 0x200
+# |----------------------|
+# . .
+# . .
+# |----------------------|
+# | | 4 0x800
+# | |
+# | Preloader |
+# . .
+# . .
+# | | 639
+# |----------------------|
+# | MBR partition #1 | 640 0x50000
+# | |
+# | U-Boot |
+# . .
+# . .
+# | | 1663
+# |----------------------|
+# | MBR partition #2 |
+# | |
+# | Recovery |
+# . .
+# . (uImage.FIT) .
+# | |
+# |----------------------|
+# | MBR partition #3 |
+# | |
+# | Production |
+# | |
+# | (uImage.FIT, |
+# . rootfs_Data.) .
+# . .
+# | |
+# ------------------------
+#
+# For eMMC boot, everything up to and including the preloader must be
+# written to /dev/mmcblk0boot0, with the SDMMC_BOOT header changed to
+# read EMMC_BOOT\0 instead.
+#
+# The contents of the main eMMC are identical to the SD card layout,
+# with the preloader loading 512KiB of U-Boot starting at 0x50000.
-define Build/mtk-mmc-img
- rm -f $@.boot
- mkfs.fat -C $@.boot $(BOOTFS_BLOCKS)
+define Build/mt7623-mbr
+ cp $@ $@.tmp 2>/dev/null || true
+ ptgen -o $@.tmp -h 4 -s 63 -a 0 -l 1024 \
+ -t 0x41 -N uboot -p 3584k@320k \
+ -t 0xea -N recovery -p 40M@4M \
+ $(if $(findstring sdmmc,$1), \
+ -t 0x2e -N production -p 208M@48M \
+ ) \
+ $(if $(findstring emmc,$1), \
+ -t 0x2e -N production -p 976M@48M \
+ )
- if [ -r $(STAGING_DIR_IMAGE)/$(UBOOT_TARGET)-preloader.bin ]; then \
- ./gen_mtk_mmc_img.sh emmc $@.emmc \
- $(STAGING_DIR_IMAGE)/$(UBOOT_TARGET)-preloader.bin; \
- mcopy -i $@.boot $@.emmc ::eMMCboot.bin; \
- fi
- mkenvimage -s $(UBOOT_ENVSIZE) -o $(STAGING_DIR_IMAGE)/$(UBOOT_TARGET)-uboot.env $(UBOOT_TARGET)-uEnv.txt
- mcopy -i $@.boot $(STAGING_DIR_IMAGE)/$(UBOOT_TARGET)-uboot.env ::uboot.env
- mcopy -i $@.boot $(IMAGE_KERNEL) ::uImage
- ./gen_mtk_mmc_img.sh sd $@ \
- $(STAGING_DIR_IMAGE)/$(UBOOT_TARGET)-preloader.bin \
- $(STAGING_DIR_IMAGE)/$(UBOOT_TARGET)-u-boot*.bin \
- $(UBOOT_OFFSET) \
- $@.boot \
- $(IMAGE_ROOTFS) \
- $(CONFIG_MTK_BOOT_PARTSIZE) \
- $(CONFIG_TARGET_ROOTFS_PARTSIZE)
+ echo -en \
+ $(if $(findstring sdmmc,$1),"SDMMC_BOOT\x00\x00\x01\x00\x00\x00\x00\x02\x00\x00") \
+ $(if $(findstring emmc,$1),"EMMC_BOOT\x00\x00\x00\x01\x00\x00\x00\x00\x02\x00\x00") \
+ | dd bs=1 of="$@.tmp" seek=0 conv=notrunc
+
+ echo -en "BRLYT\x00\x00\x00\x01\x00\x00\x00\x00\x08\x00\x00\x00\x08\x00\x00\x42\x42\x42\x42\x08\x00\x01\x00\x00\x08\x00\x00\x00\x08\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"\
+ | dd bs=1 of="$@.tmp" seek=512 conv=notrunc
+
+ cat $@.tmp >> $@
+ rm $@.tmp
endef
-define Build/preloader
- $(CP) $(STAGING_DIR_IMAGE)/$1-preloader.bin $@
+define Build/append-preloader
+ cat $(STAGING_DIR_IMAGE)/$1-preloader.bin >> $@
endef
-define Build/scatterfile
- ./gen_scatterfile.sh $(subst mt,MT,$(SUBTARGET)) "$1" \
- $(subst -scatter.txt,,$(notdir $@)) "$(DEVICE_TITLE)" > $@
+define Build/append-bootloader
+ cat $(STAGING_DIR_IMAGE)/$1-u-boot.bin >> $@
endef
-define Device/bpi_bananapi-r2
- DEVICE_VENDOR := Bpi
- DEVICE_MODEL := Banana Pi R2
+define Device/bananapi_bpi-r2
+ DEVICE_VENDOR := Bananapi
+ DEVICE_MODEL := BPi-R2
DEVICE_DTS := mt7623n-bananapi-bpi-r2
- DEVICE_PACKAGES := kmod-fs-vfat kmod-nls-cp437 kmod-nls-iso8859-1 kmod-mmc \
- mkf2fs e2fsprogs kmod-usb-ohci kmod-usb2 kmod-usb3 kmod-ata-ahci-mtk
- UBOOT_ENVSIZE := 0x2000
+ DEVICE_PACKAGES := kmod-mmc mkf2fs e2fsprogs kmod-usb3 kmod-ata-ahci
+ UBOOT_ENVSIZE := 0x10000
UBOOT_OFFSET := 320k
UBOOT_TARGET := mt7623n_bpir2
- IMAGES := img.gz
- IMAGE/img.gz := mtk-mmc-img | gzip | append-metadata
- ARTIFACT/preloader.bin := preloader $$(UBOOT_TARGET)
- ARTIFACT/scatter.txt := scatterfile $$(firstword $$(FILESYSTEMS))-$$(firstword $$(IMAGES))
- ARTIFACTS = preloader.bin scatter.txt
+ UBOOT_PATH := $(STAGING_DIR_IMAGE)/mt7623n_bpir2-u-boot.bin
+ IMAGES := sysupgrade.itb
+ KERNEL := kernel-bin | gzip
+ KERNEL_INITRAMFS_SUFFIX := -recovery.itb
+ KERNEL_INITRAMFS := kernel-bin | gzip | fit gzip $$(DTS_DIR)/$$(DEVICE_DTS).dtb with-initrd
+ IMAGE/sysupgrade.itb := append-kernel | fit gzip $$(DTS_DIR)/$$(DEVICE_DTS).dtb external-static-with-rootfs | append-metadata
+ ARTIFACT/preloader.bin := append-preloader $$(UBOOT_TARGET)
+ ARTIFACT/u-boot.bin := append-uboot
+ ARTIFACT/sdcard.img.gz := mt7623-mbr sdmmc |\
+ pad-to 2k | append-preloader $$(UBOOT_TARGET) |\
+ pad-to 320k | append-bootloader $$(UBOOT_TARGET) |\
+ pad-to 4092k | mt7623-mbr emmc |\
+ pad-to 4M | append-image-stage initramfs-recovery.itb |\
+ pad-to 48M | append-image squashfs-sysupgrade.itb |\
+ gzip
+ ARTIFACTS = u-boot.bin preloader.bin scatter.txt sdcard.img.gz
SUPPORTED_DEVICES := bananapi,bpi-r2
endef
-TARGET_DEVICES += bpi_bananapi-r2
+TARGET_DEVICES += bananapi_bpi-r2
+
+
+
+define Build/scatterfile
+ ./gen_scatterfile.sh $(subst mt,MT,$(SUBTARGET)) "$1" \
+ $(subst -scatter.txt,,$(notdir $@)) "$(DEVICE_TITLE)" > $@
+endef
# Full eMMC image including U-Boot and partition table
define Device/unielec_u7623-emmc