mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Sascha Hauer <s.hauer@pengutronix.de>
To: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Cc: barebox@lists.infradead.org
Subject: Re: [PATCH v2] arm: fix zImage support when a oftree is concatenated
Date: Wed, 11 Apr 2012 10:12:14 +0200	[thread overview]
Message-ID: <20120411081214.GK3852@pengutronix.de> (raw)
In-Reply-To: <1334126298-29923-1-git-send-email-plagnioj@jcrosoft.com>

On Wed, Apr 11, 2012 at 08:38:18AM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote:
> When a oftree is concatenated,the zImage is bigger than the size specified in
> the zImage header. Detect it and copy it too.
> 
> Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> ---
>  arch/arm/lib/bootm.c |   49 +++++++++++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 49 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c
> index defc89b..dc379d8 100644
> --- a/arch/arm/lib/bootm.c
> +++ b/arch/arm/lib/bootm.c
> @@ -123,6 +123,51 @@ struct zimage_header {
>  
>  #define ZIMAGE_MAGIC 0x016F2818
>  
> +static int do_bootz_linux_fdt(int fd, struct image_data *data)
> +{
> +	struct fdt_header __header, *header;
> +	struct resource *r = data->os_res;
> +	struct resource *of_res = data->os_res;
> +	void *oftree;
> +	int ret;
> +
> +	u32 end;
> +
> +	header = &__header;
> +	ret = read(fd, header, sizeof(*header));
> +	if (ret < sizeof(*header))
> +		return ret;
> +
> +	if (file_detect_type(header) != filetype_oftree)
> +		return -ENXIO;
> +
> +	end = be32_to_cpu(header->totalsize);
> +
> +	of_res = request_sdram_region("oftree", r->start + r->size, end);
> +	if (!of_res) {
> +		perror("zImage: oftree request_sdram_region");
> +		return -ENOMEM;
> +	}
> +
> +	oftree = (void*)of_res->start;
> +
> +	memcpy(oftree, header, sizeof(*header));
> +
> +	end -= sizeof(*header);
> +
> +	ret = read_full(fd, oftree + sizeof(*header), end);
> +	if (ret < 0)
> +		return ret;
> +	if (ret < end) {
> +		printf("premature end of image\n");
> +		return -EIO;
> +	}

I am missing a call to of_fix_tree() here. Without it the command line
will not be passed to the kernel. Maybe this is not really the intended
usecase for appending an oftree to the zImage. Being able to append the
oftree to the zImage seems more for bootloaders which do not have native
support for devicetrees.

We could be more clever here and read the oftree to a seperately
allocated area and set data->oftree then.

Sascha

> +
> +	pr_info("zImage: concatenated oftree detected\n");
> +
> +	return 0;
> +}
> +
>  static int do_bootz_linux(struct image_data *data)
>  {
>  	int fd, ret, swap = 0;
> @@ -196,6 +241,10 @@ static int do_bootz_linux(struct image_data *data)
>  			*(u32 *)ptr = swab32(*(u32 *)ptr);
>  	}
>  
> +	ret = do_bootz_linux_fdt(fd, data);
> +	if (ret && ret != -ENXIO)
> +		return ret;
> +
>  	return __do_bootm_linux(data, swap);
>  
>  err_out:
> -- 
> 1.7.9.1
> 
> 
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
> 

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  reply	other threads:[~2012-04-11  8:12 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-11  6:38 Jean-Christophe PLAGNIOL-VILLARD
2012-04-11  8:12 ` Sascha Hauer [this message]
2012-04-11  8:20   ` Jean-Christophe PLAGNIOL-VILLARD
2012-04-11  9:13 ` [PATCH 1/1] arm: bootm: zImage allow to use the concataned oftree Jean-Christophe PLAGNIOL-VILLARD
2012-04-12 10:03   ` Sascha Hauer
2012-04-12 11:35     ` Jean-Christophe PLAGNIOL-VILLARD

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120411081214.GK3852@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    --cc=plagnioj@jcrosoft.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox