Re: [Stratos-dev] [PATCH V3 1/3] gpio: Add virtio-gpio driver

From: Arnd Bergmann
Date: Thu Jun 10 2021 - 15:43:02 EST


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