On Thu, Dec 13, 2012 at 08:42:02AM +0100, Paolo Bonzini wrote:
Commit 4540409 (acpi: LNKS is not needed, 2012-08-07) removed LNKS because it basically worked by chance: _CRS returns something else then one of the possible resources from _PRS, _DIS would not really disable the interrupt, and there was no _SRS method. It just happened to work because all OSes have some kind of special-casing for SCI.
Unfortunately, the code after the patch is also against the spec, and it breaks FreeBSD because it treats IRQ 9 polarity as active low without the Interrupt() entry. Actually, numeric _PRT entries are handled the same in Linux and FreeBSD (as active-low). However, under Linux it just happens to trigger another special casing of SCI which sets SCI up from its override entry in the MADT, ignoring the DSDT completely.
This patch adds back the LNKS, but without using the PIIX register for LNKA in its methods.
Thanks. I committed this change, along with a follow up patch to use the prt_slot() macro.
-Kevin