I still would like to know what is better using a device tree than using a standard relocatable (common to all ARM) kernel and running a last linker command for each ARM configuration.
Anyway, if the bus cannot be queried for what it contains and at which address - that means that those address are constant and at some point the kernel has to know them.
So the same kernel with few relocations would be distributed to all ARMs targets, and each target would have to do a partial and final "ld" with a linker command file containning something like:
Each driver should check that the base address of its device is not null before trying to initialise itself.
If a higher level description is needed, a tool can be used to generate that linker command file.
Maybe there is something I am missing?