On Thu, 21 Oct 2021, gregkh@xxxxxxxxxxxxxxxxxxx wrote: > On Thu, Oct 21, 2021 at 10:10:30AM -0400, mrhowel@xxxxxxxxxxxxx wrote: > > > > That noticed is enforced by our exchange server. I have removed it by > > using an external email address instead. > > > > Original message is copied below. > > > > Hi, > > > > I'm not sure if this is the right place for this, but hopefully someone > > can help me figure out what else I can do to troubleshoot this problem, or > > point me to the right place to ask questions about this. > > > > A recent investigation led us to discover issues related to the RS485 > > IOCTLs on our serial cards utilizing the 16C950 UART. More specifically, > > the TIOCSRS485 IOCTL to set the serial_rs485 flags as documented at > > https://www.kernel.org/doc/html/latest/driver-api/serial/serial-rs485.html > > . > > > > When attempting to set the SER_RS485_ENABLED flag using TIOCSRS485 as per > > below I receive an error code 25, "Inappropriate IOCTL for device" > > > > /* -----RS485----- */ > > struct serial_rs485 rs485conf = {0}; > > rs485conf.flags |= SER_RS485_ENABLED; > > rc = ioctl(fd, TIOCSRS485, &rs485conf); > > if (rc < 0) { > > printf("error=%d %s\n", errno, strerror(errno)); > > return rc; > > } > > > > >From what I've read this typically indicates an unsupported serial device, > > but the documentation mentions the 16C950 UART as a specific example, so I > > would think the kernel is intended to support this functionality on the > > 16C950. > > > > I have tried this across several kernel versions: 3.10 (Centos 7) , 4.18 > > (Centos 8), and 5.11 (Ubuntu 21.04) with no change in the behavior. > > The issue was originally discovered on a PLX OXPCIe952 UART, but has been > > replicated on 'standard' OX16C950 UARTs as well. setserial -ag correctly > > identifies all cards as 16950's (Specifically "16950/954"). > > > > Has anyone else had or seen this IOCTL issue on the 16C950? Are there any > > 'known good' 16C950 based cards people can confirm that this works with? > > I do not think that that type of hardware actually supports RS485, as the > kernel is reporting that the driver says it is not allowed. > > Perhaps you need to find some hardware that does support it? It is not > very common at all. I know support for serial_rs485 is not very common, but the documentation for serial_rs485 explicitly mentions the 16C950 UART, which is the UART used by the serial card under test. The datasheet for the 16C950 indeed does not mention "RS485 Auto-Enable", but it does say that the DTR pin may be programmed to automatically turn the transmitter on and off. See "485_EN" on Page 10 and "ACR[4:3]: DTR# line configuration" on page 36 of the manual. (https://www.semiconductorstore.com/pdf/newsite/oxford/ox16c950b.pdf) It doesn't use the same terminology, but it is my understanding that the functionality of these registers is sufficient for the 16C950 to support RS485 Auto-Enable. Additionally, the Windows driver for this card supports RS485 Auto-Enable. > good luck! > > greg k-h >