[syslinux] Enumeration of ISA serial ports inconsistent between Linux and Syslinux

Gene Cumm gene.cumm at gmail.com
Sun Oct 9 07:53:09 PDT 2016


On Sun, Oct 9, 2016 at 10:04 AM, Oliver Mangold via Syslinux
<syslinux at zytor.com> wrote:
> On 09.10.2016 14:49, Gene Cumm wrote:
>>
>> Excellent job digging up the differences.  Looks like the code comes
>> from commit ID c4fa331 but is much older.  The code comes from 7916325
>> which is derived from the ASM in beaaa4f.  It appears to me that it
>> was used to check the presence of a serial port and it was assumed the
>> order at that memory address would be consistent and either the proper
>> value or 0.
>>
>> I'm trying to dig for some documentation like Ralph Brown's Interrupt
>> list.  Have you checked for firmware updates?  Have you tried
>> experimenting with redoing what serial port is assigned what IO base
>> address to make it consistent between Syslinux and Linux?
>>
>> Alternatively, have you considered specifying the full IO address
>> instead of the low number (like "0x3F8")?
>>
>>
> Hi,
>
> actually I didn't do much with Syslinux myself. I found the issue with Grub2
> first, and after I brief exchange about it on the Linux-Serial mailing list
> I decided to look up how Syslinux handles this, and found it has the same
> problem as Grub2. So I decided to do a good deed and report it to you, too
> :) As I understand the Supermicro BIOS, the issue could be fixed in the BIOS
> settings, by manually changing the ports to the default (Linux) order.
> Nonetheless the vendor default seems to be COM0=2f8, COM1=3f8. I don't have
> enough different boards to play with to give you an accurate answer on which
> SM boards/firmware revisions are affected, but it isn't the first time I
> have seen something like this.
>
>> RBIL MEMORY.LST release 61 starting at line 31:
>>
>> --------S-M00400000--------------------------
>> MEM 0040h:0000h - BASE I/O ADDRESS OF FIRST SERIAL I/O PORT
>> Size:    WORD
>> Notes:    the BIOS sets this word to zero if is unable to find any serial
>> ports
>>        at the addresses it is programmed to check at boot
>>      DOS and BIOS serial device numbers may be redefined by re-assigning
>>        these values of the base I/O addresses stored here
>>
>>
>>
>> So the behavior of Syslinux makes sense since the sequence numbers can
>> be re-assigned by the firmware (in this case, the CSM of the EFI
>> firmware) by moving the values around.
>
> I'm quite aware of this, and I would even tend to agree with you that this
> behavior makes sense. Unfortunately it seems, though, that both Linux and
> OpenBSD use the traditional static ordering without looking at the BIOS
> info, and at least for Linux I get the impression that it is quite unlikely
> that this will change anytime soon. Here is the thread I started on
> Linux-Serial, in case you want to read Greg's answer for yourself:
>
> http://www.spinics.net/lists/linux-serial/msg23997.html
>
> I don't want to stir up any complicated discussion about who is right and
> who is wrong, but as a user I would prefer the behavior to be consistent
> between all OSes and bootloaders.

And I think therein lies the issue.  Due to differing interpretations,
they shall never be consistent less your firmware is configured to
match the traditional order.  Older bootloaders and lesser OSs like
DOS shall often use the order in RAM while some others shall often use
the static list of IO ports to assign devices then use the RAM values
to check their presence/validity.  For yet another datapoint, check
what a Windows OS does.

I think the only way to have consistency is to fix the firmware config
(and preferably for Supermicro to fix their defaults OR heavily
document their reason for such a discrepancy).

-- 
-Gene


More information about the Syslinux mailing list