[U-Boot] [PATCH v1] fdt: Allow non-FDT kernels to boot when CONFIG_OF_LIBFDT is defined
Simon Glass
sjg at chromium.org
Thu Nov 27 16:58:40 CET 2014
Hi Suriyan,
On 20 November 2014 at 16:55, Suriyan Ramasami <suriyan.r at gmail.com> wrote:
> 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 at gmail.com>
> ---
>
> Changes in v1:
> - First try
>
> common/image-fdt.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/common/image-fdt.c b/common/image-fdt.c
> index a39ae1b..1a02166 100644
> --- a/common/image-fdt.c
> +++ b/common/image-fdt.c
> @@ -430,6 +430,10 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch,
> error:
> *of_flat_tree = NULL;
> *of_size = 0;
> + if (argc <= 2) {
if (!select)
is better I think since that holds the selected device tree. If it
NULL when there is none.
> + debug("Continuing to boot without FDT\n");
> + return 0;
> + }
> return 1;
> }
I think everyone is happy with the approach so I'd like to merge this.
But I'm not keen on the error handling. Some of the cases are genuine
errors, viz.:
if ((load < image_end) && (load_end > image_start)) {
fdt_error("fdt overwritten");
goto error;
}
if (fdt_check_header(fdt_blob) != 0) {
fdt_error("image is not a fdt");
goto error;
}
if (fdt_totalsize(fdt_blob) != fdt_len) {
fdt_error("fdt size != image size");
goto error;
}
So how about leaving error: alone and adding a new label above it like no_fdt:
Then you can change the other goto statements to 'goto no_fdt' which
can do your check and either return, or fall through to errror:.
Regards,
Simon
More information about the U-Boot
mailing list