Hi Stefan, On 1 September 2015 at 09:23, Stefan Roese <[email protected]> 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 _______________________________________________ U-Boot mailing list [email protected] http://lists.denx.de/mailman/listinfo/u-boot

