aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/mediatek/image/mt7623.mk
blob: 9a938662c32748c97a6fe52662d56fc2156a0c9e (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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
KERNEL_LOADADDR := 0x80008000
DEVICE_VARS += UBOOT_TARGET UBOOT_OFFSET UBOOT_ENVSIZE

# 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/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 \
		)

	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/append-preloader
	cat $(STAGING_DIR_IMAGE)/$1-preloader.bin >> $@
endef

define Build/append-bootloader
	cat $(STAGING_DIR_IMAGE)/$1-u-boot.bin >> $@
endef

define Device/bananapi_bpi-r2
  DEVICE_VENDOR := Bananapi
  DEVICE_MODEL := BPi-R2
  DEVICE_DTS := mt7623n-bananapi-bpi-r2
  DEVICE_PACKAGES := mkf2fs e2fsprogs kmod-usb3 kmod-ata-ahci
  UBOOT_ENVSIZE := 0x10000
  UBOOT_OFFSET := 320k
  UBOOT_TARGET := mt7623n_bpir2
  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 += bananapi_bpi-r2


ifneq ($(CONFIG_MTK_BOOT_PARTSIZE),)
BOOTFS_BLOCK_SIZE := 1024
BOOTFS_BLOCKS := $(shell echo $$(($(CONFIG_MTK_BOOT_PARTSIZE)*1024*1024/$(BOOTFS_BLOCK_SIZE))))
endif

define Build/mtk-mmc-img
	rm -f $@.boot
	mkfs.fat -C $@.boot $(BOOTFS_BLOCKS)

	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) \
		104
endef

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
  DEVICE_VENDOR := UniElec
  DEVICE_MODEL := U7623
  DEVICE_VARIANT := eMMC
  # When we use FIT images, U-Boot will populate the /memory node with the correct
  # memory size discovered from the preloader, so we don't need separate builds.
  DEVICE_DTS := mt7623a-unielec-u7623-02-emmc-512m
  DEVICE_DTS_DIR := ../dts
  SUPPORTED_DEVICES := unielec,u7623-02-emmc-512m
  UBOOT_ENVSIZE := 0x1000
  UBOOT_OFFSET := 256k
  UBOOT_TARGET := mt7623a_unielec_u7623
  IMAGES := img.gz
  IMAGE/img.gz := mtk-mmc-img | gzip | append-metadata
  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
  ARTIFACT/scatter.txt := scatterfile $$(firstword $$(FILESYSTEMS))-$$(firstword $$(IMAGES))
  ARTIFACTS := scatter.txt
endef
TARGET_DEVICES += unielec_u7623-emmc

# Legacy partial image for U7623
# This preserves the vendor U-Boot and starts with a uImage at 0xA00
define Device/unielec_u7623-02-emmc-512m-legacy
  DEVICE_VENDOR := UniElec
  DEVICE_MODEL := U7623-02
  DEVICE_VARIANT := eMMC/512MiB RAM (legacy image)
  DEVICE_DTS := mt7623a-unielec-u7623-02-emmc-512m
  DEVICE_DTS_DIR := ../dts
  KERNEL_NAME := zImage
  KERNEL := kernel-bin | append-dtb | uImage none
  KERNEL_INITRAMFS := kernel-bin | append-dtb | uImage none
  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
  IMAGES := sysupgrade-emmc.bin.gz
  IMAGE/sysupgrade-emmc.bin.gz := sysupgrade-emmc | gzip | append-metadata
  SUPPORTED_DEVICES := unielec,u7623-02-emmc-512m
endef
TARGET_DEVICES += unielec_u7623-02-emmc-512m-legacy