aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/mediatek/image/mt7623.mk
blob: 89c771e5a06c75fa96d1e7ee32b1b308e4998422 (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
KERNEL_LOADADDR := 0x80008000
DEVICE_VARS += UBOOT_TARGET UBOOT_OFFSET UBOOT_IMAGE

# 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 1M@$(UBOOT_OFFSET) \
			-t 0xea	-N recovery	-p 40M@4M \
		$(if $(findstring sdmmc,$1), \
			-t 0x2e -N production	-p $(CONFIG_TARGET_ROOTFS_PARTSIZE)M@48M \
		) \
		$(if $(findstring emmc,$1), \
			-t 0x2e -N production	-p $(CONFIG_TARGET_ROOTFS_PARTSIZE)M@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-$(UBOOT_IMAGE) >> $@
endef

define Build/scatterfile
	./gen_scatterfile.sh $(subst mt,MT,$(SUBTARGET)) "$1" \
		$(subst -scatter.txt,,$(notdir $@)) "$(DEVICE_TITLE)" > $@
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_OFFSET := 320k
  UBOOT_TARGET := mt7623n_bpir2
  UBOOT_IMAGE := u-boot.bin
  UBOOT_PATH := $(STAGING_DIR_IMAGE)/$$(UBOOT_TARGET)-$$(UBOOT_IMAGE)
  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 := mt7623-mbr emmc |\
			    pad-to 2k | 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 $$(UBOOT_OFFSET) | 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 sdcard.img.gz
  SUPPORTED_DEVICES := bananapi,bpi-r2
endef
TARGET_DEVICES += bananapi_bpi-r2

define Device/unielec_u7623-02
  DEVICE_VENDOR := UniElec
  DEVICE_MODEL := U7623-02
  # 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
  DEVICE_DTS_DIR := ../dts
  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
  UBOOT_OFFSET := 256k
  UBOOT_TARGET := mt7623a_unielec_u7623
  UBOOT_IMAGE := u-boot-mtk.bin
  UBOOT_PATH := $(STAGING_DIR_IMAGE)/$$(UBOOT_TARGET)-$$(UBOOT_IMAGE)
  IMAGES := sysupgrade.itb
  KERNEL := kernel-bin | gzip
  KERNEL_INITRAMFS_SUFFIX := -recovery.itb
  KERNEL_INITRAMFS := kernel-bin | gzip | fit gzip $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb with-initrd
  IMAGE/sysupgrade.itb := append-kernel | fit gzip $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb external-static-with-rootfs | append-metadata
  ARTIFACT/u-boot.bin := append-uboot
# vendor Preloader seems not to care about SDMMC_BOOT/EMMC_BOOT header,
# but OpenWrt expects 'SDMM' magic for sysupgrade.
  ARTIFACT/emmc.img.gz := mt7623-mbr sdmmc |\
			    pad-to $$(UBOOT_OFFSET) | append-bootloader $$(UBOOT_TARGET) |\
			    pad-to 4M | append-image-stage initramfs-recovery.itb |\
			    pad-to 48M | append-image squashfs-sysupgrade.itb |\
			    gzip | append-metadata
  ARTIFACT/scatter.txt := scatterfile emmc.img.gz
  ARTIFACTS := u-boot.bin scatter.txt emmc.img.gz
  SUPPORTED_DEVICES += unielec,u7623-02-emmc-512m
endef
TARGET_DEVICES += unielec_u7623-02


# Legacy helper for U7623 board
define Build/fat-recovery-fs
	rm -f $@.recovery
	mkfs.fat -C $@.recovery 3070
	cat $@.recovery >> $@
endef

# 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 \
	partx-utils
  IMAGES := sysupgrade.bin.gz
  IMAGE/sysupgrade.bin.gz := append-kernel |\
				pad-to 4864k | fat-recovery-fs |\
				pad-to 7936k | append-rootfs |\
				gzip | append-metadata
  SUPPORTED_DEVICES := unielec,u7623-02-emmc-512m
endef
TARGET_DEVICES += unielec_u7623-02-emmc-512m-legacy