Part Number: AM623
Hello,
we have an external, combined RS‑232 / RS‑485 port. The mode can be switched using GPIOs, which works fine.
On a new hardware revision, we migrated to the AM623 processor and connected the RS‑232 interface to UART1.
Below is the device tree configuration:
main_uart1_pins_default: main-uart1-default-pins {
pinctrl-single,pins = <
AM62X_IOPAD(0x01e8, PIN_INPUT, 1) /* (B17) I2C1_SCL.UART1_RXD */
AM62X_IOPAD(0x01ec, PIN_OUTPUT, 1) /* (A17) I2C1_SDA.UART1_TXD */
AM62X_IOPAD(0x0194, PIN_INPUT, 2) /* (B19) MCASP0_AXR3.UART1_CTSn */
AM62X_IOPAD(0x01e0, PIN_INPUT, 4) /* (B16) I2C0_SCL.UART1_DCDn */
AM62X_IOPAD(0x01e4, PIN_INPUT, 4) /* (A16) I2C0_SDA.UART1_DSRn */
AM62X_IOPAD(0x0198, PIN_OUTPUT, 2) /* (A19) MCASP0_AXR2.UART1_RTSn */
AM62X_IOPAD(0x01d8, PIN_OUTPUT, 4) /* (C15) MCAN0_TX.UART1_DTRn */
>;
};
RX and TX work as expected. When I toggle CTS and DCD externally, the changes are correctly reflected inside the driver. I can also toggle the output signals RTS and DTR using stty -hupcl, and the changes are visible on the physical port.
At first, everything seemed fine—until I tested the DSR input. Regardless of whether DSR is driven high or low externally, the serial driver always reports it as 0.
I read the modem status using:
cat /proc/tty/driver/serial | grep "^0:"
To investigate further, I added some debug code:
unsigned int serial8250_modem_status(struct uart_8250_port *up)
{
struct uart_port *port = &up->port;
unsigned int status = serial_in(up, UART_MSR);
/* DEBUG: Print MSR register value for UART1 (mapbase 0x02810000) */
if (port->mapbase == 0x02810000)
dev_info(port->dev,
"MSR=0x%02x CTS=%d DSR=%d DCD=%d RI=%d\n",
status,
!!(status & UART_MSR_CTS),
!!(status & UART_MSR_DSR),
!!(status & UART_MSR_DCD),
!!(status & UART_MSR_RI));
Even there, DSR is always reported as 0, even when it is physically high on the pin.
After that, I checked the TRM and found the following statement:
(TRM excerpt)
According to the documentation, these signals are officially not supported on UART1. What confuses me, however, is that I am able to read and/or drive all of them except for DSR.
We do not actually use DSR in our application, so this is not a functional problem for us. However, this raises the question:
Are the other modem control signals (CTS, RTS, DTR, DCD) really safe to use on UART1 in the long run, or should we move the RS‑232 interface to UART0 instead?


