Intel D2500CC serial ports
John Baldwin
jhb at freebsd.org
Thu Jul 11 17:41:26 UTC 2013
On Sunday, June 30, 2013 1:24:27 pm Robert Ames wrote:
> I just picked up an Intel D2500CCE motherboard and was disappointed
> to find the serial ports didn't work. There has been discussion
> about this problem here:
>
> http://lists.freebsd.org/pipermail/freebsd-current/2013-April/040897.html
> http://lists.freebsd.org/pipermail/freebsd-current/2013-May/042088.html
>
> As seen in the second link, Juergen Weiss was able to work around
> the problem. This patch (for 8.4-RELEASE amd64) makes all 4 serial
> ports functional.
>
> --- /usr/src/sys/amd64/amd64/io_apic.c.orig 2013-06-02 13:23:05.000000000 -0500
> +++ /usr/src/sys/amd64/amd64/io_apic.c 2013-06-28 18:52:03.000000000 -0500
> @@ -452,6 +452,10 @@
> KASSERT(!(trig == INTR_TRIGGER_CONFORM || pol == INTR_POLARITY_CONFORM),
> ("%s: Conforming trigger or polarity\n", __func__));
>
> + if (trig == INTR_TRIGGER_EDGE && pol == INTR_POLARITY_LOW) {
> + pol = INTR_POLARITY_HIGH;
> + }
> +
Hmm, so this is your BIOS doing the wrong thing in its ASL.
Maybe try this:
--- //depot/user/jhb/acpipci/dev/acpica/acpi_resource.c 2011-07-22 17:59:31.000000000 0000
+++ /home/jhb/work/p4/acpipci/dev/acpica/acpi_resource.c 2011-07-22 17:59:31.000000000 0000
@@ -141,6 +141,10 @@
default:
panic("%s: bad resource type %u", __func__, res->Type);
}
+#if defined(__amd64__) || defined(__i386__)
+ if (irq < 16 && trig == ACPI_EDGE_SENSITIVE && pol == ACPI_ACTIVE_LOW)
+ pol = ACPI_ACTIVE_HIGH;
+#endif
BUS_CONFIG_INTR(dev, irq, (trig == ACPI_EDGE_SENSITIVE) ?
INTR_TRIGGER_EDGE : INTR_TRIGGER_LEVEL, (pol == ACPI_ACTIVE_HIGH) ?
INTR_POLARITY_HIGH : INTR_POLARITY_LOW);
--
John Baldwin
More information about the freebsd-hackers
mailing list