diff --git a/pcid/src/cfg_access/mod.rs b/pcid/src/cfg_access/mod.rs index b62be0a3ba..8e7f58b7be 100644 --- a/pcid/src/cfg_access/mod.rs +++ b/pcid/src/cfg_access/mod.rs @@ -55,6 +55,24 @@ fn locate_ecam_dtb( let mut interrupt_map = Vec::::new(); while let Ok([addr1, addr2, addr3, int1, phandle]) = interrupt_map_data.next_chunk::<5>() { let parent = dt.find_phandle(phandle).unwrap(); + let parent_address_cells = u32::from_be_bytes( + parent.property("#address-cells").unwrap().value[..4] + .try_into() + .unwrap(), + ); + match parent_address_cells { + 0 => {} + 1 => { + assert_eq!(interrupt_map_data.next().unwrap(), 0); + } + 2 => { + assert_eq!(interrupt_map_data.next_chunk::<2>().unwrap(), [0, 0]); + } + 3 => { + assert_eq!(interrupt_map_data.next_chunk::<3>().unwrap(), [0, 0, 0]); + } + _ => break, + }; let parent_interrupt_cells = parent.interrupt_cells().unwrap(); let parent_interrupt = match parent_interrupt_cells { 1 if let Some(a) = interrupt_map_data.next() => [a, 0, 0],