[U-Boot] DM: Problem with DT bus translation dev_get_addr()

Simon Glass sjg at chromium.org
Tue Sep 1 17:30:07 CEST 2015


Hi Stefan,

On 1 September 2015 at 09:23, Stefan Roese <sr at denx.de> wrote:
> Hi Simon,
>
> On 01.09.2015 08:25, Stefan Roese wrote:
>>
>> I'm currently enabling DM support for the Marvell MVEBU SoC's I've
>> been working lately on (Armada XP and 38x right now). A problem I'm
>> facing here is the bus translation, as this is quite complex for these
>> SoC's. With multiple levels of translation ranges (multiple simple-bus
>> nodes to walk through).
>>
>> The current implementation in dev_get_addr() does not work. This has
>> 2 reasons:
>>
>> a) It only translates 1 simple-bus node - we need to walk the
>>     complete DT to get the correct address.
>>
>> b) The "ranges" property can have different sizes for "address"
>>     and "size" in all these busses / nodes. And also multiple
>>     ranges tuples are allowed and used in these dts files.
>>
>> Of course this can be solved in the current implementation (device.c /
>> simple_bus.c). But especially b) is not that trivial to solve in
>> a generic way.
>>
>> So my main question is, why don't you use fdt_translate_address()
>> from fdt_support.c instead of implementing your own translation
>> function simple_bus_translate()? Is this a size question because
>> this may be used in SPL as well?
>
>
> The attached small patch demonstrates the usage of fdt_translate_address()
> and enables bus translation on the MVEBU platforms.

Thanks for digging into this.

One concern I have is fdt_parent_offset(). That function is very slow
- we should use dev->parent->of_offset instead with driver model.

Other than that I think this is fine. But yes it should be enabled by
CONFIG because the code size gets a lot larger and many platforms
don't need it. Perhaps we should have a new CONFIG_SPL_OF_TRANSLATE?

Regards,
Simon


More information about the U-Boot mailing list