On 9 Apr 2020, at 12:56, Bjorn Helgaas wrote:
On Thu, Apr 09, 2020 at 11:32:04AM -0700, Sean V Kelley wrote:
Instead of current generic 'unknown' output for DVSEC, add details on
Vendor ID, Rev, etc.
Suggested-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>
Signed-off-by: Sean V Kelley <sean.v.kelley@xxxxxxxxxxxxxxx>
Looks good to me.
+static void
+cap_dvsec(struct device *d, int where)
+{
+ u32 hdr;
+
+ printf("Designated Vendor Specific Extended Capability:\n");
s/Vendor Specific/Vendor-Specific/ to match the spec usage
s/ Extended Capability:// to match other lspci capability output (?)
Sure, sounds good.
+4e:00.0 Unassigned class [ff00]: Intel Corporation Device 0d93
+ Capabilities: [d00 v1] Vendor Specific Information: ID=0040
Rev=1 Len=04c <?>
+ Capabilities: [e00 v1] Designated Vendor Specific Extended
Capability:
+ DVSEC Vendor ID=8086 Rev=0 Len=038 <?>
+ DVSEC ID=0000 <?>
+ Capabilities: [e38 v1] Device Serial Number
12-34-56-78-90-00-00-00
+00: 86 80 93 0d 00 00 10 00 00 00 00 ff 00 00 80 00
Obviously this class code is wrong. I assume it'll be fixed in real
hardware, but ironically we've just spent a few days chasing a problem
because of a Google Edge TPU with invalid class code. In that case,
Linux doesn't assign resources to BARs, so things fall apart after
that.
Wow. Easy to forget how much depends on it. Yes, it will be fixed in
real hardware with real IDs. :)
Thanks,
Sean