Skip to content
Snippets Groups Projects
Commit 5a0faefc authored by Ye Li's avatar Ye Li
Browse files

LFU-573-2 imx8m: Reserve new IVT+CSF for FIT FDT signature


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: default avatarYe Li <ye.li@nxp.com>
parent 2f2d426f
Branches lf-6.1.36_2.1.0
No related merge requests found
...@@ -999,7 +999,7 @@ int generate_ivt_for_fit(int fd, int fit_offset, uint32_t ep, uint32_t *fit_load ...@@ -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 */ /* 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; align_len) & ~align_len;
flash_header_v2_t ivt_header = { { 0xd1, 0x2000, 0x40 }, flash_header_v2_t ivt_header = { { 0xd1, 0x2000, 0x40 },
...@@ -1013,6 +1013,24 @@ int generate_ivt_for_fit(int fd, int fit_offset, uint32_t ep, uint32_t *fit_load ...@@ -1013,6 +1013,24 @@ int generate_ivt_for_fit(int fd, int fit_offset, uint32_t ep, uint32_t *fit_load
exit(EXIT_FAILURE); 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; *fit_load_addr = load_addr;
return fit_offset + fit_size; return fit_offset + fit_size;
...@@ -1229,6 +1247,11 @@ int main(int argc, char **argv) ...@@ -1229,6 +1247,11 @@ int main(int argc, char **argv)
fprintf(stderr, " fit hab block: \t0x%x 0x%x 0x%x\n", fprintf(stderr, " fit hab block: \t0x%x 0x%x 0x%x\n",
sld_load_addr, sld_src_off, sld_csf_off - sld_src_off); 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); exit(0);
} }
...@@ -1769,6 +1792,11 @@ int main(int argc, char **argv) ...@@ -1769,6 +1792,11 @@ int main(int argc, char **argv)
fprintf(stderr, " sld hab block: \t0x%x 0x%x 0x%x\n", fprintf(stderr, " sld hab block: \t0x%x 0x%x 0x%x\n",
sld_load_addr, sld_header_off, sld_csf_off - sld_header_off); 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, "SPL CSF block:\n");
fprintf(stderr, "\tBlocks = \t0x%x 0x%x 0x%x \"flash.bin\"\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); imx_header[IMAGE_IVT_ID].fhdr.self, header_image_off, csf_off - header_image_off);
...@@ -1777,6 +1805,10 @@ int main(int argc, char **argv) ...@@ -1777,6 +1805,10 @@ int main(int argc, char **argv)
fprintf(stderr, "\tBlocks = \t0x%x 0x%x 0x%x \"flash.bin\",\\\n", fprintf(stderr, "\tBlocks = \t0x%x 0x%x 0x%x \"flash.bin\",\\\n",
sld_load_addr, sld_header_off, sld_csf_off - sld_header_off); 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; return 0;
} }
...@@ -27,10 +27,10 @@ fi ...@@ -27,10 +27,10 @@ fi
if [ "$BOOT_DEV" = "flexspi" ] || [ ${fit_off} == 0 ]; then if [ "$BOOT_DEV" = "flexspi" ] || [ ${fit_off} == 0 ]; then
# We dd flash.bin to 0 offset for flexspi # 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 else
# We dd flash.bin to 33KB "0x8400" offset, so need minus 0x8400 # 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 fi
let uboot_size=$(stat --printf="%s" $BL33) let uboot_size=$(stat --printf="%s" $BL33)
......
...@@ -85,6 +85,7 @@ VERSION = v1 ...@@ -85,6 +85,7 @@ VERSION = v1
CAPSULE_GUID = 296119cf-dd70-43de-8ac8-a7051f312577 CAPSULE_GUID = 296119cf-dd70-43de-8ac8-a7051f312577
endif endif
FIT_EXTERNAL_POSITION = 0x5000
FW_DIR = imx-boot/imx-boot-tools/$(PLAT) FW_DIR = imx-boot/imx-boot-tools/$(PLAT)
...@@ -159,7 +160,7 @@ u-boot.itb: $(dtb) $(supp_dtbs) ...@@ -159,7 +160,7 @@ u-boot.itb: $(dtb) $(supp_dtbs)
./$(PAD_IMAGE) bl31.bin ./$(PAD_IMAGE) bl31.bin
./$(PAD_IMAGE) u-boot-nodtb.bin $(dtb) $(supp_dtbs) ./$(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 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) @rm -f u-boot.its $(dtb)
dtb_ddr3l = valddr3l.dtb dtb_ddr3l = valddr3l.dtb
...@@ -171,7 +172,7 @@ u-boot-ddr3l.itb: $(dtb_ddr3l) $(supp_dtbs) ...@@ -171,7 +172,7 @@ u-boot-ddr3l.itb: $(dtb_ddr3l) $(supp_dtbs)
./$(PAD_IMAGE) bl31.bin ./$(PAD_IMAGE) bl31.bin
./$(PAD_IMAGE) u-boot-nodtb.bin $(dtb_ddr3l) $(supp_dtbs) ./$(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 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) @rm -f u-boot.its $(dtb_ddr3l)
dtb_ddr3l_evk = evkddr3l.dtb dtb_ddr3l_evk = evkddr3l.dtb
...@@ -183,7 +184,7 @@ u-boot-ddr3l-evk.itb: $(dtb_ddr3l_evk) $(supp_dtbs) ...@@ -183,7 +184,7 @@ u-boot-ddr3l-evk.itb: $(dtb_ddr3l_evk) $(supp_dtbs)
./$(PAD_IMAGE) bl31.bin ./$(PAD_IMAGE) bl31.bin
./$(PAD_IMAGE) u-boot-nodtb.bin $(dtb_ddr3l_evk) $(supp_dtbs) ./$(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 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) @rm -f u-boot.its $(dtb_ddr3l_evk)
dtb_ddr4 = valddr4.dtb dtb_ddr4 = valddr4.dtb
...@@ -195,7 +196,7 @@ u-boot-ddr4.itb: $(dtb_ddr4) $(supp_dtbs) ...@@ -195,7 +196,7 @@ u-boot-ddr4.itb: $(dtb_ddr4) $(supp_dtbs)
./$(PAD_IMAGE) bl31.bin ./$(PAD_IMAGE) bl31.bin
./$(PAD_IMAGE) u-boot-nodtb.bin $(dtb_ddr4) $(supp_dtbs) ./$(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 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) @rm -f u-boot.its $(dtb_ddr4)
dtb_ddr4_evk = evkddr4.dtb dtb_ddr4_evk = evkddr4.dtb
...@@ -207,7 +208,7 @@ u-boot-ddr4-evk.itb: $(dtb_ddr4_evk) $(supp_dtbs) ...@@ -207,7 +208,7 @@ u-boot-ddr4-evk.itb: $(dtb_ddr4_evk) $(supp_dtbs)
./$(PAD_IMAGE) bl31.bin ./$(PAD_IMAGE) bl31.bin
./$(PAD_IMAGE) u-boot-nodtb.bin $(dtb_ddr4_evk) $(supp_dtbs) ./$(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 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) @rm -f u-boot.its $(dtb_ddr4_evk)
ifeq ($(HDMI),yes) ifeq ($(HDMI),yes)
...@@ -327,21 +328,21 @@ print_fit_hab: u-boot-nodtb.bin bl31.bin $(dtb) $(supp_dtbs) ...@@ -327,21 +328,21 @@ print_fit_hab: u-boot-nodtb.bin bl31.bin $(dtb) $(supp_dtbs)
./$(PAD_IMAGE) $(TEE) ./$(PAD_IMAGE) $(TEE)
./$(PAD_IMAGE) bl31.bin ./$(PAD_IMAGE) bl31.bin
./$(PAD_IMAGE) u-boot-nodtb.bin $(dtb) $(supp_dtbs) ./$(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) @rm -f $(dtb)
print_fit_hab_ddr4: u-boot-nodtb.bin bl31.bin $(dtb_ddr4_evk) $(supp_dtbs) print_fit_hab_ddr4: u-boot-nodtb.bin bl31.bin $(dtb_ddr4_evk) $(supp_dtbs)
./$(PAD_IMAGE) $(TEE) ./$(PAD_IMAGE) $(TEE)
./$(PAD_IMAGE) bl31.bin ./$(PAD_IMAGE) bl31.bin
./$(PAD_IMAGE) u-boot-nodtb.bin $(dtb_ddr4_evk) $(supp_dtbs) ./$(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) @rm -f $(dtb_ddr4_evk)
print_fit_hab_flexspi: u-boot-nodtb.bin bl31.bin $(dtb) $(supp_dtbs) print_fit_hab_flexspi: u-boot-nodtb.bin bl31.bin $(dtb) $(supp_dtbs)
./$(PAD_IMAGE) $(TEE) ./$(PAD_IMAGE) $(TEE)
./$(PAD_IMAGE) bl31.bin ./$(PAD_IMAGE) bl31.bin
./$(PAD_IMAGE) u-boot-nodtb.bin $(dtb) $(supp_dtbs) ./$(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) @rm -f $(dtb)
nightly : nightly :
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment