public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Stefan Roese <sr@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 3/6] SPL: Port SPL framework to powerpc
Date: Fri, 24 Aug 2012 10:17:07 +0200	[thread overview]
Message-ID: <50373883.5090601@denx.de> (raw)
In-Reply-To: <50368523.4080107@ti.com>

Hi Tom,

On 08/23/2012 09:31 PM, Tom Rini wrote:
>>>> @@ -89,7 +106,11 @@ void spl_parse_image_header(const struct image_header *header)
>>>>  		spl_image.size = __be32_to_cpu(header->ih_size) + header_size;
>>>>  		spl_image.entry_point = __be32_to_cpu(header->ih_load);
>>>>  		/* Load including the header */
>>>> +#ifdef CONFIG_ARM
>>>>  		spl_image.load_addr = spl_image.entry_point - header_size;
>>>> +#else
>>>> +		spl_image.load_addr = __be32_to_cpu(header->ih_load);
>>>> +#endif
>>>
>>> This isn't an ARM-ism but is instead because spl_nor.c isn't offsetting
>>> where the header is like mmc/nand/ymodem do, yes?  Would it be possible
>>> to make spl_nor.c behave like the others?  One of the reasons I ask is
>>> I'm looking at a NOR chip on my desk...
>>
>> I was wondering about this line as well. Please explain: Why can't ARM
>> just use header->ih_load as load_addr?
> 
> Off the top of my head, I believe what goes on is that we read things
> into SDRAM such that the header is taken into account and we don't need
> to relocate the payload (U-Boot or Linux).

Hmmm. So for example, when ih_load is set to 0x100000, then you load the
image to (0x100000 - 0x40) = 0xfffc0? Is this correct?

This can't work for powerpc. As here for Linux both load-address and
entry-point are set to 0. So when loading the image (e.g. from NOR flash)
can't copy the image header in front of the image.

Another thing I'm wondering about: Why is only ih_load from the mkimage
header used and not ih_ep (entry-point)?

I suggest that we switch to copying the "real" image (payload) to the load
address, skipping the header. Then "ih_load" and "ih_ep" can be used
without modification.

BTW: There also seems to be a bug in some of the SPL loaders:

For example in drivers/mtd/nand/nand_spl_load.c:

		...
		if (header->ih_os == IH_OS_LINUX) {
			/* happy - was a linux */
			nand_spl_load_image(CONFIG_SYS_NAND_SPL_KERNEL_OFFS,
				spl_image.size, (void *)spl_image.load_addr);

The problem here is that the last 64 bytes of the image are not
copied to SDRAM. Since the header is copied which is not included
in the spl_image.size variable. With my idea of only copying
the payload (skipping the header) this would be:

			nand_spl_load_image(CONFIG_SYS_NAND_SPL_KERNEL_OFFS +
				sizeof(struct image_header),
				spl_image.size, (void *)spl_image.load_addr);

What do you think? Should we switch to this way of loading images?
Seems more logical to me. And we don't run into problems where the
load address is 0.

Thanks,
Stefan

  reply	other threads:[~2012-08-24  8:17 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-23  8:12 [U-Boot] [PATCH 0/6] SPL: Port SPL framework to powerpc Stefan Roese
2012-08-23  8:12 ` [U-Boot] [PATCH 1/6] SPL: Add NOR flash booting support Stefan Roese
2012-08-23 15:07   ` Tom Rini
2012-08-23 15:19     ` Stefan Roese
2012-08-23  8:12 ` [U-Boot] [PATCH 2/6] powerpc: Extract EPAPR_MAGIC constants into processor.h Stefan Roese
2012-08-23  8:12 ` [U-Boot] [PATCH 3/6] SPL: Port SPL framework to powerpc Stefan Roese
2012-08-23 17:10   ` Tom Rini
2012-08-23 18:16     ` Stefan Roese
2012-08-23 19:31       ` Tom Rini
2012-08-24  8:17         ` Stefan Roese [this message]
2012-08-24 10:17           ` Heiko Schocher
2012-08-24 10:56             ` Stefan Roese
2012-08-24 11:13               ` Stefan Roese
2012-08-24 11:49                 ` Daniel Schwierzeck
2012-08-24 14:11                   ` Stefan Roese
2012-08-24 15:29                     ` Daniel Schwierzeck
2012-08-24 16:06                     ` Stefan Roese
2012-08-24 16:42                       ` Daniel Schwierzeck
2012-08-24 17:24                         ` Stefan Roese
2012-08-24 22:13                           ` Daniel Schwierzeck
2012-08-24 19:15                 ` Tom Rini
2012-08-25  8:48                   ` Stefan Roese
2012-08-23 21:39   ` Tom Rini
2012-08-24  7:01     ` Stefan Roese
2012-08-24 15:55       ` Tom Rini
2012-08-24 16:07         ` Stefan Roese
2012-08-24 16:19           ` Tom Rini
2012-08-24 17:21             ` Stefan Roese
2012-08-23 21:52   ` Tom Rini
2012-08-24  7:03     ` Stefan Roese
2012-08-23  8:12 ` [U-Boot] [PATCH 4/6] env: Extract getenv_f() into separate source file Stefan Roese
2012-08-23  8:12 ` [U-Boot] [PATCH 5/6] mpc5200: Add SPL support Stefan Roese
2012-08-23  8:12 ` [U-Boot] [PATCH 6/6] mpc5200: Add a3m071 board support Stefan Roese
2012-08-23 21:53 ` [U-Boot] [PATCH 0/6] SPL: Port SPL framework to powerpc Tom Rini

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=50373883.5090601@denx.de \
    --to=sr@denx.de \
    --cc=u-boot@lists.denx.de \
    /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