On Thu, Jun 10, 2021 at 7:03 PM Jean-Philippe Brucker jean-philippe@linaro.org wrote:
On Thu, Jun 10, 2021 at 04:00:39PM +0000, Enrico Weigelt, metux IT consult via Stratos-dev wrote:
On 10.06.21 15:22, Arnd Bergmann wrote:
Can you give an example of how this would be hooked up to other drivers using those gpios. Can you give an example of how using the "gpio-keys" or "gpio-leds" drivers in combination with virtio-gpio looks like in the DT?
Connecting between self-probing bus'es and DT is generally tricky. IMHO we don't have any generic mechanism for that.
DT does have a generic description of PCI endpoints, which virtio-iommu relies on to express the relation between IOMMU and endpoint nodes [1]. I think the problem here is similar: the client node needs a phandle to the GPIO controller which may use virtio-pci transport?
Right, the code to set dev->of_node is fairly simple, the device probe just needs to scan for child nodes. Aside from PCI, similar code exists for USB and MMC/SDIO, which are usually discoverable but sometimes need additional properties.
Note that it mostly works if the device is on the root PCI bus. Behind a bridge the OS may change the device's bus number as needed, so the BDF reference in DT is only valid if the software providing the DT description (VMM or firmware) initializes bus numbers accordingly (and I don't remember if Linux supports this case well).
I think you can mark the host bridge as "probe-only" to prevent the OS (at least Linux) from renumbering the buses.
The part I did not find though is assigning dev->of_node in the virtio_device to a child of the PCI device node.
Arnd