draft: aarch64: add irq_bcm2835. Need refactoring

This commit is contained in:
Ivan Tan
2023-10-08 11:15:05 +08:00
committed by Jeremy Soller
parent 9a5b9798ca
commit bfbf435546
9 changed files with 668 additions and 150 deletions
+31
View File
@@ -22,6 +22,37 @@ pub fn root_cell_sz(dt: &fdt::DeviceTree) -> Option<(u32, u32)> {
Some((BE::read_u32(&size_cells.data), BE::read_u32(&size_cells.data)))
}
pub fn travel_interrupt_ctrl(fdt: &fdt::DeviceTree) {
let root_node = fdt.nodes().nth(0).unwrap();
let intr = root_node.properties().find(|p| p.name.contains("interrupt-parent")).unwrap();
let root_intr_parent = BE::read_u32(&intr.data);
println!("root parent = 0x{:08x}", root_intr_parent);
for node in fdt.nodes() {
if node.properties().find(|p| p.name.contains("interrupt-controller")).is_some() {
let compatible = node.properties().find(|p| p.name.contains("compatible")).unwrap();
let phandle = node.properties().find(|p| p.name.contains("phandle")).unwrap();
let intr_cells = node.properties().find(|p| p.name.contains("#interrupt-cells")).unwrap();
let _intr = node.properties().find(|p| p.name.contains("interrupt-parent"));
let _intr_data = node.properties().find(|p| p.name.contains("interrupts"));
let s = core::str::from_utf8(compatible.data).unwrap();
println!("{}, compatible = {}, #interrupt-cells = 0x{:08x}, phandle = 0x{:08x}", node.name, s, BE::read_u32(intr_cells.data),
BE::read_u32(phandle.data));
if let Some(intr) = _intr {
if let Some(intr_data) = _intr_data {
println!("interrupt-parent = 0x{:08x}", BE::read_u32(intr.data));
println!("interrupts begin:");
for chunk in intr_data.data.chunks(4) {
print!("0x{:08x}, ", BE::read_u32(chunk));
}
println!("interrupts end");
}
}
}
}
}
fn memory_ranges(dt: &fdt::DeviceTree, address_cells: usize, size_cells: usize, ranges: &mut [(usize, usize); 10]) -> usize {
let (memory_node, _memory_cells) = dt.find_node("/memory").unwrap();