diff --git a/src/soc/intel/common/block/include/intelblocks/irq.h b/src/soc/intel/common/block/include/intelblocks/irq.h index 727020a5df..a0cb409ec8 100644 --- a/src/soc/intel/common/block/include/intelblocks/irq.h +++ b/src/soc/intel/common/block/include/intelblocks/irq.h @@ -46,4 +46,6 @@ const struct pci_irq_entry *assign_pci_irqs(const struct slot_irq_constraints *c void generate_pin_irq_map(const struct pci_irq_entry *entries); +void irq_program_non_pch(const struct pci_irq_entry *entries); + #endif /* SOC_INTEL_COMMON_IRQ_H */ diff --git a/src/soc/intel/common/block/irq/irq.c b/src/soc/intel/common/block/irq/irq.c index eb4daf9a14..96fd733619 100644 --- a/src/soc/intel/common/block/irq/irq.c +++ b/src/soc/intel/common/block/irq/irq.c @@ -4,9 +4,11 @@ #include #include #include +#include #include #include #include +#include #include #include #include @@ -394,3 +396,20 @@ void generate_pin_irq_map(const struct pci_irq_entry *entries) intel_write_pci0_PRT(pin_irq_map, map_count, &pirq_map); free(pin_irq_map); } + +void irq_program_non_pch(const struct pci_irq_entry *entries) +{ + while (entries) { + if (PCI_SLOT(entries->devfn) >= MIN_PCH_SLOT) { + entries = entries->next; + continue; + } + + if (entries->irq) + pci_s_write_config8(PCI_DEV(0, PCI_SLOT(entries->devfn), + PCI_FUNC(entries->devfn)), + PCI_INTERRUPT_LINE, entries->irq); + + entries = entries->next; + } +}