| Author: | Pavel Celeda <celeda@liberouter.org> |
|---|---|
| Revision: | $Id: pci_id.txt,v 1.1 2005/12/06 09:29:38 celeda Exp $ |
PCI Local Bus defines configuration space (see [1], chapter 6) to recognize PCI compliant devices by a Vendor ID and a Device ID. Vendor IDs are unique and allocated by the PCI SIG organization (www.pcisig.com). Other IDs are allocated by the PCI device vendor.
You can use different tools to read and set PCI configuration space (lspci, pcictl, csbus, etc.). The information located in the PCI configuration space is stored in numeric form. These numbers are translated to human readable form (ASCII strings) via public repositories [2], [3] or kernel header files [4] with 'all' known ID's used in PCI devices.
Following steps are necessary to add new item to PCI device repository:
This field identifies the manufacturer of the device. Valid vendor identifiers are allocated by the PCI SIG to ensure uniqueness. Vendor ID allocated to 'Cesnet, z.s.p.o.':
Device ID identifies the particular device. That identifier is allocated by the vendor. For the combo card family [5] following Device IDs are defined:
hex - ASCII string ---- ------------ C006 - COMBO6 C050 - COMBO-PTM C058 - COMBO6X C045 - COMBO6E |||| ||++------ hex code for ASCII character 'P','X','E' |+-------- card generation (0 - first generation, etc.) +--------- COMBO card family (mother card)
+------------------------------------------------------------+
| +------------+ +-----------+ |
| | EEPROM | | add-on | |
| +------------+ +-------------+ | card | |
| +------------+ | FPGA | | connector | |
| | PCI bridge | | Virtex II | | (daughter | |
| | PLX 9054 | +-------------+ | card) | |
| +------------+ +-----------+ |
+---+ +-------------------------------------+
| PCI (32/33) |
+------------------+
By default no subsystem (daughter card) is mounted on COMBO6 card. These fields can be changed by hand, don't presume valid entry for Subsystem ID and Subsystem Vendor ID. Use csid(1) to discover mounted daughter card.
+------------------------------------------------------------+
| +------------+ |
| | EEPROM | |
| +------------+ +-------------+ |
| +------------+ | FPGA | |
| | PCI bridge | | Spartan III | |
| | PLX 9054 | +-------------+ |
| +------------+ |
+---+ +-------------------------------------+
| PCI (32/33) |
+------------------+
No subsystem (daughter card) can be mounted on COMBO-PTM card.
+------------------------------------------------------------+
| +-----------+ |
| +-------------+ | add-on | |
| +---------------+ | FPGA | | card | |
| | FPGA | | Virtex II | | connector | |
| | Virtex II PRO | | PRO | | (daughter | |
| | (PCI CORE) | +-------------+ | card) | |
| +---------------+ +-----------+ |
+---+ +-------------------------------------+
| PCI (64/66) |
+------------------+
By default no subsystem (daughter card) is mounted on COMBO6X card. PCI configuration space is hardwired in PCI core (read only access). Subsystem ID and Subsystem Vendor ID registers can be read/written from PC side and from built-in PowerPC. PowePC is responsible for daughter card detection after power up before BIOS starts to detect PCI devices.
+------------------------------------------------------------+
| +-----------+ |
| +-------------+ | add-on | |
| +----------------+ | FPGA | | card | |
| | FPGA | | Virtex II | | connector | |
| | Virtex II PRO | | PRO | | (daughter | |
| |Express PCI CORE| +-------------+ | card) | |
| +----------------+ +-----------+ |
+---+ +-------------------------------------+
| PCI (64/66) |
+------------------+
The card is in design phase. The configuration schema will probably follow COMBO6X approach.
This field uniquely identifies the manufacturer of the add-in card or subsystem. The Vendor ID allocated by PCI SIG can be used in either the Vendor ID field or Subsystem Vendor ID field.
Vendor ID (Subsystem Vendor ID) allocated to 'Cesnet, z.s.p.o.':
Subsystem ID uniquely identifies the particular device (add-in card or subsystem). That identifier is allocated by the vendor. Following schema is used to define new combo daughter card ID:
hex - ASCII string ---- ------------ D001 - COMBO-4MTX |||| ||++------ card counter (start value = 1) |+-------- card generation (0 - first generation, etc.) +--------- daughter card (add-on card)
There is no Revision ID register to specify a subsystem specific revision identifier. It means we can't directly distinguish between different hw revisions (e.g. different FPGAs on the some card type - MTX card with xcv1000 or xcv2000 chip).
More details about device can be obtained by using Vital Product Data (see [1], Appendix I). The VPD can provide the system with information on various field replaceable units such as part number, serial number, and other detailed information. Support of VPD is optional and currently not supported on Combo cards.
For the combo daughter card family [5] following Subsystem IDs are defined:
hex - ASCII string ---- ------------ D001 - COMBO-4MTX D002 - COMBO-4SFP D003 - COMBO-4SFPRO D004 - COMBO-2XFP
| [1] | PCI Special Interest Group - PCI Local Bus Specification, Revision 2.3 March 29, 2002. |
| [2] | Martin Mares - The Linux PCI ID Repository, http://pci-ids.ucw.cz/ |
| [3] | PCI Vendor and Device Lists - http://www.pcidatabase.com |
| [4] | The NetBSD Foundation, Inc. pcidevs, pcidevs.h, pcidevs_data.h, http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/dev/pci/ |
| [5] | CESNET - Description of COMBO cards, http://www.liberouter.org/hardware.php |
| [6] | CESNET - Description of COMBO cards, http://www.liberouter.org/hardware.php |
To read and write data from/to PCI configuration space following tools can be used:
# scanpci -v ... scan the PCI buses and report information about the
configuration space
# pcitweak -l ... probe the PCI buses and print device information
$ lspci -d 18ec: -m -v -x ... display CESNET devices plugged in the PCI buses
# setpci -v -s 07:06.0 SUBSYSTEM_VENDOR_ID=0x18ec SUBSYSTEM_ID=0xcd01 ...
... set PCI configuration space on Combo6X cards.
Note: Some PCI registers are read-only and you can't change the
register value.
$ pcictl /dev/pci2 list ... list PCI devices in 'pci2' bus
$ csbus -d /dev/combosix0 -s plxee -c 22 0 ... read PLX9054 configuration
eeprom
$ csbus -s plxee 0x44 ... read PLX9054 eeprom Subsystem Vendor ID and
Subsystem ID
$ csbus -s plxee 0x44 -w 0xd00118ec ... write PLX9054 eeprom Subsystem
Vendor ID and Subsystem ID
(Cesnet, z.s.p.o. - COMBO-4MTX)
Note:
On some cards based on PLX9054 chip you can discover problems during programming PLX configuration eeprom. There are pull-up/pull-down resistors mounted on eeprom EEDI/EEDO wire. Please remove pull-down resistor to program eeprom contents. To apply changes in eeprom contents you must reboot the computer.
To map 'Cesnet, z.s.p.o.' IDs to ASCII strings following entries must be added to lspci(8) [2] pci.ids database. To update obsolete pci.ids you can use update-pciids(8) script.
18ec Cesnet, z.s.p.o.
c006 COMBO6
18ec d001 COMBO-4MTX
18ec d002 COMBO-4SFP
18ec d003 COMBO-4SFPRO
18ec d004 COMBO-2XFP
c045 COMBO6E
c050 COMBO-PTM
c058 COMBO6X
18ec d001 COMBO-4MTX
18ec d002 COMBO-4SFP
18ec d003 COMBO-4SFPRO
18ec d004 COMBO-2XFP