[U-Boot] 64Bit device tree compilation

Bin Meng bmeng.cn at gmail.com
Tue Mar 24 03:12:32 CET 2015


Hi,

On Fri, Mar 20, 2015 at 2:04 AM, Thierry Reding
<thierry.reding at gmail.com> wrote:
> On Thu, Mar 19, 2015 at 07:43:35AM -0600, Simon Glass wrote:
>> Hi Hanna,
>>
>> On 18 March 2015 at 11:17, Hanna Hawa <hannah at marvell.com> wrote:
>> > Hi Simon,
>> >
>> >
>> >
>> > My name is Hanna, I’m working in Software team in Marvell with Yehuda.
>> >
>> >
>> >
>> > I’m trying to run U-Boot with FDT in 64Bit.
>> >
>> > I’ve issue when I’m trying to load the image on my board, I got abort
>> > (**Synchronous Abort**)
>> >
>> > Exactly when the U-boot run fdt_addr_to_cpu(*cell) under lib/fdtdec.c
>> >
>> >
>> >
>> > The issue is the format of the FDT is 32Bit, and Big Endian mode.
>> >
>> >
>> >
>> > After some debug, I changed the typedef of fdt_size, and fdt_addr to be u32.
>> >
>> > Also fdt_addr_to_cpu, and fdt_size_to_cpu  to use u32 swap, it works.
>> >
>> >
>> >
>> > My question is:
>> >
>> > Is that correct to change the typedef to use u32Bit?
>>
>> What do you have CONFIG_PHYS_64BIT set to? That is supposed to
>> indicate the machine word size. Do you have a 64-bit CPU?
>>
>> I recall someone reporting that on 64-bit machines things like '*cell'
>> can fail because the address is not always 64-bit aligned. But on
>> 64-bit machines, fdt_addr_t should be 64-bit, so changing it to 32-bit
>> seems wrong since you may not be able to address everything (e.g. the
>> reg properties will be limited to the first 4GB).
>>
>> I suspect it is wrong to use *cell. Instead we could use
>> fdtdec_get_number(cell, <size>) or similar logic. Any existing use of
>> fdt_addr_t/fdt_size_t to access a cell is wrong, i.e. in
>> fdtdec_get_addr_size() and fdtdec_decode_region(). You could send a
>> patch for that.
>
> I have a couple of patches for this kind of issue that I encountered
> during recent bring-up of 64-bit U-Boot on Tegra210. I'm on my way out
> of the office right now, but I'll send out the patches tomorrow.
>

Maybe a dumb question, why do we need to have a 64-bit U-Boot for
arm64? I don't see we ever created 64-bit U-Boot for ppc64.

Regards,
Bin


More information about the U-Boot mailing list