soc/intel/common/irq: Add function to return IRQ for PCI devfn

The IRQ for a single device may be required elsewhere, therefore provide
get_pci_devfn_irq.

BUG=b:130217151, b:171580862, b:176858827

Change-Id: Ibebd821767a2698c9e60b09eeeff3bb596359728
Signed-off-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/55826
Reviewed-by: Furquan Shaikh <furquan@google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Tim Wawrzynczak 2021-06-24 11:48:27 -06:00
parent e9ee919fac
commit 61005c8eb5
2 changed files with 19 additions and 1 deletions

View File

@ -7,6 +7,7 @@
#include <types.h>
#define MAX_FNS 8
#define INVALID_IRQ -1
#define ANY_PIRQ(x) [PCI_FUNC(x)] = { .fixed_int_pin = PCI_INT_NONE,\
.fixed_pirq = PIRQ_INVALID, \
@ -61,4 +62,8 @@ bool irq_program_non_pch(void);
const struct pci_irq_entry *get_cached_pci_irqs(void);
/* Search the cached PCI IRQ assignment results for the matching devfn and
return the corresponding IRQ, or INVALID_IRQ if not found. */
int get_pci_devfn_irq(unsigned int devfn);
#endif /* SOC_INTEL_COMMON_IRQ_H */

View File

@ -21,7 +21,6 @@
#define IDX2PIN(i) (enum pci_pin)((i) + PCI_INT_A)
#define PIN2IDX(p) (size_t)((p) - PCI_INT_A)
#define INVALID_IRQ -1
struct pin_info {
enum pin_state {
@ -429,3 +428,17 @@ bool irq_program_non_pch(void)
return true;
}
int get_pci_devfn_irq(unsigned int devfn)
{
const struct pci_irq_entry *entry = cached_entries;
while (entry) {
if (entry->devfn == devfn)
return entry->irq;
entry = entry->next;
}
return INVALID_IRQ;
}