Currently, Das U-Boot and Linux use device tree to specify how the different hardware components are connected to each other on a board. If a board has a way via which the user can plug in another hardware component, unless we are talking about universal buses like USB or SDIO, the device tree has to be updated to corresponding to the change.
There are several ways how this issue can be solved. One may, for example, have a different device tree for each configuration, or one can use device tree overlays.
But what if you have a device which can, via one bus, connect several devices, and these may or may not be of the same kind? The number of different device trees would grow rapidly, and one could not use the same device tree overlay when the same device is connected more than one time without editing the overlay.
Fortunately U-Boot can fixup the loaded device tree before booting.
In this talk we shall describe how we used this fixup feature (hopefully in an elegant and upstreamable way) to solve this issue on Turris MOX, a modular SOHO router.