On 2011-03-07, Tero Koskinen <tero.koski...@iki.fi> wrote:
> Hi,
>
> I recently bought a PCI express card[1] with two UARTs, but OpenBSD/amd64
> 4.9-beta doesn't recognize it.
>
> pcidump says following:
>  2:0:0: Oxford unknown
>         0x0000: Vendor ID: 1415 Product ID: c158
>         0x0004: Command: 0107 Status ID: 0010
>         0x0008: Class: 07 Subclass: 00 Interface: 02 Revision: 00
>         0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 10
>         0x0010: BAR mem 32bit addr: 0xfe9fc000/0x00004000
>         0x0014: BAR mem 32bit addr: 0xfe600000/0x00200000
>         0x0018: BAR mem 32bit addr: 0xfe400000/0x00200000
>         0x001c: BAR empty (00000000)
>         0x0020: BAR empty (00000000)
>         0x0024: BAR empty (00000000)
>         0x0028: Cardbus CIS: 00000000
>         0x002c: Subsystem Vendor ID: 1415 Product ID: c158
>         0x0030: Expansion ROM Base Address: 00000000
>         0x0038: 00000000
>         0x003c: Interrupt Pin: 01 Line: 0b Min Gnt: 00 Max Lat: 00
>         0x0040: Capability 0x01: Power Management
>         0x0070: Capability 0x10: PCI Express
>                 Link Speed: 2.5 / 2.5 Gb/s Link Width: x1 / x1
>         0x00b0: Capability 0x11: Extended Message Signaled Interrupts (MSI-X)
>
> The card seems to use some Oxford chip. I tried to add the product id to
> the pcidevs list and to pucdata.c, but whole system freezes in a few seconds
> after boot (keyboard/mouse/network/ssh not working). Usually at the point
> when xdm had been started.
>
> Does anyone have any idea what I should put to pucdata.c? My current
> entry was a pure guess. (Is there any datasheet about the chipset
> available?)
>
> The card itself seems to be ok, since Fedora 14 recognizes it and
> both UARTs work as expected.
>
> dmesg (without any patches) and my patching attempt below.
[snip]

> Index: dev/pci/pucdata.c
>===================================================================
> RCS file: /cvs/src/sys/dev/pci/pucdata.c,v
> retrieving revision 1.72
> diff -u -p -r1.72 pucdata.c
> --- dev/pci/pucdata.c 22 Jul 2010 17:16:10 -0000      1.72
> +++ dev/pci/pucdata.c 7 Mar 2011 19:35:50 -0000
> @@ -897,6 +897,17 @@ const struct puc_device_description puc_
>               { PUC_PORT_TYPE_COM, 0x14, 0x00, COM_FREQ },
>           },
>       },
> +#if 1        
> +     /* Oxford Semiconductor OX16PCIE952 PCIe `950 UARTs - 128 byte FIFOs */
> +     {   /* "Oxford Semiconductor OX16PCIE952 UARTs", */
> +         {   PCI_VENDOR_OXFORD2, PCI_PRODUCT_OXFORD2_OX16PCIE952,    0, 0 },
> +         {   0xffff, 0xffff,                                         0, 0 },
> +         {
> +             { PUC_PORT_TYPE_COM, 0x10, 0x200, COM_FREQ },
> +             { PUC_PORT_TYPE_COM, 0x14, 0x200, COM_FREQ },
> +         },
> +     },
> +#endif

The PCIE parts use quite different addresses. You can try these:

{ PUC_PORT_TYPE_COM, 0x10, 0x1000, 4000000 * 8 },
{ PUC_PORT_TYPE_COM, 0x10, 0x1200, 4000000 * 8 },

The speeds will almost certainly be wrong, you'll probably need to
cu -s 4800 to get a 9600 baud connection with this (the divisor should 
be 4000000 * 16 but I couldn't get this to work, for more info see
http://marc.info/?l=openbsd-tech&m=126446213208560&w=2).

I may have datasheets for this somewhere...you can learn some things
from the linux driver too, they have some fancy stuff to work out how
many ports the devices have, etc.

Reply via email to