Serial multiport error Oxford/Startech PEX2S952

Greg Byshenk freebsd at byshenk.net
Mon Aug 22 08:31:49 UTC 2011


On Mon, Aug 22, 2011 at 12:20:33AM +0200, Greg Byshenk wrote:
> On Sun, Aug 21, 2011 at 09:44:41PM +0100, David Wood wrote:
>  
> > I wrote and contributed the support code for the OXPCIe95x serial chips 
> > - and just happened to notice your report.
> 
> Thanks for the response.
> 
> 
> > In message <20110821154249.GE92605 at core.byshenk.net>, Greg Byshenk 
> > <freebsd at byshenk.net> writes
> > >I'm having a problem with a StarTech PEX2S952 dual-port serial
> > >card.
> > >
> > >I believe that it should be supported, as it has this entry in
> > >pucdata.c
> > >
> > >[...]
> > >       {   0x1415, 0xc158, 0xffff, 0,
> > >           "Oxford Semiconductor OXPCIe952 UARTs",
> > >           DEFAULT_RCLK * 0x22,
> > >           PUC_PORT_NONSTANDARD, 0x10, 0, -1,
> > >           .config_function = puc_config_oxford_pcie
> > >       },
> > >[...]
> > 
> > It should be supported. The OXPCIe952 is more awkward to support than 
> > the OXPCIe954 and OXPCIe958 because it can be configured in so many 
> > different ways by the board manufacturer. However, 0xc158 is 
> > configuration that is identical in arrangement as the larger chips, so 
> > is the configuration I'm most confident of. I've just double-checked the 
> > data sheets, and can't see any relevant differences between 0xc158 
> > OXPCIe952 and the OXPCIe954 I tested the code with.
> > 
> > I use my OXPCIe954 board on FreeBSD 8.2, and have had success reports 
> > from other OXPCIe954 and OXPCIe958 board users (including someone with a 
> > 16 port board based on dual OXPCIe958s). I have yet to try FreeBSD 9.x 
> > on my hardware.
> > 
> > 
> > >And, while it is recognized at boot -- after adding
> > >
> > >      device          puc
> > >      options         COM_MULTIPORT
> > 
> > I'm 99% certain that "options COM_MULTIPORT" relates to the old sio(4) 
> > code - I certainly don't need it on 8.x. Does it make any difference if 
> > you delete that line and just leave "device puc"?
> 
> I will rebuild my kernel and try.
>  
>  
> > >to my kernel, it doesn't seem to be working. The devices '/dev/cuau2'
> > >and '/dev/cuau3' show up, and I can connect to them, but they don't
> > >seem to pass any traffic. If I connect to the serial console of
> > >another machine (one that I know for certain is working), I get
> > >nothing at all.
> > 
> > Have you remembered to set the speed (and other relevant options) on the 
> > .init devices? This is a feature (or is it a quirk) of the uart(4) 
> > driver that catches many people out. Setting options on the base device 
> > is normally a no-op.
> > 
> > For example, if the remote device on /dev/cuau2 operates at 115200 bps 
> > with hardware handshaking, try:
> > 
> > stty -f /dev/cuau2.init speed 115200 crtscts
> 
> Interestingly, it -is- a no-op on the device, which I hadn't noticed.
> But trying to set it on the .init fails:
> 
> 	# stty -f /dev/cuau2.init speed 115200
> 	stty: /dev/cuau2.init isn't a terminal crtscts
> 	# 
> 
>  
> > One frustrating aspect of adding puc(4) support for many devices is that 
> > you can't be certain of the clock rate multiplier - the same device can 
> > crop up on a different manufacturer's board with a different multiplier. 
> > This problem doesn't occur with the OXPCIe95x devices as they derive 
> > their 62.5MHz UART clock from the PCI Express clock. Consequently, the 
> > problem can't be that your board inadvertently operating the UARTs at 
> > the wrong speed.
> > 
> > 
> > >I suspect (?) that it may not be recognized as the proper card. Boot
> > >and pciconf messages are:
> > >
> > >puc0: <Oxford Semiconductor OXPCIe952 UARTs> mem 
> > >0xf9dfc000-0xf9dfffff,0xfa000000-0xfa1fffff,0xf9e00000-0xf9ffffff irq 
> > >30 at device 0.0 on pci4
> > 
> > That is correct. Are there any more lines afterwards - especially one 
> > giving the number of UARTs detected? That line is crucial, as, on these 
> > chips, the number of UARTs has to be read from configuration space 
> > because you can slave two chips together.
> > 
> > My OXPCIe954 board is recognised thus (FreeBSD 8.2 amd64):
> > 
> > puc0: <Oxford Semiconductor OXPCIe954 UARTs> mem 
> > 0xd5efc000-0xd5efffff,0xd5c00000-0xd5dfffff,0xd5a00000-0xd5bfffff irq 18 
> > at device 0.0 on pci8
> > puc0: 4 UARTs detected
> > puc0: [FILTER]
> > uart2: <16950 or compatible> on puc0
> > uart2: [FILTER]
> > uart3: <16950 or compatible> on puc0
> > uart3: [FILTER]
> > uart4: <16950 or compatible> on puc0
> > uart4: [FILTER]
> > uart5: <16950 or compatible> on puc0
> > uart5: [FILTER]
> 
> puc0: <Oxford Semiconductor OXPCIe952 UARTs> mem 0xf9dfc000-0xf9dfffff,0xfa000000-0xfa1fffff,0xf9e00000-0xf9ffffff irq 30 at device 0.0 on pci4
> puc0: 2 UARTs detected
> uart2: <16950 or compatible> at port 1 on puc0
> uart3: <16950 or compatible> at port 2 on puc0
> 
>  
> > >puc0 at pci0:4:0:0:        class=0x070002 card=0xc1581415 chip=0xc1581415 
> > >rev=0x00 hdr=0x00
> > >   vendor     = 'Oxford Semiconductor Ltd'
> > >   class      = simple comms
> > >   subclass   = UART
> > >   bar   [10] = type Memory, range 32, base 0xf9dfc000, size 16384, enabled
> > >   bar   [14] = type Memory, range 32, base 0xfa000000, size 2097152, 
> > >   enabled
> > >   bar   [18] = type Memory, range 32, base 0xf9e00000, size 2097152, 
> > >   enabled
> > 
> > That is correct.
> > 
> > >The kernel is actually FreeBSD 9.0-BETA1 amd64, which is not quite
> > >'STABLE' yet, but I don't think that this should matter.
> > >
> > >Any advice would be much appreciated. The machine is still in
> > >test phase, so I can mess around with it as necessary.
> > 
> > Hopefully this gets your Startech board working. I look forward to your 
> > feedback.
> > 
> > If all else fails, the board I'm using is Lindy 51189. It's a OXPCIe954 
> > board, offering four ports via a breakout cable, and is normally pretty 
> > cheap direct from lindy.com (quite possibly cheaper than your two port 
> > Startech board!). However, this recommendation comes with the proviso 
> > that I haven't yet tried it with FreeBSD 9.x.
> 
> I'm rebuilding the kernel, and will try tomorrow with the new version.
> I think I'll also try setting the speed on the other end to 9600
> (which is what stty reports as the speed) to see if that makes any
> difference.
> 
> I'll follow up tomorrow. Thanks.

Following up:

It appears that indeed, the "options COM_MULTIPORT" is unnecessary
for 9-BETA; I've rebuilt the kernel without it, and the card is 
still recognized, along with the ports.

But all it not as it should be. I still can't set the speed on the
card.
 
> 	# stty -f /dev/cuau2.init speed 115200 crtscts
> 	stty: /dev/cuau2.init isn't a terminal
> 	# 

And setting speed on the device itself remains a no-op:

	# stty -f /dev/cuau2 speed 115200 crtscts
	9600
	#

That said, the card -does- seem to work, at least at some level.
With the speed issue pointed out, I set the connection on the
other end to 9600, and then it works. But I'd really like it to
be faster than that (it's just a serial console, so we could 
probably live with 9600, though we wouldn't like it).

If there is reason to think that this could be a 9.x issue,
then I could try going to 8.x.


-- 
greg byshenk  -  gbyshenk at byshenk.net  -  Leiden, NL


More information about the freebsd-stable mailing list