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