Can someone please explain what is difference between VSEC and DVSEC.
As I understood VSEC is tied with vendorID but DVSEC not, but still not clear how?
And what is Rot complex register block - RCRB? Why user need it when there is DVSEC?
VSEC is intended to be used by a single vendor. The Vendor ID of the device controls the format and contents of the VSEC structure.
DVSEC is intended to allow a single structure type to be used by multiple coordinated vendors. To support this, DVSEC has a DVSEC Vender ID field identifying the vendor who defined the format of the DVSEC structure, which may be different from the Vendor ID of the device containing the DVSEC structure. This allows multiple device vendors to use the same DVSEC definition.
RCRB is defined by the PCI-SIG, so it is unrelated to the vendor-defined capabilities.
RCRB is for RCIEP (Root Complex Integrated End points), it provides a base address. RCRB+offset points to the appropriate registers of the RCiEP config space. BAR for PCIe EP = RCRB for RCiEP.
CXL 1.1 devices are also enumerated as RCiEP, hence use RCRB+offset for attributes such as link status registers etc. Hope lspci is updated for this at some point.