[U-Boot] [PATCH v3] drivers: core: Add translation in live tree case

Mario Six mario.six at gdsys.cc
Wed Dec 20 09:00:32 UTC 2017


On Tue, Dec 19, 2017 at 12:03 AM, Stephen Warren <swarren at wwwdotorg.org> wrote:
> On 12/18/2017 03:33 PM, Stephen Warren wrote:
>>
>> On 12/18/2017 03:29 PM, Stephen Warren wrote:
>>>
>>> On 12/18/2017 01:34 AM, Mario Six wrote:
>>>>
>>>> The function dev_read_addr calls ofnode_get_addr_index in the live tree
>>>> case, which does not apply bus translations to the address read from the
>>>> device tree. This results in illegal addresses on boards that rely on
>>>> bus translations being applied.
>>>>
>>>> Fix this situation by applying bus translations in the live tree case as
>>>> well.
>>>
>>>
>>> Tested-by: Stephen Warren <swarren at nvidia.com>
>>
>>
>> Uggh. Sorry, I take that back. This seems to break NVIDIA Jetson TX1
>> (p2371-2180 board), even though it did solve this issue that was present on
>> other boards in the previous patch version. I'll try and see what's up
>> (something to do with I2C accesses early during boot)...
>
>
> I guess this is something to do with:
>
>> +               if (IS_ENABLED(CONFIG_OF_TRANSLATE)) {
>> +                       u64 paddr =
>> of_translate_address(ofnode_to_np(node), &addr);
>> +
>> +                       return be32_to_cpu((fdt_addr_t)paddr);
>
>
> My tests passed on a 32-bit platform but failed on a 64-bit platform. I
> expect you need be64_to_cpu() there on 64-bit platforms? Actually, it should
> really base the bit-width on #address-cells, but we only support 32- or
> 64-bit at the moment so switching between the two is probably fine.
>

Just sent a v4, which will hopefully fix this for all platforms. I tested with
32-bit and 64-bit sandbox, and I now get the same result with and without
translation for both.

@Simon: I also sent a RFC patch for a sandbox with 64-bit addresses, since it
might be useful for testing.

Best regards,

Mario


More information about the U-Boot mailing list