Re: Possible issue with RS485 IOCTLs on 16C950 UARTs?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
> 



[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux PPP]     [Linux FS]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Linmodem]     [Device Mapper]     [Linux Kernel for ARM]

  Powered by Linux