Skip to content
Snippets Groups Projects
Commit cdb6babe authored by Bin Meng's avatar Bin Meng Committed by Simon Glass
Browse files

x86: queensbay: Change PCIe root ports' interrupt routing


So far interrupt routing works pretty well for any on-chip devices
on Intel Crown Bay. When inserting any PCIe card to any PCIe slot,
Linux kernel is smart enough to do interrupt swizzling and figure
out device's irq using its parent bridge's interrupt routing info
all the way up to its root port. In U-Boot all PCIe root ports'
interrupts were routed to PIRQ E/F/G/H before, while actually all
PCIe downstream ports received INTx are routed to PIRQ A/B/C/D
directly and not configurable. Now we change this mapping so that
any external PCIe device can work correctly.

Signed-off-by: default avatarBin Meng <bmeng.cn@gmail.com>
Acked-by: default avatarSimon Glass <sjg@chromium.org>
parent 07a52865
No related branches found
No related tags found
No related merge requests found
...@@ -69,17 +69,18 @@ void cpu_irq_init(void) ...@@ -69,17 +69,18 @@ void cpu_irq_init(void)
* Route TunnelCreek PCI device interrupt pin to PIRQ * Route TunnelCreek PCI device interrupt pin to PIRQ
* *
* Since PCIe downstream ports received INTx are routed to PIRQ * Since PCIe downstream ports received INTx are routed to PIRQ
* A/B/C/D directly and not configurable, we route internal PCI * A/B/C/D directly and not configurable, we have to route PCIe
* device's INTx to PIRQ E/F/G/H. * root ports' INTx to PIRQ A/B/C/D as well. For other devices
* on TunneCreek, route them to PIRQ E/F/G/H.
*/ */
writew(PIRQE, &rcba->d02ir); writew(PIRQE, &rcba->d02ir);
writew(PIRQF, &rcba->d03ir); writew(PIRQF, &rcba->d03ir);
writew(PIRQG, &rcba->d27ir); writew(PIRQG, &rcba->d27ir);
writew(PIRQH, &rcba->d31ir); writew(PIRQH, &rcba->d31ir);
writew(PIRQE, &rcba->d23ir); writew(PIRQA, &rcba->d23ir);
writew(PIRQF, &rcba->d24ir); writew(PIRQB, &rcba->d24ir);
writew(PIRQG, &rcba->d25ir); writew(PIRQC, &rcba->d25ir);
writew(PIRQH, &rcba->d26ir); writew(PIRQD, &rcba->d26ir);
} }
int arch_misc_init(void) int arch_misc_init(void)
......
...@@ -169,10 +169,22 @@ ...@@ -169,10 +169,22 @@
/* TunnelCreek PCI devices */ /* TunnelCreek PCI devices */
PCI_BDF(0, 2, 0) INTA PIRQE PCI_BDF(0, 2, 0) INTA PIRQE
PCI_BDF(0, 3, 0) INTA PIRQF PCI_BDF(0, 3, 0) INTA PIRQF
PCI_BDF(0, 23, 0) INTA PIRQE PCI_BDF(0, 23, 0) INTA PIRQA
PCI_BDF(0, 24, 0) INTA PIRQF PCI_BDF(0, 23, 0) INTB PIRQB
PCI_BDF(0, 25, 0) INTA PIRQG PCI_BDF(0, 23, 0) INTC PIRQC
PCI_BDF(0, 26, 0) INTA PIRQH PCI_BDF(0, 23, 0) INTD PIRQD
PCI_BDF(0, 24, 0) INTA PIRQB
PCI_BDF(0, 24, 0) INTB PIRQC
PCI_BDF(0, 24, 0) INTC PIRQD
PCI_BDF(0, 24, 0) INTD PIRQA
PCI_BDF(0, 25, 0) INTA PIRQC
PCI_BDF(0, 25, 0) INTB PIRQD
PCI_BDF(0, 25, 0) INTC PIRQA
PCI_BDF(0, 25, 0) INTD PIRQB
PCI_BDF(0, 26, 0) INTA PIRQD
PCI_BDF(0, 26, 0) INTB PIRQA
PCI_BDF(0, 26, 0) INTC PIRQB
PCI_BDF(0, 26, 0) INTD PIRQC
PCI_BDF(0, 27, 0) INTA PIRQG PCI_BDF(0, 27, 0) INTA PIRQG
/* /*
* Topcliff PCI devices * Topcliff PCI devices
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment