All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] virtio: fix virtio_gpu_mode_dumb_create
@ 2017-04-03  7:08 Gerd Hoffmann
  2017-04-03  7:08   ` Gerd Hoffmann
                   ` (3 more replies)
  0 siblings, 4 replies; 21+ messages in thread
From: Gerd Hoffmann @ 2017-04-03  7:08 UTC (permalink / raw)
  To: dri-devel; +Cc: lvivier, Gerd Hoffmann

  Hi,

Little series to fix xorg display on virtio on bigendian machines.
First patch factors out the drm -> virtio format mapping code into
a helper function, second patch actually fixes the issue using the
new helper.

cheers,
  Gerd

Gerd Hoffmann (2):
  drm: virtio: add virtio_gpu_translate_format
  drm: virtio: fix virtio_gpu_mode_dumb_create

 drivers/gpu/drm/virtio/virtgpu_drv.h   |  1 +
 drivers/gpu/drm/virtio/virtgpu_fb.c    | 58 +----------------------------
 drivers/gpu/drm/virtio/virtgpu_gem.c   |  6 ++-
 drivers/gpu/drm/virtio/virtgpu_plane.c | 68 ++++++++++++++++++++++++++++++++++
 4 files changed, 75 insertions(+), 58 deletions(-)

-- 
2.9.3

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 1/2] drm: virtio: add virtio_gpu_translate_format
  2017-04-03  7:08 [PATCH 0/2] virtio: fix virtio_gpu_mode_dumb_create Gerd Hoffmann
@ 2017-04-03  7:08   ` Gerd Hoffmann
  2017-04-03  7:08   ` Gerd Hoffmann
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 21+ messages in thread
From: Gerd Hoffmann @ 2017-04-03  7:08 UTC (permalink / raw)
  To: dri-devel
  Cc: lvivier, Gerd Hoffmann, David Airlie,
	open list:VIRTIO GPU DRIVER, open list

Factors out code, no functional change.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 drivers/gpu/drm/virtio/virtgpu_drv.h   |  1 +
 drivers/gpu/drm/virtio/virtgpu_fb.c    | 58 +----------------------------
 drivers/gpu/drm/virtio/virtgpu_plane.c | 68 ++++++++++++++++++++++++++++++++++
 3 files changed, 71 insertions(+), 56 deletions(-)

diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
index 93900a8..1328185 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.h
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
@@ -334,6 +334,7 @@ int virtio_gpu_modeset_init(struct virtio_gpu_device *vgdev);
 void virtio_gpu_modeset_fini(struct virtio_gpu_device *vgdev);
 
 /* virtio_gpu_plane.c */
+uint32_t virtio_gpu_translate_format(uint32_t drm_fourcc);
 struct drm_plane *virtio_gpu_plane_init(struct virtio_gpu_device *vgdev,
 					enum drm_plane_type type,
 					int index);
diff --git a/drivers/gpu/drm/virtio/virtgpu_fb.c b/drivers/gpu/drm/virtio/virtgpu_fb.c
index 9bfaef3..33df067 100644
--- a/drivers/gpu/drm/virtio/virtgpu_fb.c
+++ b/drivers/gpu/drm/virtio/virtgpu_fb.c
@@ -231,63 +231,9 @@ static int virtio_gpufb_create(struct drm_fb_helper *helper,
 	mode_cmd.pitches[0] = mode_cmd.width * 4;
 	mode_cmd.pixel_format = drm_mode_legacy_fb_format(32, 24);
 
-	switch (mode_cmd.pixel_format) {
-#ifdef __BIG_ENDIAN
-	case DRM_FORMAT_XRGB8888:
-		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
-		break;
-	case DRM_FORMAT_ARGB8888:
-		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
-		break;
-	case DRM_FORMAT_BGRX8888:
-		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
-		break;
-	case DRM_FORMAT_BGRA8888:
-		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
-		break;
-	case DRM_FORMAT_RGBX8888:
-		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
-		break;
-	case DRM_FORMAT_RGBA8888:
-		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
-		break;
-	case DRM_FORMAT_XBGR8888:
-		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
-		break;
-	case DRM_FORMAT_ABGR8888:
-		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
-		break;
-#else
-	case DRM_FORMAT_XRGB8888:
-		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
-		break;
-	case DRM_FORMAT_ARGB8888:
-		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
-		break;
-	case DRM_FORMAT_BGRX8888:
-		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
-		break;
-	case DRM_FORMAT_BGRA8888:
-		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
-		break;
-	case DRM_FORMAT_RGBX8888:
-		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
-		break;
-	case DRM_FORMAT_RGBA8888:
-		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
-		break;
-	case DRM_FORMAT_XBGR8888:
-		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
-		break;
-	case DRM_FORMAT_ABGR8888:
-		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
-		break;
-#endif
-	default:
-		DRM_ERROR("failed to find virtio gpu format for %d\n",
-			  mode_cmd.pixel_format);
+	format = virtio_gpu_translate_format(mode_cmd.pixel_format);
+	if (format == 0)
 		return -EINVAL;
-	}
 
 	size = mode_cmd.pitches[0] * mode_cmd.height;
 	obj = virtio_gpu_alloc_object(dev, size, false, true);
diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c
index 1ff9c64..372c91c 100644
--- a/drivers/gpu/drm/virtio/virtgpu_plane.c
+++ b/drivers/gpu/drm/virtio/virtgpu_plane.c
@@ -42,6 +42,74 @@ static const uint32_t virtio_gpu_cursor_formats[] = {
 	DRM_FORMAT_ARGB8888,
 };
 
+uint32_t virtio_gpu_translate_format(uint32_t drm_fourcc)
+{
+	uint32_t format;
+
+	switch (drm_fourcc) {
+#ifdef __BIG_ENDIAN
+	case DRM_FORMAT_XRGB8888:
+		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
+		break;
+	case DRM_FORMAT_ARGB8888:
+		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
+		break;
+	case DRM_FORMAT_BGRX8888:
+		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
+		break;
+	case DRM_FORMAT_BGRA8888:
+		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
+		break;
+	case DRM_FORMAT_RGBX8888:
+		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
+		break;
+	case DRM_FORMAT_RGBA8888:
+		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
+		break;
+	case DRM_FORMAT_XBGR8888:
+		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
+		break;
+	case DRM_FORMAT_ABGR8888:
+		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
+		break;
+#else
+	case DRM_FORMAT_XRGB8888:
+		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
+		break;
+	case DRM_FORMAT_ARGB8888:
+		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
+		break;
+	case DRM_FORMAT_BGRX8888:
+		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
+		break;
+	case DRM_FORMAT_BGRA8888:
+		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
+		break;
+	case DRM_FORMAT_RGBX8888:
+		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
+		break;
+	case DRM_FORMAT_RGBA8888:
+		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
+		break;
+	case DRM_FORMAT_XBGR8888:
+		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
+		break;
+	case DRM_FORMAT_ABGR8888:
+		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
+		break;
+#endif
+	default:
+		/*
+		 * This should not happen, we handle everything listed
+		 * in virtio_gpu_formats[].
+		 */
+		format = 0;
+		break;
+	}
+	WARN_ON(format == 0);
+	return format;
+}
+
 static void virtio_gpu_plane_destroy(struct drm_plane *plane)
 {
 	drm_plane_cleanup(plane);
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 1/2] drm: virtio: add virtio_gpu_translate_format
@ 2017-04-03  7:08   ` Gerd Hoffmann
  0 siblings, 0 replies; 21+ messages in thread
From: Gerd Hoffmann @ 2017-04-03  7:08 UTC (permalink / raw)
  To: dri-devel; +Cc: lvivier, David Airlie, open list, open list:VIRTIO GPU DRIVER

Factors out code, no functional change.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 drivers/gpu/drm/virtio/virtgpu_drv.h   |  1 +
 drivers/gpu/drm/virtio/virtgpu_fb.c    | 58 +----------------------------
 drivers/gpu/drm/virtio/virtgpu_plane.c | 68 ++++++++++++++++++++++++++++++++++
 3 files changed, 71 insertions(+), 56 deletions(-)

diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
index 93900a8..1328185 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.h
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
@@ -334,6 +334,7 @@ int virtio_gpu_modeset_init(struct virtio_gpu_device *vgdev);
 void virtio_gpu_modeset_fini(struct virtio_gpu_device *vgdev);
 
 /* virtio_gpu_plane.c */
+uint32_t virtio_gpu_translate_format(uint32_t drm_fourcc);
 struct drm_plane *virtio_gpu_plane_init(struct virtio_gpu_device *vgdev,
 					enum drm_plane_type type,
 					int index);
diff --git a/drivers/gpu/drm/virtio/virtgpu_fb.c b/drivers/gpu/drm/virtio/virtgpu_fb.c
index 9bfaef3..33df067 100644
--- a/drivers/gpu/drm/virtio/virtgpu_fb.c
+++ b/drivers/gpu/drm/virtio/virtgpu_fb.c
@@ -231,63 +231,9 @@ static int virtio_gpufb_create(struct drm_fb_helper *helper,
 	mode_cmd.pitches[0] = mode_cmd.width * 4;
 	mode_cmd.pixel_format = drm_mode_legacy_fb_format(32, 24);
 
-	switch (mode_cmd.pixel_format) {
-#ifdef __BIG_ENDIAN
-	case DRM_FORMAT_XRGB8888:
-		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
-		break;
-	case DRM_FORMAT_ARGB8888:
-		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
-		break;
-	case DRM_FORMAT_BGRX8888:
-		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
-		break;
-	case DRM_FORMAT_BGRA8888:
-		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
-		break;
-	case DRM_FORMAT_RGBX8888:
-		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
-		break;
-	case DRM_FORMAT_RGBA8888:
-		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
-		break;
-	case DRM_FORMAT_XBGR8888:
-		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
-		break;
-	case DRM_FORMAT_ABGR8888:
-		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
-		break;
-#else
-	case DRM_FORMAT_XRGB8888:
-		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
-		break;
-	case DRM_FORMAT_ARGB8888:
-		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
-		break;
-	case DRM_FORMAT_BGRX8888:
-		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
-		break;
-	case DRM_FORMAT_BGRA8888:
-		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
-		break;
-	case DRM_FORMAT_RGBX8888:
-		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
-		break;
-	case DRM_FORMAT_RGBA8888:
-		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
-		break;
-	case DRM_FORMAT_XBGR8888:
-		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
-		break;
-	case DRM_FORMAT_ABGR8888:
-		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
-		break;
-#endif
-	default:
-		DRM_ERROR("failed to find virtio gpu format for %d\n",
-			  mode_cmd.pixel_format);
+	format = virtio_gpu_translate_format(mode_cmd.pixel_format);
+	if (format == 0)
 		return -EINVAL;
-	}
 
 	size = mode_cmd.pitches[0] * mode_cmd.height;
 	obj = virtio_gpu_alloc_object(dev, size, false, true);
diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c
index 1ff9c64..372c91c 100644
--- a/drivers/gpu/drm/virtio/virtgpu_plane.c
+++ b/drivers/gpu/drm/virtio/virtgpu_plane.c
@@ -42,6 +42,74 @@ static const uint32_t virtio_gpu_cursor_formats[] = {
 	DRM_FORMAT_ARGB8888,
 };
 
+uint32_t virtio_gpu_translate_format(uint32_t drm_fourcc)
+{
+	uint32_t format;
+
+	switch (drm_fourcc) {
+#ifdef __BIG_ENDIAN
+	case DRM_FORMAT_XRGB8888:
+		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
+		break;
+	case DRM_FORMAT_ARGB8888:
+		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
+		break;
+	case DRM_FORMAT_BGRX8888:
+		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
+		break;
+	case DRM_FORMAT_BGRA8888:
+		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
+		break;
+	case DRM_FORMAT_RGBX8888:
+		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
+		break;
+	case DRM_FORMAT_RGBA8888:
+		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
+		break;
+	case DRM_FORMAT_XBGR8888:
+		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
+		break;
+	case DRM_FORMAT_ABGR8888:
+		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
+		break;
+#else
+	case DRM_FORMAT_XRGB8888:
+		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
+		break;
+	case DRM_FORMAT_ARGB8888:
+		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
+		break;
+	case DRM_FORMAT_BGRX8888:
+		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
+		break;
+	case DRM_FORMAT_BGRA8888:
+		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
+		break;
+	case DRM_FORMAT_RGBX8888:
+		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
+		break;
+	case DRM_FORMAT_RGBA8888:
+		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
+		break;
+	case DRM_FORMAT_XBGR8888:
+		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
+		break;
+	case DRM_FORMAT_ABGR8888:
+		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
+		break;
+#endif
+	default:
+		/*
+		 * This should not happen, we handle everything listed
+		 * in virtio_gpu_formats[].
+		 */
+		format = 0;
+		break;
+	}
+	WARN_ON(format == 0);
+	return format;
+}
+
 static void virtio_gpu_plane_destroy(struct drm_plane *plane)
 {
 	drm_plane_cleanup(plane);
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 2/2] drm: virtio: fix virtio_gpu_mode_dumb_create
  2017-04-03  7:08 [PATCH 0/2] virtio: fix virtio_gpu_mode_dumb_create Gerd Hoffmann
@ 2017-04-03  7:08   ` Gerd Hoffmann
  2017-04-03  7:08   ` Gerd Hoffmann
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 21+ messages in thread
From: Gerd Hoffmann @ 2017-04-03  7:08 UTC (permalink / raw)
  To: dri-devel
  Cc: lvivier, Gerd Hoffmann, David Airlie,
	open list:VIRTIO GPU DRIVER, open list

Lookup format using virtio_gpu_translate_format()
instead of hardcoding it.  Fixes xorg display on
bigendian guests (i.e. ppc64).

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 drivers/gpu/drm/virtio/virtgpu_gem.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c
index 336a57f..cc025d8 100644
--- a/drivers/gpu/drm/virtio/virtgpu_gem.c
+++ b/drivers/gpu/drm/virtio/virtgpu_gem.c
@@ -88,6 +88,7 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
 	int ret;
 	uint32_t pitch;
 	uint32_t resid;
+	uint32_t format;
 
 	pitch = args->width * ((args->bpp + 1) / 8);
 	args->size = pitch * args->height;
@@ -98,9 +99,10 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
 	if (ret)
 		goto fail;
 
+	format = virtio_gpu_translate_format(DRM_FORMAT_XRGB8888);
 	virtio_gpu_resource_id_get(vgdev, &resid);
-	virtio_gpu_cmd_create_resource(vgdev, resid,
-				       2, args->width, args->height);
+	virtio_gpu_cmd_create_resource(vgdev, resid, format,
+				       args->width, args->height);
 
 	/* attach the object to the resource */
 	obj = gem_to_virtio_gpu_obj(gobj);
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 2/2] drm: virtio: fix virtio_gpu_mode_dumb_create
  2017-04-03  7:08 [PATCH 0/2] virtio: fix virtio_gpu_mode_dumb_create Gerd Hoffmann
  2017-04-03  7:08   ` Gerd Hoffmann
  2017-04-03  7:08   ` Gerd Hoffmann
@ 2017-04-03  7:08 ` Gerd Hoffmann
  2017-04-03  8:31 ` [PATCH 0/2] " Laurent Vivier
  3 siblings, 0 replies; 21+ messages in thread
From: Gerd Hoffmann @ 2017-04-03  7:08 UTC (permalink / raw)
  To: dri-devel; +Cc: lvivier, David Airlie, open list, open list:VIRTIO GPU DRIVER

Lookup format using virtio_gpu_translate_format()
instead of hardcoding it.  Fixes xorg display on
bigendian guests (i.e. ppc64).

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 drivers/gpu/drm/virtio/virtgpu_gem.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c
index 336a57f..cc025d8 100644
--- a/drivers/gpu/drm/virtio/virtgpu_gem.c
+++ b/drivers/gpu/drm/virtio/virtgpu_gem.c
@@ -88,6 +88,7 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
 	int ret;
 	uint32_t pitch;
 	uint32_t resid;
+	uint32_t format;
 
 	pitch = args->width * ((args->bpp + 1) / 8);
 	args->size = pitch * args->height;
@@ -98,9 +99,10 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
 	if (ret)
 		goto fail;
 
+	format = virtio_gpu_translate_format(DRM_FORMAT_XRGB8888);
 	virtio_gpu_resource_id_get(vgdev, &resid);
-	virtio_gpu_cmd_create_resource(vgdev, resid,
-				       2, args->width, args->height);
+	virtio_gpu_cmd_create_resource(vgdev, resid, format,
+				       args->width, args->height);
 
 	/* attach the object to the resource */
 	obj = gem_to_virtio_gpu_obj(gobj);
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 2/2] drm: virtio: fix virtio_gpu_mode_dumb_create
@ 2017-04-03  7:08   ` Gerd Hoffmann
  0 siblings, 0 replies; 21+ messages in thread
From: Gerd Hoffmann @ 2017-04-03  7:08 UTC (permalink / raw)
  To: dri-devel; +Cc: lvivier, Gerd Hoffmann, open list, open list:VIRTIO GPU DRIVER

Lookup format using virtio_gpu_translate_format()
instead of hardcoding it.  Fixes xorg display on
bigendian guests (i.e. ppc64).

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 drivers/gpu/drm/virtio/virtgpu_gem.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c
index 336a57f..cc025d8 100644
--- a/drivers/gpu/drm/virtio/virtgpu_gem.c
+++ b/drivers/gpu/drm/virtio/virtgpu_gem.c
@@ -88,6 +88,7 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
 	int ret;
 	uint32_t pitch;
 	uint32_t resid;
+	uint32_t format;
 
 	pitch = args->width * ((args->bpp + 1) / 8);
 	args->size = pitch * args->height;
@@ -98,9 +99,10 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
 	if (ret)
 		goto fail;
 
+	format = virtio_gpu_translate_format(DRM_FORMAT_XRGB8888);
 	virtio_gpu_resource_id_get(vgdev, &resid);
-	virtio_gpu_cmd_create_resource(vgdev, resid,
-				       2, args->width, args->height);
+	virtio_gpu_cmd_create_resource(vgdev, resid, format,
+				       args->width, args->height);
 
 	/* attach the object to the resource */
 	obj = gem_to_virtio_gpu_obj(gobj);
-- 
2.9.3

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/2] drm: virtio: fix virtio_gpu_mode_dumb_create
  2017-04-03  7:08   ` Gerd Hoffmann
@ 2017-04-03  7:45     ` Dave Airlie
  -1 siblings, 0 replies; 21+ messages in thread
From: Dave Airlie @ 2017-04-03  7:45 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: dri-devel, lvivier, open list, open list:VIRTIO GPU DRIVER

On 3 April 2017 at 17:08, Gerd Hoffmann <kraxel@redhat.com> wrote:
> Lookup format using virtio_gpu_translate_format()
> instead of hardcoding it.  Fixes xorg display on
> bigendian guests (i.e. ppc64).
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

For the series,

Reviewed-by: Dave Airlie <airlied@redhat.com>

> ---
>  drivers/gpu/drm/virtio/virtgpu_gem.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c
> index 336a57f..cc025d8 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_gem.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_gem.c
> @@ -88,6 +88,7 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
>         int ret;
>         uint32_t pitch;
>         uint32_t resid;
> +       uint32_t format;
>
>         pitch = args->width * ((args->bpp + 1) / 8);
>         args->size = pitch * args->height;
> @@ -98,9 +99,10 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
>         if (ret)
>                 goto fail;
>
> +       format = virtio_gpu_translate_format(DRM_FORMAT_XRGB8888);
>         virtio_gpu_resource_id_get(vgdev, &resid);
> -       virtio_gpu_cmd_create_resource(vgdev, resid,
> -                                      2, args->width, args->height);
> +       virtio_gpu_cmd_create_resource(vgdev, resid, format,
> +                                      args->width, args->height);
>
>         /* attach the object to the resource */
>         obj = gem_to_virtio_gpu_obj(gobj);
> --
> 2.9.3
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/2] drm: virtio: fix virtio_gpu_mode_dumb_create
@ 2017-04-03  7:45     ` Dave Airlie
  0 siblings, 0 replies; 21+ messages in thread
From: Dave Airlie @ 2017-04-03  7:45 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: lvivier, open list, dri-devel, open list:VIRTIO GPU DRIVER

On 3 April 2017 at 17:08, Gerd Hoffmann <kraxel@redhat.com> wrote:
> Lookup format using virtio_gpu_translate_format()
> instead of hardcoding it.  Fixes xorg display on
> bigendian guests (i.e. ppc64).
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

For the series,

Reviewed-by: Dave Airlie <airlied@redhat.com>

> ---
>  drivers/gpu/drm/virtio/virtgpu_gem.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c
> index 336a57f..cc025d8 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_gem.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_gem.c
> @@ -88,6 +88,7 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
>         int ret;
>         uint32_t pitch;
>         uint32_t resid;
> +       uint32_t format;
>
>         pitch = args->width * ((args->bpp + 1) / 8);
>         args->size = pitch * args->height;
> @@ -98,9 +99,10 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
>         if (ret)
>                 goto fail;
>
> +       format = virtio_gpu_translate_format(DRM_FORMAT_XRGB8888);
>         virtio_gpu_resource_id_get(vgdev, &resid);
> -       virtio_gpu_cmd_create_resource(vgdev, resid,
> -                                      2, args->width, args->height);
> +       virtio_gpu_cmd_create_resource(vgdev, resid, format,
> +                                      args->width, args->height);
>
>         /* attach the object to the resource */
>         obj = gem_to_virtio_gpu_obj(gobj);
> --
> 2.9.3
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/2] drm: virtio: add virtio_gpu_translate_format
  2017-04-03  7:08   ` Gerd Hoffmann
@ 2017-04-03  7:51     ` Daniel Vetter
  -1 siblings, 0 replies; 21+ messages in thread
From: Daniel Vetter @ 2017-04-03  7:51 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: dri-devel, lvivier, open list, open list:VIRTIO GPU DRIVER

On Mon, Apr 03, 2017 at 09:08:44AM +0200, Gerd Hoffmann wrote:
> Factors out code, no functional change.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

Ugh on the big endian define, I guess we'll never managed to figure this
aspect of drm pixel formats out correctly - they're supposed to encode
endinaness.

But the copy-paste looks correct :-)

Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> ---
>  drivers/gpu/drm/virtio/virtgpu_drv.h   |  1 +
>  drivers/gpu/drm/virtio/virtgpu_fb.c    | 58 +----------------------------
>  drivers/gpu/drm/virtio/virtgpu_plane.c | 68 ++++++++++++++++++++++++++++++++++
>  3 files changed, 71 insertions(+), 56 deletions(-)
> 
> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
> index 93900a8..1328185 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_drv.h
> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
> @@ -334,6 +334,7 @@ int virtio_gpu_modeset_init(struct virtio_gpu_device *vgdev);
>  void virtio_gpu_modeset_fini(struct virtio_gpu_device *vgdev);
>  
>  /* virtio_gpu_plane.c */
> +uint32_t virtio_gpu_translate_format(uint32_t drm_fourcc);
>  struct drm_plane *virtio_gpu_plane_init(struct virtio_gpu_device *vgdev,
>  					enum drm_plane_type type,
>  					int index);
> diff --git a/drivers/gpu/drm/virtio/virtgpu_fb.c b/drivers/gpu/drm/virtio/virtgpu_fb.c
> index 9bfaef3..33df067 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_fb.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_fb.c
> @@ -231,63 +231,9 @@ static int virtio_gpufb_create(struct drm_fb_helper *helper,
>  	mode_cmd.pitches[0] = mode_cmd.width * 4;
>  	mode_cmd.pixel_format = drm_mode_legacy_fb_format(32, 24);
>  
> -	switch (mode_cmd.pixel_format) {
> -#ifdef __BIG_ENDIAN
> -	case DRM_FORMAT_XRGB8888:
> -		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
> -		break;
> -	case DRM_FORMAT_ARGB8888:
> -		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
> -		break;
> -	case DRM_FORMAT_BGRX8888:
> -		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
> -		break;
> -	case DRM_FORMAT_BGRA8888:
> -		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
> -		break;
> -	case DRM_FORMAT_RGBX8888:
> -		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
> -		break;
> -	case DRM_FORMAT_RGBA8888:
> -		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
> -		break;
> -	case DRM_FORMAT_XBGR8888:
> -		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
> -		break;
> -	case DRM_FORMAT_ABGR8888:
> -		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
> -		break;
> -#else
> -	case DRM_FORMAT_XRGB8888:
> -		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
> -		break;
> -	case DRM_FORMAT_ARGB8888:
> -		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
> -		break;
> -	case DRM_FORMAT_BGRX8888:
> -		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
> -		break;
> -	case DRM_FORMAT_BGRA8888:
> -		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
> -		break;
> -	case DRM_FORMAT_RGBX8888:
> -		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
> -		break;
> -	case DRM_FORMAT_RGBA8888:
> -		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
> -		break;
> -	case DRM_FORMAT_XBGR8888:
> -		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
> -		break;
> -	case DRM_FORMAT_ABGR8888:
> -		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
> -		break;
> -#endif
> -	default:
> -		DRM_ERROR("failed to find virtio gpu format for %d\n",
> -			  mode_cmd.pixel_format);
> +	format = virtio_gpu_translate_format(mode_cmd.pixel_format);
> +	if (format == 0)
>  		return -EINVAL;
> -	}
>  
>  	size = mode_cmd.pitches[0] * mode_cmd.height;
>  	obj = virtio_gpu_alloc_object(dev, size, false, true);
> diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c
> index 1ff9c64..372c91c 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_plane.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_plane.c
> @@ -42,6 +42,74 @@ static const uint32_t virtio_gpu_cursor_formats[] = {
>  	DRM_FORMAT_ARGB8888,
>  };
>  
> +uint32_t virtio_gpu_translate_format(uint32_t drm_fourcc)
> +{
> +	uint32_t format;
> +
> +	switch (drm_fourcc) {
> +#ifdef __BIG_ENDIAN
> +	case DRM_FORMAT_XRGB8888:
> +		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
> +		break;
> +	case DRM_FORMAT_ARGB8888:
> +		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
> +		break;
> +	case DRM_FORMAT_BGRX8888:
> +		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
> +		break;
> +	case DRM_FORMAT_BGRA8888:
> +		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
> +		break;
> +	case DRM_FORMAT_RGBX8888:
> +		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
> +		break;
> +	case DRM_FORMAT_RGBA8888:
> +		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
> +		break;
> +	case DRM_FORMAT_XBGR8888:
> +		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
> +		break;
> +	case DRM_FORMAT_ABGR8888:
> +		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
> +		break;
> +#else
> +	case DRM_FORMAT_XRGB8888:
> +		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
> +		break;
> +	case DRM_FORMAT_ARGB8888:
> +		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
> +		break;
> +	case DRM_FORMAT_BGRX8888:
> +		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
> +		break;
> +	case DRM_FORMAT_BGRA8888:
> +		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
> +		break;
> +	case DRM_FORMAT_RGBX8888:
> +		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
> +		break;
> +	case DRM_FORMAT_RGBA8888:
> +		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
> +		break;
> +	case DRM_FORMAT_XBGR8888:
> +		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
> +		break;
> +	case DRM_FORMAT_ABGR8888:
> +		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
> +		break;
> +#endif
> +	default:
> +		/*
> +		 * This should not happen, we handle everything listed
> +		 * in virtio_gpu_formats[].
> +		 */
> +		format = 0;
> +		break;
> +	}
> +	WARN_ON(format == 0);
> +	return format;
> +}
> +
>  static void virtio_gpu_plane_destroy(struct drm_plane *plane)
>  {
>  	drm_plane_cleanup(plane);
> -- 
> 2.9.3
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/2] drm: virtio: add virtio_gpu_translate_format
  2017-04-03  7:08   ` Gerd Hoffmann
  (?)
  (?)
@ 2017-04-03  7:51   ` Daniel Vetter
  -1 siblings, 0 replies; 21+ messages in thread
From: Daniel Vetter @ 2017-04-03  7:51 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: lvivier, open list, dri-devel, open list:VIRTIO GPU DRIVER

On Mon, Apr 03, 2017 at 09:08:44AM +0200, Gerd Hoffmann wrote:
> Factors out code, no functional change.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

Ugh on the big endian define, I guess we'll never managed to figure this
aspect of drm pixel formats out correctly - they're supposed to encode
endinaness.

But the copy-paste looks correct :-)

Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> ---
>  drivers/gpu/drm/virtio/virtgpu_drv.h   |  1 +
>  drivers/gpu/drm/virtio/virtgpu_fb.c    | 58 +----------------------------
>  drivers/gpu/drm/virtio/virtgpu_plane.c | 68 ++++++++++++++++++++++++++++++++++
>  3 files changed, 71 insertions(+), 56 deletions(-)
> 
> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
> index 93900a8..1328185 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_drv.h
> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
> @@ -334,6 +334,7 @@ int virtio_gpu_modeset_init(struct virtio_gpu_device *vgdev);
>  void virtio_gpu_modeset_fini(struct virtio_gpu_device *vgdev);
>  
>  /* virtio_gpu_plane.c */
> +uint32_t virtio_gpu_translate_format(uint32_t drm_fourcc);
>  struct drm_plane *virtio_gpu_plane_init(struct virtio_gpu_device *vgdev,
>  					enum drm_plane_type type,
>  					int index);
> diff --git a/drivers/gpu/drm/virtio/virtgpu_fb.c b/drivers/gpu/drm/virtio/virtgpu_fb.c
> index 9bfaef3..33df067 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_fb.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_fb.c
> @@ -231,63 +231,9 @@ static int virtio_gpufb_create(struct drm_fb_helper *helper,
>  	mode_cmd.pitches[0] = mode_cmd.width * 4;
>  	mode_cmd.pixel_format = drm_mode_legacy_fb_format(32, 24);
>  
> -	switch (mode_cmd.pixel_format) {
> -#ifdef __BIG_ENDIAN
> -	case DRM_FORMAT_XRGB8888:
> -		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
> -		break;
> -	case DRM_FORMAT_ARGB8888:
> -		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
> -		break;
> -	case DRM_FORMAT_BGRX8888:
> -		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
> -		break;
> -	case DRM_FORMAT_BGRA8888:
> -		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
> -		break;
> -	case DRM_FORMAT_RGBX8888:
> -		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
> -		break;
> -	case DRM_FORMAT_RGBA8888:
> -		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
> -		break;
> -	case DRM_FORMAT_XBGR8888:
> -		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
> -		break;
> -	case DRM_FORMAT_ABGR8888:
> -		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
> -		break;
> -#else
> -	case DRM_FORMAT_XRGB8888:
> -		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
> -		break;
> -	case DRM_FORMAT_ARGB8888:
> -		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
> -		break;
> -	case DRM_FORMAT_BGRX8888:
> -		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
> -		break;
> -	case DRM_FORMAT_BGRA8888:
> -		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
> -		break;
> -	case DRM_FORMAT_RGBX8888:
> -		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
> -		break;
> -	case DRM_FORMAT_RGBA8888:
> -		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
> -		break;
> -	case DRM_FORMAT_XBGR8888:
> -		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
> -		break;
> -	case DRM_FORMAT_ABGR8888:
> -		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
> -		break;
> -#endif
> -	default:
> -		DRM_ERROR("failed to find virtio gpu format for %d\n",
> -			  mode_cmd.pixel_format);
> +	format = virtio_gpu_translate_format(mode_cmd.pixel_format);
> +	if (format == 0)
>  		return -EINVAL;
> -	}
>  
>  	size = mode_cmd.pitches[0] * mode_cmd.height;
>  	obj = virtio_gpu_alloc_object(dev, size, false, true);
> diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c
> index 1ff9c64..372c91c 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_plane.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_plane.c
> @@ -42,6 +42,74 @@ static const uint32_t virtio_gpu_cursor_formats[] = {
>  	DRM_FORMAT_ARGB8888,
>  };
>  
> +uint32_t virtio_gpu_translate_format(uint32_t drm_fourcc)
> +{
> +	uint32_t format;
> +
> +	switch (drm_fourcc) {
> +#ifdef __BIG_ENDIAN
> +	case DRM_FORMAT_XRGB8888:
> +		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
> +		break;
> +	case DRM_FORMAT_ARGB8888:
> +		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
> +		break;
> +	case DRM_FORMAT_BGRX8888:
> +		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
> +		break;
> +	case DRM_FORMAT_BGRA8888:
> +		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
> +		break;
> +	case DRM_FORMAT_RGBX8888:
> +		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
> +		break;
> +	case DRM_FORMAT_RGBA8888:
> +		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
> +		break;
> +	case DRM_FORMAT_XBGR8888:
> +		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
> +		break;
> +	case DRM_FORMAT_ABGR8888:
> +		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
> +		break;
> +#else
> +	case DRM_FORMAT_XRGB8888:
> +		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
> +		break;
> +	case DRM_FORMAT_ARGB8888:
> +		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
> +		break;
> +	case DRM_FORMAT_BGRX8888:
> +		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
> +		break;
> +	case DRM_FORMAT_BGRA8888:
> +		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
> +		break;
> +	case DRM_FORMAT_RGBX8888:
> +		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
> +		break;
> +	case DRM_FORMAT_RGBA8888:
> +		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
> +		break;
> +	case DRM_FORMAT_XBGR8888:
> +		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
> +		break;
> +	case DRM_FORMAT_ABGR8888:
> +		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
> +		break;
> +#endif
> +	default:
> +		/*
> +		 * This should not happen, we handle everything listed
> +		 * in virtio_gpu_formats[].
> +		 */
> +		format = 0;
> +		break;
> +	}
> +	WARN_ON(format == 0);
> +	return format;
> +}
> +
>  static void virtio_gpu_plane_destroy(struct drm_plane *plane)
>  {
>  	drm_plane_cleanup(plane);
> -- 
> 2.9.3
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/2] drm: virtio: add virtio_gpu_translate_format
@ 2017-04-03  7:51     ` Daniel Vetter
  0 siblings, 0 replies; 21+ messages in thread
From: Daniel Vetter @ 2017-04-03  7:51 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: lvivier, open list, dri-devel, open list:VIRTIO GPU DRIVER

On Mon, Apr 03, 2017 at 09:08:44AM +0200, Gerd Hoffmann wrote:
> Factors out code, no functional change.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

Ugh on the big endian define, I guess we'll never managed to figure this
aspect of drm pixel formats out correctly - they're supposed to encode
endinaness.

But the copy-paste looks correct :-)

Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> ---
>  drivers/gpu/drm/virtio/virtgpu_drv.h   |  1 +
>  drivers/gpu/drm/virtio/virtgpu_fb.c    | 58 +----------------------------
>  drivers/gpu/drm/virtio/virtgpu_plane.c | 68 ++++++++++++++++++++++++++++++++++
>  3 files changed, 71 insertions(+), 56 deletions(-)
> 
> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
> index 93900a8..1328185 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_drv.h
> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
> @@ -334,6 +334,7 @@ int virtio_gpu_modeset_init(struct virtio_gpu_device *vgdev);
>  void virtio_gpu_modeset_fini(struct virtio_gpu_device *vgdev);
>  
>  /* virtio_gpu_plane.c */
> +uint32_t virtio_gpu_translate_format(uint32_t drm_fourcc);
>  struct drm_plane *virtio_gpu_plane_init(struct virtio_gpu_device *vgdev,
>  					enum drm_plane_type type,
>  					int index);
> diff --git a/drivers/gpu/drm/virtio/virtgpu_fb.c b/drivers/gpu/drm/virtio/virtgpu_fb.c
> index 9bfaef3..33df067 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_fb.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_fb.c
> @@ -231,63 +231,9 @@ static int virtio_gpufb_create(struct drm_fb_helper *helper,
>  	mode_cmd.pitches[0] = mode_cmd.width * 4;
>  	mode_cmd.pixel_format = drm_mode_legacy_fb_format(32, 24);
>  
> -	switch (mode_cmd.pixel_format) {
> -#ifdef __BIG_ENDIAN
> -	case DRM_FORMAT_XRGB8888:
> -		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
> -		break;
> -	case DRM_FORMAT_ARGB8888:
> -		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
> -		break;
> -	case DRM_FORMAT_BGRX8888:
> -		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
> -		break;
> -	case DRM_FORMAT_BGRA8888:
> -		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
> -		break;
> -	case DRM_FORMAT_RGBX8888:
> -		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
> -		break;
> -	case DRM_FORMAT_RGBA8888:
> -		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
> -		break;
> -	case DRM_FORMAT_XBGR8888:
> -		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
> -		break;
> -	case DRM_FORMAT_ABGR8888:
> -		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
> -		break;
> -#else
> -	case DRM_FORMAT_XRGB8888:
> -		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
> -		break;
> -	case DRM_FORMAT_ARGB8888:
> -		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
> -		break;
> -	case DRM_FORMAT_BGRX8888:
> -		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
> -		break;
> -	case DRM_FORMAT_BGRA8888:
> -		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
> -		break;
> -	case DRM_FORMAT_RGBX8888:
> -		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
> -		break;
> -	case DRM_FORMAT_RGBA8888:
> -		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
> -		break;
> -	case DRM_FORMAT_XBGR8888:
> -		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
> -		break;
> -	case DRM_FORMAT_ABGR8888:
> -		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
> -		break;
> -#endif
> -	default:
> -		DRM_ERROR("failed to find virtio gpu format for %d\n",
> -			  mode_cmd.pixel_format);
> +	format = virtio_gpu_translate_format(mode_cmd.pixel_format);
> +	if (format == 0)
>  		return -EINVAL;
> -	}
>  
>  	size = mode_cmd.pitches[0] * mode_cmd.height;
>  	obj = virtio_gpu_alloc_object(dev, size, false, true);
> diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c
> index 1ff9c64..372c91c 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_plane.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_plane.c
> @@ -42,6 +42,74 @@ static const uint32_t virtio_gpu_cursor_formats[] = {
>  	DRM_FORMAT_ARGB8888,
>  };
>  
> +uint32_t virtio_gpu_translate_format(uint32_t drm_fourcc)
> +{
> +	uint32_t format;
> +
> +	switch (drm_fourcc) {
> +#ifdef __BIG_ENDIAN
> +	case DRM_FORMAT_XRGB8888:
> +		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
> +		break;
> +	case DRM_FORMAT_ARGB8888:
> +		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
> +		break;
> +	case DRM_FORMAT_BGRX8888:
> +		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
> +		break;
> +	case DRM_FORMAT_BGRA8888:
> +		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
> +		break;
> +	case DRM_FORMAT_RGBX8888:
> +		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
> +		break;
> +	case DRM_FORMAT_RGBA8888:
> +		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
> +		break;
> +	case DRM_FORMAT_XBGR8888:
> +		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
> +		break;
> +	case DRM_FORMAT_ABGR8888:
> +		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
> +		break;
> +#else
> +	case DRM_FORMAT_XRGB8888:
> +		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
> +		break;
> +	case DRM_FORMAT_ARGB8888:
> +		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
> +		break;
> +	case DRM_FORMAT_BGRX8888:
> +		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
> +		break;
> +	case DRM_FORMAT_BGRA8888:
> +		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
> +		break;
> +	case DRM_FORMAT_RGBX8888:
> +		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
> +		break;
> +	case DRM_FORMAT_RGBA8888:
> +		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
> +		break;
> +	case DRM_FORMAT_XBGR8888:
> +		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
> +		break;
> +	case DRM_FORMAT_ABGR8888:
> +		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
> +		break;
> +#endif
> +	default:
> +		/*
> +		 * This should not happen, we handle everything listed
> +		 * in virtio_gpu_formats[].
> +		 */
> +		format = 0;
> +		break;
> +	}
> +	WARN_ON(format == 0);
> +	return format;
> +}
> +
>  static void virtio_gpu_plane_destroy(struct drm_plane *plane)
>  {
>  	drm_plane_cleanup(plane);
> -- 
> 2.9.3
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/2] drm: virtio: fix virtio_gpu_mode_dumb_create
  2017-04-03  7:08   ` Gerd Hoffmann
@ 2017-04-03  7:53     ` Daniel Vetter
  -1 siblings, 0 replies; 21+ messages in thread
From: Daniel Vetter @ 2017-04-03  7:53 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: dri-devel, lvivier, open list, open list:VIRTIO GPU DRIVER

On Mon, Apr 03, 2017 at 09:08:45AM +0200, Gerd Hoffmann wrote:
> Lookup format using virtio_gpu_translate_format()
> instead of hardcoding it.  Fixes xorg display on
> bigendian guests (i.e. ppc64).
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

ow ... :(

With what kind of client have you tested this? fbdev? kms native?

Should we patch drm_fourcc.h and essentially state that _all_ drm_fourcc
are in native endian, don't dare mixing things up? Would be good to send
out an rfc and discuss it with radeon/amd maintainers. Afaik they are the
only ones who also care about some big endian platforms.

On the patch itself, once you've added more details about what/how it
falls over:

Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-Daniel

> ---
>  drivers/gpu/drm/virtio/virtgpu_gem.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c
> index 336a57f..cc025d8 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_gem.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_gem.c
> @@ -88,6 +88,7 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
>  	int ret;
>  	uint32_t pitch;
>  	uint32_t resid;
> +	uint32_t format;
>  
>  	pitch = args->width * ((args->bpp + 1) / 8);
>  	args->size = pitch * args->height;
> @@ -98,9 +99,10 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
>  	if (ret)
>  		goto fail;
>  
> +	format = virtio_gpu_translate_format(DRM_FORMAT_XRGB8888);
>  	virtio_gpu_resource_id_get(vgdev, &resid);
> -	virtio_gpu_cmd_create_resource(vgdev, resid,
> -				       2, args->width, args->height);
> +	virtio_gpu_cmd_create_resource(vgdev, resid, format,
> +				       args->width, args->height);
>  
>  	/* attach the object to the resource */
>  	obj = gem_to_virtio_gpu_obj(gobj);
> -- 
> 2.9.3
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/2] drm: virtio: fix virtio_gpu_mode_dumb_create
  2017-04-03  7:08   ` Gerd Hoffmann
                     ` (2 preceding siblings ...)
  (?)
@ 2017-04-03  7:53   ` Daniel Vetter
  -1 siblings, 0 replies; 21+ messages in thread
From: Daniel Vetter @ 2017-04-03  7:53 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: lvivier, open list, dri-devel, open list:VIRTIO GPU DRIVER

On Mon, Apr 03, 2017 at 09:08:45AM +0200, Gerd Hoffmann wrote:
> Lookup format using virtio_gpu_translate_format()
> instead of hardcoding it.  Fixes xorg display on
> bigendian guests (i.e. ppc64).
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

ow ... :(

With what kind of client have you tested this? fbdev? kms native?

Should we patch drm_fourcc.h and essentially state that _all_ drm_fourcc
are in native endian, don't dare mixing things up? Would be good to send
out an rfc and discuss it with radeon/amd maintainers. Afaik they are the
only ones who also care about some big endian platforms.

On the patch itself, once you've added more details about what/how it
falls over:

Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-Daniel

> ---
>  drivers/gpu/drm/virtio/virtgpu_gem.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c
> index 336a57f..cc025d8 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_gem.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_gem.c
> @@ -88,6 +88,7 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
>  	int ret;
>  	uint32_t pitch;
>  	uint32_t resid;
> +	uint32_t format;
>  
>  	pitch = args->width * ((args->bpp + 1) / 8);
>  	args->size = pitch * args->height;
> @@ -98,9 +99,10 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
>  	if (ret)
>  		goto fail;
>  
> +	format = virtio_gpu_translate_format(DRM_FORMAT_XRGB8888);
>  	virtio_gpu_resource_id_get(vgdev, &resid);
> -	virtio_gpu_cmd_create_resource(vgdev, resid,
> -				       2, args->width, args->height);
> +	virtio_gpu_cmd_create_resource(vgdev, resid, format,
> +				       args->width, args->height);
>  
>  	/* attach the object to the resource */
>  	obj = gem_to_virtio_gpu_obj(gobj);
> -- 
> 2.9.3
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/2] drm: virtio: fix virtio_gpu_mode_dumb_create
@ 2017-04-03  7:53     ` Daniel Vetter
  0 siblings, 0 replies; 21+ messages in thread
From: Daniel Vetter @ 2017-04-03  7:53 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: lvivier, open list, dri-devel, open list:VIRTIO GPU DRIVER

On Mon, Apr 03, 2017 at 09:08:45AM +0200, Gerd Hoffmann wrote:
> Lookup format using virtio_gpu_translate_format()
> instead of hardcoding it.  Fixes xorg display on
> bigendian guests (i.e. ppc64).
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

ow ... :(

With what kind of client have you tested this? fbdev? kms native?

Should we patch drm_fourcc.h and essentially state that _all_ drm_fourcc
are in native endian, don't dare mixing things up? Would be good to send
out an rfc and discuss it with radeon/amd maintainers. Afaik they are the
only ones who also care about some big endian platforms.

On the patch itself, once you've added more details about what/how it
falls over:

Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-Daniel

> ---
>  drivers/gpu/drm/virtio/virtgpu_gem.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c
> index 336a57f..cc025d8 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_gem.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_gem.c
> @@ -88,6 +88,7 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
>  	int ret;
>  	uint32_t pitch;
>  	uint32_t resid;
> +	uint32_t format;
>  
>  	pitch = args->width * ((args->bpp + 1) / 8);
>  	args->size = pitch * args->height;
> @@ -98,9 +99,10 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
>  	if (ret)
>  		goto fail;
>  
> +	format = virtio_gpu_translate_format(DRM_FORMAT_XRGB8888);
>  	virtio_gpu_resource_id_get(vgdev, &resid);
> -	virtio_gpu_cmd_create_resource(vgdev, resid,
> -				       2, args->width, args->height);
> +	virtio_gpu_cmd_create_resource(vgdev, resid, format,
> +				       args->width, args->height);
>  
>  	/* attach the object to the resource */
>  	obj = gem_to_virtio_gpu_obj(gobj);
> -- 
> 2.9.3
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 0/2] virtio: fix virtio_gpu_mode_dumb_create
  2017-04-03  7:08 [PATCH 0/2] virtio: fix virtio_gpu_mode_dumb_create Gerd Hoffmann
                   ` (2 preceding siblings ...)
  2017-04-03  7:08 ` Gerd Hoffmann
@ 2017-04-03  8:31 ` Laurent Vivier
  3 siblings, 0 replies; 21+ messages in thread
From: Laurent Vivier @ 2017-04-03  8:31 UTC (permalink / raw)
  To: Gerd Hoffmann, dri-devel

On 03/04/2017 09:08, Gerd Hoffmann wrote:
>   Hi,
> 
> Little series to fix xorg display on virtio on bigendian machines.
> First patch factors out the drm -> virtio format mapping code into
> a helper function, second patch actually fixes the issue using the
> new helper.
> 
> cheers,
>   Gerd
> 
> Gerd Hoffmann (2):
>   drm: virtio: add virtio_gpu_translate_format
>   drm: virtio: fix virtio_gpu_mode_dumb_create
> 
>  drivers/gpu/drm/virtio/virtgpu_drv.h   |  1 +
>  drivers/gpu/drm/virtio/virtgpu_fb.c    | 58 +----------------------------
>  drivers/gpu/drm/virtio/virtgpu_gem.c   |  6 ++-
>  drivers/gpu/drm/virtio/virtgpu_plane.c | 68 ++++++++++++++++++++++++++++++++++
>  4 files changed, 75 insertions(+), 58 deletions(-)
> 

Tested-by: Laurent Vivier <lvivier@redhat.com>

Tested with BE endian kernel in QEMU pseries emulation on a LE endian
kernel host.

This fixes mixed RGB colors with X11.

Thanks,
Laurent
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/2] drm: virtio: fix virtio_gpu_mode_dumb_create
  2017-04-03  7:53     ` Daniel Vetter
@ 2017-04-03  9:02       ` Gerd Hoffmann
  -1 siblings, 0 replies; 21+ messages in thread
From: Gerd Hoffmann @ 2017-04-03  9:02 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: dri-devel, lvivier, open list, open list:VIRTIO GPU DRIVER

On Mo, 2017-04-03 at 09:53 +0200, Daniel Vetter wrote:
> On Mon, Apr 03, 2017 at 09:08:45AM +0200, Gerd Hoffmann wrote:
> > Lookup format using virtio_gpu_translate_format()
> > instead of hardcoding it.  Fixes xorg display on
> > bigendian guests (i.e. ppc64).
> > 
> > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> 
> ow ... :(
> 
> With what kind of client have you tested this? fbdev? kms native?

text console (fbcon) is fine, xorg (modesetting driver) fails.

> Should we patch drm_fourcc.h and essentially state that _all_ drm_fourcc
> are in native endian, don't dare mixing things up?

Well, I don't think this needs clarification.  I never assumed that
fourcc is something else than native endian.  It really was just an
oversight in the virtio driver.

One code path (which creates the framebuffer for fbdev emulation) did
proper drm_fourcc -> virtio format mapping, including endianness
handling.  Patch 1/2 of this series factors this code out into a helper
function so we can easily reuse it.

The other code path (for creating dumb buffers) had the virtio format
hardcoded which happened to work correctly in the little endian case.

cheers,
  Gerd

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/2] drm: virtio: fix virtio_gpu_mode_dumb_create
  2017-04-03  7:53     ` Daniel Vetter
  (?)
@ 2017-04-03  9:02     ` Gerd Hoffmann
  -1 siblings, 0 replies; 21+ messages in thread
From: Gerd Hoffmann @ 2017-04-03  9:02 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: lvivier, open list, dri-devel, open list:VIRTIO GPU DRIVER

On Mo, 2017-04-03 at 09:53 +0200, Daniel Vetter wrote:
> On Mon, Apr 03, 2017 at 09:08:45AM +0200, Gerd Hoffmann wrote:
> > Lookup format using virtio_gpu_translate_format()
> > instead of hardcoding it.  Fixes xorg display on
> > bigendian guests (i.e. ppc64).
> > 
> > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> 
> ow ... :(
> 
> With what kind of client have you tested this? fbdev? kms native?

text console (fbcon) is fine, xorg (modesetting driver) fails.

> Should we patch drm_fourcc.h and essentially state that _all_ drm_fourcc
> are in native endian, don't dare mixing things up?

Well, I don't think this needs clarification.  I never assumed that
fourcc is something else than native endian.  It really was just an
oversight in the virtio driver.

One code path (which creates the framebuffer for fbdev emulation) did
proper drm_fourcc -> virtio format mapping, including endianness
handling.  Patch 1/2 of this series factors this code out into a helper
function so we can easily reuse it.

The other code path (for creating dumb buffers) had the virtio format
hardcoded which happened to work correctly in the little endian case.

cheers,
  Gerd

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/2] drm: virtio: fix virtio_gpu_mode_dumb_create
@ 2017-04-03  9:02       ` Gerd Hoffmann
  0 siblings, 0 replies; 21+ messages in thread
From: Gerd Hoffmann @ 2017-04-03  9:02 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: lvivier, open list, dri-devel, open list:VIRTIO GPU DRIVER

On Mo, 2017-04-03 at 09:53 +0200, Daniel Vetter wrote:
> On Mon, Apr 03, 2017 at 09:08:45AM +0200, Gerd Hoffmann wrote:
> > Lookup format using virtio_gpu_translate_format()
> > instead of hardcoding it.  Fixes xorg display on
> > bigendian guests (i.e. ppc64).
> > 
> > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> 
> ow ... :(
> 
> With what kind of client have you tested this? fbdev? kms native?

text console (fbcon) is fine, xorg (modesetting driver) fails.

> Should we patch drm_fourcc.h and essentially state that _all_ drm_fourcc
> are in native endian, don't dare mixing things up?

Well, I don't think this needs clarification.  I never assumed that
fourcc is something else than native endian.  It really was just an
oversight in the virtio driver.

One code path (which creates the framebuffer for fbdev emulation) did
proper drm_fourcc -> virtio format mapping, including endianness
handling.  Patch 1/2 of this series factors this code out into a helper
function so we can easily reuse it.

The other code path (for creating dumb buffers) had the virtio format
hardcoded which happened to work correctly in the little endian case.

cheers,
  Gerd

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/2] drm: virtio: add virtio_gpu_translate_format
  2017-04-03  7:51     ` Daniel Vetter
@ 2017-04-03  9:05       ` Gerd Hoffmann
  -1 siblings, 0 replies; 21+ messages in thread
From: Gerd Hoffmann @ 2017-04-03  9:05 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: dri-devel, lvivier, open list, open list:VIRTIO GPU DRIVER

On Mo, 2017-04-03 at 09:51 +0200, Daniel Vetter wrote:
> On Mon, Apr 03, 2017 at 09:08:44AM +0200, Gerd Hoffmann wrote:
> > Factors out code, no functional change.
> > 
> > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> 
> Ugh on the big endian define, I guess we'll never managed to figure this
> aspect of drm pixel formats out correctly - they're supposed to encode
> endinaness.

Oh, ok.  (reading your patch replies out-of-order).

Yep, in that case it maybe is a good idea to discuss fourcc
semantics ...

cheers,
  Gerd

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/2] drm: virtio: add virtio_gpu_translate_format
  2017-04-03  7:51     ` Daniel Vetter
  (?)
  (?)
@ 2017-04-03  9:05     ` Gerd Hoffmann
  -1 siblings, 0 replies; 21+ messages in thread
From: Gerd Hoffmann @ 2017-04-03  9:05 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: lvivier, open list, dri-devel, open list:VIRTIO GPU DRIVER

On Mo, 2017-04-03 at 09:51 +0200, Daniel Vetter wrote:
> On Mon, Apr 03, 2017 at 09:08:44AM +0200, Gerd Hoffmann wrote:
> > Factors out code, no functional change.
> > 
> > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> 
> Ugh on the big endian define, I guess we'll never managed to figure this
> aspect of drm pixel formats out correctly - they're supposed to encode
> endinaness.

Oh, ok.  (reading your patch replies out-of-order).

Yep, in that case it maybe is a good idea to discuss fourcc
semantics ...

cheers,
  Gerd

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/2] drm: virtio: add virtio_gpu_translate_format
@ 2017-04-03  9:05       ` Gerd Hoffmann
  0 siblings, 0 replies; 21+ messages in thread
From: Gerd Hoffmann @ 2017-04-03  9:05 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: lvivier, open list, dri-devel, open list:VIRTIO GPU DRIVER

On Mo, 2017-04-03 at 09:51 +0200, Daniel Vetter wrote:
> On Mon, Apr 03, 2017 at 09:08:44AM +0200, Gerd Hoffmann wrote:
> > Factors out code, no functional change.
> > 
> > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> 
> Ugh on the big endian define, I guess we'll never managed to figure this
> aspect of drm pixel formats out correctly - they're supposed to encode
> endinaness.

Oh, ok.  (reading your patch replies out-of-order).

Yep, in that case it maybe is a good idea to discuss fourcc
semantics ...

cheers,
  Gerd

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2017-04-03  9:05 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-03  7:08 [PATCH 0/2] virtio: fix virtio_gpu_mode_dumb_create Gerd Hoffmann
2017-04-03  7:08 ` [PATCH 1/2] drm: virtio: add virtio_gpu_translate_format Gerd Hoffmann
2017-04-03  7:08   ` Gerd Hoffmann
2017-04-03  7:51   ` Daniel Vetter
2017-04-03  7:51     ` Daniel Vetter
2017-04-03  9:05     ` Gerd Hoffmann
2017-04-03  9:05       ` Gerd Hoffmann
2017-04-03  9:05     ` Gerd Hoffmann
2017-04-03  7:51   ` Daniel Vetter
2017-04-03  7:08 ` [PATCH 2/2] drm: virtio: fix virtio_gpu_mode_dumb_create Gerd Hoffmann
2017-04-03  7:08   ` Gerd Hoffmann
2017-04-03  7:45   ` Dave Airlie
2017-04-03  7:45     ` Dave Airlie
2017-04-03  7:53   ` Daniel Vetter
2017-04-03  7:53     ` Daniel Vetter
2017-04-03  9:02     ` Gerd Hoffmann
2017-04-03  9:02     ` Gerd Hoffmann
2017-04-03  9:02       ` Gerd Hoffmann
2017-04-03  7:53   ` Daniel Vetter
2017-04-03  7:08 ` Gerd Hoffmann
2017-04-03  8:31 ` [PATCH 0/2] " Laurent Vivier

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.