Module Name: src Committed By: mrg Date: Sun Sep 14 19:54:05 UTC 2014
Modified Files: src/share/man/man4: acpi.4 src/sys/dev/acpi: acpi_pci_link.c files.acpi Log Message: introduce a new option: ACPI__DIS_IS_BROKEN. this is a hack to avoid calling the "_DIS" method during acpi interrupt link setup, which hangs various nforce4 based motherboards. when the problem is properly fixed, remove this hack. for now, it allows someone (me) to have a valid kernel config that doesn't require a source hack every new tree. ok chs@ To generate a diff of this commit: cvs rdiff -u -r1.77 -r1.78 src/share/man/man4/acpi.4 cvs rdiff -u -r1.21 -r1.22 src/sys/dev/acpi/acpi_pci_link.c cvs rdiff -u -r1.94 -r1.95 src/sys/dev/acpi/files.acpi Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/share/man/man4/acpi.4 diff -u src/share/man/man4/acpi.4:1.77 src/share/man/man4/acpi.4:1.78 --- src/share/man/man4/acpi.4:1.77 Sun Jul 13 12:08:32 2014 +++ src/share/man/man4/acpi.4 Sun Sep 14 19:54:05 2014 @@ -1,4 +1,4 @@ -.\" $NetBSD: acpi.4,v 1.77 2014/07/13 12:08:32 wiz Exp $ +.\" $NetBSD: acpi.4,v 1.78 2014/09/14 19:54:05 mrg Exp $ .\" .\" Copyright (c) 2002, 2004, 2010 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -24,7 +24,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.Dd July 13, 2014 +.Dd September 8, 2014 .Dt ACPI 4 .Os .Sh NAME @@ -39,6 +39,7 @@ .Cd options ACPI_DSDT_OVERRIDE .Cd options ACPI_DSDT_FILE="" .Cd options ACPI_BLACKLIST_YEAR=2000 +.Cd options ACPI__DIS_IS_BROKEN .Sh DESCRIPTION .Nx provides machine-independent bus support for @@ -97,6 +98,13 @@ is not specified, default to in the build directory. .It Dv ACPI_BLACKLIST_YEAR=2000 Do not use ACPI with any BIOS made on or before the specified year. +.It Dv ACPI__DIS_IS_BROKEN +Do not call the ACPI "_DIS" method to disable interrupt links. +This may be required on specific +.Dq nForce4 +chipset systems, which hard hang when this method is called instead of +having it fail gracefully. +.Dq .El .Sh SYSCTL SUPPORT Few @@ -658,3 +666,7 @@ among others. Most of the .Tn ACPI power management functionalities are not implemented. +.Pp +The +.Dv ACPI__DIS_IS_BROKEN +option should not be necessary. Index: src/sys/dev/acpi/acpi_pci_link.c diff -u src/sys/dev/acpi/acpi_pci_link.c:1.21 src/sys/dev/acpi/acpi_pci_link.c:1.22 --- src/sys/dev/acpi/acpi_pci_link.c:1.21 Mon Apr 14 01:56:18 2014 +++ src/sys/dev/acpi/acpi_pci_link.c Sun Sep 14 19:54:05 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi_pci_link.c,v 1.21 2014/04/14 01:56:18 jakllsch Exp $ */ +/* $NetBSD: acpi_pci_link.c,v 1.22 2014/09/14 19:54:05 mrg Exp $ */ /*- * Copyright (c) 2002 Mitsuru IWASAKI <iwas...@jp.freebsd.org> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: acpi_pci_link.c,v 1.21 2014/04/14 01:56:18 jakllsch Exp $"); +__KERNEL_RCSID(0, "$NetBSD: acpi_pci_link.c,v 1.22 2014/09/14 19:54:05 mrg Exp $"); #include <sys/param.h> #include <sys/malloc.h> @@ -533,11 +533,13 @@ acpi_pci_link_attach(struct acpi_pci_lin * run _DIS (i.e., the method doesn't exist), assume the initial * IRQ was routed by the BIOS. */ +#ifndef ACPI__DIS_IS_BROKEN if (ACPI_SUCCESS(AcpiEvaluateObject(sc->pl_handle, "_DIS", NULL, NULL))) for (i = 0; i < sc->pl_num_links; i++) sc->pl_links[i].l_irq = PCI_INVALID_IRQ; else +#endif for (i = 0; i < sc->pl_num_links; i++) if (PCI_INTERRUPT_VALID(sc->pl_links[i].l_irq)) sc->pl_links[i].l_routed = TRUE; Index: src/sys/dev/acpi/files.acpi diff -u src/sys/dev/acpi/files.acpi:1.94 src/sys/dev/acpi/files.acpi:1.95 --- src/sys/dev/acpi/files.acpi:1.94 Tue Apr 1 17:47:36 2014 +++ src/sys/dev/acpi/files.acpi Sun Sep 14 19:54:05 2014 @@ -1,9 +1,10 @@ -# $NetBSD: files.acpi,v 1.94 2014/04/01 17:47:36 riastradh Exp $ +# $NetBSD: files.acpi,v 1.95 2014/09/14 19:54:05 mrg Exp $ include "dev/acpi/acpica/files.acpica" defflag opt_acpi.h ACPIVERBOSE ACPI_DEBUG ACPI_ACTIVATE_DEV ACPI_DSDT_OVERRIDE ACPI_SCANPCI ACPI_BREAKPOINT + ACPI__DIS_IS_BROKEN defparam opt_acpi.h ACPI_DSDT_FILE := "\"/dev/null\"" defparam opt_acpi.h ACPI_BLACKLIST_YEAR = 2000