Welcome to the Linux Foundation Forum!

Pericom serial port driver for CentOS / Red Hat 7 with proper baud_base / uartclk

jakson
jakson Posts: 1

How to port the serial driver shipped with CentOS 8.2 to CentOS 7.8?
Where in the kernel code uartclk is set/detected? (serial_struct.baud_base depends on uart_port.uartclk)

The hardware is a CompactPCIe computer, which consists of:

  • CPU card + side card SCZ-NVM (2 x RS-232, Pericom Semiconductor Device 7954, Subsystem: Pericom Semiconductor Device 7954)
  • peripheral card SU2-BALLAD (4 x RS-232, Pericom Semiconductor Device 7954, Subsystem: EKF Elektronik GmbH Device e224)

In CentOS 7 none of the 6 serial ports work; in CentOS 8 all serial ports work fine*, so I guess the driver shipped with CentOS 7 is incorrect. The cause of the problem is incorrect baud_base parameter (115200) and one solution is to set it to 921600 using setserial.

*Serial port drivers provided with CentOS 7/8 have a common, not very significant drawback:

  • they detect twice as many serial ports than the existing ones (4 instead of 2 and 8 instead of 4).

It would be great to have a driver that sets the correct baud_base and detects the correct number of serial ports.

Where in the kernel source code can I find the part responsible for setting uartclk for the hardware mentioned above?
(and the part responsible for detecting numer of serial ports, but it isn't crucial)

lspci -v

08:00.0 Serial controller: Pericom Semiconductor Device 7954 (prog-if 02 [16550])
Subsystem: EKF Elektronik GmbH Device e224
Flags: fast devsel, IRQ 19
I/O ports at a000 [size=64]
Memory at c1100000 (32-bit, non-prefetchable) [size=4K]
Kernel driver in use: serial

09:00.0 Serial controller: Pericom Semiconductor Device 7954 (prog-if 02 [16550])
Subsystem: Pericom Semiconductor Device 7954
Flags: fast devsel, IRQ 18
I/O ports at 9000 [size=64]
Memory at c1000000 (32-bit, non-prefetchable) [size=4K]
Kernel driver in use: serial

Categories

Upcoming Training