DEVICE INFORMATION

Vital Product Data (VPD)

Device identification, serial numbers, and product information storage

1. What is VPD?

What is Vital Product Data?

VPD (Vital Product Data) is a standard mechanism for storing and retrieving product identification information such as serial numbers, part numbers, and asset tags from PCIe devices.

VPD Contents

2. Why VPD?

Why store product data?

VPD enables system management, asset tracking, warranty verification, and RMA processing without physical inspection of the device.

Use Cases

3. VPD Capability Structure

VPD PCI Capability

Offset Register Description
00h Capability ID 03h = VPD
01h Next Pointer Next capability offset
02h VPD Address Address and Flag bit
04h VPD Data 32-bit data register

VPD Address Register

    VPD Address Register (16 bits):
    ┌─────────────────────────────────────────────────────────────────┐
    │ Bit 15    │ Bit 14:0                                           │
    │ Flag (F)  │ VPD Address                                        │
    └─────────────────────────────────────────────────────────────────┘
    
    Flag (F):
    - Set to 0 by software to initiate read
    - Set to 1 by hardware when data ready
    - Set to 1 by software to initiate write
    - Cleared by hardware when write complete

4. VPD Access Protocol

VPD Read Operation

    Software                              Hardware
       │                                      │
       │ 1. Write address to VPD Address      │
       │    (Flag = 0)                        │
       │ ─────────────────────────────────────►│
       │                                      │
       │                        2. Fetch VPD  │
       │                           from ROM   │
       │                                      │
       │ 3. Poll VPD Address until            │
       │    Flag = 1                          │
       │ ◄─────────────────────────────────────│
       │                                      │
       │ 4. Read VPD Data register            │
       │ ◄─────────────────────────────────────│

VPD Write Operation

    Software                              Hardware
       │                                      │
       │ 1. Write data to VPD Data register   │
       │ ─────────────────────────────────────►│
       │                                      │
       │ 2. Write address to VPD Address      │
       │    (Flag = 1)                        │
       │ ─────────────────────────────────────►│
       │                                      │
       │                        3. Write VPD  │
       │                           to ROM     │
       │                                      │
       │ 4. Poll VPD Address until            │
       │    Flag = 0                          │
       │ ◄─────────────────────────────────────│

5. VPD Data Format

VPD Structure

    VPD Data Layout:
    
    ┌──────────────────────────────────────────────────────────────┐
    │ String Identifier Tag                                        │
    │ (Product name)                                               │
    ├──────────────────────────────────────────────────────────────┤
    │ VPD-R Tag (Read-Only)                                        │
    │ ├── PN: Part Number                                         │
    │ ├── EC: Engineering Change                                  │
    │ ├── SN: Serial Number                                       │
    │ ├── MN: Manufacture ID                                      │
    │ └── Vendor-specific fields (V0-V9)                          │
    ├──────────────────────────────────────────────────────────────┤
    │ VPD-W Tag (Read-Write)                                       │
    │ ├── Asset Tag                                               │
    │ └── Vendor-specific R/W fields                              │
    ├──────────────────────────────────────────────────────────────┤
    │ End Tag                                                      │
    └──────────────────────────────────────────────────────────────┘

VPD Field Keywords

Keyword Name R/W
PN Part Number Read-Only
EC Engineering Change Level Read-Only
SN Serial Number Read-Only
MN Manufacture ID Read-Only
V0-V9 Vendor Specific Read-Only
YA Asset Tag Read-Write
RV Checksum and Reserved Read-Only
RW Remaining R/W Area Read-Write

6. VPD Example

    Example VPD Contents:
    
    Product Name: "Acme 100GbE Network Adapter"
    
    Read-Only Fields:
    ├── PN: "ACME-NIC-100G-R2"
    ├── EC: "A1"
    ├── SN: "SN123456789ABC"
    ├── MN: "ACME"
    └── V0: "FW:v2.1.5"
    
    Read-Write Fields:
    ├── YA: "DC-RACK42-SLOT7"
    └── RW: [available for user data]

7. Linux VPD Access

Reading VPD

    # Using lspci
    lspci -vvv -s 03:00.0 | grep -A 20 "Vital Product Data"
    
    # Using sysfs
    cat /sys/bus/pci/devices/0000:03:00.0/vpd
    
    # Using ethtool (for network cards)
    ethtool -e eth0
    
    # Parsing VPD
    hexdump -C /sys/bus/pci/devices/0000:03:00.0/vpd

8. System Applications