Add rng90(4), an iicbus(4) driver for the Microchip RNG90. The device returns 32 random bytes per command at its fixed 7-bit I2C address 0x40. The driver attaches only to an explicitly hinted iicbus child (addr="0x80" in FreeBSD's shifted hint form) or a device-tree node compatible with "microchip,rng90"; it never scans an address.
A root-only /dev/rng90N provides one CRC-verified block per blocking read. Kernel feeding is opt-in through dev.rng90.N.feed or a feed=1 hint. Wake, Info identity, response length, device status, and CRC are checked before bytes leave the driver. Raw reads are not also submitted to the kernel. Three health or self-test results without a valid block latch collection until reattach.
Add a dedicated RANDOM_PURE_RNG90 high-quality push source. random_harvest_queue() stores at most two uint32_t values in one event and reduces larger inputs to a 32-bit hash, so each verified 32-byte result is submitted as four 8-byte events. The source is registered once per module.
Transfers are single-message iicbus_transfer() calls without bus ownership. Detach takes the driver lock, marks the device dying, then releases the lock before cancelling and draining the taskqueue. It sends no final command to possibly removed hardware. Controller errors other than NACK end the operation and start a fixed one-second quiet period. Statistic sysctls snapshot values under the same lock, including on architectures without atomic 64-bit accesses.
The tested hardware places the RNG90 behind cp2112(4). The CP2112 error-path fix needed for reliable hot-unplug operation on that bridge is tracked separately as PR 300017:
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=300017
The RNG90 driver does not otherwise depend on CP2112.