Bug #2560
closedACPI parser fails to identify COM3 on Tyan motherboard
90%
Description
I have a Tyan S5510GM3NR motherboard that includes a BMC
device with serial-over-lan support. Illumos fails to identify
the COM3 serial port on this board, producing an incomplete
device tree entry like this:
asy (driver not attached) Hardware properties: name='compatible' type=string items=1 value='pnpPNP,501' name='acpi-namespace' type=string items=1 value='\_SB_.PCI0.SBRG.UAR3' name='model' type=string items=1 value='16550A-compatible COM port'
This does work with a Supermicro motherboard, resulting in
this device entry:
asy, instance #2 System software properties: name='interrupt-priorities' type=int items=1 value=0000000c Driver properties: name='ddi-no-autodetach' type=int items=1 dev=none value=00000001 Hardware properties: name='compatible' type=string items=1 value='pnpPNP,501' name='interrupts' type=int items=1 value=0000000a name='reg' type=int items=3 value=00000001.000003e8.00000008 name='acpi-namespace' type=string items=1 value='\_SB_.PCI0.SBRG.UAR3' name='model' type=string items=1 value='16550A-compatible COM port' Register Specifications: Bus Type=0x1, Address=0x3e8, Size=0x8 Interrupt Specifications: Interrupt Priority=0xc (ipl 12), vector=0xa (10) Device Minor Nodes: dev=(106,2) dev_path=/pci@0,0/isa@1f/asy@1,3e8:c spectype=chr type=minor dev_link=/dev/ttyc dev_link=/dev/tty02 dev_link=/dev/term/c Minor properties: name='uart' type=string items=1 dev=(106,2) value='16550A' dev=(106,131074) dev_path=/pci@0,0/isa@1f/asy@1,3e8:c,cu spectype=chr type=minor dev_link=/dev/ttyd2 dev_link=/dev/cua2 dev_link=/dev/cua/c
The cause seems to be different ACPI DSDT tables. This is a
condensed version of the relevant portion for the Tyan board:
Device (UAR1){ Name (_PRS, ResourceTemplate () { StartDependentFn (0x00, 0x00) { /* Info on COM1 */ } StartDependentFnNoPri () { /* Info on COM1 */ } StartDependentFnNoPri () { /* Info on COM2 */ } StartDependentFnNoPri () { /* Info on COM3 */ } StartDependentFnNoPri () { /* Info on COM4 */ } EndDependentFn () }) } Device (UAR2){ Name (CRSS, ResourceTemplate () { /* Info on COM2 */ }) Name (_PRS, ResourceTemplate () { StartDependentFn (0x00, 0x00) { /* Info on COM2 */ }) } Device (UAR3){ Name (_PRS, ResourceTemplate () { StartDependentFn (0x00, 0x00) { /* Info on COM3 */ } EndDependentFn () }) }
This is the same thing for the Supermicro board:
Device (UAR1) { Name (_PRS, ResourceTemplate () { StartDependentFn (0x00, 0x00) { /* Info on COM1 */ } StartDependentFnNoPri () { /* Info on COM1 */ } StartDependentFnNoPri () { /* Info on COM2 */ } StartDependentFnNoPri () { /* Info on COM3 */ } StartDependentFnNoPri () { /* Info on COM4 */ } EndDependentFn () }) } Device (UAR2){ Name (_PRS, ResourceTemplate () { StartDependentFn (0x00, 0x00) { /* Info on COM2 */ } StartDependentFnNoPri () { /* Info on COM1 */ } StartDependentFnNoPri () { /* Info on COM2 */ } StartDependentFnNoPri () { /* Info on COM3 */ } StartDependentFnNoPri () { /* Info on COM4 */ } EndDependentFn () }) } Device (UAR3){ Name (_PRS, ResourceTemplate () { StartDependentFn (0x00, 0x00) { /* Info on COM3 */ } StartDependentFnNoPri () { /* Info on COM1 */ } StartDependentFnNoPri () { /* Info on COM2 */ } StartDependentFnNoPri () { /* Info on COM3 */ } StartDependentFnNoPri () { /* Info on COM4 */ } EndDependentFn () }) }
I'll attach more complete sections of the DSDT tables.
Files
Updated by Gary Mills about 11 years ago
Here's some information from a couple of other Unix live CDs. Freebsd 9.0 only detects two serial ports on the Tyan system. This is from `devinfo':
uart0 pnpinfo _HID=PNP0501 _UID=1 at handle=\_SB_.PCI0.SBRG.UAR1 Interrupt request lines: 4 I/O ports: 0x3f8-0x3ff uart1 pnpinfo _HID=PNP0501 _UID=2 at handle=\_SB_.PCI0.SBRG.UAR2 Interrupt request lines: 3 I/O ports: 0x2f8-0x2ff
Ubuntu 12.04, on the other hand, detects three, including the BMC serial port. This is from `dmesg':
[ 3.451274] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 3.538382] serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A [ 3.638111] serial8250: ttyS2 at I/O 0x3e8 (irq = 4) is a 16550A [ 3.690245] 00:03: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 3.758356] 00:04: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
Updated by Gary Mills almost 11 years ago
- Assignee set to Gary Mills
- % Done changed from 0 to 80
After several months of ACPI debugging with Illumos, I have determined the root cause of this problem: The ACPI DSDT table in the BIOS is faulty. It is missing a _CRS method (current resources) for the UAR3 device (COM3) but does contain a valid _PRS method (possible resources). The DSDT table does contain _CRS methods for UAR1 and UAR2, but not for UAR3. The Illumos kernel only examines current resources at boot time.
I now have a workaround for the Illumos kernel that permits it to work. This consists of a modified acpica driver that uses an ACPI function to examine possible resources when there are no current resources for a device in the ACPI tables. With this workaround, I now have a working serial-over-lan console on my Tyan system for the first time.
I have notified Tyan support of the error in their ACPI tables.
Updated by Gary Mills almost 11 years ago
- File acpica-12.7.tar.gz acpica-12.7.tar.gz added
I've attached 32 and 64-bit x86 versions of the acpica driver. These should be installed into /kernel/misc and /kernel/misc/amd64/ respectively. Rename the existing acpica files before you do this. You will also need to update the boot archive before rebooting. Nothing should change unless you are using a Tyan motherboard with a faulty UAR3 definition in the ACPI tables.
Updated by Yuri Pankov almost 11 years ago
"Fixing" the upstream source doesn't seem the best way to proceed here, you can report the issue upstream and use updated ACPI tables in the meantime (that's what /boot/acpi/tables/ is for, there are a bit of magic involved to correctly name the files).
Updated by Gary Mills almost 11 years ago
- % Done changed from 80 to 90
This change does not modify upstream source, assuming that you mean the Intel ACPICA code. The acpi_enum.c file is the illumos front-end to Intel's code.
Updated by Gordon Ross almost 11 years ago
- Status changed from New to Resolved
changeset: 13766:adffc698eaf5 tag: tip user: Gary Mills <gary_mills@fastmail.fm> date: Tue Jul 24 18:52:10 2012 -0500 description: 2560 ACPI parser fails to identify COM3 on Tyan motherboard Reviewed by: Gordon Ross <gwr@nexenta.com> Reviewed by: Garrett D'Amore <garrett@damore.org> Approved by: Dan McDonald <danmcd@nexenta.com>