[U-Boot] u-boot FIT image support

York Sun yorksun at freescale.com
Sat Aug 8 01:12:57 CEST 2015



On 08/07/2015 03:47 PM, Simon Glass wrote:
> Hi York,
> 
> On 7 August 2015 at 14:48, York Sun <yorksun at freescale.com> wrote:
>>
>> Simon,
>>
>> I was doing an experiment to put the load address and entry address of Linux to
>> higher than 32-bit address. I found it is broken to process more than 32-bit
>> addresses. When I attempted to fix it, I was troubled by those code used for
>> both host and target, like common/image-fit.c. For example, to process 64-bit
>> address, the function
>>
>> int fit_image_get_load(const void *fit, int noffset, ulong *load)
>>
>> should be converted to
>>
>> int fit_image_get_load(const void *fit, int noffset, uint64_t *load)
>>
>> ulong is 64-bit for 64-bit target such as ARMv8, but it can be 32-bit on host.
>> If I use uint64_t, all related code in bootm and others need to change. Before I
>> go too far, I'd like to check if anyone has tried to enable this in FIT image.
>>
>> #address-cells = <2>;
>>
>> I can try to use uint64_t in place of ulong for all related code if that's
>> right. That will be a lot of change.
> 
> Perhaps I misunderstand something, but I think ulong should be OK on
> the host. I just needs to hold a machine address. On a 32-bit host
> this cannot be 64-bit. Can you explain the problem a bit more?
> 
> I have not need #address-cells in a FIT.
> 
> It would be better to use ulong for addresses in U-Boot I think. It is
> safe and efficient on both 32- and 64-bit machines.
> 

Simon,

Considering this situation, building FIT image on an ubuntu 12.04 32-bit host,
for ARMv8 target. I believe ulong is OK on 64-bit target. But it is not for the
host mkimage. To proper deal with address cell = 2, the function
fit_image_get_load() and fit_image_get_entry() need to make 64-bit address from
FIT image. mkimage runs on 32-bit host doesn't take ulong as 64-bit, does it? So
I can generate a FIT image with the address cell and load/entry address I need,
but I cannot display it correctly with mkimage. I think I can use the image on
64-bit target after fixing some parsing code as I mentioned.

The background for this experiment is I am trying to shift DDR to a continuous
space. For ARMv8, DDR can have three regions, with only 2GB under 32-bit address
space.

York


More information about the U-Boot mailing list