The newbus code has long had a facility allowing a device to be re-probed (re-bid) after a driver has been attached. The code was effectively inactivated by providing no mechanism or condition that led to setting the DF_REBID flag that enables it for a given driver.
This change adds a device_set_rebiddable() function to set the flag. The new manpage lays out the requirements for a driver willing to rebid and potentially detach if outbid.
This long-dormant feature is now needed to solve a problem with using FDT data supplied by system vendors: the data sometimes lists a device as being compatible with "simple-bus" in addition to more specific hardware. This causes simplebus to attach during BUS_PASS_BUS, which prevents the real driver from attaching on a later pass. This change will allow simplebus to be rebiddable and detach from the device if a higher-quality driver comes along later.