linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] drm/tinydrm: Advertise that we can do only DRM_FORMAT_MOD_LINEAR.
@ 2018-10-25 16:26 Eric Anholt
  2018-10-27 16:21 ` Noralf Trønnes
  0 siblings, 1 reply; 2+ messages in thread
From: Eric Anholt @ 2018-10-25 16:26 UTC (permalink / raw)
  To: dri-devel, Noralf Trønnes; +Cc: linux-kernel, Eric Anholt

Without this, the xserver relies on what the 3D driver exposes and
assumes that the display can handle it, and then the DRM driver
happily tries to scan out a tiled format.

Signed-off-by: Eric Anholt <eric@anholt.net>
---
 drivers/gpu/drm/drm_simple_kms_helper.c     | 8 ++++++++
 drivers/gpu/drm/tinydrm/core/tinydrm-core.c | 1 +
 drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c | 6 +++++-
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
index 51fa978f0d23..917812448d1b 100644
--- a/drivers/gpu/drm/drm_simple_kms_helper.c
+++ b/drivers/gpu/drm/drm_simple_kms_helper.c
@@ -190,6 +190,13 @@ static void drm_simple_kms_plane_cleanup_fb(struct drm_plane *plane,
 	pipe->funcs->cleanup_fb(pipe, state);
 }
 
+static bool drm_simple_kms_format_mod_supported(struct drm_plane *plane,
+						uint32_t format,
+						uint64_t modifier)
+{
+	return modifier == DRM_FORMAT_MOD_LINEAR;
+}
+
 static const struct drm_plane_helper_funcs drm_simple_kms_plane_helper_funcs = {
 	.prepare_fb = drm_simple_kms_plane_prepare_fb,
 	.cleanup_fb = drm_simple_kms_plane_cleanup_fb,
@@ -204,6 +211,7 @@ static const struct drm_plane_funcs drm_simple_kms_plane_funcs = {
 	.reset			= drm_atomic_helper_plane_reset,
 	.atomic_duplicate_state	= drm_atomic_helper_plane_duplicate_state,
 	.atomic_destroy_state	= drm_atomic_helper_plane_destroy_state,
+	.format_mod_supported   = drm_simple_kms_format_mod_supported,
 };
 
 /**
diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-core.c b/drivers/gpu/drm/tinydrm/core/tinydrm-core.c
index 255341ee4eb9..9af51d982a33 100644
--- a/drivers/gpu/drm/tinydrm/core/tinydrm-core.c
+++ b/drivers/gpu/drm/tinydrm/core/tinydrm-core.c
@@ -146,6 +146,7 @@ static int tinydrm_init(struct device *parent, struct tinydrm_device *tdev,
 	drm->dev_private = tdev;
 	drm_mode_config_init(drm);
 	drm->mode_config.funcs = &tinydrm_mode_config_funcs;
+	drm->mode_config.allow_fb_modifiers = true;
 
 	return 0;
 }
diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c b/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
index 7e8e24d0b7a7..eacfc0ec8ff1 100644
--- a/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
+++ b/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
@@ -184,6 +184,10 @@ tinydrm_display_pipe_init(struct tinydrm_device *tdev,
 	struct drm_display_mode mode_copy;
 	struct drm_connector *connector;
 	int ret;
+	static const uint64_t modifiers[] = {
+		DRM_FORMAT_MOD_LINEAR,
+		DRM_FORMAT_MOD_INVALID
+	};
 
 	drm_mode_copy(&mode_copy, mode);
 	ret = tinydrm_rotate_mode(&mode_copy, rotation);
@@ -202,6 +206,6 @@ tinydrm_display_pipe_init(struct tinydrm_device *tdev,
 		return PTR_ERR(connector);
 
 	return drm_simple_display_pipe_init(drm, &tdev->pipe, funcs, formats,
-					    format_count, NULL, connector);
+					    format_count, modifiers, connector);
 }
 EXPORT_SYMBOL(tinydrm_display_pipe_init);
-- 
2.19.1


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

* Re: [PATCH] drm/tinydrm: Advertise that we can do only DRM_FORMAT_MOD_LINEAR.
  2018-10-25 16:26 [PATCH] drm/tinydrm: Advertise that we can do only DRM_FORMAT_MOD_LINEAR Eric Anholt
@ 2018-10-27 16:21 ` Noralf Trønnes
  0 siblings, 0 replies; 2+ messages in thread
From: Noralf Trønnes @ 2018-10-27 16:21 UTC (permalink / raw)
  To: Eric Anholt, dri-devel; +Cc: linux-kernel


Den 25.10.2018 18.26, skrev Eric Anholt:
> Without this, the xserver relies on what the 3D driver exposes and
> assumes that the display can handle it, and then the DRM driver
> happily tries to scan out a tiled format.
>
> Signed-off-by: Eric Anholt <eric@anholt.net>
> ---
>   drivers/gpu/drm/drm_simple_kms_helper.c     | 8 ++++++++
>   drivers/gpu/drm/tinydrm/core/tinydrm-core.c | 1 +
>   drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c | 6 +++++-
>   3 files changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
> index 51fa978f0d23..917812448d1b 100644
> --- a/drivers/gpu/drm/drm_simple_kms_helper.c
> +++ b/drivers/gpu/drm/drm_simple_kms_helper.c
> @@ -190,6 +190,13 @@ static void drm_simple_kms_plane_cleanup_fb(struct drm_plane *plane,
>   	pipe->funcs->cleanup_fb(pipe, state);
>   }
>   
> +static bool drm_simple_kms_format_mod_supported(struct drm_plane *plane,
> +						uint32_t format,
> +						uint64_t modifier)
> +{
> +	return modifier == DRM_FORMAT_MOD_LINEAR;
> +}
> +

I assume this also works for the other drivers that use this helper.
A quick look at the code seems to support this assumption.
Format modifiers is something I've never looked at before.

Acked-by: Noralf Trønnes <noralf@tronnes.org>

>   static const struct drm_plane_helper_funcs drm_simple_kms_plane_helper_funcs = {
>   	.prepare_fb = drm_simple_kms_plane_prepare_fb,
>   	.cleanup_fb = drm_simple_kms_plane_cleanup_fb,
> @@ -204,6 +211,7 @@ static const struct drm_plane_funcs drm_simple_kms_plane_funcs = {
>   	.reset			= drm_atomic_helper_plane_reset,
>   	.atomic_duplicate_state	= drm_atomic_helper_plane_duplicate_state,
>   	.atomic_destroy_state	= drm_atomic_helper_plane_destroy_state,
> +	.format_mod_supported   = drm_simple_kms_format_mod_supported,
>   };
>   
>   /**
> diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-core.c b/drivers/gpu/drm/tinydrm/core/tinydrm-core.c
> index 255341ee4eb9..9af51d982a33 100644
> --- a/drivers/gpu/drm/tinydrm/core/tinydrm-core.c
> +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-core.c
> @@ -146,6 +146,7 @@ static int tinydrm_init(struct device *parent, struct tinydrm_device *tdev,
>   	drm->dev_private = tdev;
>   	drm_mode_config_init(drm);
>   	drm->mode_config.funcs = &tinydrm_mode_config_funcs;
> +	drm->mode_config.allow_fb_modifiers = true;
>   
>   	return 0;
>   }
> diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c b/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
> index 7e8e24d0b7a7..eacfc0ec8ff1 100644
> --- a/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
> +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
> @@ -184,6 +184,10 @@ tinydrm_display_pipe_init(struct tinydrm_device *tdev,
>   	struct drm_display_mode mode_copy;
>   	struct drm_connector *connector;
>   	int ret;
> +	static const uint64_t modifiers[] = {
> +		DRM_FORMAT_MOD_LINEAR,
> +		DRM_FORMAT_MOD_INVALID
> +	};
>   
>   	drm_mode_copy(&mode_copy, mode);
>   	ret = tinydrm_rotate_mode(&mode_copy, rotation);
> @@ -202,6 +206,6 @@ tinydrm_display_pipe_init(struct tinydrm_device *tdev,
>   		return PTR_ERR(connector);
>   
>   	return drm_simple_display_pipe_init(drm, &tdev->pipe, funcs, formats,
> -					    format_count, NULL, connector);
> +					    format_count, modifiers, connector);
>   }
>   EXPORT_SYMBOL(tinydrm_display_pipe_init);


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

end of thread, other threads:[~2018-10-27 16:21 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-25 16:26 [PATCH] drm/tinydrm: Advertise that we can do only DRM_FORMAT_MOD_LINEAR Eric Anholt
2018-10-27 16:21 ` Noralf Trønnes

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).