PCIe Enumeration w/o Provisioning

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello everyone,

I hope you all are healthy, safe, and doing well.

I received an excellent suggestion from Bjorn H. to post my conundrum
here, in hopes that perhaps some of you might offer some suggestions
for a challenge I'm facing. Thank you for a bit of your time.

I've gotten started on a challenging ask rooted in the desire to
obtain resource box slot information (for orchestration) prior to
binding the resource box to a host. It is an interesting challenge
given the variety of hardware which may or may not support SMBus
connections to cards, cards that may not support SMBus, and resource
boxes that have varying degrees of functionality (if any).

At my disposal is a pretty light-weight COM to which I can bind
resource boxes one at a time via a fan-out switch. Having bound a
resource box to the COM, the hope is to somehow enumerate/discover
(but not provision) the PCIe tree of the resource box to obtain basic
information available from Configuration Space such as EP
vendor/device IDs, serial number (if available), BAR sizes, etc.

I've made some basic attempts with setpci, but have found that setpci
seems to really want the target devices to already have been
enumerated. libpciaccess seems to depend on this as well. Might any of
you know of a way by which I can manually perform configuration
reads/writes to devices which have not been enumerated by the system?

More heavily-handed, the rescan capabilities in
/sys/devices/.../rescan does both enumeration and provisioning, which
presents a different problem. The COM really doesn't have the
resources to provision arbitrary JBOF/JBOG populations, and I've been
able to prove that out. Using pci=assign-busses,hpbussize=<big number>
with only partially populated resource boxes, rescan has successfully
enumerated all of the buses, but complete provisioning fails (though
the kernel happily does not crash). Because the buses get fully
enumerated, I've then been able to extract the info I want via
lspci/setpci, and then /sys/devices/.../remove the branch.

This raises the question of whether someone might know of a way to ask
the system to perform enumeration without provisioning? (or somehow
suppress the provisioning?)

Bjorn brainstormed/suggested looking at setpci's -H1/H2 options,
trying ECAM from user space, and several other ideas, all of which
I'll be looking into. If any of you have some experience with trying
this kind of thing, or at least a reference or creative suggestion to
try I'd be grateful for your thoughts.

Again, thanks for your time.

Blessings,
Doug Meyer



[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux