This diff to add the PCIE954 IC basically works, but there's a problem with the frequency divisors. They should be 4000000*16 on all ports; however, if this is actually set in pucdata.c, the baud rate at the port is wrong, it doesn't seem to match any standard speed. It is internally consistent i.e. loop back two ports on the device set to this speed and they see data sent to each other.
If 4000000*8 is set in pucdata.c, all four ports are functional, but of course you have to set the port to an incorrect speed (e.g. cu -l cua06 -s 4800 when you really want 9600 baud). I've investigated flags from pucdata.c, this is masked with PUC_COM_CLOCKMASK in com_puc.c but that is ok, it's passed correctly to com.c (no truncation). I've investigated comspeed(), we get the same result from that function when it's broken (4M*16, 9600) as when it's working (4M*8, 4800). If anyone has ideas for other places to look or things to try, please let me know... Index: pcidevs =================================================================== RCS file: /cvs/src/sys/dev/pci/pcidevs,v retrieving revision 1.1520 diff -u -p -r1.1520 pcidevs --- pcidevs 6 Jan 2010 23:18:08 -0000 1.1520 +++ pcidevs 25 Jan 2010 22:32:43 -0000 @@ -4311,6 +4311,7 @@ product OXFORD2 EXSYS_EX41098 0x9511 Exs product OXFORD2 OX16PCI954P 0x9513 OX16PCI954 Parallel product OXFORD2 OX16PCI952 0x9521 OX16PCI952 product OXFORD2 OX16PCI952P 0x9523 OX16PCI952 Parallel +product OXFORD2 OXPCIE954 0xc208 OXPCIE954 /* Pacific Data products */ product PDC QSTOR_SATA 0x2068 QStor SATA Index: pucdata.c =================================================================== RCS file: /cvs/src/sys/dev/pci/pucdata.c,v retrieving revision 1.66 diff -u -p -r1.66 pucdata.c --- pucdata.c 23 Nov 2009 02:06:38 -0000 1.66 +++ pucdata.c 25 Jan 2010 22:32:43 -0000 @@ -871,7 +871,7 @@ const struct puc_device_description puc_ * Boards with an Oxford Semiconductor chip. * * Oxford Semiconductor provides documentation for their chip at: - * <URL:http://www.oxsemi.com/products/uarts/index.html> + * <URL:http://www.plxtech.com/products/uart/> * * As sold by Kouwell <URL:http://www.kouwell.com/>. * I/O Flex PCI I/O Card Model-223 with 4 serial and 1 parallel ports. @@ -952,6 +952,18 @@ const struct puc_device_description puc_ { PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ }, { PUC_PORT_TYPE_COM, 0x18, 0x00, COM_FREQ }, { PUC_PORT_TYPE_COM, 0x1c, 0x00, COM_FREQ }, + }, + }, + + /* Oxford Semiconductor OXPCIE954 PCIE UARTs */ + { + { PCI_VENDOR_OXFORD2, PCI_PRODUCT_OXFORD2_OXPCIE954, 0, 0 }, + { 0xffff, 0xffff, 0, 0 }, + { /* XXX Wrong speed; should be 4000000 * 16, but it fails */ + { PUC_PORT_TYPE_COM, 0x10, 0x1000, 4000000 * 8 }, + { PUC_PORT_TYPE_COM, 0x10, 0x1200, 4000000 * 8 }, + { PUC_PORT_TYPE_COM, 0x10, 0x1400, 4000000 * 8 }, + { PUC_PORT_TYPE_COM, 0x10, 0x1600, 4000000 * 8 }, }, },