* [PATCHv2 1/3] drm/plane: Add new plane property IN_FORMATS_ASYNC
2024-11-18 7:48 ` [PATCHv2/3] " Arun R Murthy
@ 2024-11-18 7:48 ` Arun R Murthy
0 siblings, 0 replies; 13+ messages in thread
From: Arun R Murthy @ 2024-11-18 7:48 UTC (permalink / raw)
To: intel-xe, intel-gfx, dri-devel; +Cc: Arun R Murthy
There exists a property IN_FORMATS which exposes the plane supported
modifiers/formats to the user. In some platforms when asynchronous flips
are used all of modifiers/formats mentioned in IN_FORMATS are not
supported. This patch adds a new plane property IN_FORMATS_ASYNC to
expose the async flips supported modifiers/formats so that user can use
this information ahead and done flips with unsupported
formats/modifiers. This will save flips failures.
v2: Remove async variable from drm_plane (Ville)
Signed-off-by: Arun R Murthy <arun.r.murthy@intel.com>
---
drivers/gpu/drm/drm_mode_config.c | 7 +++++++
drivers/gpu/drm/drm_plane.c | 6 ++++++
include/drm/drm_mode_config.h | 6 ++++++
3 files changed, 19 insertions(+)
diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
index 37d2e0a4ef4b..cff189a2e751 100644
--- a/drivers/gpu/drm/drm_mode_config.c
+++ b/drivers/gpu/drm/drm_mode_config.c
@@ -379,6 +379,13 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
return -ENOMEM;
dev->mode_config.size_hints_property = prop;
+ prop = drm_property_create(dev,
+ DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB,
+ "IN_FORMATS_ASYNC", 0);
+ if (!prop)
+ return -ENOMEM;
+ dev->mode_config.async_modifiers_property = prop;
+
return 0;
}
diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
index a28b22fdd7a4..416818e54ccf 100644
--- a/drivers/gpu/drm/drm_plane.c
+++ b/drivers/gpu/drm/drm_plane.c
@@ -141,6 +141,12 @@
* various bugs in this area with inconsistencies between the capability
* flag and per-plane properties.
*
+ * IN_FORMATS_ASYNC:
+ * Blob property which contains the set of buffer format and modifier
+ * pairs supported by this plane for asynchronous flips. The blob is a struct
+ * drm_format_modifier_blob. Without this property the plane doesn't
+ * support buffers with modifiers. Userspace cannot change this property.
+ *
* SIZE_HINTS:
* Blob property which contains the set of recommended plane size
* which can used for simple "cursor like" use cases (eg. no scaling).
diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
index 271765e2e9f2..0c116d6dfd27 100644
--- a/include/drm/drm_mode_config.h
+++ b/include/drm/drm_mode_config.h
@@ -936,6 +936,12 @@ struct drm_mode_config {
*/
struct drm_property *modifiers_property;
+ /**
+ * @async_modifiers_property: Plane property to list support modifier/format
+ * combination for asynchronous flips.
+ */
+ struct drm_property *async_modifiers_property;
+
/**
* @size_hints_property: Plane SIZE_HINTS property.
*/
--
2.25.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCHv2/3] Expose modifiers/formats supported by async flips
@ 2024-11-18 7:53 Arun R Murthy
2024-11-18 7:53 ` [PATCHv2 1/3] drm/plane: Add new plane property IN_FORMATS_ASYNC Arun R Murthy
` (4 more replies)
0 siblings, 5 replies; 13+ messages in thread
From: Arun R Murthy @ 2024-11-18 7:53 UTC (permalink / raw)
To: intel-xe, intel-gfx, dri-devel; +Cc: Arun R Murthy
All of the formats/modifiers supported by the plane during synchronous
flips are nor supported by asynchronous flips. The formats/modifiers
exposed to user by IN_FORMATS exposes all formats/modifiers supported by
plane and this list varies for async flips. If the async flip supported
formats/modifiers are exposed to the user, user based on this list can
take decision to proceed or not and avoid flip failures during async
flips.
Discussion around this can be located @
https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29618#note_2487123
Userspace implementation for IN_FORMARTS_ASYNC under review @
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4063
Arun R Murthy (3):
drm/plane: Add new plane property IN_FORMATS_ASYNC
drm/plane: Expose function to create format/modifier blob
drm/i915/display: Populate list of async supported formats/modifiers
drivers/gpu/drm/drm_mode_config.c | 7 +++
drivers/gpu/drm/drm_plane.c | 50 ++++++++++++------
.../drm/i915/display/skl_universal_plane.c | 51 +++++++++++++++++++
include/drm/drm_mode_config.h | 6 +++
include/drm/drm_plane.h | 4 ++
5 files changed, 103 insertions(+), 15 deletions(-)
--
2.25.1
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCHv2 1/3] drm/plane: Add new plane property IN_FORMATS_ASYNC
2024-11-18 7:53 [PATCHv2/3] Expose modifiers/formats supported by async flips Arun R Murthy
@ 2024-11-18 7:53 ` Arun R Murthy
2024-11-18 7:53 ` [PATCHv2 2/3] drm/plane: Expose function to create format/modifier blob Arun R Murthy
` (3 subsequent siblings)
4 siblings, 0 replies; 13+ messages in thread
From: Arun R Murthy @ 2024-11-18 7:53 UTC (permalink / raw)
To: intel-xe, intel-gfx, dri-devel; +Cc: Arun R Murthy
There exists a property IN_FORMATS which exposes the plane supported
modifiers/formats to the user. In some platforms when asynchronous flips
are used all of modifiers/formats mentioned in IN_FORMATS are not
supported. This patch adds a new plane property IN_FORMATS_ASYNC to
expose the async flips supported modifiers/formats so that user can use
this information ahead and done flips with unsupported
formats/modifiers. This will save flips failures.
v2: Remove async variable from drm_plane (Ville)
Signed-off-by: Arun R Murthy <arun.r.murthy@intel.com>
---
drivers/gpu/drm/drm_mode_config.c | 7 +++++++
drivers/gpu/drm/drm_plane.c | 6 ++++++
include/drm/drm_mode_config.h | 6 ++++++
3 files changed, 19 insertions(+)
diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
index 37d2e0a4ef4b..cff189a2e751 100644
--- a/drivers/gpu/drm/drm_mode_config.c
+++ b/drivers/gpu/drm/drm_mode_config.c
@@ -379,6 +379,13 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
return -ENOMEM;
dev->mode_config.size_hints_property = prop;
+ prop = drm_property_create(dev,
+ DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB,
+ "IN_FORMATS_ASYNC", 0);
+ if (!prop)
+ return -ENOMEM;
+ dev->mode_config.async_modifiers_property = prop;
+
return 0;
}
diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
index a28b22fdd7a4..416818e54ccf 100644
--- a/drivers/gpu/drm/drm_plane.c
+++ b/drivers/gpu/drm/drm_plane.c
@@ -141,6 +141,12 @@
* various bugs in this area with inconsistencies between the capability
* flag and per-plane properties.
*
+ * IN_FORMATS_ASYNC:
+ * Blob property which contains the set of buffer format and modifier
+ * pairs supported by this plane for asynchronous flips. The blob is a struct
+ * drm_format_modifier_blob. Without this property the plane doesn't
+ * support buffers with modifiers. Userspace cannot change this property.
+ *
* SIZE_HINTS:
* Blob property which contains the set of recommended plane size
* which can used for simple "cursor like" use cases (eg. no scaling).
diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
index 271765e2e9f2..0c116d6dfd27 100644
--- a/include/drm/drm_mode_config.h
+++ b/include/drm/drm_mode_config.h
@@ -936,6 +936,12 @@ struct drm_mode_config {
*/
struct drm_property *modifiers_property;
+ /**
+ * @async_modifiers_property: Plane property to list support modifier/format
+ * combination for asynchronous flips.
+ */
+ struct drm_property *async_modifiers_property;
+
/**
* @size_hints_property: Plane SIZE_HINTS property.
*/
--
2.25.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCHv2 2/3] drm/plane: Expose function to create format/modifier blob
2024-11-18 7:53 [PATCHv2/3] Expose modifiers/formats supported by async flips Arun R Murthy
2024-11-18 7:53 ` [PATCHv2 1/3] drm/plane: Add new plane property IN_FORMATS_ASYNC Arun R Murthy
@ 2024-11-18 7:53 ` Arun R Murthy
2024-11-22 20:06 ` Ville Syrjälä
2024-11-18 7:53 ` [PATCHv2 3/3] drm/i915/display: Populate list of async supported formats/modifiers Arun R Murthy
` (2 subsequent siblings)
4 siblings, 1 reply; 13+ messages in thread
From: Arun R Murthy @ 2024-11-18 7:53 UTC (permalink / raw)
To: intel-xe, intel-gfx, dri-devel; +Cc: Arun R Murthy
Expose drm plane function to create formats/modifiers blob. This
function can be used to expose list of supported formats/modifiers for
sync/async flips.
Signed-off-by: Arun R Murthy <arun.r.murthy@intel.com>
---
drivers/gpu/drm/drm_plane.c | 44 ++++++++++++++++++++++++-------------
include/drm/drm_plane.h | 4 ++++
2 files changed, 33 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
index 416818e54ccf..4f35eec2b777 100644
--- a/drivers/gpu/drm/drm_plane.c
+++ b/drivers/gpu/drm/drm_plane.c
@@ -191,7 +191,10 @@ modifiers_ptr(struct drm_format_modifier_blob *blob)
return (struct drm_format_modifier *)(((char *)blob) + blob->modifiers_offset);
}
-static int create_in_format_blob(struct drm_device *dev, struct drm_plane *plane)
+int drm_plane_create_format_blob(struct drm_device *dev,
+ struct drm_plane *plane, u64 *modifiers,
+ unsigned int modifier_count, u32 *formats,
+ unsigned int format_count, bool is_async)
{
const struct drm_mode_config *config = &dev->mode_config;
struct drm_property_blob *blob;
@@ -200,14 +203,14 @@ static int create_in_format_blob(struct drm_device *dev, struct drm_plane *plane
struct drm_format_modifier_blob *blob_data;
unsigned int i, j;
- formats_size = sizeof(__u32) * plane->format_count;
+ formats_size = sizeof(__u32) * format_count;
if (WARN_ON(!formats_size)) {
/* 0 formats are never expected */
return 0;
}
modifiers_size =
- sizeof(struct drm_format_modifier) * plane->modifier_count;
+ sizeof(struct drm_format_modifier) * modifier_count;
blob_size = sizeof(struct drm_format_modifier_blob);
/* Modifiers offset is a pointer to a struct with a 64 bit field so it
@@ -223,37 +226,45 @@ static int create_in_format_blob(struct drm_device *dev, struct drm_plane *plane
blob_data = blob->data;
blob_data->version = FORMAT_BLOB_CURRENT;
- blob_data->count_formats = plane->format_count;
+ blob_data->count_formats = format_count;
blob_data->formats_offset = sizeof(struct drm_format_modifier_blob);
- blob_data->count_modifiers = plane->modifier_count;
+ blob_data->count_modifiers = modifier_count;
blob_data->modifiers_offset =
ALIGN(blob_data->formats_offset + formats_size, 8);
- memcpy(formats_ptr(blob_data), plane->format_types, formats_size);
+ memcpy(formats_ptr(blob_data), formats, formats_size);
mod = modifiers_ptr(blob_data);
- for (i = 0; i < plane->modifier_count; i++) {
- for (j = 0; j < plane->format_count; j++) {
- if (!plane->funcs->format_mod_supported ||
+ for (i = 0; i < modifier_count; i++) {
+ for (j = 0; j < format_count; j++) {
+ if (is_async ||
+ !plane->funcs->format_mod_supported ||
plane->funcs->format_mod_supported(plane,
- plane->format_types[j],
- plane->modifiers[i])) {
+ formats[j],
+ modifiers[i])) {
mod->formats |= 1ULL << j;
}
}
- mod->modifier = plane->modifiers[i];
+ mod->modifier = modifiers[i];
mod->offset = 0;
mod->pad = 0;
mod++;
}
- drm_object_attach_property(&plane->base, config->modifiers_property,
- blob->base.id);
+ if (is_async)
+ drm_object_attach_property(&plane->base,
+ config->async_modifiers_property,
+ blob->base.id);
+ else
+ drm_object_attach_property(&plane->base,
+ config->modifiers_property,
+ blob->base.id);
return 0;
}
+EXPORT_SYMBOL(drm_plane_create_format_blob);
/**
* DOC: hotspot properties
@@ -476,7 +487,10 @@ static int __drm_universal_plane_init(struct drm_device *dev,
}
if (format_modifier_count)
- create_in_format_blob(dev, plane);
+ drm_plane_create_format_blob(dev, plane, plane->modifiers,
+ format_modifier_count,
+ plane->format_types, format_count,
+ false);
return 0;
}
diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
index dd718c62ac31..3c5c2c614af8 100644
--- a/include/drm/drm_plane.h
+++ b/include/drm/drm_plane.h
@@ -988,5 +988,9 @@ int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
int drm_plane_add_size_hints_property(struct drm_plane *plane,
const struct drm_plane_size_hint *hints,
int num_hints);
+int drm_plane_create_format_blob(struct drm_device *dev,
+ struct drm_plane *plane, u64 *modifiers,
+ unsigned int modifier_count, u32 *formats,
+ unsigned int format_count, bool is_async);
#endif
--
2.25.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCHv2 3/3] drm/i915/display: Populate list of async supported formats/modifiers
2024-11-18 7:53 [PATCHv2/3] Expose modifiers/formats supported by async flips Arun R Murthy
2024-11-18 7:53 ` [PATCHv2 1/3] drm/plane: Add new plane property IN_FORMATS_ASYNC Arun R Murthy
2024-11-18 7:53 ` [PATCHv2 2/3] drm/plane: Expose function to create format/modifier blob Arun R Murthy
@ 2024-11-18 7:53 ` Arun R Murthy
2024-11-22 4:02 ` kernel test robot
` (2 more replies)
2024-11-18 14:26 ` ✗ Fi.CI.SPARSE: warning for series starting with [PATCHv2,1/3] drm/plane: Add new plane property IN_FORMATS_ASYNC Patchwork
2024-12-13 9:32 ` ✗ Fi.CI.BUILD: failure for series starting with [PATCHv2,1/3] drm/plane: Add new plane property IN_FORMATS_ASYNC (rev2) Patchwork
4 siblings, 3 replies; 13+ messages in thread
From: Arun R Murthy @ 2024-11-18 7:53 UTC (permalink / raw)
To: intel-xe, intel-gfx, dri-devel; +Cc: Arun R Murthy
Populate the list of formats/modifiers supported by async flip. Register
a async property and expose the same to user through blob.
Signed-off-by: Arun R Murthy <arun.r.murthy@intel.com>
---
.../drm/i915/display/skl_universal_plane.c | 51 +++++++++++++++++++
1 file changed, 51 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c b/drivers/gpu/drm/i915/display/skl_universal_plane.c
index 038ca2ec5d7a..a6e84ac56277 100644
--- a/drivers/gpu/drm/i915/display/skl_universal_plane.c
+++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c
@@ -170,6 +170,44 @@ static const u32 icl_hdr_plane_formats[] = {
DRM_FORMAT_XVYU16161616,
};
+static u64 tgl_asyn_modifiers[] = {
+ DRM_FORMAT_MOD_LINEAR,
+ I915_FORMAT_MOD_X_TILED,
+ I915_FORMAT_MOD_Y_TILED,
+ I915_FORMAT_MOD_4_TILED,
+ I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS,
+ I915_FORMAT_MOD_4_TILED_MTL_RC_CCS,
+ I915_FORMAT_MOD_4_TILED_DG2_RC_CCS,
+ I915_FORMAT_MOD_4_TILED_BMG_CCS,
+ I915_FORMAT_MOD_4_TILED_LNL_CCS,
+};
+
+static u64 icl_async_modifiers[] = {
+ I915_FORMAT_MOD_X_TILED,
+ I915_FORMAT_MOD_Y_TILED,
+ I915_FORMAT_MOD_Yf_TILED,
+ I915_FORMAT_MOD_Y_TILED_CCS,
+ I915_FORMAT_MOD_Yf_TILED_CCS,
+};
+
+static u64 skl_async_modifiers[] = {
+ I915_FORMAT_MOD_X_TILED,
+ I915_FORMAT_MOD_Y_TILED,
+ I915_FORMAT_MOD_Yf_TILED,
+};
+
+static u32 intel_async_formats[] = {
+ DRM_FORMAT_RGB565,
+ DRM_FORMAT_XRGB8888,
+ DRM_FORMAT_XBGR8888,
+ DRM_FORMAT_ARGB8888,
+ DRM_FORMAT_ABGR8888,
+ DRM_FORMAT_XRGB2101010,
+ DRM_FORMAT_XBGR2101010,
+ DRM_FORMAT_XRGB16161616F,
+ DRM_FORMAT_XBGR16161616F,
+};
+
int skl_format_to_fourcc(int format, bool rgb_order, bool alpha)
{
switch (format) {
@@ -2585,6 +2623,7 @@ skl_universal_plane_create(struct drm_i915_private *dev_priv,
unsigned int supported_rotations;
unsigned int supported_csc;
const u64 *modifiers;
+ u64 *async_modifiers;
const u32 *formats;
int num_formats;
int ret;
@@ -2687,6 +2726,18 @@ skl_universal_plane_create(struct drm_i915_private *dev_priv,
if (ret)
goto fail;
+ if (DISPLAY_VER(dev_priv) >= 12)
+ async_modifiers = tgl_asyn_modifiers;
+ else if (DISPLAY_VER(dev_priv) == 11)
+ async_modifiers = icl_async_modifiers;
+ else
+ async_modifiers = skl_async_modifiers;
+
+ drm_plane_create_format_blob(&dev_priv->drm, &plane->base,
+ async_modifiers, sizeof(async_modifiers),
+ intel_async_formats,
+ sizeof(intel_async_formats), true);
+
if (DISPLAY_VER(dev_priv) >= 13)
supported_rotations = DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_180;
else
--
2.25.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* ✗ Fi.CI.SPARSE: warning for series starting with [PATCHv2,1/3] drm/plane: Add new plane property IN_FORMATS_ASYNC
2024-11-18 7:53 [PATCHv2/3] Expose modifiers/formats supported by async flips Arun R Murthy
` (2 preceding siblings ...)
2024-11-18 7:53 ` [PATCHv2 3/3] drm/i915/display: Populate list of async supported formats/modifiers Arun R Murthy
@ 2024-11-18 14:26 ` Patchwork
2024-12-13 9:32 ` ✗ Fi.CI.BUILD: failure for series starting with [PATCHv2,1/3] drm/plane: Add new plane property IN_FORMATS_ASYNC (rev2) Patchwork
4 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2024-11-18 14:26 UTC (permalink / raw)
To: Murthy, Arun R; +Cc: intel-gfx
== Series Details ==
Series: series starting with [PATCHv2,1/3] drm/plane: Add new plane property IN_FORMATS_ASYNC
URL : https://patchwork.freedesktop.org/series/141475/
State : warning
== Summary ==
Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCHv2 3/3] drm/i915/display: Populate list of async supported formats/modifiers
2024-11-18 7:53 ` [PATCHv2 3/3] drm/i915/display: Populate list of async supported formats/modifiers Arun R Murthy
@ 2024-11-22 4:02 ` kernel test robot
2024-11-25 13:05 ` kernel test robot
2024-11-28 23:21 ` kernel test robot
2 siblings, 0 replies; 13+ messages in thread
From: kernel test robot @ 2024-11-22 4:02 UTC (permalink / raw)
To: Arun R Murthy, intel-xe, intel-gfx, dri-devel
Cc: oe-kbuild-all, Arun R Murthy
Hi Arun,
kernel test robot noticed the following build warnings:
[auto build test WARNING on drm-intel/for-linux-next-fixes]
[also build test WARNING on v6.12 next-20241121]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Arun-R-Murthy/drm-plane-Expose-function-to-create-format-modifier-blob/20241121-105652
base: git://anongit.freedesktop.org/drm-intel for-linux-next-fixes
patch link: https://lore.kernel.org/r/20241118075315.466009-4-arun.r.murthy%40intel.com
patch subject: [PATCHv2 3/3] drm/i915/display: Populate list of async supported formats/modifiers
config: x86_64-randconfig-103-20241121 (https://download.01.org/0day-ci/archive/20241122/202411221109.nlXeWx72-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-12) 11.3.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202411221109.nlXeWx72-lkp@intel.com/
cocci warnings: (new ones prefixed by >>)
>> drivers/gpu/drm/i915/display/skl_universal_plane.c:2626:26-32: ERROR: application of sizeof to pointer
vim +2626 drivers/gpu/drm/i915/display/skl_universal_plane.c
2510
2511 struct intel_plane *
2512 skl_universal_plane_create(struct drm_i915_private *dev_priv,
2513 enum pipe pipe, enum plane_id plane_id)
2514 {
2515 const struct drm_plane_funcs *plane_funcs;
2516 struct intel_plane *plane;
2517 enum drm_plane_type plane_type;
2518 unsigned int supported_rotations;
2519 unsigned int supported_csc;
2520 const u64 *modifiers;
2521 u64 *async_modifiers;
2522 const u32 *formats;
2523 int num_formats;
2524 int ret;
2525
2526 plane = intel_plane_alloc();
2527 if (IS_ERR(plane))
2528 return plane;
2529
2530 plane->pipe = pipe;
2531 plane->id = plane_id;
2532 plane->frontbuffer_bit = INTEL_FRONTBUFFER(pipe, plane_id);
2533
2534 intel_fbc_add_plane(skl_plane_fbc(dev_priv, pipe, plane_id), plane);
2535
2536 if (DISPLAY_VER(dev_priv) >= 11) {
2537 plane->min_width = icl_plane_min_width;
2538 if (icl_is_hdr_plane(dev_priv, plane_id))
2539 plane->max_width = icl_hdr_plane_max_width;
2540 else
2541 plane->max_width = icl_sdr_plane_max_width;
2542 plane->max_height = icl_plane_max_height;
2543 plane->min_cdclk = icl_plane_min_cdclk;
2544 } else if (DISPLAY_VER(dev_priv) >= 10) {
2545 plane->max_width = glk_plane_max_width;
2546 plane->max_height = skl_plane_max_height;
2547 plane->min_cdclk = glk_plane_min_cdclk;
2548 } else {
2549 plane->max_width = skl_plane_max_width;
2550 plane->max_height = skl_plane_max_height;
2551 plane->min_cdclk = skl_plane_min_cdclk;
2552 }
2553
2554 if (DISPLAY_VER(dev_priv) >= 13)
2555 plane->max_stride = adl_plane_max_stride;
2556 else
2557 plane->max_stride = skl_plane_max_stride;
2558
2559 if (DISPLAY_VER(dev_priv) >= 12)
2560 plane->min_alignment = tgl_plane_min_alignment;
2561 else
2562 plane->min_alignment = skl_plane_min_alignment;
2563
2564 if (DISPLAY_VER(dev_priv) >= 11) {
2565 plane->update_noarm = icl_plane_update_noarm;
2566 plane->update_arm = icl_plane_update_arm;
2567 plane->disable_arm = icl_plane_disable_arm;
2568 } else {
2569 plane->update_noarm = skl_plane_update_noarm;
2570 plane->update_arm = skl_plane_update_arm;
2571 plane->disable_arm = skl_plane_disable_arm;
2572 }
2573 plane->get_hw_state = skl_plane_get_hw_state;
2574 plane->check_plane = skl_plane_check;
2575
2576 if (plane_id == PLANE_1) {
2577 plane->need_async_flip_toggle_wa = IS_DISPLAY_VER(dev_priv, 9, 10);
2578 plane->async_flip = skl_plane_async_flip;
2579 plane->enable_flip_done = skl_plane_enable_flip_done;
2580 plane->disable_flip_done = skl_plane_disable_flip_done;
2581 }
2582
2583 if (DISPLAY_VER(dev_priv) >= 11)
2584 formats = icl_get_plane_formats(dev_priv, pipe,
2585 plane_id, &num_formats);
2586 else if (DISPLAY_VER(dev_priv) >= 10)
2587 formats = glk_get_plane_formats(dev_priv, pipe,
2588 plane_id, &num_formats);
2589 else
2590 formats = skl_get_plane_formats(dev_priv, pipe,
2591 plane_id, &num_formats);
2592
2593 if (DISPLAY_VER(dev_priv) >= 12)
2594 plane_funcs = &gen12_plane_funcs;
2595 else
2596 plane_funcs = &skl_plane_funcs;
2597
2598 if (plane_id == PLANE_1)
2599 plane_type = DRM_PLANE_TYPE_PRIMARY;
2600 else
2601 plane_type = DRM_PLANE_TYPE_OVERLAY;
2602
2603 modifiers = intel_fb_plane_get_modifiers(dev_priv,
2604 skl_get_plane_caps(dev_priv, pipe, plane_id));
2605
2606 ret = drm_universal_plane_init(&dev_priv->drm, &plane->base,
2607 0, plane_funcs,
2608 formats, num_formats, modifiers,
2609 plane_type,
2610 "plane %d%c", plane_id + 1,
2611 pipe_name(pipe));
2612
2613 kfree(modifiers);
2614
2615 if (ret)
2616 goto fail;
2617
2618 if (DISPLAY_VER(dev_priv) >= 12)
2619 async_modifiers = tgl_asyn_modifiers;
2620 else if (DISPLAY_VER(dev_priv) == 11)
2621 async_modifiers = icl_async_modifiers;
2622 else
2623 async_modifiers = skl_async_modifiers;
2624
2625 drm_plane_create_format_blob(&dev_priv->drm, &plane->base,
> 2626 async_modifiers, sizeof(async_modifiers),
2627 intel_async_formats,
2628 sizeof(intel_async_formats), true);
2629
2630 if (DISPLAY_VER(dev_priv) >= 13)
2631 supported_rotations = DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_180;
2632 else
2633 supported_rotations =
2634 DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_90 |
2635 DRM_MODE_ROTATE_180 | DRM_MODE_ROTATE_270;
2636
2637 if (DISPLAY_VER(dev_priv) >= 11)
2638 supported_rotations |= DRM_MODE_REFLECT_X;
2639
2640 drm_plane_create_rotation_property(&plane->base,
2641 DRM_MODE_ROTATE_0,
2642 supported_rotations);
2643
2644 supported_csc = BIT(DRM_COLOR_YCBCR_BT601) | BIT(DRM_COLOR_YCBCR_BT709);
2645
2646 if (DISPLAY_VER(dev_priv) >= 10)
2647 supported_csc |= BIT(DRM_COLOR_YCBCR_BT2020);
2648
2649 drm_plane_create_color_properties(&plane->base,
2650 supported_csc,
2651 BIT(DRM_COLOR_YCBCR_LIMITED_RANGE) |
2652 BIT(DRM_COLOR_YCBCR_FULL_RANGE),
2653 DRM_COLOR_YCBCR_BT709,
2654 DRM_COLOR_YCBCR_LIMITED_RANGE);
2655
2656 drm_plane_create_alpha_property(&plane->base);
2657 drm_plane_create_blend_mode_property(&plane->base,
2658 BIT(DRM_MODE_BLEND_PIXEL_NONE) |
2659 BIT(DRM_MODE_BLEND_PREMULTI) |
2660 BIT(DRM_MODE_BLEND_COVERAGE));
2661
2662 drm_plane_create_zpos_immutable_property(&plane->base, plane_id);
2663
2664 if (DISPLAY_VER(dev_priv) >= 12)
2665 drm_plane_enable_fb_damage_clips(&plane->base);
2666
2667 if (DISPLAY_VER(dev_priv) >= 11)
2668 drm_plane_create_scaling_filter_property(&plane->base,
2669 BIT(DRM_SCALING_FILTER_DEFAULT) |
2670 BIT(DRM_SCALING_FILTER_NEAREST_NEIGHBOR));
2671
2672 intel_plane_helper_add(plane);
2673
2674 return plane;
2675
2676 fail:
2677 intel_plane_free(plane);
2678
2679 return ERR_PTR(ret);
2680 }
2681
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCHv2 2/3] drm/plane: Expose function to create format/modifier blob
2024-11-18 7:53 ` [PATCHv2 2/3] drm/plane: Expose function to create format/modifier blob Arun R Murthy
@ 2024-11-22 20:06 ` Ville Syrjälä
2024-11-25 8:45 ` Murthy, Arun R
0 siblings, 1 reply; 13+ messages in thread
From: Ville Syrjälä @ 2024-11-22 20:06 UTC (permalink / raw)
To: Arun R Murthy; +Cc: intel-xe, intel-gfx, dri-devel
On Mon, Nov 18, 2024 at 01:23:14PM +0530, Arun R Murthy wrote:
> Expose drm plane function to create formats/modifiers blob. This
> function can be used to expose list of supported formats/modifiers for
> sync/async flips.
>
> Signed-off-by: Arun R Murthy <arun.r.murthy@intel.com>
> ---
> drivers/gpu/drm/drm_plane.c | 44 ++++++++++++++++++++++++-------------
> include/drm/drm_plane.h | 4 ++++
> 2 files changed, 33 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> index 416818e54ccf..4f35eec2b777 100644
> --- a/drivers/gpu/drm/drm_plane.c
> +++ b/drivers/gpu/drm/drm_plane.c
> @@ -191,7 +191,10 @@ modifiers_ptr(struct drm_format_modifier_blob *blob)
> return (struct drm_format_modifier *)(((char *)blob) + blob->modifiers_offset);
> }
>
> -static int create_in_format_blob(struct drm_device *dev, struct drm_plane *plane)
> +int drm_plane_create_format_blob(struct drm_device *dev,
> + struct drm_plane *plane, u64 *modifiers,
> + unsigned int modifier_count, u32 *formats,
> + unsigned int format_count, bool is_async)
> {
> const struct drm_mode_config *config = &dev->mode_config;
> struct drm_property_blob *blob;
> @@ -200,14 +203,14 @@ static int create_in_format_blob(struct drm_device *dev, struct drm_plane *plane
> struct drm_format_modifier_blob *blob_data;
> unsigned int i, j;
>
> - formats_size = sizeof(__u32) * plane->format_count;
> + formats_size = sizeof(__u32) * format_count;
> if (WARN_ON(!formats_size)) {
> /* 0 formats are never expected */
> return 0;
> }
>
> modifiers_size =
> - sizeof(struct drm_format_modifier) * plane->modifier_count;
> + sizeof(struct drm_format_modifier) * modifier_count;
>
> blob_size = sizeof(struct drm_format_modifier_blob);
> /* Modifiers offset is a pointer to a struct with a 64 bit field so it
> @@ -223,37 +226,45 @@ static int create_in_format_blob(struct drm_device *dev, struct drm_plane *plane
>
> blob_data = blob->data;
> blob_data->version = FORMAT_BLOB_CURRENT;
> - blob_data->count_formats = plane->format_count;
> + blob_data->count_formats = format_count;
> blob_data->formats_offset = sizeof(struct drm_format_modifier_blob);
> - blob_data->count_modifiers = plane->modifier_count;
> + blob_data->count_modifiers = modifier_count;
>
> blob_data->modifiers_offset =
> ALIGN(blob_data->formats_offset + formats_size, 8);
>
> - memcpy(formats_ptr(blob_data), plane->format_types, formats_size);
> + memcpy(formats_ptr(blob_data), formats, formats_size);
>
> mod = modifiers_ptr(blob_data);
> - for (i = 0; i < plane->modifier_count; i++) {
> - for (j = 0; j < plane->format_count; j++) {
> - if (!plane->funcs->format_mod_supported ||
> + for (i = 0; i < modifier_count; i++) {
> + for (j = 0; j < format_count; j++) {
> + if (is_async ||
I asked for a format_mod_supported_async(). This is not that.
> + !plane->funcs->format_mod_supported ||
> plane->funcs->format_mod_supported(plane,
> - plane->format_types[j],
> - plane->modifiers[i])) {
> + formats[j],
> + modifiers[i])) {
> mod->formats |= 1ULL << j;
> }
> }
>
> - mod->modifier = plane->modifiers[i];
> + mod->modifier = modifiers[i];
> mod->offset = 0;
> mod->pad = 0;
> mod++;
> }
>
> - drm_object_attach_property(&plane->base, config->modifiers_property,
> - blob->base.id);
> + if (is_async)
> + drm_object_attach_property(&plane->base,
> + config->async_modifiers_property,
> + blob->base.id);
> + else
> + drm_object_attach_property(&plane->base,
> + config->modifiers_property,
> + blob->base.id);
>
> return 0;
> }
> +EXPORT_SYMBOL(drm_plane_create_format_blob);
>
> /**
> * DOC: hotspot properties
> @@ -476,7 +487,10 @@ static int __drm_universal_plane_init(struct drm_device *dev,
> }
>
> if (format_modifier_count)
> - create_in_format_blob(dev, plane);
> + drm_plane_create_format_blob(dev, plane, plane->modifiers,
> + format_modifier_count,
> + plane->format_types, format_count,
> + false);
>
> return 0;
> }
> diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
> index dd718c62ac31..3c5c2c614af8 100644
> --- a/include/drm/drm_plane.h
> +++ b/include/drm/drm_plane.h
> @@ -988,5 +988,9 @@ int drm_plane_create_scaling_filter_property(struct drm_plane *plane,
> int drm_plane_add_size_hints_property(struct drm_plane *plane,
> const struct drm_plane_size_hint *hints,
> int num_hints);
> +int drm_plane_create_format_blob(struct drm_device *dev,
> + struct drm_plane *plane, u64 *modifiers,
> + unsigned int modifier_count, u32 *formats,
> + unsigned int format_count, bool is_async);
>
> #endif
> --
> 2.25.1
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: [PATCHv2 2/3] drm/plane: Expose function to create format/modifier blob
2024-11-22 20:06 ` Ville Syrjälä
@ 2024-11-25 8:45 ` Murthy, Arun R
2024-12-13 9:02 ` Murthy, Arun R
0 siblings, 1 reply; 13+ messages in thread
From: Murthy, Arun R @ 2024-11-25 8:45 UTC (permalink / raw)
To: Ville Syrjälä
Cc: intel-xe@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
dri-devel@lists.freedesktop.org
> On Mon, Nov 18, 2024 at 01:23:14PM +0530, Arun R Murthy wrote:
> > Expose drm plane function to create formats/modifiers blob. This
> > function can be used to expose list of supported formats/modifiers for
> > sync/async flips.
> >
> > Signed-off-by: Arun R Murthy <arun.r.murthy@intel.com>
> > ---
> > drivers/gpu/drm/drm_plane.c | 44 ++++++++++++++++++++++++-------------
> > include/drm/drm_plane.h | 4 ++++
> > 2 files changed, 33 insertions(+), 15 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> > index 416818e54ccf..4f35eec2b777 100644
> > --- a/drivers/gpu/drm/drm_plane.c
> > +++ b/drivers/gpu/drm/drm_plane.c
> > @@ -191,7 +191,10 @@ modifiers_ptr(struct drm_format_modifier_blob
> *blob)
> > return (struct drm_format_modifier *)(((char *)blob) +
> > blob->modifiers_offset); }
> >
> > -static int create_in_format_blob(struct drm_device *dev, struct
> > drm_plane *plane)
> > +int drm_plane_create_format_blob(struct drm_device *dev,
> > + struct drm_plane *plane, u64 *modifiers,
> > + unsigned int modifier_count, u32 *formats,
> > + unsigned int format_count, bool is_async)
> > {
> > const struct drm_mode_config *config = &dev->mode_config;
> > struct drm_property_blob *blob;
> > @@ -200,14 +203,14 @@ static int create_in_format_blob(struct drm_device
> *dev, struct drm_plane *plane
> > struct drm_format_modifier_blob *blob_data;
> > unsigned int i, j;
> >
> > - formats_size = sizeof(__u32) * plane->format_count;
> > + formats_size = sizeof(__u32) * format_count;
> > if (WARN_ON(!formats_size)) {
> > /* 0 formats are never expected */
> > return 0;
> > }
> >
> > modifiers_size =
> > - sizeof(struct drm_format_modifier) * plane->modifier_count;
> > + sizeof(struct drm_format_modifier) * modifier_count;
> >
> > blob_size = sizeof(struct drm_format_modifier_blob);
> > /* Modifiers offset is a pointer to a struct with a 64 bit field so
> > it @@ -223,37 +226,45 @@ static int create_in_format_blob(struct
> > drm_device *dev, struct drm_plane *plane
> >
> > blob_data = blob->data;
> > blob_data->version = FORMAT_BLOB_CURRENT;
> > - blob_data->count_formats = plane->format_count;
> > + blob_data->count_formats = format_count;
> > blob_data->formats_offset = sizeof(struct drm_format_modifier_blob);
> > - blob_data->count_modifiers = plane->modifier_count;
> > + blob_data->count_modifiers = modifier_count;
> >
> > blob_data->modifiers_offset =
> > ALIGN(blob_data->formats_offset + formats_size, 8);
> >
> > - memcpy(formats_ptr(blob_data), plane->format_types, formats_size);
> > + memcpy(formats_ptr(blob_data), formats, formats_size);
> >
> > mod = modifiers_ptr(blob_data);
> > - for (i = 0; i < plane->modifier_count; i++) {
> > - for (j = 0; j < plane->format_count; j++) {
> > - if (!plane->funcs->format_mod_supported ||
> > + for (i = 0; i < modifier_count; i++) {
> > + for (j = 0; j < format_count; j++) {
> > + if (is_async ||
>
> I asked for a format_mod_supported_async(). This is not that.
>
In the previous version I had this format_mod_supported(), a similar implementation as in create_in_formats_blob().
Create_in_formats_async_blob() was added but the same function pointer was maintained i.e format_mod_supported.
The intention was in the function defined by vendor specific driver for format_mod_supported() the format and modifier to be checked for async would be sent.
The flag async_flip in drm_crtc_state would be used in the driver to check these format/modifier for async.
I can add something like this
Static bool skl_plane_format_mod_supported(drm_plane, format, modifier)
{
If (crtc_state->async_flip) {
Plane->can_async_flip() /* https://patchwork.freedesktop.org/patch/619047/?series=139807&rev=3 */
Return;
}
/* continue with the code for sync format-modifier supported check */
}
But the comment was to overcome changes in drm and handle in i915. Hence create_in_format_async_blob() in drm_crtc.c was removed in this version.
Please let me know on this, I can add this create_in_format_async_blob() back in the next series along with the above said changes for can_async_flip()
Thanks and Regards,
Arun R Murthy
---------------------
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCHv2 3/3] drm/i915/display: Populate list of async supported formats/modifiers
2024-11-18 7:53 ` [PATCHv2 3/3] drm/i915/display: Populate list of async supported formats/modifiers Arun R Murthy
2024-11-22 4:02 ` kernel test robot
@ 2024-11-25 13:05 ` kernel test robot
2024-11-28 23:21 ` kernel test robot
2 siblings, 0 replies; 13+ messages in thread
From: kernel test robot @ 2024-11-25 13:05 UTC (permalink / raw)
To: Arun R Murthy
Cc: oe-lkp, lkp, intel-gfx, intel-xe, ltp, dri-devel, Arun R Murthy,
oliver.sang
Hello,
kernel test robot noticed "BUG:KASAN:global-out-of-bounds_in_drm_plane_create_format_blob" on:
commit: ab8ee1a4b22d80e3812a6d9990b92d77eee4a17f ("[PATCHv2 3/3] drm/i915/display: Populate list of async supported formats/modifiers")
url: https://github.com/intel-lab-lkp/linux/commits/Arun-R-Murthy/drm-plane-Expose-function-to-create-format-modifier-blob/20241121-105652
base: git://anongit.freedesktop.org/drm-intel for-linux-next-fixes
patch link: https://lore.kernel.org/all/20241118075315.466009-4-arun.r.murthy@intel.com/
patch subject: [PATCHv2 3/3] drm/i915/display: Populate list of async supported formats/modifiers
in testcase: ltp
version: ltp-x86_64-14c1f76-1_20241111
with following parameters:
test: lvm.local-00
config: x86_64-rhel-9.4-ltp
compiler: gcc-12
test machine: 8 threads 1 sockets Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz (Kaby Lake) with 32G memory
(please refer to attached dmesg/kmsg for entire log/backtrace)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <oliver.sang@intel.com>
| Closes: https://lore.kernel.org/oe-lkp/202411252029.30061fde-lkp@intel.com
kern :err : [ 44.116017] BUG: KASAN: global-out-of-bounds in drm_plane_create_format_blob (drivers/gpu/drm/drm_plane.c:191 drivers/gpu/drm/drm_plane.c:238) drm
kern :notice: [ 44.129098] i915 0000:00:02.0: [drm] DMC firmware homepage: https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
kern :err : [ 44.138344] Read of size 144 at addr ffffffffc1a99bc0 by task (udev-worker)/230
kern :err : [ 44.138357] CPU: 1 UID: 0 PID: 230 Comm: (udev-worker) Not tainted 6.12.0-00003-gab8ee1a4b22d #1
kern :err : [ 44.138361] Hardware name: Dell Inc. OptiPlex 7050/062KRH, BIOS 1.2.0 12/22/2016
kern :err : [ 44.138363] Call Trace:
kern :err : [ 44.138365] <TASK>
kern :err : [ 44.138367] dump_stack_lvl (lib/dump_stack.c:123 (discriminator 1))
kern :err : [ 44.138376] print_address_description+0x2c/0x3a0
kern :err : [ 44.196003] ? drm_plane_create_format_blob (drivers/gpu/drm/drm_plane.c:191 drivers/gpu/drm/drm_plane.c:238) drm
kern :err : [ 44.202599] print_report (mm/kasan/report.c:489)
kern :err : [ 44.206894] ? kasan_addr_to_slab (mm/kasan/common.c:37)
kern :err : [ 44.211709] ? drm_plane_create_format_blob (drivers/gpu/drm/drm_plane.c:191 drivers/gpu/drm/drm_plane.c:238) drm
kern :err : [ 44.218254] kasan_report (mm/kasan/report.c:603)
kern :err : [ 44.222465] ? drm_plane_create_format_blob (drivers/gpu/drm/drm_plane.c:191 drivers/gpu/drm/drm_plane.c:238) drm
kern :err : [ 44.229022] kasan_check_range (mm/kasan/generic.c:183 mm/kasan/generic.c:189)
kern :err : [ 44.233763] __asan_memcpy (mm/kasan/shadow.c:105)
kern :err : [ 44.238065] drm_plane_create_format_blob (drivers/gpu/drm/drm_plane.c:191 drivers/gpu/drm/drm_plane.c:238) drm
kern :err : [ 44.244436] ? skl_universal_plane_create (drivers/gpu/drm/i915/display/skl_universal_plane.c:2615) i915
kern :err : [ 44.251192] skl_universal_plane_create (drivers/gpu/drm/i915/display/skl_universal_plane.c:2630) i915
kern :err : [ 44.257773] intel_crtc_init (drivers/gpu/drm/i915/display/intel_crtc.c:312) i915
kern :err : [ 44.263672] ? intel_gmbus_setup (drivers/gpu/drm/i915/display/intel_gmbus.c:935) i915
kern :err : [ 44.269640] intel_display_driver_probe_nogem (drivers/gpu/drm/i915/display/intel_display_driver.c:441) i915
kern :err : [ 44.277003] i915_driver_probe (drivers/gpu/drm/i915/i915_driver.c:832) i915
kern :err : [ 44.282751] ? __pfx_i915_driver_probe (drivers/gpu/drm/i915/i915_driver.c:751) i915
kern :err : [ 44.289031] ? drm_privacy_screen_get (drivers/gpu/drm/drm_privacy_screen.c:168) drm
kern :err : [ 44.295046] ? intel_display_driver_probe_defer (drivers/gpu/drm/i915/display/intel_display_driver.c:81) i915
kern :err : [ 44.302188] ? i915_pci_probe (drivers/gpu/drm/i915/i915_pci.c:998) i915
kern :err : [ 44.307853] ? __pfx_i915_pci_probe (drivers/gpu/drm/i915/i915_pci.c:959) i915
kern :err : [ 44.314024] local_pci_probe (drivers/pci/pci-driver.c:324)
kern :err : [ 44.318585] pci_call_probe (drivers/pci/pci-driver.c:392)
kern :err : [ 44.323139] ? __pfx_pci_call_probe (drivers/pci/pci-driver.c:352)
kern :err : [ 44.328232] ? pci_assign_irq (drivers/pci/irq.c:149)
kern :err : [ 44.332888] ? pci_match_device (drivers/pci/pci-driver.c:159 (discriminator 1))
kern :err : [ 44.337812] pci_device_probe (drivers/pci/pci-driver.c:452)
kern :err : [ 44.342468] ? pci_dma_configure (drivers/pci/pci-driver.c:1656)
kern :err : [ 44.347478] really_probe (drivers/base/dd.c:579 drivers/base/dd.c:658)
kern :err : [ 44.351871] __driver_probe_device (drivers/base/dd.c:800)
kern :err : [ 44.357038] driver_probe_device (drivers/base/dd.c:830)
kern :err : [ 44.361948] __driver_attach (drivers/base/dd.c:1217)
kern :err : [ 44.366602] ? __pfx___driver_attach (drivers/base/dd.c:1157)
kern :err : [ 44.371767] bus_for_each_dev (drivers/base/bus.c:370)
kern :err : [ 44.376413] ? __kasan_slab_alloc (mm/kasan/common.c:318 mm/kasan/common.c:345)
kern :err : [ 44.381325] ? __pfx_bus_for_each_dev (drivers/base/bus.c:358)
kern :err : [ 44.386587] ? __pfx__raw_spin_lock (kernel/locking/spinlock.c:153)
kern :err : [ 44.391677] ? klist_add_tail (include/linux/list.h:150 include/linux/list.h:183 lib/klist.c:104 lib/klist.c:137)
kern :err : [ 44.396421] bus_add_driver (drivers/base/bus.c:675)
kern :err : [ 44.400984] driver_register (drivers/base/driver.c:246)
kern :err : [ 44.405631] i915_init (drivers/gpu/drm/i915/i915_driver.c:1395) i915
kern :err : [ 44.410605] ? __pfx_i915_init (drivers/gpu/drm/i915/i915_config.c:13) i915
kern :err : [ 44.416150] do_one_initcall (init/main.c:1269)
kern :err : [ 44.420704] ? __pfx_do_one_initcall (init/main.c:1260)
kern :err : [ 44.425872] ? __asan_register_globals (mm/kasan/generic.c:232 (discriminator 3))
kern :err : [ 44.431218] ? kasan_unpoison (mm/kasan/shadow.c:156 mm/kasan/shadow.c:182)
kern :err : [ 44.435787] do_init_module (kernel/module/main.c:2543)
kern :err : [ 44.440356] load_module (kernel/module/main.c:3009)
kern :err : [ 44.444831] ? ima_post_read_file (security/integrity/ima/ima_main.c:835 security/integrity/ima/ima_main.c:817)
kern :err : [ 44.449914] ? __pfx_load_module (kernel/module/main.c:2856)
kern :err : [ 44.454736] ? security_kernel_post_read_file (security/security.c:3356)
kern :err : [ 44.460698] ? __pfx_kernel_read_file (fs/kernel_read_file.c:38)
kern :err : [ 44.465953] ? __pfx_down_write_killable (kernel/locking/rwsem.c:1586)
kern :err : [ 44.471467] ? init_module_from_file (kernel/module/main.c:3198)
kern :err : [ 44.476720] init_module_from_file (kernel/module/main.c:3198)
kern :err : [ 44.481796] ? __pfx_init_module_from_file (kernel/module/main.c:3174)
kern :err : [ 44.487485] ? __pfx_vm_mmap_pgoff (mm/util.c:578)
kern :err : [ 44.492477] ? __pfx__raw_spin_lock (kernel/locking/spinlock.c:153)
kern :err : [ 44.497559] ? ksys_mmap_pgoff (mm/mmap.c:547)
kern :err : [ 44.502382] idempotent_init_module (kernel/module/main.c:3210)
kern :err : [ 44.507642] ? __pfx_idempotent_init_module (kernel/module/main.c:3202)
kern :err : [ 44.513422] ? __pfx___seccomp_filter (kernel/seccomp.c:1218)
kern :err : [ 44.518687] ? fdget (include/linux/atomic/atomic-arch-fallback.h:479 include/linux/atomic/atomic-instrumented.h:50 fs/file.c:1114 fs/file.c:1128)
kern :err : [ 44.522549] ? security_capable (security/security.c:1143)
kern :err : [ 44.527277] __x64_sys_finit_module (include/linux/file.h:68 kernel/module/main.c:3238 kernel/module/main.c:3220 kernel/module/main.c:3220)
kern :err : [ 44.532443] do_syscall_64 (arch/x86/entry/common.c:52 arch/x86/entry/common.c:83)
kern :err : [ 44.536824] ? sched_clock (arch/x86/include/asm/preempt.h:94 arch/x86/kernel/tsc.c:285)
kern :err : [ 44.541029] ? sched_clock_cpu (kernel/sched/clock.c:394)
kern :err : [ 44.545767] ? clockevents_program_event (kernel/time/clockevents.c:334 (discriminator 3))
kern :err : [ 44.551465] ? __pfx_sched_clock_cpu (kernel/sched/clock.c:389)
kern :err : [ 44.556639] ? hrtimer_interrupt (kernel/time/hrtimer.c:1830)
kern :err : [ 44.561639] ? irqtime_account_irq (kernel/sched/cputime.c:64)
kern :err : [ 44.566730] ? __irq_exit_rcu (kernel/softirq.c:620 kernel/softirq.c:639)
kern :err : [ 44.571387] entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
kern :err : [ 44.577175] RIP: 0033:0x7f6c1bf48799
kern :err : [ 44.581479] Code: 08 89 e8 5b 5d c3 66 2e 0f 1f 84 00 00 00 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 37 06 0d 00 f7 d8 64 89 01 48
All code
========
0: 08 89 e8 5b 5d c3 or %cl,-0x3ca2a418(%rcx)
6: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1)
d: 00 00 00
10: 90 nop
11: 48 89 f8 mov %rdi,%rax
14: 48 89 f7 mov %rsi,%rdi
17: 48 89 d6 mov %rdx,%rsi
1a: 48 89 ca mov %rcx,%rdx
1d: 4d 89 c2 mov %r8,%r10
20: 4d 89 c8 mov %r9,%r8
23: 4c 8b 4c 24 08 mov 0x8(%rsp),%r9
28: 0f 05 syscall
2a:* 48 3d 01 f0 ff ff cmp $0xfffffffffffff001,%rax <-- trapping instruction
30: 73 01 jae 0x33
32: c3 ret
33: 48 8b 0d 37 06 0d 00 mov 0xd0637(%rip),%rcx # 0xd0671
3a: f7 d8 neg %eax
3c: 64 89 01 mov %eax,%fs:(%rcx)
3f: 48 rex.W
Code starting with the faulting instruction
===========================================
0: 48 3d 01 f0 ff ff cmp $0xfffffffffffff001,%rax
6: 73 01 jae 0x9
8: c3 ret
9: 48 8b 0d 37 06 0d 00 mov 0xd0637(%rip),%rcx # 0xd0647
10: f7 d8 neg %eax
12: 64 89 01 mov %eax,%fs:(%rcx)
15: 48 rex.W
The kernel config and materials to reproduce are available at:
https://download.01.org/0day-ci/archive/20241125/202411252029.30061fde-lkp@intel.com
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCHv2 3/3] drm/i915/display: Populate list of async supported formats/modifiers
2024-11-18 7:53 ` [PATCHv2 3/3] drm/i915/display: Populate list of async supported formats/modifiers Arun R Murthy
2024-11-22 4:02 ` kernel test robot
2024-11-25 13:05 ` kernel test robot
@ 2024-11-28 23:21 ` kernel test robot
2 siblings, 0 replies; 13+ messages in thread
From: kernel test robot @ 2024-11-28 23:21 UTC (permalink / raw)
To: Arun R Murthy, intel-xe, intel-gfx, dri-devel
Cc: oe-kbuild-all, Arun R Murthy
Hi Arun,
kernel test robot noticed the following build warnings:
[auto build test WARNING on drm-intel/for-linux-next-fixes]
[also build test WARNING on v6.12 next-20241128]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Arun-R-Murthy/drm-plane-Expose-function-to-create-format-modifier-blob/20241121-105652
base: git://anongit.freedesktop.org/drm-intel for-linux-next-fixes
patch link: https://lore.kernel.org/r/20241118075315.466009-4-arun.r.murthy%40intel.com
patch subject: [PATCHv2 3/3] drm/i915/display: Populate list of async supported formats/modifiers
config: x86_64-randconfig-103-20241121 (https://download.01.org/0day-ci/archive/20241129/202411290757.FcxceZlQ-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-12) 11.3.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202411290757.FcxceZlQ-lkp@intel.com/
cocci warnings: (new ones prefixed by >>)
>> drivers/gpu/drm/i915/display/skl_universal_plane.c:2626:26-32: ERROR: application of sizeof to pointer
vim +2626 drivers/gpu/drm/i915/display/skl_universal_plane.c
2510
2511 struct intel_plane *
2512 skl_universal_plane_create(struct drm_i915_private *dev_priv,
2513 enum pipe pipe, enum plane_id plane_id)
2514 {
2515 const struct drm_plane_funcs *plane_funcs;
2516 struct intel_plane *plane;
2517 enum drm_plane_type plane_type;
2518 unsigned int supported_rotations;
2519 unsigned int supported_csc;
2520 const u64 *modifiers;
2521 u64 *async_modifiers;
2522 const u32 *formats;
2523 int num_formats;
2524 int ret;
2525
2526 plane = intel_plane_alloc();
2527 if (IS_ERR(plane))
2528 return plane;
2529
2530 plane->pipe = pipe;
2531 plane->id = plane_id;
2532 plane->frontbuffer_bit = INTEL_FRONTBUFFER(pipe, plane_id);
2533
2534 intel_fbc_add_plane(skl_plane_fbc(dev_priv, pipe, plane_id), plane);
2535
2536 if (DISPLAY_VER(dev_priv) >= 11) {
2537 plane->min_width = icl_plane_min_width;
2538 if (icl_is_hdr_plane(dev_priv, plane_id))
2539 plane->max_width = icl_hdr_plane_max_width;
2540 else
2541 plane->max_width = icl_sdr_plane_max_width;
2542 plane->max_height = icl_plane_max_height;
2543 plane->min_cdclk = icl_plane_min_cdclk;
2544 } else if (DISPLAY_VER(dev_priv) >= 10) {
2545 plane->max_width = glk_plane_max_width;
2546 plane->max_height = skl_plane_max_height;
2547 plane->min_cdclk = glk_plane_min_cdclk;
2548 } else {
2549 plane->max_width = skl_plane_max_width;
2550 plane->max_height = skl_plane_max_height;
2551 plane->min_cdclk = skl_plane_min_cdclk;
2552 }
2553
2554 if (DISPLAY_VER(dev_priv) >= 13)
2555 plane->max_stride = adl_plane_max_stride;
2556 else
2557 plane->max_stride = skl_plane_max_stride;
2558
2559 if (DISPLAY_VER(dev_priv) >= 12)
2560 plane->min_alignment = tgl_plane_min_alignment;
2561 else
2562 plane->min_alignment = skl_plane_min_alignment;
2563
2564 if (DISPLAY_VER(dev_priv) >= 11) {
2565 plane->update_noarm = icl_plane_update_noarm;
2566 plane->update_arm = icl_plane_update_arm;
2567 plane->disable_arm = icl_plane_disable_arm;
2568 } else {
2569 plane->update_noarm = skl_plane_update_noarm;
2570 plane->update_arm = skl_plane_update_arm;
2571 plane->disable_arm = skl_plane_disable_arm;
2572 }
2573 plane->get_hw_state = skl_plane_get_hw_state;
2574 plane->check_plane = skl_plane_check;
2575
2576 if (plane_id == PLANE_1) {
2577 plane->need_async_flip_toggle_wa = IS_DISPLAY_VER(dev_priv, 9, 10);
2578 plane->async_flip = skl_plane_async_flip;
2579 plane->enable_flip_done = skl_plane_enable_flip_done;
2580 plane->disable_flip_done = skl_plane_disable_flip_done;
2581 }
2582
2583 if (DISPLAY_VER(dev_priv) >= 11)
2584 formats = icl_get_plane_formats(dev_priv, pipe,
2585 plane_id, &num_formats);
2586 else if (DISPLAY_VER(dev_priv) >= 10)
2587 formats = glk_get_plane_formats(dev_priv, pipe,
2588 plane_id, &num_formats);
2589 else
2590 formats = skl_get_plane_formats(dev_priv, pipe,
2591 plane_id, &num_formats);
2592
2593 if (DISPLAY_VER(dev_priv) >= 12)
2594 plane_funcs = &gen12_plane_funcs;
2595 else
2596 plane_funcs = &skl_plane_funcs;
2597
2598 if (plane_id == PLANE_1)
2599 plane_type = DRM_PLANE_TYPE_PRIMARY;
2600 else
2601 plane_type = DRM_PLANE_TYPE_OVERLAY;
2602
2603 modifiers = intel_fb_plane_get_modifiers(dev_priv,
2604 skl_get_plane_caps(dev_priv, pipe, plane_id));
2605
2606 ret = drm_universal_plane_init(&dev_priv->drm, &plane->base,
2607 0, plane_funcs,
2608 formats, num_formats, modifiers,
2609 plane_type,
2610 "plane %d%c", plane_id + 1,
2611 pipe_name(pipe));
2612
2613 kfree(modifiers);
2614
2615 if (ret)
2616 goto fail;
2617
2618 if (DISPLAY_VER(dev_priv) >= 12)
2619 async_modifiers = tgl_asyn_modifiers;
2620 else if (DISPLAY_VER(dev_priv) == 11)
2621 async_modifiers = icl_async_modifiers;
2622 else
2623 async_modifiers = skl_async_modifiers;
2624
2625 drm_plane_create_format_blob(&dev_priv->drm, &plane->base,
> 2626 async_modifiers, sizeof(async_modifiers),
2627 intel_async_formats,
2628 sizeof(intel_async_formats), true);
2629
2630 if (DISPLAY_VER(dev_priv) >= 13)
2631 supported_rotations = DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_180;
2632 else
2633 supported_rotations =
2634 DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_90 |
2635 DRM_MODE_ROTATE_180 | DRM_MODE_ROTATE_270;
2636
2637 if (DISPLAY_VER(dev_priv) >= 11)
2638 supported_rotations |= DRM_MODE_REFLECT_X;
2639
2640 drm_plane_create_rotation_property(&plane->base,
2641 DRM_MODE_ROTATE_0,
2642 supported_rotations);
2643
2644 supported_csc = BIT(DRM_COLOR_YCBCR_BT601) | BIT(DRM_COLOR_YCBCR_BT709);
2645
2646 if (DISPLAY_VER(dev_priv) >= 10)
2647 supported_csc |= BIT(DRM_COLOR_YCBCR_BT2020);
2648
2649 drm_plane_create_color_properties(&plane->base,
2650 supported_csc,
2651 BIT(DRM_COLOR_YCBCR_LIMITED_RANGE) |
2652 BIT(DRM_COLOR_YCBCR_FULL_RANGE),
2653 DRM_COLOR_YCBCR_BT709,
2654 DRM_COLOR_YCBCR_LIMITED_RANGE);
2655
2656 drm_plane_create_alpha_property(&plane->base);
2657 drm_plane_create_blend_mode_property(&plane->base,
2658 BIT(DRM_MODE_BLEND_PIXEL_NONE) |
2659 BIT(DRM_MODE_BLEND_PREMULTI) |
2660 BIT(DRM_MODE_BLEND_COVERAGE));
2661
2662 drm_plane_create_zpos_immutable_property(&plane->base, plane_id);
2663
2664 if (DISPLAY_VER(dev_priv) >= 12)
2665 drm_plane_enable_fb_damage_clips(&plane->base);
2666
2667 if (DISPLAY_VER(dev_priv) >= 11)
2668 drm_plane_create_scaling_filter_property(&plane->base,
2669 BIT(DRM_SCALING_FILTER_DEFAULT) |
2670 BIT(DRM_SCALING_FILTER_NEAREST_NEIGHBOR));
2671
2672 intel_plane_helper_add(plane);
2673
2674 return plane;
2675
2676 fail:
2677 intel_plane_free(plane);
2678
2679 return ERR_PTR(ret);
2680 }
2681
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: [PATCHv2 2/3] drm/plane: Expose function to create format/modifier blob
2024-11-25 8:45 ` Murthy, Arun R
@ 2024-12-13 9:02 ` Murthy, Arun R
0 siblings, 0 replies; 13+ messages in thread
From: Murthy, Arun R @ 2024-12-13 9:02 UTC (permalink / raw)
To: Ville Syrjälä
Cc: intel-xe@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
dri-devel@lists.freedesktop.org
> > On Mon, Nov 18, 2024 at 01:23:14PM +0530, Arun R Murthy wrote:
> > > Expose drm plane function to create formats/modifiers blob. This
> > > function can be used to expose list of supported formats/modifiers
> > > for sync/async flips.
> > >
> > > Signed-off-by: Arun R Murthy <arun.r.murthy@intel.com>
> > > ---
> > > drivers/gpu/drm/drm_plane.c | 44 ++++++++++++++++++++++++-------------
> > > include/drm/drm_plane.h | 4 ++++
> > > 2 files changed, 33 insertions(+), 15 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/drm_plane.c
> > > b/drivers/gpu/drm/drm_plane.c index 416818e54ccf..4f35eec2b777
> > > 100644
> > > --- a/drivers/gpu/drm/drm_plane.c
> > > +++ b/drivers/gpu/drm/drm_plane.c
> > > @@ -191,7 +191,10 @@ modifiers_ptr(struct drm_format_modifier_blob
> > *blob)
> > > return (struct drm_format_modifier *)(((char *)blob) +
> > > blob->modifiers_offset); }
> > >
> > > -static int create_in_format_blob(struct drm_device *dev, struct
> > > drm_plane *plane)
> > > +int drm_plane_create_format_blob(struct drm_device *dev,
> > > + struct drm_plane *plane, u64 *modifiers,
> > > + unsigned int modifier_count, u32 *formats,
> > > + unsigned int format_count, bool is_async)
> > > {
> > > const struct drm_mode_config *config = &dev->mode_config;
> > > struct drm_property_blob *blob;
> > > @@ -200,14 +203,14 @@ static int create_in_format_blob(struct
> > > drm_device
> > *dev, struct drm_plane *plane
> > > struct drm_format_modifier_blob *blob_data;
> > > unsigned int i, j;
> > >
> > > - formats_size = sizeof(__u32) * plane->format_count;
> > > + formats_size = sizeof(__u32) * format_count;
> > > if (WARN_ON(!formats_size)) {
> > > /* 0 formats are never expected */
> > > return 0;
> > > }
> > >
> > > modifiers_size =
> > > - sizeof(struct drm_format_modifier) * plane->modifier_count;
> > > + sizeof(struct drm_format_modifier) * modifier_count;
> > >
> > > blob_size = sizeof(struct drm_format_modifier_blob);
> > > /* Modifiers offset is a pointer to a struct with a 64 bit field
> > > so it @@ -223,37 +226,45 @@ static int create_in_format_blob(struct
> > > drm_device *dev, struct drm_plane *plane
> > >
> > > blob_data = blob->data;
> > > blob_data->version = FORMAT_BLOB_CURRENT;
> > > - blob_data->count_formats = plane->format_count;
> > > + blob_data->count_formats = format_count;
> > > blob_data->formats_offset = sizeof(struct drm_format_modifier_blob);
> > > - blob_data->count_modifiers = plane->modifier_count;
> > > + blob_data->count_modifiers = modifier_count;
> > >
> > > blob_data->modifiers_offset =
> > > ALIGN(blob_data->formats_offset + formats_size, 8);
> > >
> > > - memcpy(formats_ptr(blob_data), plane->format_types, formats_size);
> > > + memcpy(formats_ptr(blob_data), formats, formats_size);
> > >
> > > mod = modifiers_ptr(blob_data);
> > > - for (i = 0; i < plane->modifier_count; i++) {
> > > - for (j = 0; j < plane->format_count; j++) {
> > > - if (!plane->funcs->format_mod_supported ||
> > > + for (i = 0; i < modifier_count; i++) {
> > > + for (j = 0; j < format_count; j++) {
> > > + if (is_async ||
> >
> > I asked for a format_mod_supported_async(). This is not that.
> >
format_mod_supported() is the existing function pointer and while calling this in universal_plane_init() we don't have any flag to differentiate between sync and async for differentiating the calls. Also this maynot be required at universal_plane_init as only RGB formats are supported under async_flip. Only plane we need is to check if the modifier is supported or not and that can be handled in the present format_mod_supported().
This can be achieved by
--- a/drivers/gpu/drm/i915/display/skl_universal_plane.c
+++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c
@@ -2479,6 +2479,10 @@ static bool tgl_plane_format_mod_supported(struct drm_plane *_plane,
{
struct intel_plane *plane = to_intel_plane(_plane);
+ /* handle check for async flips */
+ if (plane->crtc->state->async_flip)
+ return plane->can_async_flip(modifier);
+
if (!intel_fb_plane_supports_modifier(plane, modifier))
return false;
Dependency: https://patchwork.freedesktop.org/patch/626849/?series=139807&rev=4
This part can be taken out of this series as this series is focused on exposing the supported formats/modifiers to user by the property IN_FORMATS_ASYNC.
Thanks and Regards,
Arun R Murthy
--------------------
^ permalink raw reply [flat|nested] 13+ messages in thread
* ✗ Fi.CI.BUILD: failure for series starting with [PATCHv2,1/3] drm/plane: Add new plane property IN_FORMATS_ASYNC (rev2)
2024-11-18 7:53 [PATCHv2/3] Expose modifiers/formats supported by async flips Arun R Murthy
` (3 preceding siblings ...)
2024-11-18 14:26 ` ✗ Fi.CI.SPARSE: warning for series starting with [PATCHv2,1/3] drm/plane: Add new plane property IN_FORMATS_ASYNC Patchwork
@ 2024-12-13 9:32 ` Patchwork
4 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2024-12-13 9:32 UTC (permalink / raw)
To: Murthy, Arun R; +Cc: intel-gfx
== Series Details ==
Series: series starting with [PATCHv2,1/3] drm/plane: Add new plane property IN_FORMATS_ASYNC (rev2)
URL : https://patchwork.freedesktop.org/series/141475/
State : failure
== Summary ==
Error: patch https://patchwork.freedesktop.org/api/1.0/series/141475/revisions/2/mbox/ not applied
Applying: drm/plane: Add new plane property IN_FORMATS_ASYNC
Applying: drm/plane: Expose function to create format/modifier blob
error: corrupt patch at line 13
error: could not build fake ancestor
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0002 drm/plane: Expose function to create format/modifier blob
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Build failed, no error log produced
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2024-12-13 9:32 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-18 7:53 [PATCHv2/3] Expose modifiers/formats supported by async flips Arun R Murthy
2024-11-18 7:53 ` [PATCHv2 1/3] drm/plane: Add new plane property IN_FORMATS_ASYNC Arun R Murthy
2024-11-18 7:53 ` [PATCHv2 2/3] drm/plane: Expose function to create format/modifier blob Arun R Murthy
2024-11-22 20:06 ` Ville Syrjälä
2024-11-25 8:45 ` Murthy, Arun R
2024-12-13 9:02 ` Murthy, Arun R
2024-11-18 7:53 ` [PATCHv2 3/3] drm/i915/display: Populate list of async supported formats/modifiers Arun R Murthy
2024-11-22 4:02 ` kernel test robot
2024-11-25 13:05 ` kernel test robot
2024-11-28 23:21 ` kernel test robot
2024-11-18 14:26 ` ✗ Fi.CI.SPARSE: warning for series starting with [PATCHv2,1/3] drm/plane: Add new plane property IN_FORMATS_ASYNC Patchwork
2024-12-13 9:32 ` ✗ Fi.CI.BUILD: failure for series starting with [PATCHv2,1/3] drm/plane: Add new plane property IN_FORMATS_ASYNC (rev2) Patchwork
-- strict thread matches above, loose matches on Subject: below --
2024-11-05 10:26 [PATCH 0/4] Expose modifiers/formats supported by async flips Arun R Murthy
2024-11-18 7:48 ` [PATCHv2/3] " Arun R Murthy
2024-11-18 7:48 ` [PATCHv2 1/3] drm/plane: Add new plane property IN_FORMATS_ASYNC Arun R Murthy
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox