aboutsummaryrefslogtreecommitdiff
path: root/sys/mips/malta
diff options
context:
space:
mode:
authorAdrian Chadd <adrian@FreeBSD.org>2011-07-16 00:30:23 +0000
committerAdrian Chadd <adrian@FreeBSD.org>2011-07-16 00:30:23 +0000
commit1455de177527afa7d96b22b0eca618557b7c18b9 (patch)
tree3f5347932d5b5a4108ff70abf9d5f9fcb8db4742 /sys/mips/malta
parentc7323fd7750436606c3be307ae9c8d7e89bc7659 (diff)
downloadsrc-1455de177527afa7d96b22b0eca618557b7c18b9.tar.gz
src-1455de177527afa7d96b22b0eca618557b7c18b9.zip
The i8259 controller is initialized incorrectly on MALTA. It writes
mask bits to control register and control bits to mask register. The former causes ICW1_RESET|ICW1_LTIM combination to be written to control register, which on QEMU results in "level sensitive irq not supported" error. Submitted by: Robert Millan <rmh@debian.org>
Notes
Notes: svn path=/head/; revision=224072
Diffstat (limited to 'sys/mips/malta')
-rw-r--r--sys/mips/malta/gt_pci.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/sys/mips/malta/gt_pci.c b/sys/mips/malta/gt_pci.c
index 237e74227e0e..aa28639fada1 100644
--- a/sys/mips/malta/gt_pci.c
+++ b/sys/mips/malta/gt_pci.c
@@ -326,15 +326,15 @@ gt_pci_attach(device_t dev)
ICW4_8086);
/* mask all interrupts */
- bus_space_write_1(sc->sc_st, sc->sc_ioh_icu1, 0,
+ bus_space_write_1(sc->sc_st, sc->sc_ioh_icu1, 1,
sc->sc_imask & 0xff);
/* enable special mask mode */
- bus_space_write_1(sc->sc_st, sc->sc_ioh_icu1, 1,
+ bus_space_write_1(sc->sc_st, sc->sc_ioh_icu1, 0,
OCW3_SEL | OCW3_ESMM | OCW3_SMM);
/* read IRR by default */
- bus_space_write_1(sc->sc_st, sc->sc_ioh_icu1, 1,
+ bus_space_write_1(sc->sc_st, sc->sc_ioh_icu1, 0,
OCW3_SEL | OCW3_RR);
/* reset, program device, 4 bytes */
@@ -348,15 +348,15 @@ gt_pci_attach(device_t dev)
ICW4_8086);
/* mask all interrupts */
- bus_space_write_1(sc->sc_st, sc->sc_ioh_icu2, 0,
+ bus_space_write_1(sc->sc_st, sc->sc_ioh_icu2, 1,
sc->sc_imask & 0xff);
/* enable special mask mode */
- bus_space_write_1(sc->sc_st, sc->sc_ioh_icu2, 1,
+ bus_space_write_1(sc->sc_st, sc->sc_ioh_icu2, 0,
OCW3_SEL | OCW3_ESMM | OCW3_SMM);
/* read IRR by default */
- bus_space_write_1(sc->sc_st, sc->sc_ioh_icu2, 1,
+ bus_space_write_1(sc->sc_st, sc->sc_ioh_icu2, 0,
OCW3_SEL | OCW3_RR);
/*