blob: fbb91e2374f4cb212a0486a88e504a897b4edb67 [file] [log] [blame]
Victor Chong05bb4ed2017-07-02 13:47:57 +01001################################################################################
2# Following variables defines how the NS_USER (Non Secure User - Client
3# Application), NS_KERNEL (Non Secure Kernel), S_KERNEL (Secure Kernel) and
4# S_USER (Secure User - TA) are compiled
5################################################################################
6COMPILE_NS_USER ?= 64
7override COMPILE_NS_KERNEL := 64
8COMPILE_S_USER ?= 32
9COMPILE_S_KERNEL ?= 64
10
11# Normal and secure world console UART: 6 (v2 or newer board) or 5 (v1 board)
12CFG_CONSOLE_UART ?= 6
Jens Wiklander5a098ec2018-04-26 09:54:42 +020013# Needed by buildroot
14CFG_NW_CONSOLE_UART ?= $(CFG_CONSOLE_UART)
Victor Chong05bb4ed2017-07-02 13:47:57 +010015
16################################################################################
17# Includes
18################################################################################
Victor Chong7a716512017-09-11 15:18:44 +010019include common.mk
Victor Chong05bb4ed2017-07-02 13:47:57 +010020
21################################################################################
Victor Chong05bb4ed2017-07-02 13:47:57 +010022# Paths to git projects and various binaries
23################################################################################
24ARM_TF_PATH ?= $(ROOT)/arm-trusted-firmware
25ifeq ($(DEBUG),1)
26ARM_TF_BUILD ?= debug
27else
28ARM_TF_BUILD ?= release
29endif
30
31EDK2_PATH ?= $(ROOT)/edk2
32ifeq ($(DEBUG),1)
33EDK2_BUILD ?= DEBUG
34else
35EDK2_BUILD ?= RELEASE
36endif
37EDK2_BIN ?= $(EDK2_PATH)/Build/HiKey960/$(EDK2_BUILD)_$(EDK2_TOOLCHAIN)/FV/BL33_AP_UEFI.fd
38OPENPLATPKG_PATH ?= $(ROOT)/OpenPlatformPkg
39
40OUT_PATH ?=$(ROOT)/out
41MCUIMAGE_BIN ?= $(OPENPLATPKG_PATH)/Platforms/Hisilicon/HiKey960/Binary/lpm3.img
42BOOT_IMG ?=$(ROOT)/out/boot-fat.uefi.img
43GRUB_PATH ?=$(ROOT)/grub
44LLOADER_PATH ?=$(ROOT)/l-loader
45IMAGE_TOOLS_PATH ?=$(ROOT)/tools-images-hikey960
46IMAGE_TOOLS_CONFIG ?=$(OUT_PATH)/config
47PATCHES_PATH ?=$(ROOT)/patches_hikey
48STRACE_PATH ?=$(ROOT)/strace
49
50################################################################################
51# Targets
52################################################################################
53.PHONY: all
Victor Chong86840a42017-10-28 13:01:33 +010054all: arm-tf boot-img lloader
Victor Chong05bb4ed2017-07-02 13:47:57 +010055
56.PHONY: clean
Jens Wiklander5a098ec2018-04-26 09:54:42 +020057clean: arm-tf-clean buildroot-clean edk2-clean linux-clean optee-os-clean \
58 boot-img-clean lloader-clean grub-clean
Victor Chong05bb4ed2017-07-02 13:47:57 +010059
60.PHONY: cleaner
Jens Wiklander5a098ec2018-04-26 09:54:42 +020061cleaner: clean prepare-cleaner buildroot-cleaner linux-cleaner grub-cleaner
Victor Chong05bb4ed2017-07-02 13:47:57 +010062
Victor Chong7a716512017-09-11 15:18:44 +010063include toolchain.mk
Victor Chong05bb4ed2017-07-02 13:47:57 +010064
65.PHONY: prepare
66prepare:
67 mkdir -p $(OUT_PATH)
68
69.PHONY: prepare-cleaner
70prepare-cleaner:
71 rm -rf $(ROOT)/out
72
73################################################################################
74# ARM Trusted Firmware
75################################################################################
76ARM_TF_EXPORTS ?= \
77 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)"
78
79ARM_TF_FLAGS ?= \
Victor Chong865d7752017-08-24 04:53:07 +010080 BL32=$(OPTEE_OS_HEADER_V2_BIN) \
81 BL32_EXTRA1=$(OPTEE_OS_PAGER_V2_BIN) \
82 BL32_EXTRA2=$(OPTEE_OS_PAGEABLE_V2_BIN) \
Victor Chong05bb4ed2017-07-02 13:47:57 +010083 BL33=$(EDK2_BIN) \
84 SCP_BL2=$(MCUIMAGE_BIN) \
85 DEBUG=$(DEBUG) \
86 PLAT=hikey960 \
87 SPD=opteed
88
89ifeq ($(CFG_CONSOLE_UART),5)
90 ARM_TF_FLAGS += CRASH_CONSOLE_BASE=PL011_UART5_BASE
91endif
92
93.PHONY: arm-tf
94arm-tf: optee-os edk2
95 $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) all fip
96
97.PHONY: arm-tf-clean
98arm-tf-clean:
99 $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) clean
100
101################################################################################
Victor Chong05bb4ed2017-07-02 13:47:57 +0100102# EDK2 / Tianocore
103################################################################################
104EDK2_ARCH ?= AARCH64
105EDK2_DSC ?= OpenPlatformPkg/Platforms/Hisilicon/HiKey960/HiKey960.dsc
106EDK2_TOOLCHAIN ?= GCC49
107
108ifeq ($(CFG_CONSOLE_UART),5)
109 EDK2_BUILDFLAGS += -DSERIAL_BASE=0xFDF05000
110endif
111
112define edk2-call
Joakim Bechd1a05e32018-05-23 08:36:52 +0200113 $(EDK2_TOOLCHAIN)_$(EDK2_ARCH)_PREFIX=$(AARCH64_CROSS_COMPILE) \
Victor Chong05bb4ed2017-07-02 13:47:57 +0100114 build -n `getconf _NPROCESSORS_ONLN` -a $(EDK2_ARCH) \
115 -t $(EDK2_TOOLCHAIN) -p $(EDK2_DSC) \
116 -b $(EDK2_BUILD) $(EDK2_BUILDFLAGS)
117endef
118
119.PHONY: edk2
120edk2:
121 cd $(EDK2_PATH) && rm -rf OpenPlatformPkg && \
122 ln -s $(OPENPLATPKG_PATH)
123 set -e && cd $(EDK2_PATH) && source edksetup.sh && \
124 $(MAKE) -j1 -C $(EDK2_PATH)/BaseTools && \
125 $(call edk2-call)
126
127.PHONY: edk2-clean
128edk2-clean:
129 set -e && cd $(EDK2_PATH) && source edksetup.sh && \
130 $(call edk2-call) cleanall && \
131 $(MAKE) -j1 -C $(EDK2_PATH)/BaseTools clean
132 rm -rf $(EDK2_PATH)/Build
133 rm -rf $(EDK2_PATH)/Conf/.cache
134 rm -f $(EDK2_PATH)/Conf/build_rule.txt
135 rm -f $(EDK2_PATH)/Conf/target.txt
136 rm -f $(EDK2_PATH)/Conf/tools_def.txt
137
138################################################################################
139# Linux kernel
140################################################################################
141LINUX_DEFCONFIG_COMMON_ARCH ?= arm64
142LINUX_DEFCONFIG_COMMON_FILES ?= $(LINUX_PATH)/arch/arm64/configs/defconfig \
143 $(CURDIR)/kconfigs/hikey960.conf \
144 $(PATCHES_PATH)/kernel_config/usb_net_dm9601.conf \
145 $(PATCHES_PATH)/kernel_config/ftrace.conf
146
147.PHONY: linux-defconfig
148linux-defconfig: $(LINUX_PATH)/.config
149
150.PHONY: linux-gen_init_cpio
151linux-gen_init_cpio: linux-defconfig
152 $(MAKE) -C $(LINUX_PATH)/usr \
153 CROSS_COMPILE=$(CROSS_COMPILE_NS_KERNEL) \
154 ARCH=arm64 \
155 LOCALVERSION= \
156 gen_init_cpio
157
158LINUX_COMMON_FLAGS += ARCH=arm64 Image modules hisilicon/hi3660-hikey960.dtb
159
160.PHONY: linux
161linux: linux-common
162
163.PHONY: linux-defconfig-clean
164linux-defconfig-clean: linux-defconfig-clean-common
165
166LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
167
168.PHONY: linux-clean
169linux-clean: linux-clean-common
170
171LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
172
173.PHONY: linux-cleaner
174linux-cleaner: linux-cleaner-common
175
176################################################################################
177# OP-TEE
178################################################################################
179OPTEE_OS_COMMON_FLAGS += PLATFORM=hikey-hikey960 \
180 CFG_CONSOLE_UART=$(CFG_CONSOLE_UART) \
181 CFG_SECURE_DATA_PATH=n
182OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=hikey-hikey960
183
184.PHONY: optee-os
185optee-os: optee-os-common
186
187.PHONY: optee-os-clean
188optee-os-clean: optee-os-clean-common
189
Victor Chong05bb4ed2017-07-02 13:47:57 +0100190################################################################################
191# grub
192################################################################################
193grub-flags := CC="$(CCACHE)gcc" \
194 TARGET_CC="$(AARCH64_CROSS_COMPILE)gcc" \
195 TARGET_OBJCOPY="$(AARCH64_CROSS_COMPILE)objcopy" \
196 TARGET_NM="$(AARCH64_CROSS_COMPILE)nm" \
197 TARGET_RANLIB="$(AARCH64_CROSS_COMPILE)ranlib" \
Jens Wiklander3b5d8f02018-06-27 09:16:24 +0200198 TARGET_STRIP="$(AARCH64_CROSS_COMPILE)strip" \
199 --disable-werror
Victor Chong05bb4ed2017-07-02 13:47:57 +0100200
201GRUB_MODULES += boot chain configfile echo efinet eval ext2 fat font gettext \
202 gfxterm gzio help linux loadenv lsefi normal part_gpt \
203 part_msdos read regexp search search_fs_file search_fs_uuid \
204 search_label terminal terminfo test tftp time
205
206$(GRUB_PATH)/configure: $(GRUB_PATH)/configure.ac
207 cd $(GRUB_PATH) && ./autogen.sh
208
209$(GRUB_PATH)/Makefile: $(GRUB_PATH)/configure
210 cd $(GRUB_PATH) && ./configure --target=aarch64 --enable-boot-time $(grub-flags)
211
212.PHONY: grub
213grub: prepare $(GRUB_PATH)/Makefile
214 $(MAKE) -C $(GRUB_PATH); \
215 cd $(GRUB_PATH) && ./grub-mkimage \
216 --verbose \
217 --output=$(OUT_PATH)/grubaa64.efi \
218 --config=$(PATCHES_PATH)/grub/grub.configfile \
219 --format=arm64-efi \
220 --directory=grub-core \
221 --prefix=/boot/grub \
222 $(GRUB_MODULES)
223
224.PHONY: grub-clean
225grub-clean:
226 if [ -e $(GRUB_PATH)/Makefile ]; then $(MAKE) -C $(GRUB_PATH) clean; fi
227 rm -f $(OUT_PATH)/grubaa64.efi
228
229.PHONY: grub-cleaner
230grub-cleaner: grub-clean
231 if [ -e $(GRUB_PATH)/Makefile ]; then $(MAKE) -C $(GRUB_PATH) distclean; fi
232 rm -f $(GRUB_PATH)/configure
233
234################################################################################
235# Boot Image
236################################################################################
237ifeq ($(CFG_CONSOLE_UART),6)
238GRUBCFG = $(PATCHES_PATH)/grub/grub_uart6.cfg
239else
240GRUBCFG = $(PATCHES_PATH)/grub/grub_uart5.cfg
241endif
242
243.PHONY: boot-img
Jens Wiklander5a098ec2018-04-26 09:54:42 +0200244boot-img: linux buildroot edk2 grub
Victor Chong05bb4ed2017-07-02 13:47:57 +0100245 rm -f $(BOOT_IMG)
246 mformat -i $(BOOT_IMG) -n 64 -h 255 -T 131072 -v "BOOT IMG" -C ::
247 mcopy -i $(BOOT_IMG) $(LINUX_PATH)/arch/arm64/boot/Image ::
248 mcopy -i $(BOOT_IMG) $(LINUX_PATH)/arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dtb ::
249 mmd -i $(BOOT_IMG) ::/EFI
250 mmd -i $(BOOT_IMG) ::/EFI/BOOT
251 mcopy -i $(BOOT_IMG) $(OUT_PATH)/grubaa64.efi ::/EFI/BOOT/
252 mcopy -i $(BOOT_IMG) $(GRUBCFG) ::/EFI/BOOT/grub.cfg
Jens Wiklander5a098ec2018-04-26 09:54:42 +0200253 mcopy -i $(BOOT_IMG) $(ROOT)/out-br/images/rootfs.cpio.gz ::/initrd.img
Victor Chong05bb4ed2017-07-02 13:47:57 +0100254 mcopy -i $(BOOT_IMG) $(EDK2_PATH)/Build/HiKey960/$(EDK2_BUILD)_$(EDK2_TOOLCHAIN)/$(EDK2_ARCH)/AndroidFastbootApp.efi ::/EFI/BOOT/fastboot.efi
255
256.PHONY: boot-img-clean
257boot-img-clean:
258 rm -f $(BOOT_IMG)
259
260################################################################################
261# l-loader
262################################################################################
Victor Chong9860c922017-09-29 18:25:37 +0100263.PHONY: lloader
Jens Wiklandera51a4042017-10-09 13:30:24 +0200264lloader: arm-tf edk2
Victor Chong05bb4ed2017-07-02 13:47:57 +0100265 cd $(LLOADER_PATH) && \
266 ln -sf $(ARM_TF_PATH)/build/hikey960/$(ARM_TF_BUILD)/bl1.bin && \
Victor Chongf9f39122018-03-09 06:54:53 +0000267 ln -sf $(ARM_TF_PATH)/build/hikey960/$(ARM_TF_BUILD)/bl2.bin && \
Victor Chong9860c922017-09-29 18:25:37 +0100268 ln -sf $(EDK2_BIN) && \
269 $(MAKE) hikey960 PTABLE_LST=linux-32g
Victor Chong05bb4ed2017-07-02 13:47:57 +0100270
271.PHONY: lloader-clean
Victor Chong9860c922017-09-29 18:25:37 +0100272lloader-clean:
273 $(MAKE) -C $(LLOADER_PATH) hikey960-clean
Victor Chong05bb4ed2017-07-02 13:47:57 +0100274
275################################################################################
276# Flash
277################################################################################
278define flash_help
279 @read -r -p "Connect HiKey960 to power up (press enter)" dummy
280 @read -r -p "Connect USB OTG cable, the micro USB cable (press enter)" dummy
281endef
282
283.PHONY: recov_cfg
284recov_cfg:
Jerome Forissiera4a52552018-06-21 15:31:22 +0200285 @echo "./hisi-sec_usb_xloader.img 0x00020000" > $(IMAGE_TOOLS_CONFIG)
286 @echo "./hisi-sec_uce_boot.img 0x6A908000" >> $(IMAGE_TOOLS_CONFIG)
Victor Chongf9f39122018-03-09 06:54:53 +0000287 @echo "./recovery.bin 0x1AC00000" >> $(IMAGE_TOOLS_CONFIG)
Victor Chong05bb4ed2017-07-02 13:47:57 +0100288
289.PHONY: recovery
290recovery: recov_cfg
291 @echo "Enter recovery mode to flash a new bootloader"
292 @echo
293 @echo "Make sure udev permissions are set appropriately:"
294 @echo " # /etc/udev/rules.d/hikey960.rules"
295 @echo ' SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="d00d", MODE="0666"'
296 @echo ' SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1"'
297 @echo
298 @echo "Set jumpers or switches as follows:"
299 @echo "Jumper 1-2: Closed or Switch 1: On"
300 @echo " 3-4: Closed or 2: On"
301 @echo " 5-6: Open or 3: Off"
302 @read -r -p "Press enter to continue" dummy
303 @echo
304 $(call flash_help)
305 @echo
306 @echo "Check the device node (/dev/ttyUSBx) of the micro USB connection"
307 @echo "Note the value x of the device node. Default is 1"
308 @read -r -p "Enter the device node. Press enter for /dev/ttyUSB1: " DEV && \
309 DEV=$${DEV:-/dev/ttyUSB1} && \
310 cd $(IMAGE_TOOLS_PATH) && \
Victor Chongf9f39122018-03-09 06:54:53 +0000311 ln -sf $(LLOADER_PATH)/recovery.bin && \
Victor Chong05bb4ed2017-07-02 13:47:57 +0100312 sudo ./hikey_idt -c $(IMAGE_TOOLS_CONFIG) -p $$DEV && \
313 rm -f $(IMAGE_TOOLS_CONFIG)
314 @echo
315 @echo "If you see dots starting to appear on the console,"
316 @echo "press f ON THE CONSOLE (NOT HERE!) to run fastboot."
317 @echo "You have 10 seconds! Go!"
318 @echo "If not, fastboot should load automatically."
319 @read -r -p "Press enter (HERE) to continue flashing" dummy
320 @$(MAKE) --no-print flash FROM_RECOVERY=1
321
322.PHONY: flash
323flash:
324ifneq ($(FROM_RECOVERY),1)
325 @echo "Flash binaries using fastboot"
326 @echo
327 @echo "Set jumpers or switches as follows:"
328 @echo "Jumper 1-2: Closed or Switch 1: On"
329 @echo " 3-4: Open or 2: Off"
330 @echo " 5-6: Closed or 3: On"
331 @read -r -p "Press enter to continue" dummy
332 @echo
333 $(call flash_help)
334endif
335 @echo "Wait until you see the (UART) message"
336 @echo " \"Android Fastboot mode - version x.x.\""
337 @echo " Press RETURN or SPACE key to quit.\""
Victor Chongf9f39122018-03-09 06:54:53 +0000338 @echo "It can take a while for the fastboot device to come up,"
339 @echo "so please wait ~10 seconds."
Victor Chong05bb4ed2017-07-02 13:47:57 +0100340 @read -r -p "Then press enter to continue flashing" dummy
341 @echo
342 fastboot flash ptable $(LLOADER_PATH)/prm_ptable.img
Jerome Forissierf4fe6622018-04-26 14:17:34 +0200343 fastboot flash xloader $(IMAGE_TOOLS_PATH)/hisi-sec_xloader.img
Victor Chong05bb4ed2017-07-02 13:47:57 +0100344 fastboot flash fastboot $(LLOADER_PATH)/l-loader.bin
345 fastboot flash fip $(ARM_TF_PATH)/build/hikey960/$(ARM_TF_BUILD)/fip.bin
Victor Chongf9f39122018-03-09 06:54:53 +0000346 fastboot flash nvme $(IMAGE_TOOLS_PATH)/hisi-nvme.img
Victor Chong05bb4ed2017-07-02 13:47:57 +0100347 fastboot flash boot $(BOOT_IMG)