Use fixed mode, not lopri, for delivering IO interrupts. Suggested by

Peter O'Kane. Fixes interrupt problems on some Xeon systems.
This commit is contained in:
fvdl 2004-12-21 11:33:04 +00:00
parent 5b3d234201
commit a5e7e03043
2 changed files with 10 additions and 10 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: mpacpi.c,v 1.31 2004/11/29 00:07:22 ws Exp $ */ /* $NetBSD: mpacpi.c,v 1.32 2004/12/21 11:33:04 fvdl Exp $ */
/* /*
* Copyright (c) 2003 Wasabi Systems, Inc. * Copyright (c) 2003 Wasabi Systems, Inc.
@ -36,7 +36,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: mpacpi.c,v 1.31 2004/11/29 00:07:22 ws Exp $"); __KERNEL_RCSID(0, "$NetBSD: mpacpi.c,v 1.32 2004/12/21 11:33:04 fvdl Exp $");
#include "opt_acpi.h" #include "opt_acpi.h"
#include "opt_mpbios.h" #include "opt_mpbios.h"
@ -234,7 +234,7 @@ mpacpi_nonpci_intr(APIC_HEADER *hdrp, void *aux)
mpi->redir |= IOAPIC_REDLO_ACTLO; mpi->redir |= IOAPIC_REDLO_ACTLO;
break; break;
} }
mpi->redir |= (IOAPIC_REDLO_DEL_LOPRI<<IOAPIC_REDLO_DEL_SHIFT); mpi->redir |= (IOAPIC_REDLO_DEL_FIXED<<IOAPIC_REDLO_DEL_SHIFT);
switch (isa_ovr->TriggerMode) { switch (isa_ovr->TriggerMode) {
case MPS_INTTR_DEF: case MPS_INTTR_DEF:
case MPS_INTTR_LEVEL: case MPS_INTTR_LEVEL:
@ -638,7 +638,7 @@ mpacpi_pciroute(struct mpacpi_pcibus *mpr)
mpi->type = MPS_INTTYPE_INT; mpi->type = MPS_INTTYPE_INT;
/* Defaults for PCI (active low, level triggered) */ /* Defaults for PCI (active low, level triggered) */
mpi->redir = (IOAPIC_REDLO_DEL_LOPRI<<IOAPIC_REDLO_DEL_SHIFT) | mpi->redir = (IOAPIC_REDLO_DEL_FIXED<<IOAPIC_REDLO_DEL_SHIFT) |
IOAPIC_REDLO_LEVEL | IOAPIC_REDLO_ACTLO; IOAPIC_REDLO_LEVEL | IOAPIC_REDLO_ACTLO;
mpi->flags = MPS_INTPO_ACTLO | (MPS_INTTR_LEVEL << 2); mpi->flags = MPS_INTPO_ACTLO | (MPS_INTTR_LEVEL << 2);
mpi->cpu_id = 0; mpi->cpu_id = 0;
@ -752,7 +752,7 @@ mpacpi_config_irouting(struct acpi_softc *acpi)
mpi->ioapic_ih = APIC_INT_VIA_APIC | mpi->ioapic_ih = APIC_INT_VIA_APIC |
(ioapic->sc_apicid << APIC_INT_APIC_SHIFT) | (ioapic->sc_apicid << APIC_INT_APIC_SHIFT) |
(i << APIC_INT_PIN_SHIFT); (i << APIC_INT_PIN_SHIFT);
mpi->redir = (IOAPIC_REDLO_DEL_LOPRI<<IOAPIC_REDLO_DEL_SHIFT); mpi->redir = (IOAPIC_REDLO_DEL_FIXED<<IOAPIC_REDLO_DEL_SHIFT);
mpi->flags = MPS_INTPO_DEF | (MPS_INTTR_DEF << 2); mpi->flags = MPS_INTPO_DEF | (MPS_INTTR_DEF << 2);
mpi->global_int = i; mpi->global_int = i;
ioapic->sc_pins[i].ip_map = mpi; ioapic->sc_pins[i].ip_map = mpi;

View File

@ -1,4 +1,4 @@
/* $NetBSD: mpbios.c,v 1.22 2004/08/30 15:05:19 drochner Exp $ */ /* $NetBSD: mpbios.c,v 1.23 2004/12/21 11:33:04 fvdl Exp $ */
/*- /*-
* Copyright (c) 2000 The NetBSD Foundation, Inc. * Copyright (c) 2000 The NetBSD Foundation, Inc.
@ -103,7 +103,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: mpbios.c,v 1.22 2004/08/30 15:05:19 drochner Exp $"); __KERNEL_RCSID(0, "$NetBSD: mpbios.c,v 1.23 2004/12/21 11:33:04 fvdl Exp $");
#include "opt_mpacpi.h" #include "opt_mpacpi.h"
#include "opt_mpbios.h" #include "opt_mpbios.h"
@ -803,7 +803,7 @@ static void mp_cfg_pci_intr (entry, redir)
mp_cfg_special_intr(entry, redir); mp_cfg_special_intr(entry, redir);
return; return;
} }
*redir |= (IOAPIC_REDLO_DEL_LOPRI<<IOAPIC_REDLO_DEL_SHIFT); *redir |= (IOAPIC_REDLO_DEL_FIXED<<IOAPIC_REDLO_DEL_SHIFT);
switch (mpstrig) { switch (mpstrig) {
case MPS_INTTR_DEF: case MPS_INTTR_DEF:
@ -843,7 +843,7 @@ static void mp_cfg_eisa_intr (entry, redir)
mp_cfg_special_intr(entry, redir); mp_cfg_special_intr(entry, redir);
return; return;
} }
*redir |= (IOAPIC_REDLO_DEL_LOPRI<<IOAPIC_REDLO_DEL_SHIFT); *redir |= (IOAPIC_REDLO_DEL_FIXED<<IOAPIC_REDLO_DEL_SHIFT);
switch (mpstrig) { switch (mpstrig) {
case MPS_INTTR_LEVEL: case MPS_INTTR_LEVEL:
@ -895,7 +895,7 @@ static void mp_cfg_isa_intr (entry, redir)
mp_cfg_special_intr(entry, redir); mp_cfg_special_intr(entry, redir);
return; return;
} }
*redir |= (IOAPIC_REDLO_DEL_LOPRI<<IOAPIC_REDLO_DEL_SHIFT); *redir |= (IOAPIC_REDLO_DEL_FIXED<<IOAPIC_REDLO_DEL_SHIFT);
switch (mpstrig) { switch (mpstrig) {
case MPS_INTTR_LEVEL: case MPS_INTTR_LEVEL: