[iot] Correct fdt entry load target
Fix null pointer issue for fdt loading. This patch will fix the issue that the board cannot boot issue. Test: Boot successfully on both TEE and non-TEE environment Bug: 79272296 Change-Id: I250794a5ce3027d8f4f1a2d43fa8a4e8016cab08 Signed-off-by: Haoran.Wang <elven.wang@nxp.com> Signed-off-by: Chen Guoyin <guoyin.chen@nxp.com>
This commit is contained in:
		
							parent
							
								
									449f9048e6
								
							
						
					
					
						commit
						aceb62dbfb
					
				| 
						 | 
					@ -2135,40 +2135,40 @@ int do_boota(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) {
 | 
				
			||||||
	snprintf(oemimage, sizeof(oemimage), "%s%s",
 | 
						snprintf(oemimage, sizeof(oemimage), "%s%s",
 | 
				
			||||||
			AT_OEM_BL_PART_NAME_BASE, slot);
 | 
								AT_OEM_BL_PART_NAME_BASE, slot);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct dt_table_header *dt_img = NULL;
 | 
						struct dt_table_header dt_img;
 | 
				
			||||||
	size_t num_read;
 | 
						size_t num_read;
 | 
				
			||||||
	if (fsl_avb_ops.read_from_partition(&fsl_avb_ops, oemimage, 0,
 | 
						if (fsl_avb_ops.read_from_partition(&fsl_avb_ops, oemimage, 0,
 | 
				
			||||||
			sizeof(*dt_img), dt_img, &num_read) !=
 | 
								sizeof(dt_img), &dt_img, &num_read) !=
 | 
				
			||||||
			AVB_IO_RESULT_OK &&
 | 
								AVB_IO_RESULT_OK &&
 | 
				
			||||||
			num_read != sizeof(*dt_img)) {
 | 
								num_read != sizeof(dt_img)) {
 | 
				
			||||||
		printf("boota: read dt table header error\n");
 | 
							printf("boota: read dt table header error\n");
 | 
				
			||||||
		goto dt_read_done;
 | 
							goto dt_read_done;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (be32_to_cpu(dt_img->magic) != DT_TABLE_MAGIC) {
 | 
						if (be32_to_cpu(dt_img.magic) != DT_TABLE_MAGIC) {
 | 
				
			||||||
		printf("boota: bad dt table magic %08x\n",
 | 
							printf("boota: bad dt table magic %08x\n",
 | 
				
			||||||
				be32_to_cpu(dt_img->magic));
 | 
									be32_to_cpu(dt_img.magic));
 | 
				
			||||||
		goto dt_read_done;
 | 
							goto dt_read_done;
 | 
				
			||||||
	} else if (!be32_to_cpu(dt_img->dt_entry_count)) {
 | 
						} else if (!be32_to_cpu(dt_img.dt_entry_count)) {
 | 
				
			||||||
		printf("boota: no dt entries\n");
 | 
							printf("boota: no dt entries\n");
 | 
				
			||||||
		goto dt_read_done;
 | 
							goto dt_read_done;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct dt_table_entry *dt_entry = NULL;
 | 
						struct dt_table_entry dt_entry;
 | 
				
			||||||
	assert(be32_to_cpu(dt_img->dt_entry_size) == sizeof(*dt_entry));
 | 
						assert(be32_to_cpu(dt_img.dt_entry_size) == sizeof(dt_entry));
 | 
				
			||||||
	if (fsl_avb_ops.read_from_partition(&fsl_avb_ops, oemimage,
 | 
						if (fsl_avb_ops.read_from_partition(&fsl_avb_ops, oemimage,
 | 
				
			||||||
			be32_to_cpu(dt_img->dt_entries_offset),
 | 
								be32_to_cpu(dt_img.dt_entries_offset),
 | 
				
			||||||
			be32_to_cpu(dt_img->dt_entry_size), dt_entry,
 | 
								be32_to_cpu(dt_img.dt_entry_size), &dt_entry,
 | 
				
			||||||
			&num_read) != AVB_IO_RESULT_OK &&
 | 
								&num_read) != AVB_IO_RESULT_OK &&
 | 
				
			||||||
			num_read != sizeof(*dt_entry)) {
 | 
								num_read != sizeof(dt_entry)) {
 | 
				
			||||||
		printf("boota: read dt entry error\n");
 | 
							printf("boota: read dt entry error\n");
 | 
				
			||||||
		goto dt_read_done;
 | 
							goto dt_read_done;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Read the fdt from oem_bootloader into hdr->second_addr. */
 | 
						/* Read the fdt from oem_bootloader into hdr->second_addr. */
 | 
				
			||||||
	fdt_size = be32_to_cpu(dt_entry->dt_size);
 | 
						fdt_size = be32_to_cpu(dt_entry.dt_size);
 | 
				
			||||||
	if (fsl_avb_ops.read_from_partition(&fsl_avb_ops, oemimage,
 | 
						if (fsl_avb_ops.read_from_partition(&fsl_avb_ops, oemimage,
 | 
				
			||||||
			be32_to_cpu(dt_entry->dt_offset), fdt_size,
 | 
								be32_to_cpu(dt_entry.dt_offset), fdt_size,
 | 
				
			||||||
			(void *)hdr->second_addr, &num_read) !=
 | 
								(void *)hdr->second_addr, &num_read) !=
 | 
				
			||||||
			AVB_IO_RESULT_OK && num_read != fdt_size) {
 | 
								AVB_IO_RESULT_OK && num_read != fdt_size) {
 | 
				
			||||||
		printf("boota: read fdt error\n");
 | 
							printf("boota: read fdt error\n");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue