kern/134878: [puc] [patch] Add support for Oxford OXPCIe954 and
OXPCIe958 PCI Express chips
david at wood2.org.uk
Sat May 23 18:30:02 UTC 2009
>Synopsis: [puc] [patch] Add support for Oxford OXPCIe954 and OXPCIe958 PCI Express chips
>Arrival-Date: Sat May 23 18:30:01 UTC 2009
>Originator: David Wood
>Release: 7.2-RELEASE amd64
FreeBSD manganese.wood2.org.uk 7.2-RELEASE FreeBSD 7.2-RELEASE #2: Sat May 23 10:41:30 BST 2009 david at manganese.wood2.org.uk:/scratch/usr/obj/usr/src/sys/MANGANESE amd64
puc(4) doesn't support the Oxford PCI Express Expresso family devices, which are used on many native PCI Express serial boards, such as:
eMegatech MP954ER4 (4 port) and MP958ER8 (8 port)
Lindy 51189 (4 port)
StarTech.com PEX4S952 (4 port) and PEX8S952 (8 port)
A patch against 7.2-RELEASE can be found at http://www.wood2.org.uk/freebsd/oxford-pci-e-pucdata.c.7.2-release.patch - this has been tested with a Lindy 51189 board, which uses an OXPCIe954, in a Dell PowerEdge 2950 III.
A patch against HEAD can be found at http://www.wood2.org.uk/freebsd/oxford-pci-e-pucdata.c.patch - this has not been tested.
Whilst I'm here, I've updated the URL for manufacturer's data - Oxford Semiconductor has now been taken over by PLX Technology.
The patch assumes that the number of ports are the number of ports on the chip connected to the PCI Express bus. A possible future enhancement is to read the number of UARTs from BAR 0 offset 0x4, which reflects any ports on a slave chip (this appears to be non-trivial, as bus_allocate_resource(9) hasn't been called on the BAR before the number of ports is required). Fortunately, very few designs are likely to use a slave chip, especially with the 8 port OXPCIe958 available.
MSI-X support has not been attempted, though would be nice to have.
Note: Oxford OXPCIe952 is most likely to appear as two separate devices, each with a single UART. I'm hopeful that uart(4) (or sio(4) if you're still using that) will recognise those UARTs without the need of a helping hand from puc(4). I haven't added support for the unlikely configuration of OXPCIe952 appearing as a single device with two UARTs, especially as I don't have a suitable boardto test with.
More information about the freebsd-bugs