From b808a489348255eb30856c2f75d7750c009b7abe Mon Sep 17 00:00:00 2001 From: Ye Li Date: Fri, 16 Nov 2018 01:15:58 -0800 Subject: [PATCH] imx8m: Add iMX8M Nano support Since the IVT offset is changed on this SoC. Added a -version parameter to pass the v1 or v2 to mkimage_imx8. v1 is for iMX8MQ and iMX8MM v2 is for iMX8M Nano (iMX8MN) Also the ROM on iMX8MN does not support DCD nor plugin. Checks the parameters if they are used. Additional, on Nano the addresses of SPL and ATF are changed to OCRAM. Signed-off-by: Ye Li --- iMX8M/mkimage_imx8.c | 29 ++++++++++++++++++++++++++++- iMX8M/soc.mak | 39 ++++++++++++++++++++++++++++----------- 2 files changed, 56 insertions(+), 12 deletions(-) diff --git a/iMX8M/mkimage_imx8.c b/iMX8M/mkimage_imx8.c index 3418655..77cad78 100644 --- a/iMX8M/mkimage_imx8.c +++ b/iMX8M/mkimage_imx8.c @@ -182,6 +182,9 @@ struct fdt_header { #define FDT_MAGIC 0xd00dfeed #define CSF_SIZE 0x2000 +#define ROM_V1 1 +#define ROM_V2 2 /* V2 ROM for iMX8MN */ + #define ALIGN(x,a) __ALIGN_MASK((x),(__typeof__(x))(a)-1, a) #define __ALIGN_MASK(x,mask,mask2) (((x)+(mask))/(mask2)*(mask2)) @@ -935,6 +938,7 @@ int main(int argc, char **argv) int using_fit = 0; dcd_v2_t dcd_table; uimage_header_t uimage_hdr; + uint32_t version = ROM_V1; static struct option long_options[] = { @@ -950,6 +954,7 @@ int main(int argc, char **argv) {"dev", required_argument, NULL, 'e'}, {"csf", required_argument, NULL, 'c'}, {"second_loader", required_argument, NULL, 'u'}, + {"version", required_argument, NULL, 'v'}, {NULL, 0, NULL, 0} }; @@ -1048,6 +1053,17 @@ int main(int argc, char **argv) exit(1); } break; + case 'v': + fprintf(stderr, "ROM VERSION:\t%s\n", optarg); + if (!strcmp(optarg, "v2")) { + version = ROM_V2; /* iMX8MN should use ROM V2 */ + } else if (!strcmp(optarg, "v1")) { + version = ROM_V1; + } else { + fprintf(stderr, "\n-version option, valid versions are v1 (for iMX8MQ/8MM), v2 (for iMX8MN)\n\n"); + exit(1); + } + break; case 'u': fprintf(stderr, "SECOND LOADER IMAGE:\t%s", optarg); sld_img = optarg; @@ -1086,6 +1102,16 @@ int main(int argc, char **argv) exit(1); } + if (version == ROM_V2) { + /* V2 ROM set IVT offset to 0 for all boot devices */ + ivt_offset = 0; + + if (dcd_img || plugin_img) { + fprintf(stderr, "V2 ROM don't support DCD nor PLUGIN, abort\n"); + exit(1); + } + } + file_off = 0; if (signed_hdmi) { @@ -1397,7 +1423,8 @@ int main(int argc, char **argv) file_off += CSF_SIZE - sizeof(flash_header_v2_t); }else { sld_header_off = sld_src_off - rom_image_offset; - imx_header[IMAGE_IVT_ID].fhdr.reserved1 = sld_header_off - header_image_off; /* Record the second bootloader relative offset in image's IVT reserved1*/ + if (version == ROM_V1) + imx_header[IMAGE_IVT_ID].fhdr.reserved1 = sld_header_off - header_image_off; /* Record the second bootloader relative offset in image's IVT reserved1*/ sld_fd = open(sld_img, O_RDONLY | O_BINARY); if (sld_fd < 0) { fprintf(stderr, "%s: Can't open: %s\n", diff --git a/iMX8M/soc.mak b/iMX8M/soc.mak index a7ec6ab..d5fc198 100644 --- a/iMX8M/soc.mak +++ b/iMX8M/soc.mak @@ -19,21 +19,38 @@ PAD_IMAGE = ../scripts/pad_image.sh ifeq ($(SOC),iMX8MM) PLAT = imx8mm HDMI = no +SPL_LOAD_ADDR = 0x7E1000 +SPL_FSPI_LOAD_ADDR = 0x7E2000 TEE_LOAD_ADDR = 0xbe000000 ATF_LOAD_ADDR = 0x00920000 VAL_BOARD = val #define the F(Q)SPI header file QSPI_HEADER = ../scripts/fspi_header QSPI_PACKER = ../scripts/fspi_packer.sh +VERSION = v1 +else ifeq ($(SOC),iMX8MN) +PLAT = imx8mn +HDMI = no +SPL_LOAD_ADDR = 0x912000 +SPL_FSPI_LOAD_ADDR = 0x912000 +TEE_LOAD_ADDR = 0xbe000000 +ATF_LOAD_ADDR = 0x00960000 +VAL_BOARD = val +#define the F(Q)SPI header file +QSPI_HEADER = ../scripts/fspi_header +QSPI_PACKER = ../scripts/fspi_packer.sh +VERSION = v2 else PLAT = imx8mq HDMI = yes +SPL_LOAD_ADDR = 0x7E1000 TEE_LOAD_ADDR = 0xfe000000 ATF_LOAD_ADDR = 0x00910000 VAL_BOARD = arm2 #define the F(Q)SPI header file QSPI_HEADER = ../scripts/qspi_header QSPI_PACKER = ../scripts/fspi_packer.sh +VERSION = v1 endif FW_DIR = imx-boot/imx-boot-tools/$(PLAT) @@ -107,19 +124,19 @@ u-boot-ddr4-evk.itb: $(dtbs_ddr4_evk) ifeq ($(HDMI),yes) flash_evk: $(MKIMG) signed_hdmi_imx8m.bin u-boot-spl-ddr.bin u-boot.itb - ./mkimage_imx8 -fit -signed_hdmi signed_hdmi_imx8m.bin -loader u-boot-spl-ddr.bin 0x7E1000 -second_loader u-boot.itb 0x40200000 0x60000 -out $(OUTIMG) + ./mkimage_imx8 -fit -signed_hdmi signed_hdmi_imx8m.bin -loader u-boot-spl-ddr.bin $(SPL_LOAD_ADDR) -second_loader u-boot.itb 0x40200000 0x60000 -out $(OUTIMG) flash_evk_emmc_fastboot: $(MKIMG) signed_hdmi_imx8m.bin u-boot-spl-ddr.bin u-boot.itb - ./mkimage_imx8 -dev emmc_fastboot -fit -signed_hdmi signed_hdmi_imx8m.bin -loader u-boot-spl-ddr.bin 0x7E1000 -second_loader u-boot.itb 0x40200000 0x60000 -out $(OUTIMG) + ./mkimage_imx8 -dev emmc_fastboot -fit -signed_hdmi signed_hdmi_imx8m.bin -loader u-boot-spl-ddr.bin $(SPL_LOAD_ADDR) -second_loader u-boot.itb 0x40200000 0x60000 -out $(OUTIMG) flash_dp_evk: $(MKIMG) signed_dp_imx8m.bin u-boot-spl-ddr.bin u-boot.itb - ./mkimage_imx8 -fit -signed_hdmi signed_dp_imx8m.bin -loader u-boot-spl-ddr.bin 0x7E1000 -second_loader u-boot.itb 0x40200000 0x60000 -out $(OUTIMG) + ./mkimage_imx8 -fit -signed_hdmi signed_dp_imx8m.bin -loader u-boot-spl-ddr.bin $(SPL_LOAD_ADDR) -second_loader u-boot.itb 0x40200000 0x60000 -out $(OUTIMG) flash_ddr3l_val: $(MKIMG) signed_dp_imx8m.bin u-boot-spl-ddr3l.bin u-boot-ddr3l.itb - ./mkimage_imx8 -fit -signed_hdmi signed_dp_imx8m.bin -loader u-boot-spl-ddr3l.bin 0x7E1000 -second_loader u-boot-ddr3l.itb 0x40200000 0x60000 -out $(OUTIMG) + ./mkimage_imx8 -fit -signed_hdmi signed_dp_imx8m.bin -loader u-boot-spl-ddr3l.bin $(SPL_LOAD_ADDR) -second_loader u-boot-ddr3l.itb 0x40200000 0x60000 -out $(OUTIMG) flash_ddr4_val: $(MKIMG) signed_hdmi_imx8m.bin u-boot-spl-ddr4.bin u-boot-ddr4.itb - ./mkimage_imx8 -fit -signed_hdmi signed_hdmi_imx8m.bin -loader u-boot-spl-ddr4.bin 0x7E1000 -second_loader u-boot-ddr4.itb 0x40200000 0x60000 -out $(OUTIMG) + ./mkimage_imx8 -fit -signed_hdmi signed_hdmi_imx8m.bin -loader u-boot-spl-ddr4.bin $(SPL_LOAD_ADDR) -second_loader u-boot-ddr4.itb 0x40200000 0x60000 -out $(OUTIMG) else flash_evk: flash_evk_no_hdmi @@ -135,22 +152,22 @@ flash_ddr4_val: flash_ddr4_val_no_hdmi endif flash_evk_no_hdmi: $(MKIMG) u-boot-spl-ddr.bin u-boot.itb - ./mkimage_imx8 -fit -loader u-boot-spl-ddr.bin 0x7E1000 -second_loader u-boot.itb 0x40200000 0x60000 -out $(OUTIMG) + ./mkimage_imx8 -version $(VERSION) -fit -loader u-boot-spl-ddr.bin $(SPL_LOAD_ADDR) -second_loader u-boot.itb 0x40200000 0x60000 -out $(OUTIMG) flash_evk_no_hdmi_emmc_fastboot: $(MKIMG) u-boot-spl-ddr.bin u-boot.itb - ./mkimage_imx8 -dev emmc_fastboot -fit -loader u-boot-spl-ddr.bin 0x7E1000 -second_loader u-boot.itb 0x40200000 0x60000 -out $(OUTIMG) + ./mkimage_imx8 -version $(VERSION) -dev emmc_fastboot -fit -loader u-boot-spl-ddr.bin $(SPL_LOAD_ADDR) -second_loader u-boot.itb 0x40200000 0x60000 -out $(OUTIMG) flash_ddr3l_val_no_hdmi: $(MKIMG) u-boot-spl-ddr3l.bin u-boot-ddr3l.itb - ./mkimage_imx8 -fit -loader u-boot-spl-ddr3l.bin 0x7E1000 -second_loader u-boot-ddr3l.itb 0x40200000 0x60000 -out $(OUTIMG) + ./mkimage_imx8 -version $(VERSION) -fit -loader u-boot-spl-ddr3l.bin $(SPL_LOAD_ADDR) -second_loader u-boot-ddr3l.itb 0x40200000 0x60000 -out $(OUTIMG) flash_ddr4_val_no_hdmi: $(MKIMG) u-boot-spl-ddr4.bin u-boot-ddr4.itb - ./mkimage_imx8 -fit -loader u-boot-spl-ddr4.bin 0x7E1000 -second_loader u-boot-ddr4.itb 0x40200000 0x60000 -out $(OUTIMG) + ./mkimage_imx8 -version $(VERSION) -fit -loader u-boot-spl-ddr4.bin $(SPL_LOAD_ADDR) -second_loader u-boot-ddr4.itb 0x40200000 0x60000 -out $(OUTIMG) flash_ddr4_evk_no_hdmi: $(MKIMG) u-boot-spl-ddr4.bin u-boot-ddr4-evk.itb - ./mkimage_imx8 -fit -loader u-boot-spl-ddr4.bin 0x7E1000 -second_loader u-boot-ddr4-evk.itb 0x40200000 0x60000 -out $(OUTIMG) + ./mkimage_imx8 -version $(VERSION) -fit -loader u-boot-spl-ddr4.bin $(SPL_LOAD_ADDR) -second_loader u-boot-ddr4-evk.itb 0x40200000 0x60000 -out $(OUTIMG) flash_evk_flexspi: $(MKIMG) u-boot-spl-ddr.bin u-boot.itb - ./mkimage_imx8 -dev flexspi -fit -loader u-boot-spl-ddr.bin 0x7E2000 -second_loader u-boot.itb 0x40200000 0x60000 -out $(OUTIMG) + ./mkimage_imx8 -version $(VERSION) -dev flexspi -fit -loader u-boot-spl-ddr.bin $(SPL_FSPI_LOAD_ADDR) -second_loader u-boot.itb 0x40200000 0x60000 -out $(OUTIMG) ./$(QSPI_PACKER) $(QSPI_HEADER) flash_hdmi_spl_uboot: flash_evk -- 2.26.2