16c950 incorrect baud rate

Ubuntu Version:
24.04 LTS

Desktop Environment (if applicable):
GNOME

Problem Description:
I have an Ubuntu machine with a Siig dual serial PCI card (JJ-P20212-S6) that is connected to a u-Blox GPS receiver working at 460800 baud. Ubuntu identifies the card as an Exsys Ex-41092, a similar dual port serial card with 16c950. With a loopback plug the card will talk to itself okay but when connected to the GPS receiver my terminal emulator just shows jibberish.

Looking with a scope I’d guess the card is working at approximately 555555 baud instead.

sudo setserial -a /dev/ttyS4
gives:
/dev/ttyS4, Line 4, UART: 16950/954, Port: 0x6f00, IRQ: 20
Baud_base: 1130000, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test

I have tried fiddling with baud_base using setserial but the outcome is never what I expect and haven’t been able to home in on the correct figure.

Any ideas?

Reading the man page for setserial, I stumbled on the parameter ‘spd_warp’:

spd_warp
Use 460kb when the application requests 38.4kb. This parameter may be specified by a non-privileged user.

So I’d try setserial /dev/ttyS4 spd_warp and tell the program you’re using with the GPS receiver to use 38.4 kbaud.

I tried that but it still looks the same.

Curiously, I had a Startech PEX2S952 in the machine recently. This uses a similar Oxford Semiconductor chip but with a PCI-express interface. This worked fine but, unfortunately, I need it’s PCI-e slot so I’m looking for a PCI version.