* [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* 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 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
* [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* 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 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
* ✗ 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* ✗ 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