Fix missing RNG interrupt in many chips.

This commit is contained in:
Dario Nieuwenhuis 2023-07-31 01:25:09 +02:00
parent 9ab39ded3f
commit 1f8ab493e0

View File

@ -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 {
signal: i.signal.clone(), if header_irqs.contains_key(*eq_irq) {
}) return Some(Interrupt {
.filter(|i| header_irqs.contains_key(&i.interrupt)) signal: i.signal.clone(),
.collect() interrupt: eq_irq.to_string(),
} else { });
peri_irqs }
.iter() }
.filter(|i| header_irqs.contains_key(&i.interrupt)) }
.cloned() None
.collect() })
}; .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()));