IBM x20 Thinkpad

John Baldwin jhb at FreeBSD.org
Thu May 13 11:17:20 PDT 2004


On Thursday 13 May 2004 02:01 pm, RT wrote:
> With ACPI enabled, 90% of my attempts to start X result in a freeze. If
> X starts, it runs without any problems from that point forward so I can
> only assume it has to do with probing for the video card.
>
> With hint.acpi.0.disabled="1" in /boot/device.hints, I do not have any
> issues with freezes and X.
>
> IBM ThinkPad x20 2662-37u ASL file:
>         http://www.rbt.ca/temp/rbt-IBMx20266237u.asl

Try this patch to sys/dev/acpi/acpi_pci_link.c:

--- //depot/vendor/freebsd/src/sys/dev/acpica/acpi_pci_link.c	2004/04/13 
20:35:18
+++ //depot/user/jhb/acpipci/dev/acpica/acpi_pci_link.c	2004/04/16 11:09:59
@@ -48,7 +48,6 @@
 	TAILQ_ENTRY(acpi_pci_link_entry) links;
 	ACPI_HANDLE	handle;
 	UINT8		current_irq;
-	UINT8		initial_irq;
 	ACPI_RESOURCE	possible_resources;
 	UINT8		number_of_interrupts;
 	UINT8		interrupts[MAX_POSSIBLE_INTERRUPTS];
@@ -73,6 +72,9 @@
 
 static int	irq_penalty[MAX_ACPI_INTERRUPTS];
 
+static int	acpi_pci_link_is_valid_irq(struct acpi_pci_link_entry *link,
+    UINT8 irq);
+
 #define ACPI_STA_PRESENT	0x00000001
 #define ACPI_STA_ENABLE		0x00000002
 #define ACPI_STA_SHOWINUI	0x00000004
@@ -382,7 +384,12 @@
 		    acpi_name(handle), AcpiFormatException(error)));
 	}
 
-	link->initial_irq = link->current_irq;
+	if (!acpi_pci_link_is_valid_irq(link, link->current_irq)) {
+		ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+		    "initial IRQ %u is invalid for link %s\n",
+		    link->current_irq, acpi_name(handle)));
+		link->current_irq = 0;
+	}
 
 	error = AcpiGetPossibleResources(handle, &buf);
 	if (ACPI_FAILURE(error)) {
@@ -525,11 +532,6 @@
 		if (link->interrupts[i] == irq)
 			return (1);
 	}
-
-	/* allow initial IRQ as valid one. */
-	if (link->initial_irq == irq)
-		return (1);
-
 	return (0);
 }
 

-- 
John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org


More information about the freebsd-acpi mailing list