pvmfw: Warn if discarding unexpected UART DT nodes
Print a warning so that users may figure out why their extra serial
nodes are mysteriously disappearing from the DT before reaching the
guest.
Test: m pvmfw
Change-Id: I7077f0a51249f5beb4c8543f2a2d4db8e1f6b2ce
diff --git a/pvmfw/src/fdt.rs b/pvmfw/src/fdt.rs
index e682ab2..d2aad61 100644
--- a/pvmfw/src/fdt.rs
+++ b/pvmfw/src/fdt.rs
@@ -488,11 +488,17 @@
}
fn read_serial_info_from(fdt: &Fdt) -> libfdt::Result<SerialInfo> {
- let mut addrs: ArrayVec<[u64; SerialInfo::MAX_SERIALS]> = Default::default();
- for node in fdt.compatible_nodes(cstr!("ns16550a"))?.take(SerialInfo::MAX_SERIALS) {
+ let mut addrs = ArrayVec::new();
+
+ let mut serial_nodes = fdt.compatible_nodes(cstr!("ns16550a"))?;
+ for node in serial_nodes.by_ref().take(addrs.capacity()) {
let reg = node.first_reg()?;
addrs.push(reg.addr);
}
+ if serial_nodes.next().is_some() {
+ warn!("DT has more than {} UART nodes: discarding extra nodes.", addrs.capacity());
+ }
+
Ok(SerialInfo { addrs })
}