diff --git a/Makefile b/Makefile index dece959..130ea25 100644 --- a/Makefile +++ b/Makefile @@ -26,6 +26,7 @@ else LOADER_BIN ?= rkbin/rk33/rk3328_loader_ddr333_v1.08.244.bin endif MINILOADER_BIN ?= rkbin/rk33/rk3328_miniloader_v2.44.bin +SPI_BOOT ?= rksd else ifeq (rockpro64,$(BOARD_TARGET)) ATF_PLAT ?= rk3399 UBOOT_DEFCONFIG ?= rockpro64-rk3399_defconfig @@ -35,6 +36,7 @@ BOARD_CHIP ?= rk3399 LOADER_BIN ?= rkbin/rk33/rk3399_loader_v1.10.112_support_1CS.bin LOADER_RESTART ?= 1 MINILOADER_BIN ?= rkbin/rk33/rk3399_miniloader_v1.12.bin +# SPI_BOOT ?= rkspl # not-yet-supported else $(error Unsupported BOARD_TARGET) endif diff --git a/Makefile.uboot.mk b/Makefile.uboot.mk index 67126fe..37c96ca 100644 --- a/Makefile.uboot.mk +++ b/Makefile.uboot.mk @@ -1,25 +1,27 @@ UBOOT_OUTPUT_DIR ?= $(CURDIR)/tmp/u-boot-$(BOARD_TARGET) UBOOT_LOADER ?= out/u-boot-$(BOARD_TARGET)/idbloader.img +ifeq (rkspl,$(SPI_BOOT)) +UBOOT_LOADER_SPL ?= out/u-boot-$(BOARD_TARGET)/idbloader_spl.img +endif UBOOT_MAKE ?= make -C $(UBOOT_DIR) KBUILD_OUTPUT=$(UBOOT_OUTPUT_DIR) BL31=$(realpath $(BL31)) \ CROSS_COMPILE="ccache aarch64-linux-gnu-" UBOOT_PACKAGE ?= u-boot-$(BOARD_TARGET)-$(RELEASE_NAME)_all.deb tmp/u-boot-$(BOARD_TARGET)/.config: $(UBOOT_DIR)/configs/$(UBOOT_DEFCONFIG) - $(UBOOT_MAKE) $(UBOOT_DEFCONFIG) + $(UBOOT_MAKE) $(UBOOT_DEFCONFIG) -$(UBOOT_LOADER): tmp/u-boot-$(BOARD_TARGET)/.config $(BL31) +$(UBOOT_OUTPUT_DIR)/u-boot.itb: tmp/u-boot-$(BOARD_TARGET)/.config $(BL31) $(UBOOT_MAKE) -j $$(nproc) $(UBOOT_MAKE) -j $$(nproc) u-boot.itb + +$(UBOOT_LOADER): $(UBOOT_OUTPUT_DIR)/u-boot.itb mkdir -p out/u-boot-$(BOARD_TARGET) ifneq (,$(USE_UBOOT_SPL)) $(UBOOT_OUTPUT_DIR)/tools/mkimage -n $(BOARD_CHIP) -T rksd -d $(UBOOT_OUTPUT_DIR)/spl/u-boot-spl.bin $@.tmp else ifneq (,$(USE_UBOOT_TPL)) $(UBOOT_OUTPUT_DIR)/tools/mkimage -n $(BOARD_CHIP) -T rksd -d $(UBOOT_OUTPUT_DIR)/tpl/u-boot-tpl.bin $@.tmp cat $(UBOOT_OUTPUT_DIR)/spl/u-boot-spl.bin >> $@.tmp -else ifeq (rock64,$(BOARD_TARGET)) - $(UBOOT_OUTPUT_DIR)/tools/mkimage -n $(BOARD_CHIP) -T rksd -d $(DDR) $@.tmp - cat $(UBOOT_OUTPUT_DIR)/spl/u-boot-spl.bin >> $@.tmp -else ifeq (rockpro64,$(BOARD_TARGET)) +else ifneq (,$(DDR)) $(UBOOT_OUTPUT_DIR)/tools/mkimage -n $(BOARD_CHIP) -T rksd -d $(DDR) $@.tmp cat $(UBOOT_OUTPUT_DIR)/spl/u-boot-spl.bin >> $@.tmp else @@ -29,6 +31,28 @@ endif dd if=$(UBOOT_OUTPUT_DIR)/u-boot.itb of=$@.tmp seek=$$((0x200-64)) conv=notrunc mv $@.tmp $@ +ifeq (,$(UBOOT_LOADER_SPL)) +$(UBOOT_LOADER_SPL): $(UBOOT_OUTPUT_DIR)/u-boot.itb + mkdir -p out/u-boot-$(BOARD_TARGET) +ifneq (,$(USE_UBOOT_SPL)) + $(UBOOT_OUTPUT_DIR)/tools/mkimage -n $(BOARD_CHIP) -T rkspi -d $(UBOOT_OUTPUT_DIR)/spl/u-boot-spl.bin $@.tmp +else ifneq (,$(USE_UBOOT_TPL)) + $(UBOOT_OUTPUT_DIR)/tools/mkimage -n $(BOARD_CHIP) -T rkspi -d $(UBOOT_OUTPUT_DIR)/tpl/u-boot-tpl.bin $@.tmp + cat $(UBOOT_OUTPUT_DIR)/spl/u-boot-spl.bin >> $@.tmp +else ifneq (,$(DDR)) + $(UBOOT_OUTPUT_DIR)/tools/mkimage -n $(BOARD_CHIP) -T rkspi -d $(DDR) $@.tmp + for i in $$(seq 1 128); do \ + dd count=4 && dd of=/dev/zero count=4; \ + done < $(UBOOT_OUTPUT_DIR)/spl/u-boot-spl.bin >> $@.tmp +else + @echo "Invalid $(BOARD_TARGET)" + @exit 1 +endif + ls -al $@.tmp + dd if=$(UBOOT_OUTPUT_DIR)/u-boot.itb of=$@.tmp seek=$$((0x200)) conv=notrunc + mv $@.tmp $@ +endif + .PHONY: u-boot-menuconfig # edit u-boot config and save as defconfig u-boot-menuconfig: $(UBOOT_MAKE) ARCH=arm64 $(UBOOT_DEFCONFIG) @@ -45,20 +69,7 @@ u-boot-build: u-boot-clear: rm -rf $(UBOOT_LOADER)/.. -out/u-boot/%/boot.scr: blobs/%.cmd - mkdir -p $$(dirname $@) - mkimage -C none -A arm -T script -d $< $@ - -out/u-boot/%/boot.img: out/u-boot/%/boot.scr - dd if=/dev/zero of=$@ bs=1M count=2 - mkfs.vfat -n "u-boot-script" $@ - mcopy -sm -i $@ $< :: - -u-boot-%-$(BOARD_TARGET).img: out/u-boot/%/boot.img $(UBOOT_LOADER) - build/mk-image.sh -c $(BOARD_CHIP) -d out/u-boot-$(BOARD_TARGET) -t system -s 128 -b $< -o "$@.tmp" - mv "$@.tmp" $@ - -$(UBOOT_PACKAGE): u-boot-package $(UBOOT_LOADER) +$(UBOOT_PACKAGE): u-boot-package $(UBOOT_LOADER) $(UBOOT_LOADER_SPL) fpm -s dir -t deb -n u-boot-$(BOARD_TARGET) -v $(RELEASE_NAME) \ -p $@ \ --deb-priority optional --category admin \ @@ -76,13 +87,44 @@ $(UBOOT_PACKAGE): u-boot-package $(UBOOT_LOADER) --vendor "Kamil TrzciƄski" \ -a all \ u-boot-package/root/=/ \ - $(UBOOT_LOADER)=/usr/lib/u-boot-$(BOARD_TARGET)/idbloader.img + $(addsuffix =/usr/lib/u-boot-$(BOARD_TARGET)/,$(UBOOT_LOADER) $(UBOOT_LOADER_SPL)) .PHONY: u-boot-package u-boot-package: $(UBOOT_PACKAGE) -.PHONY: u-boot-flash-spi-$(BOARD_TARGET) -u-boot-flash-spi-$(BOARD_TARGET): u-boot-flash-spi-$(BOARD_TARGET).img.xz +ifneq (,$(SPI_BOOT)) +out/u-boot/%/boot.scr: blobs/%.cmd + mkdir -p $$(dirname $@) + mkimage -C none -A arm -T script -d $< $@ + +out/u-boot-$(BOARD_TARGET)/%-boot.img: out/u-boot/%/boot.scr $(UBOOT_LOADER) $(UBOOT_LOADER_SPL) + dd if=/dev/zero of=$@.tmp bs=1M count=32 + mkfs.vfat -n "u-boot-script" $@.tmp + mcopy -sm -i $@.tmp $< :: +ifneq (,$(UBOOT_LOADER_SPL)) + mcopy -sm -i $@.tmp $(UBOOT_LOADER_SPL) :: +else + mcopy -sm -i $@.tmp $(UBOOT_LOADER) :: +endif + mv $@.tmp $@ -.PHONY: u-boot-erase-spi-$(BOARD_TARGET) -u-boot-erase-spi-$(BOARD_TARGET): u-boot-erase-spi-$(BOARD_TARGET).img.xz +u-boot-%-$(BOARD_TARGET).img: out/u-boot-$(BOARD_TARGET)/%-boot.img $(UBOOT_LOADER) + build/mk-image.sh -c $(BOARD_CHIP) -d out/u-boot-$(BOARD_TARGET) -t system -s 128 -b $< -o "$@.tmp" + mv "$@.tmp" $@ + +.PHONY: u-boot-flash-spi +u-boot-flash-spi: u-boot-flash-spi-$(BOARD_TARGET).img.xz + +.PHONY: u-boot-erase-spi +u-boot-erase-spi: u-boot-erase-spi-$(BOARD_TARGET).img.xz + +else + +.PHONY: u-boot-flash-spi +u-boot-flash-spi: + # not-supported + +.PHONY: u-boot-erase-spi +u-boot-erase-spi: + # not-supported +endif diff --git a/Makefile.variants.mk b/Makefile.variants.mk index a03ab14..205163c 100644 --- a/Makefile.variants.mk +++ b/Makefile.variants.mk @@ -32,8 +32,8 @@ linux-$(BOARD_TARGET): \ bionic-$(BOARD_TARGET) \ stretch-$(BOARD_TARGET) \ linux-virtual \ - u-boot-flash-spi-$(BOARD_TARGET) \ - u-boot-erase-spi-$(BOARD_TARGET) + u-boot-flash-spi \ + u-boot-erase-spi .PHONY: linux-minimal-$(BOARD_TARGET) # build all linux variants linux-minimal-$(BOARD_TARGET): \ @@ -42,12 +42,12 @@ linux-minimal-$(BOARD_TARGET): \ stretch-minimal-$(BOARD_TARGET) \ stretch-openmediavault-$(BOARD_TARGET) \ linux-virtual \ - u-boot-flash-spi-$(BOARD_TARGET) \ - u-boot-erase-spi-$(BOARD_TARGET) + u-boot-flash-spi \ + u-boot-erase-spi .PHONY: linux-packages-$(BOARD_TARGET) # build all packages only linux-packages-$(BOARD_TARGET): \ linux-virtual \ linux-package \ - u-boot-flash-spi-$(BOARD_TARGET) \ - u-boot-erase-spi-$(BOARD_TARGET) + u-boot-flash-spi \ + u-boot-erase-spi diff --git a/blobs/erase-spi.cmd b/blobs/erase-spi.cmd index 33ae88e..fd49f89 100644 --- a/blobs/erase-spi.cmd +++ b/blobs/erase-spi.cmd @@ -3,7 +3,7 @@ setenv blink_power 'led power off; sleep 0.1; led power on' # erase flash run blink_power blink_power sf probe -sf erase 8000 3e8000 +sf erase 0 3f0000 # blink forever while true; do run blink_power; sleep 1; done diff --git a/blobs/flash-spi.cmd b/blobs/flash-spi.cmd index b357b6c..0631f99 100644 --- a/blobs/flash-spi.cmd +++ b/blobs/flash-spi.cmd @@ -1,17 +1,42 @@ setenv blink_power 'led power off; sleep 0.1; led power on' +setenv blink_standby 'led standby off; sleep 0.1; led standby on' # first read existing loader run blink_power sf probe -${devtype} read ${kernel_addr_r} 40 1f40; -# erase flash -run blink_power blink_power -sf erase 8000 3e8000 +# or load idbloader_spl.img and write it to 0 offset of spi +# or load idbloader.img and write it to 0 offset of spi +# or fail badly -# write flash -run blink_power blink_power blink_power -sf write ${kernel_addr_r} 8000 3e8000 +if size ${devtype} ${devnum}:${distro_bootpart} idbloader_spl.img; then + load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} idbloader_spl.img -# blink forever -while true; do run blink_power; sleep 1; done + # erase flash + run blink_power blink_power + sf erase 0 3f0000 + + # write flash + run blink_power blink_power blink_power + sf write ${kernel_addr_r} 0 ${filesize} + + # blink forever + while true; do run blink_power; sleep 1; done +elif size ${devtype} ${devnum}:${distro_bootpart} idbloader.img; then + load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} idbloader.img + + # erase flash + run blink_power blink_power + sf erase 8000 3e8000 + + # write flash + run blink_power blink_power blink_power + sf write ${kernel_addr_r} 8000 ${filesize} + + # blink forever + while true; do run blink_power; sleep 1; done +else + # blink forever + echo "missing idbloader.img or idbloader_spl.img" + while true; do run blink_standby; sleep 1; done +fi