Thanks Jon for this summary! Over the last week, I've actually tried out building kernels for multiple platforms combined to get a better feeling for the remaining problems. The result is in the testing/multiplatform branch of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc.git and it can build arbitrary combinations of four of the five subarchitectures that the Linaro organization is most interested in (imx, omap, ux500 and vexpress, but not exynos for now). Most other platforms should actually be simpler to convert.
However, this kernel is not yet going to be useful on real hardware because I had to disable or add hacks for a number of features (SMP, sparseirq, clocks) that are still being worked on, but as soon as one platform has all that work done, we can actually build a kernel with everything enabled and run on that particular platform and see what else breaks.
Unlike I suggested in the email thread, this kernel at the moment actually allows enabling all the board files including non-DT ones because that was easier to do with the Kconfig dependencies, but I found two real technical issues that would be solved by making the combined kernel DT-only:
1. The exynos platform defines static platform devices from files shared with five other Samsung platforms that are mutually exclusive because the device definitions depend on platform specific compile-time constants. Using DT probing we can just drop those static platform device definitions and make the conflict go away.
2. With sparse IRQs, a lot of the hardcoded interrupt numbers in static platform device definitions are broken, while the definitions from DT still work. Sparse IRQs are currently needed to build multiplatform kernels and I expect that requirement to stay.