Skip to content

Commit

Permalink
LFU-573-2 imx8m: Reserve new IVT+CSF for FIT FDT signature
Browse files Browse the repository at this point in the history
Without using FIT FDT hash, we also allow user to sign FIT FDT structure,
so that FIT image can upgrade individually. The option needs
CONFIG_IMX_SPL_FIT_FDT_SIGNATURE enabled in SPL.

imx-mkimage will insert the new IVT for FIT FDT signature by default
and reserve the CSF (0x2000) for the FIT FDT signature.

Signed-off-by: Ye Li <ye.li@nxp.com>
  • Loading branch information
Ye Li committed Jul 31, 2023
1 parent 2f2d426 commit 5a0faef
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 11 deletions.
34 changes: 33 additions & 1 deletion iMX8M/mkimage_imx8.c
Original file line number Diff line number Diff line change
Expand Up @@ -999,7 +999,7 @@ int generate_ivt_for_fit(int fd, int fit_offset, uint32_t ep, uint32_t *fit_load
}

/* ep is the u-boot entry. SPL loads the FIT before the u-boot address. 0x2000 is for CSF_SIZE */
load_addr = (ep - (fit_size + CSF_SIZE) - 512 -
load_addr = (ep - (fit_size + 2 * CSF_SIZE) - 512 -
align_len) & ~align_len;

flash_header_v2_t ivt_header = { { 0xd1, 0x2000, 0x40 },
Expand All @@ -1013,6 +1013,24 @@ int generate_ivt_for_fit(int fd, int fit_offset, uint32_t ep, uint32_t *fit_load
exit(EXIT_FAILURE);
}

ret = lseek(fd, fit_offset + fit_size + CSF_SIZE, SEEK_SET);
if (ret < 0) {
fprintf(stderr, "%s: lseek error %s\n",
__func__, strerror(errno));
exit(EXIT_FAILURE);
}

flash_header_v2_t fdt_ivt_header = { { 0xd1, 0x2000, 0x40 },
load_addr, 0, 0, 0,
(load_addr + fit_size + CSF_SIZE ),
(load_addr + fit_size + CSF_SIZE + 0x20),
0 };

if (write(fd, &fdt_ivt_header, sizeof(flash_header_v2_t)) != sizeof(flash_header_v2_t)) {
fprintf(stderr, "FIT FDT IVT writing error on fit image\n");
exit(EXIT_FAILURE);
}

*fit_load_addr = load_addr;

return fit_offset + fit_size;
Expand Down Expand Up @@ -1229,6 +1247,11 @@ int main(int argc, char **argv)
fprintf(stderr, " fit hab block: \t0x%x 0x%x 0x%x\n",
sld_load_addr, sld_src_off, sld_csf_off - sld_src_off);

fprintf(stderr, " fit-fdt_csf_off \t0x%x\n",
sld_csf_off + CSF_SIZE);
fprintf(stderr, " fit-fdt hab block: \t0x%x 0x%x 0x%x\n",
sld_load_addr, sld_src_off, sld_csf_off + CSF_SIZE - sld_src_off);

exit(0);
}

Expand Down Expand Up @@ -1769,6 +1792,11 @@ int main(int argc, char **argv)
fprintf(stderr, " sld hab block: \t0x%x 0x%x 0x%x\n",
sld_load_addr, sld_header_off, sld_csf_off - sld_header_off);

fprintf(stderr, " fit-fdt csf_off \t0x%x\n",
sld_csf_off + CSF_SIZE);
fprintf(stderr, " fit-fdt hab block: \t0x%x 0x%x 0x%x\n",
sld_load_addr, sld_header_off, sld_csf_off + CSF_SIZE - sld_header_off);

fprintf(stderr, "SPL CSF block:\n");
fprintf(stderr, "\tBlocks = \t0x%x 0x%x 0x%x \"flash.bin\"\n",
imx_header[IMAGE_IVT_ID].fhdr.self, header_image_off, csf_off - header_image_off);
Expand All @@ -1777,6 +1805,10 @@ int main(int argc, char **argv)
fprintf(stderr, "\tBlocks = \t0x%x 0x%x 0x%x \"flash.bin\",\\\n",
sld_load_addr, sld_header_off, sld_csf_off - sld_header_off);

fprintf(stderr, "SLD FIT-FDT CSF block:\n");
fprintf(stderr, "\tBlocks = \t0x%x 0x%x 0x%x \"flash.bin\"\n",
sld_load_addr, sld_header_off, sld_csf_off + CSF_SIZE - sld_header_off);

return 0;
}

4 changes: 2 additions & 2 deletions iMX8M/print_fit_hab.sh
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ fi

if [ "$BOOT_DEV" = "flexspi" ] || [ ${fit_off} == 0 ]; then
# We dd flash.bin to 0 offset for flexspi
let uboot_sign_off=$((fit_off + 0x3000))
let uboot_sign_off=$((fit_off + $FIT_DATA_POS))
else
# We dd flash.bin to 33KB "0x8400" offset, so need minus 0x8400
let uboot_sign_off=$((fit_off - 0x8000 - ivt_off + 0x3000))
let uboot_sign_off=$((fit_off - 0x8000 - ivt_off + $FIT_DATA_POS))
fi

let uboot_size=$(stat --printf="%s" $BL33)
Expand Down
17 changes: 9 additions & 8 deletions iMX8M/soc.mak
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ VERSION = v1
CAPSULE_GUID = 296119cf-dd70-43de-8ac8-a7051f312577
endif

FIT_EXTERNAL_POSITION = 0x5000

FW_DIR = imx-boot/imx-boot-tools/$(PLAT)

Expand Down Expand Up @@ -159,7 +160,7 @@ u-boot.itb: $(dtb) $(supp_dtbs)
./$(PAD_IMAGE) bl31.bin
./$(PAD_IMAGE) u-boot-nodtb.bin $(dtb) $(supp_dtbs)
BL32=$(TEE) DEK_BLOB_LOAD_ADDR=$(DEK_BLOB_LOAD_ADDR) TEE_LOAD_ADDR=$(TEE_LOAD_ADDR) ATF_LOAD_ADDR=$(ATF_LOAD_ADDR) ../$(SOC_DIR)/mkimage_fit_atf.sh $(dtb) $(supp_dtbs) > u-boot.its
./mkimage_uboot -E -p 0x3000 -f u-boot.its u-boot.itb
./mkimage_uboot -E -p $(FIT_EXTERNAL_POSITION) -f u-boot.its u-boot.itb
@rm -f u-boot.its $(dtb)

dtb_ddr3l = valddr3l.dtb
Expand All @@ -171,7 +172,7 @@ u-boot-ddr3l.itb: $(dtb_ddr3l) $(supp_dtbs)
./$(PAD_IMAGE) bl31.bin
./$(PAD_IMAGE) u-boot-nodtb.bin $(dtb_ddr3l) $(supp_dtbs)
DEK_BLOB_LOAD_ADDR=$(DEK_BLOB_LOAD_ADDR) TEE_LOAD_ADDR=$(TEE_LOAD_ADDR) ATF_LOAD_ADDR=$(ATF_LOAD_ADDR) ../$(SOC_DIR)/mkimage_fit_atf.sh $(dtb_ddr3l) $(supp_dtbs) > u-boot-ddr3l.its
./mkimage_uboot -E -p 0x3000 -f u-boot-ddr3l.its u-boot-ddr3l.itb
./mkimage_uboot -E -p $(FIT_EXTERNAL_POSITION) -f u-boot-ddr3l.its u-boot-ddr3l.itb
@rm -f u-boot.its $(dtb_ddr3l)

dtb_ddr3l_evk = evkddr3l.dtb
Expand All @@ -183,7 +184,7 @@ u-boot-ddr3l-evk.itb: $(dtb_ddr3l_evk) $(supp_dtbs)
./$(PAD_IMAGE) bl31.bin
./$(PAD_IMAGE) u-boot-nodtb.bin $(dtb_ddr3l_evk) $(supp_dtbs)
DEK_BLOB_LOAD_ADDR=$(DEK_BLOB_LOAD_ADDR) TEE_LOAD_ADDR=$(TEE_LOAD_ADDR) ATF_LOAD_ADDR=$(ATF_LOAD_ADDR) ../$(SOC_DIR)/mkimage_fit_atf.sh $(dtb_ddr3l_evk) $(supp_dtbs) > u-boot-ddr3l-evk.its
./mkimage_uboot -E -p 0x3000 -f u-boot-ddr3l-evk.its u-boot-ddr3l-evk.itb
./mkimage_uboot -E -p $(FIT_EXTERNAL_POSITION) -f u-boot-ddr3l-evk.its u-boot-ddr3l-evk.itb
@rm -f u-boot.its $(dtb_ddr3l_evk)

dtb_ddr4 = valddr4.dtb
Expand All @@ -195,7 +196,7 @@ u-boot-ddr4.itb: $(dtb_ddr4) $(supp_dtbs)
./$(PAD_IMAGE) bl31.bin
./$(PAD_IMAGE) u-boot-nodtb.bin $(dtb_ddr4) $(supp_dtbs)
DEK_BLOB_LOAD_ADDR=$(DEK_BLOB_LOAD_ADDR) TEE_LOAD_ADDR=$(TEE_LOAD_ADDR) ATF_LOAD_ADDR=$(ATF_LOAD_ADDR) ../$(SOC_DIR)/mkimage_fit_atf.sh $(dtb_ddr4) $(supp_dtbs) > u-boot-ddr4.its
./mkimage_uboot -E -p 0x3000 -f u-boot-ddr4.its u-boot-ddr4.itb
./mkimage_uboot -E -p $(FIT_EXTERNAL_POSITION) -f u-boot-ddr4.its u-boot-ddr4.itb
@rm -f u-boot.its $(dtb_ddr4)

dtb_ddr4_evk = evkddr4.dtb
Expand All @@ -207,7 +208,7 @@ u-boot-ddr4-evk.itb: $(dtb_ddr4_evk) $(supp_dtbs)
./$(PAD_IMAGE) bl31.bin
./$(PAD_IMAGE) u-boot-nodtb.bin $(dtb_ddr4_evk) $(supp_dtbs)
DEK_BLOB_LOAD_ADDR=$(DEK_BLOB_LOAD_ADDR) TEE_LOAD_ADDR=$(TEE_LOAD_ADDR) ATF_LOAD_ADDR=$(ATF_LOAD_ADDR) ../$(SOC_DIR)/mkimage_fit_atf.sh $(dtb_ddr4_evk) $(supp_dtbs) > u-boot-ddr4-evk.its
./mkimage_uboot -E -p 0x3000 -f u-boot-ddr4-evk.its u-boot-ddr4-evk.itb
./mkimage_uboot -E -p $(FIT_EXTERNAL_POSITION) -f u-boot-ddr4-evk.its u-boot-ddr4-evk.itb
@rm -f u-boot.its $(dtb_ddr4_evk)

ifeq ($(HDMI),yes)
Expand Down Expand Up @@ -327,21 +328,21 @@ print_fit_hab: u-boot-nodtb.bin bl31.bin $(dtb) $(supp_dtbs)
./$(PAD_IMAGE) $(TEE)
./$(PAD_IMAGE) bl31.bin
./$(PAD_IMAGE) u-boot-nodtb.bin $(dtb) $(supp_dtbs)
TEE_LOAD_ADDR=$(TEE_LOAD_ADDR) ATF_LOAD_ADDR=$(ATF_LOAD_ADDR) VERSION=$(VERSION) ../$(SOC_DIR)/print_fit_hab.sh $(PRINT_FIT_HAB_OFFSET) $(dtb) $(supp_dtbs)
FIT_DATA_POS=$(FIT_EXTERNAL_POSITION) TEE_LOAD_ADDR=$(TEE_LOAD_ADDR) ATF_LOAD_ADDR=$(ATF_LOAD_ADDR) VERSION=$(VERSION) ../$(SOC_DIR)/print_fit_hab.sh $(PRINT_FIT_HAB_OFFSET) $(dtb) $(supp_dtbs)
@rm -f $(dtb)

print_fit_hab_ddr4: u-boot-nodtb.bin bl31.bin $(dtb_ddr4_evk) $(supp_dtbs)
./$(PAD_IMAGE) $(TEE)
./$(PAD_IMAGE) bl31.bin
./$(PAD_IMAGE) u-boot-nodtb.bin $(dtb_ddr4_evk) $(supp_dtbs)
TEE_LOAD_ADDR=$(TEE_LOAD_ADDR) ATF_LOAD_ADDR=$(ATF_LOAD_ADDR) VERSION=$(VERSION) ../$(SOC_DIR)/print_fit_hab.sh $(PRINT_FIT_HAB_OFFSET) $(dtb_ddr4_evk) $(supp_dtbs)
FIT_DATA_POS=$(FIT_EXTERNAL_POSITION) TEE_LOAD_ADDR=$(TEE_LOAD_ADDR) ATF_LOAD_ADDR=$(ATF_LOAD_ADDR) VERSION=$(VERSION) ../$(SOC_DIR)/print_fit_hab.sh $(PRINT_FIT_HAB_OFFSET) $(dtb_ddr4_evk) $(supp_dtbs)
@rm -f $(dtb_ddr4_evk)

print_fit_hab_flexspi: u-boot-nodtb.bin bl31.bin $(dtb) $(supp_dtbs)
./$(PAD_IMAGE) $(TEE)
./$(PAD_IMAGE) bl31.bin
./$(PAD_IMAGE) u-boot-nodtb.bin $(dtb) $(supp_dtbs)
TEE_LOAD_ADDR=$(TEE_LOAD_ADDR) ATF_LOAD_ADDR=$(ATF_LOAD_ADDR) VERSION=$(VERSION) BOOT_DEV="flexspi" ../$(SOC_DIR)/print_fit_hab.sh $(PRINT_FIT_HAB_OFFSET) $(dtb) $(supp_dtbs)
FIT_DATA_POS=$(FIT_EXTERNAL_POSITION) TEE_LOAD_ADDR=$(TEE_LOAD_ADDR) ATF_LOAD_ADDR=$(ATF_LOAD_ADDR) VERSION=$(VERSION) BOOT_DEV="flexspi" ../$(SOC_DIR)/print_fit_hab.sh $(PRINT_FIT_HAB_OFFSET) $(dtb) $(supp_dtbs)
@rm -f $(dtb)

nightly :
Expand Down

0 comments on commit 5a0faef

Please sign in to comment.