[PATCH v3 4/4] Add virtio gpu driver.

2015-06-02 Thread Michael S. Tsirkin
On Fri, May 22, 2015 at 03:11:52PM +0200, Gerd Hoffmann wrote:
> From: Dave Airlie 
> 
> This patch adds a kms driver for the virtio gpu.  The xorg modesetting
> driver can handle the device just fine, the framebuffer for fbcon is
> there too.
> 
> Qemu patches for the host side are under review currently.
> 
> The pci version of the device comes in two variants: with and without
> vga compatibility.  The former has a extra memory bar for the vga
> framebuffer, the later is a pure virtio device.  The only concern for
> this driver is that in the virtio-vga case we have to kick out the
> firmware framebuffer.
> 
> Initial revision has only 2d support, 3d (virgl) support requires
> some more work on the qemu side and will be added later.
> 
> Signed-off-by: Dave Airlie 
> Signed-off-by: Gerd Hoffmann 

I think it's ok to merge this through the dri tree.
Acked-by: Michael S. Tsirkin 

> ---
>  drivers/gpu/drm/Kconfig  |   2 +
>  drivers/gpu/drm/Makefile |   1 +
>  drivers/gpu/drm/virtio/Kconfig   |  14 +
>  drivers/gpu/drm/virtio/Makefile  |  11 +
>  drivers/gpu/drm/virtio/virtgpu_debugfs.c |  64 
>  drivers/gpu/drm/virtio/virtgpu_display.c | 485 
>  drivers/gpu/drm/virtio/virtgpu_drm_bus.c |  91 +
>  drivers/gpu/drm/virtio/virtgpu_drv.c | 136 +++
>  drivers/gpu/drm/virtio/virtgpu_drv.h | 350 ++
>  drivers/gpu/drm/virtio/virtgpu_fb.c  | 431 ++
>  drivers/gpu/drm/virtio/virtgpu_fence.c   | 119 ++
>  drivers/gpu/drm/virtio/virtgpu_gem.c | 140 +++
>  drivers/gpu/drm/virtio/virtgpu_kms.c | 164 +
>  drivers/gpu/drm/virtio/virtgpu_object.c  | 170 +
>  drivers/gpu/drm/virtio/virtgpu_plane.c   | 120 ++
>  drivers/gpu/drm/virtio/virtgpu_ttm.c | 469 +++
>  drivers/gpu/drm/virtio/virtgpu_vq.c  | 614 
> +++
>  include/drm/drmP.h   |   1 +
>  include/uapi/linux/Kbuild|   1 +
>  include/uapi/linux/virtio_gpu.h  | 204 ++
>  include/uapi/linux/virtio_ids.h  |   1 +
>  21 files changed, 3588 insertions(+)
>  create mode 100644 drivers/gpu/drm/virtio/Kconfig
>  create mode 100644 drivers/gpu/drm/virtio/Makefile
>  create mode 100644 drivers/gpu/drm/virtio/virtgpu_debugfs.c
>  create mode 100644 drivers/gpu/drm/virtio/virtgpu_display.c
>  create mode 100644 drivers/gpu/drm/virtio/virtgpu_drm_bus.c
>  create mode 100644 drivers/gpu/drm/virtio/virtgpu_drv.c
>  create mode 100644 drivers/gpu/drm/virtio/virtgpu_drv.h
>  create mode 100644 drivers/gpu/drm/virtio/virtgpu_fb.c
>  create mode 100644 drivers/gpu/drm/virtio/virtgpu_fence.c
>  create mode 100644 drivers/gpu/drm/virtio/virtgpu_gem.c
>  create mode 100644 drivers/gpu/drm/virtio/virtgpu_kms.c
>  create mode 100644 drivers/gpu/drm/virtio/virtgpu_object.c
>  create mode 100644 drivers/gpu/drm/virtio/virtgpu_plane.c
>  create mode 100644 drivers/gpu/drm/virtio/virtgpu_ttm.c
>  create mode 100644 drivers/gpu/drm/virtio/virtgpu_vq.c
>  create mode 100644 include/uapi/linux/virtio_gpu.h
> 
> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
> index 47f2ce8..d4b6545 100644
> --- a/drivers/gpu/drm/Kconfig
> +++ b/drivers/gpu/drm/Kconfig
> @@ -206,6 +206,8 @@ source "drivers/gpu/drm/qxl/Kconfig"
>  
>  source "drivers/gpu/drm/bochs/Kconfig"
>  
> +source "drivers/gpu/drm/virtio/Kconfig"
> +
>  source "drivers/gpu/drm/msm/Kconfig"
>  
>  source "drivers/gpu/drm/tegra/Kconfig"
> diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
> index 7d4944e..dbbc101 100644
> --- a/drivers/gpu/drm/Makefile
> +++ b/drivers/gpu/drm/Makefile
> @@ -63,6 +63,7 @@ obj-$(CONFIG_DRM_OMAP)  += omapdrm/
>  obj-$(CONFIG_DRM_TILCDC) += tilcdc/
>  obj-$(CONFIG_DRM_QXL) += qxl/
>  obj-$(CONFIG_DRM_BOCHS) += bochs/
> +obj-$(CONFIG_DRM_VIRTIO_GPU) += virtio/
>  obj-$(CONFIG_DRM_MSM) += msm/
>  obj-$(CONFIG_DRM_TEGRA) += tegra/
>  obj-$(CONFIG_DRM_STI) += sti/
> diff --git a/drivers/gpu/drm/virtio/Kconfig b/drivers/gpu/drm/virtio/Kconfig
> new file mode 100644
> index 000..9983ead
> --- /dev/null
> +++ b/drivers/gpu/drm/virtio/Kconfig
> @@ -0,0 +1,14 @@
> +config DRM_VIRTIO_GPU
> + tristate "Virtio GPU driver"
> + depends on DRM && VIRTIO
> + select FB_SYS_FILLRECT
> + select FB_SYS_COPYAREA
> + select FB_SYS_IMAGEBLIT
> +select DRM_KMS_HELPER
> +select DRM_KMS_FB_HELPER
> +select DRM_TTM
> + help
> +This is the virtual GPU driver for virtio.  It can be used with
> +   QEMU based VMMs (like KVM or Xen).
> +
> +If unsure say M.
> diff --git a/drivers/gpu/drm/virtio/Makefile b/drivers/gpu/drm/virtio/Makefile
> new file mode 100644
> index 000..2ee1602
> --- /dev/null
> +++ b/drivers/gpu/drm/virtio/Makefile
> @@ -0,0 +1,11 @@
> +#
> +# Makefile for the drm device driver.  This driver provides support for the
> +# Direct 

[PATCH v3 4/4] Add virtio gpu driver.

2015-05-22 Thread Gerd Hoffmann
From: Dave Airlie 

This patch adds a kms driver for the virtio gpu.  The xorg modesetting
driver can handle the device just fine, the framebuffer for fbcon is
there too.

Qemu patches for the host side are under review currently.

The pci version of the device comes in two variants: with and without
vga compatibility.  The former has a extra memory bar for the vga
framebuffer, the later is a pure virtio device.  The only concern for
this driver is that in the virtio-vga case we have to kick out the
firmware framebuffer.

Initial revision has only 2d support, 3d (virgl) support requires
some more work on the qemu side and will be added later.

Signed-off-by: Dave Airlie 
Signed-off-by: Gerd Hoffmann 
---
 drivers/gpu/drm/Kconfig  |   2 +
 drivers/gpu/drm/Makefile |   1 +
 drivers/gpu/drm/virtio/Kconfig   |  14 +
 drivers/gpu/drm/virtio/Makefile  |  11 +
 drivers/gpu/drm/virtio/virtgpu_debugfs.c |  64 
 drivers/gpu/drm/virtio/virtgpu_display.c | 485 
 drivers/gpu/drm/virtio/virtgpu_drm_bus.c |  91 +
 drivers/gpu/drm/virtio/virtgpu_drv.c | 136 +++
 drivers/gpu/drm/virtio/virtgpu_drv.h | 350 ++
 drivers/gpu/drm/virtio/virtgpu_fb.c  | 431 ++
 drivers/gpu/drm/virtio/virtgpu_fence.c   | 119 ++
 drivers/gpu/drm/virtio/virtgpu_gem.c | 140 +++
 drivers/gpu/drm/virtio/virtgpu_kms.c | 164 +
 drivers/gpu/drm/virtio/virtgpu_object.c  | 170 +
 drivers/gpu/drm/virtio/virtgpu_plane.c   | 120 ++
 drivers/gpu/drm/virtio/virtgpu_ttm.c | 469 +++
 drivers/gpu/drm/virtio/virtgpu_vq.c  | 614 +++
 include/drm/drmP.h   |   1 +
 include/uapi/linux/Kbuild|   1 +
 include/uapi/linux/virtio_gpu.h  | 204 ++
 include/uapi/linux/virtio_ids.h  |   1 +
 21 files changed, 3588 insertions(+)
 create mode 100644 drivers/gpu/drm/virtio/Kconfig
 create mode 100644 drivers/gpu/drm/virtio/Makefile
 create mode 100644 drivers/gpu/drm/virtio/virtgpu_debugfs.c
 create mode 100644 drivers/gpu/drm/virtio/virtgpu_display.c
 create mode 100644 drivers/gpu/drm/virtio/virtgpu_drm_bus.c
 create mode 100644 drivers/gpu/drm/virtio/virtgpu_drv.c
 create mode 100644 drivers/gpu/drm/virtio/virtgpu_drv.h
 create mode 100644 drivers/gpu/drm/virtio/virtgpu_fb.c
 create mode 100644 drivers/gpu/drm/virtio/virtgpu_fence.c
 create mode 100644 drivers/gpu/drm/virtio/virtgpu_gem.c
 create mode 100644 drivers/gpu/drm/virtio/virtgpu_kms.c
 create mode 100644 drivers/gpu/drm/virtio/virtgpu_object.c
 create mode 100644 drivers/gpu/drm/virtio/virtgpu_plane.c
 create mode 100644 drivers/gpu/drm/virtio/virtgpu_ttm.c
 create mode 100644 drivers/gpu/drm/virtio/virtgpu_vq.c
 create mode 100644 include/uapi/linux/virtio_gpu.h

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 47f2ce8..d4b6545 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -206,6 +206,8 @@ source "drivers/gpu/drm/qxl/Kconfig"

 source "drivers/gpu/drm/bochs/Kconfig"

+source "drivers/gpu/drm/virtio/Kconfig"
+
 source "drivers/gpu/drm/msm/Kconfig"

 source "drivers/gpu/drm/tegra/Kconfig"
diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
index 7d4944e..dbbc101 100644
--- a/drivers/gpu/drm/Makefile
+++ b/drivers/gpu/drm/Makefile
@@ -63,6 +63,7 @@ obj-$(CONFIG_DRM_OMAP)+= omapdrm/
 obj-$(CONFIG_DRM_TILCDC)   += tilcdc/
 obj-$(CONFIG_DRM_QXL) += qxl/
 obj-$(CONFIG_DRM_BOCHS) += bochs/
+obj-$(CONFIG_DRM_VIRTIO_GPU) += virtio/
 obj-$(CONFIG_DRM_MSM) += msm/
 obj-$(CONFIG_DRM_TEGRA) += tegra/
 obj-$(CONFIG_DRM_STI) += sti/
diff --git a/drivers/gpu/drm/virtio/Kconfig b/drivers/gpu/drm/virtio/Kconfig
new file mode 100644
index 000..9983ead
--- /dev/null
+++ b/drivers/gpu/drm/virtio/Kconfig
@@ -0,0 +1,14 @@
+config DRM_VIRTIO_GPU
+   tristate "Virtio GPU driver"
+   depends on DRM && VIRTIO
+   select FB_SYS_FILLRECT
+   select FB_SYS_COPYAREA
+   select FB_SYS_IMAGEBLIT
+select DRM_KMS_HELPER
+select DRM_KMS_FB_HELPER
+select DRM_TTM
+   help
+  This is the virtual GPU driver for virtio.  It can be used with
+   QEMU based VMMs (like KVM or Xen).
+
+  If unsure say M.
diff --git a/drivers/gpu/drm/virtio/Makefile b/drivers/gpu/drm/virtio/Makefile
new file mode 100644
index 000..2ee1602
--- /dev/null
+++ b/drivers/gpu/drm/virtio/Makefile
@@ -0,0 +1,11 @@
+#
+# Makefile for the drm device driver.  This driver provides support for the
+# Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher.
+
+ccflags-y := -Iinclude/drm
+
+virtio-gpu-y := virtgpu_drv.o virtgpu_kms.o virtgpu_drm_bus.o virtgpu_gem.o \
+   virtgpu_fb.o virtgpu_display.o virtgpu_vq.o virtgpu_ttm.o \
+   virtgpu_fence.o virtgpu_object.o virtgpu_debugfs.o virtgpu_plane.o
+
+obj-$(CONFIG_DRM_VIRTIO_GPU)