|
|
Subscribe / Log in / New account

gpio: Add virtio based driver

From:  Viresh Kumar <viresh.kumar-AT-linaro.org>
To:  Arnd Bergmann <arnd-AT-kernel.org>, Linus Walleij <linus.walleij-AT-linaro.org>, Bartosz Golaszewski <bgolaszewski-AT-baylibre.com>, "Enrico Weigelt, metux IT consult" <info-AT-metux.net>, Jason Wang <jasowang-AT-redhat.com>, "Michael S. Tsirkin" <mst-AT-redhat.com>, Viresh Kumar <vireshk-AT-kernel.org>
Subject:  [PATCH V5 0/2] gpio: Add virtio based driver
Date:  Tue, 10 Aug 2021 15:55:14 +0530
Message-ID:  <cover.1628590591.git.viresh.kumar@linaro.org>
Cc:  Viresh Kumar <viresh.kumar-AT-linaro.org>, Vincent Guittot <vincent.guittot-AT-linaro.org>, Jean-Philippe Brucker <jean-philippe-AT-linaro.org>, Bill Mills <bill.mills-AT-linaro.org>, Alex BennĂ©e <alex.bennee-AT-linaro.org>, Cornelia Huck <cohuck-AT-redhat.com>, Geert Uytterhoeven <geert-AT-linux-m68k.org>, stratos-dev-AT-op-lists.linaro.org, linux-kernel-AT-vger.kernel.org, Thomas Gleixner <tglx-AT-linutronix.de>, Marc Zyngier <maz-AT-kernel.org>, linux-gpio-AT-vger.kernel.org, virtualization-AT-lists.linux-foundation.org
Archive-link:  Article

Hello,

This adds Virtio GPIO driver based on the proposed specification [1].

The specification for basic GPIO operations is already reviewed by Linus and
Arnd, while the IRQ stuff is still under discussion and not finalized.

I am sharing the code, so everyone gets more clarity on how it will work
eventually in Linux.

I have tested this patchset with Qemu guest with help of the libgpiod utility.
I have also tested basic handling of interrupts on the guest side. It works as
expected.

The host side virtio-backend isn't ready yet and my tests only tested the flow
control between guest and host, but didn't play with real GPIO pins.  That will
be done once I have a working backend in place (WIP).

V4->V5:
- Use ____cacheline_aligned for buffers.
- Proper locking in place, which avoids the use of work-item for processing
  interrupts.
- Separate callbacks for enable/disable of irqs.
- The irq is disabled at the host only for enable/disable now, instead of
  mask/unmask.
- mask/unmask only control the queuing of buffers now.
- Use handle_level_irq() instead of handle_fasteoi_irq().
- Other minor changes.

V3->V4:
- Lots of changes, as the specification changed too much. Better forget
  everything we have done until now :)

--
Viresh

[1] https://lists.oasis-open.org/archives/virtio-dev/202107/m...

Viresh Kumar (2):
  gpio: Add virtio-gpio driver
  gpio: virtio: Add IRQ support

 MAINTAINERS                      |   7 +
 drivers/gpio/Kconfig             |  10 +
 drivers/gpio/Makefile            |   1 +
 drivers/gpio/gpio-virtio.c       | 668 +++++++++++++++++++++++++++++++
 include/uapi/linux/virtio_gpio.h |  72 ++++
 5 files changed, 758 insertions(+)
 create mode 100644 drivers/gpio/gpio-virtio.c
 create mode 100644 include/uapi/linux/virtio_gpio.h

-- 
2.31.1.272.g89b43f80a514



Copyright © 2021, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds