[libvirt PATCH v5 5/7] Add PCI VPD Capability Support

Daniel P. Berrangé berrange at redhat.com
Fri Oct 1 16:40:07 UTC 2021


On Fri, Oct 01, 2021 at 01:11:19PM +0100, Daniel P. Berrangé wrote:
> On Mon, Sep 27, 2021 at 10:30:51PM +0300, Dmitrii Shcherbakov wrote:
> > * XML serialization and deserialization of PCI VPD resources;
> > * PCI VPD capability flags added and used in relevant places;
> > * XML to XML tests for the added capability.
> > 
> > Signed-off-by: Dmitrii Shcherbakov <dmitrii.shcherbakov at canonical.com>
> 
> 
> > diff --git a/tests/nodedevschemadata/pci_0000_42_00_0_vpd.xml b/tests/nodedevschemadata/pci_0000_42_00_0_vpd.xml
> > new file mode 100644
> > index 0000000000..831b6feb24
> > --- /dev/null
> > +++ b/tests/nodedevschemadata/pci_0000_42_00_0_vpd.xml
> > @@ -0,0 +1,33 @@
> > +<device>
> > +  <name>pci_0000_42_00_0</name>
> > +  <capability type='pci'>
> > +    <class>0x020000</class>
> > +    <domain>0</domain>
> > +    <bus>66</bus>
> > +    <slot>0</slot>
> > +    <function>0</function>
> > +    <product id='0xa2d6'>MT42822 BlueField-2 integrated ConnectX-6 Dx network controller</product>
> > +    <vendor id='0x15b3'>Mellanox Technologies</vendor>
> > +    <capability type='virt_functions' maxCount='16'/>
> > +    <capability type='vpd'>
> > +      <resource type='string'>BlueField-2 DPU 25GbE Dual-Port SFP56, Crypto Enabled, 16GB on-board DDR, 1GbE OOB management, Tall Bracket</resource>
> > +      <resource type='vpd-r'>
> > +        <field keyword='EC'>B1</field>
> > +        <field keyword='PN'>MBF2H332A-AEEOT</field>
> > +        <field keyword='SN'>MT2113X00000</field>
> > +        <field keyword='V0'>PCIeGen4 x8</field>
> > +        <field keyword='V2'>MBF2H332A-AEEOT</field>
> > +        <field keyword='V3'>3c53d07eec484d8aab34dabd24fe575aa</field>
> > +        <field keyword='VA'>MLX:MN=MLNX:CSKU=V2:UUID=V3:PCI=V0:MODL=BF2H332A</field>
> 
> I've got a general comment about what do any of these 2-letter
> keywords actually mean. I presume they are explaned in the
> PCI spec, but AFAICT the spec is not publically available for
> free.
> 
> So at the very least we need to document each one's meaning
> in libvirt docs IMHO.
> 
> If I had insight into what they meant, then I might also
> suggest giving them meaningful names in libvirt. These two
> level codes are presumably chosen for reasons of space
> efficiency at the low level. This is not a constraint
> we especially care about in libvirt, where ease of
> understanding is usually more important.

Ok, I found a copy of the PCI spec

I see the data is classified at 2 levels, with the first
level being:

String Tag: This tag is the first item in the VPD storage
            component.  It contains the name of the add-in card
            in alphanumeric characters.

VPD-R Tag: This tag contains the read only VPD keywords for an
           add-in card.

VPD-W Tag: This tag contains the read/write VPD keywords for
           an add-in card


Then for VPD-R, the next level

   PN: Add-in Card Part Number
   EC: Engineering change level of the card
   FG: Fabric Geography
   LC: Location
   MN: Manufacture ID
   PG: PCI Geography
   SN: Serial number
   Vx: Vendor string (Repeated many times for 'x' in range 0-9, A-Z)
   CP: Extended capability
   RV: Checksum + reserved space

I don't see a need to report the "CP" and "RV" tags in the XML.


Then for VPD-W,the next level

   Vx: Vendor string (Repeated many times for 'x' in range 0-9, A-Z)
   Sx: System string (Repeated many times for 'x' in range 0-9, B-Z)
   YA: Asset tag

With all this in mind, I think we a better to represent
these all as meaingfully named elements

  <capability type="vpd">
    <name>BlueField-2 DPU 25GbE Dual-Port SFP56, Crypto Enabled, 16GB on-board DDR, 1GbE OOB management, Tall Bracket</name>
    <tags access="readonly">
       <change_level>B1</change_level>
       <part_number>MBF2H332A-AEEOT</part_number>
       <serial_number>MT2113X00000</serial_number>
       <vendor_string index="0">PCIeGen4 x8</vendor_string>
       <vendor_string index="2">MBF2H332A-AEEOT</vendor_string>
       <vendor_string index="3">3c53d07eec484d8aab34dabd24fe575aa</vendor_string>
    </tags>
    <tags access="readwrite">
       ...
    </tags>
  </capability>


> > +    <capability type='vpd'>
> > +      <resource type='string'>BlueField-2 DPU 25GbE Dual-Port SFP56, Crypto Enabled, 16GB on-board DDR, 1GbE OOB management, Tall Bracket</resource>
> > +      <resource type='vpd-r'>
> > +        <field keyword='EC'>B1</field>
> > +        <field keyword='PN'>MBF2H332A-AEEOT</field>
> > +        <field keyword='SN'>MT2113X00000</field>
> > +        <field keyword='V0'>PCIeGen4 x8</field>
> > +        <field keyword='V2'>MBF2H332A-AEEOT</field>
> > +        <field keyword='V3'>3c53d07eec484d8aab34dabd24fe575aa</field>


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




More information about the libvir-list mailing list