Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 11 Jul 2013 10:14:42 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        freebsd-hackers@freebsd.org
Cc:        Robert Ames <robertames@hotmail.com>
Subject:   Re: Intel D2500CC serial ports
Message-ID:  <201307111014.42903.jhb@freebsd.org>
In-Reply-To: <BLU177-W9398FC7BF05E2069A4961C9700@phx.gbl>
References:  <BLU177-W9398FC7BF05E2069A4961C9700@phx.gbl>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201307111014.42903.jhb>