aboutsummaryrefslogtreecommitdiff
path: root/arch/x86/cpu/quark/quark.c
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2018-06-13 11:43:59 -0400
committerTom Rini <trini@konsulko.com>2018-06-13 11:43:59 -0400
commit66398944f53921ec641e1c2202390933767dbb87 (patch)
treee68f31898efc1f8963bcd37cb6703a61a9c5f76f /arch/x86/cpu/quark/quark.c
parentacaee30608ce203289a180d664b7f0abb2e64ee7 (diff)
parentbee053e248e93d82e5c352708f8c892f4a488c54 (diff)
downloadu-boot-66398944f53921ec641e1c2202390933767dbb87.zip
u-boot-66398944f53921ec641e1c2202390933767dbb87.tar.gz
u-boot-66398944f53921ec641e1c2202390933767dbb87.tar.bz2
Merge git://git.denx.de/u-boot-x86
Diffstat (limited to 'arch/x86/cpu/quark/quark.c')
-rw-r--r--arch/x86/cpu/quark/quark.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/arch/x86/cpu/quark/quark.c b/arch/x86/cpu/quark/quark.c
index 46141c4..4fd6864 100644
--- a/arch/x86/cpu/quark/quark.c
+++ b/arch/x86/cpu/quark/quark.c
@@ -7,6 +7,7 @@
#include <mmc.h>
#include <asm/io.h>
#include <asm/ioapic.h>
+#include <asm/irq.h>
#include <asm/mrccache.h>
#include <asm/mtrr.h>
#include <asm/pci.h>
@@ -313,12 +314,37 @@ static void quark_usb_init(void)
writel((0xf << 16) | 0xf, bar + USBD_EP_INT_STS);
}
+static void quark_irq_init(void)
+{
+ struct quark_rcba *rcba;
+ u32 base;
+
+ qrk_pci_read_config_dword(QUARK_LEGACY_BRIDGE, LB_RCBA, &base);
+ base &= ~MEM_BAR_EN;
+ rcba = (struct quark_rcba *)base;
+
+ /*
+ * Route Quark PCI device interrupt pin to PIRQ
+ *
+ * Route device#23's INTA/B/C/D to PIRQA/B/C/D
+ * Route device#20,21's INTA/B/C/D to PIRQE/F/G/H
+ */
+ writew(PIRQC, &rcba->rmu_ir);
+ writew(PIRQA | (PIRQB << 4) | (PIRQC << 8) | (PIRQD << 12),
+ &rcba->d23_ir);
+ writew(PIRQD, &rcba->core_ir);
+ writew(PIRQE | (PIRQF << 4) | (PIRQG << 8) | (PIRQH << 12),
+ &rcba->d20d21_ir);
+}
+
int arch_early_init_r(void)
{
quark_pcie_init();
quark_usb_init();
+ quark_irq_init();
+
return 0;
}