Fix missing RNG interrupt in many chips.
This commit is contained in:
parent
9ab39ded3f
commit
1f8ab493e0
@ -963,33 +963,31 @@ fn process_core(
|
|||||||
|
|
||||||
//filter by available, because some are conditioned on <Die>
|
//filter by available, because some are conditioned on <Die>
|
||||||
|
|
||||||
let mut irqs: Vec<_> =
|
static EQUIVALENT_IRQS: &[(&str, &[&str])] = &[
|
||||||
if pname == "CAN" && (chip_name.starts_with("STM32F358") || chip_name.starts_with("STM32F398")) {
|
("HASH_RNG", &["RNG"]),
|
||||||
/*
|
("USB_HP_CAN_TX", &["CAN_TX"]),
|
||||||
This section is needed because the interrupt definition file does not apply uniformly to
|
("USB_LP_CAN_RX0", &["CAN_RX0"]),
|
||||||
all chips that it covers in this specific case. This cannot be done in interrupt.rs
|
];
|
||||||
because there, it's only possible to modify the interrupt definition file in a uniform manner.
|
|
||||||
*/
|
|
||||||
|
|
||||||
peri_irqs
|
let mut irqs: Vec<_> = peri_irqs
|
||||||
.iter()
|
.iter()
|
||||||
.map(|i| Interrupt {
|
.filter_map(|i| {
|
||||||
interrupt: i
|
if header_irqs.contains_key(&i.interrupt) {
|
||||||
.interrupt
|
return Some(i.clone());
|
||||||
.trim_start_matches("USB_LP_")
|
}
|
||||||
.trim_start_matches("USB_HP_")
|
if let Some((_, eq_irqs)) = EQUIVALENT_IRQS.iter().find(|(irq, _)| irq == &i.interrupt) {
|
||||||
.to_owned(),
|
for eq_irq in *eq_irqs {
|
||||||
|
if header_irqs.contains_key(*eq_irq) {
|
||||||
|
return Some(Interrupt {
|
||||||
signal: i.signal.clone(),
|
signal: i.signal.clone(),
|
||||||
|
interrupt: eq_irq.to_string(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None
|
||||||
})
|
})
|
||||||
.filter(|i| header_irqs.contains_key(&i.interrupt))
|
.collect();
|
||||||
.collect()
|
|
||||||
} else {
|
|
||||||
peri_irqs
|
|
||||||
.iter()
|
|
||||||
.filter(|i| header_irqs.contains_key(&i.interrupt))
|
|
||||||
.cloned()
|
|
||||||
.collect()
|
|
||||||
};
|
|
||||||
irqs.sort_by_key(|x| (x.signal.clone(), x.interrupt.clone()));
|
irqs.sort_by_key(|x| (x.signal.clone(), x.interrupt.clone()));
|
||||||
irqs.dedup_by_key(|x| (x.signal.clone(), x.interrupt.clone()));
|
irqs.dedup_by_key(|x| (x.signal.clone(), x.interrupt.clone()));
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user