fdt: Allow non-FDT kernels to boot when CONFIG_OF_LIBFDT is defined
The boot commands - bootz/bootm mandate a third argument which is the address to the FDT blob. In cases where this argument is not specified, boot fails with a message indicating a missing FDT. This causes non-FDT kernels to fail to boot. This patch allows both FDT and non-FDT kernels to boot by making the third parameter to the bootm/bootz optional. Signed-off-by: Suriyan Ramasami <suriyan.r@gmail.com> Acked-by: Simon Glass <sjg@chromium.org> [trini: Update again for covering appended DTB case after last revert in this area] Signed-off-by: Tom Rini <trini@ti.com>
This commit is contained in:
		
							parent
							
								
									8b923a56dc
								
							
						
					
					
						commit
						48aead71c1
					
				|  | @ -237,6 +237,7 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch, | ||||||
| 	int		fdt_noffset; | 	int		fdt_noffset; | ||||||
| #endif | #endif | ||||||
| 	const char *select = NULL; | 	const char *select = NULL; | ||||||
|  | 	int		ok_no_fdt = 0; | ||||||
| 
 | 
 | ||||||
| 	*of_flat_tree = NULL; | 	*of_flat_tree = NULL; | ||||||
| 	*of_size = 0; | 	*of_size = 0; | ||||||
|  | @ -309,7 +310,7 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch, | ||||||
| 			       fdt_addr); | 			       fdt_addr); | ||||||
| 			fdt_hdr = image_get_fdt(fdt_addr); | 			fdt_hdr = image_get_fdt(fdt_addr); | ||||||
| 			if (!fdt_hdr) | 			if (!fdt_hdr) | ||||||
| 				goto error; | 				goto no_fdt; | ||||||
| 
 | 
 | ||||||
| 			/*
 | 			/*
 | ||||||
| 			 * move image data to the load address, | 			 * move image data to the load address, | ||||||
|  | @ -379,7 +380,7 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch, | ||||||
| 			break; | 			break; | ||||||
| 		default: | 		default: | ||||||
| 			puts("ERROR: Did not find a cmdline Flattened Device Tree\n"); | 			puts("ERROR: Did not find a cmdline Flattened Device Tree\n"); | ||||||
| 			goto error; | 			goto no_fdt; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		printf("   Booting using the fdt blob at %#08lx\n", fdt_addr); | 		printf("   Booting using the fdt blob at %#08lx\n", fdt_addr); | ||||||
|  | @ -413,11 +414,11 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch, | ||||||
| 			} | 			} | ||||||
| 		} else { | 		} else { | ||||||
| 			debug("## No Flattened Device Tree\n"); | 			debug("## No Flattened Device Tree\n"); | ||||||
| 			return 0; | 			goto no_fdt; | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		debug("## No Flattened Device Tree\n"); | 		debug("## No Flattened Device Tree\n"); | ||||||
| 		return 0; | 		goto no_fdt; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	*of_flat_tree = fdt_blob; | 	*of_flat_tree = fdt_blob; | ||||||
|  | @ -427,9 +428,15 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch, | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
| 
 | 
 | ||||||
|  | no_fdt: | ||||||
|  | 	ok_no_fdt = 1; | ||||||
| error: | error: | ||||||
| 	*of_flat_tree = NULL; | 	*of_flat_tree = NULL; | ||||||
| 	*of_size = 0; | 	*of_size = 0; | ||||||
|  | 	if (!select && ok_no_fdt) { | ||||||
|  | 		debug("Continuing to boot without FDT\n"); | ||||||
|  | 		return 0; | ||||||
|  | 	} | ||||||
| 	return 1; | 	return 1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue