
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, Stefan