On Thu, Jun 10, 2021 at 7:03 PM Jean-Philippe Brucker <jean-philippe@xxxxxxxxxx> 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