1

Revert "drm: Introduce pixel_source DRM plane property"

This reverts commit e50e5fed41.

Although the Solid Fill planes patchset got all reviews and
acknowledgements, it doesn't fulfill requirements for the new uABI. It
has neither corresponding open-source userspace implementation nor the
IGT tests coverage. Reverting this patchset until userspace obligations
are fulfilled.

Acked-by: Simon Ser <contact@emersion.fr>
Acked-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20231204131455.19023-8-dmitry.baryshkov@linaro.org
This commit is contained in:
Dmitry Baryshkov 2023-12-04 15:13:54 +02:00
parent e5fba1ada1
commit 90422201f8
6 changed files with 4 additions and 137 deletions

View File

@ -252,7 +252,6 @@ void __drm_atomic_helper_plane_state_reset(struct drm_plane_state *plane_state,
plane_state->alpha = DRM_BLEND_ALPHA_OPAQUE; plane_state->alpha = DRM_BLEND_ALPHA_OPAQUE;
plane_state->pixel_blend_mode = DRM_MODE_BLEND_PREMULTI; plane_state->pixel_blend_mode = DRM_MODE_BLEND_PREMULTI;
plane_state->pixel_source = DRM_PLANE_PIXEL_SOURCE_FB;
if (plane->color_encoding_property) { if (plane->color_encoding_property) {
if (!drm_object_property_get_default_value(&plane->base, if (!drm_object_property_get_default_value(&plane->base,

View File

@ -562,8 +562,6 @@ static int drm_atomic_plane_set_property(struct drm_plane *plane,
state->src_w = val; state->src_w = val;
} else if (property == config->prop_src_h) { } else if (property == config->prop_src_h) {
state->src_h = val; state->src_h = val;
} else if (property == plane->pixel_source_property) {
state->pixel_source = val;
} else if (property == plane->alpha_property) { } else if (property == plane->alpha_property) {
state->alpha = val; state->alpha = val;
} else if (property == plane->blend_mode_property) { } else if (property == plane->blend_mode_property) {
@ -652,8 +650,6 @@ drm_atomic_plane_get_property(struct drm_plane *plane,
*val = state->src_w; *val = state->src_w;
} else if (property == config->prop_src_h) { } else if (property == config->prop_src_h) {
*val = state->src_h; *val = state->src_h;
} else if (property == plane->pixel_source_property) {
*val = state->pixel_source;
} else if (property == plane->alpha_property) { } else if (property == plane->alpha_property) {
*val = state->alpha; *val = state->alpha;
} else if (property == plane->blend_mode_property) { } else if (property == plane->blend_mode_property) {

View File

@ -185,25 +185,6 @@
* plane does not expose the "alpha" property, then this is * plane does not expose the "alpha" property, then this is
* assumed to be 1.0 * assumed to be 1.0
* *
* pixel_source:
* pixel_source is set up with drm_plane_create_pixel_source_property().
* It is used to toggle the active source of pixel data for the plane.
* The plane will only display data from the set pixel_source -- any
* data from other sources will be ignored.
*
* For non-framebuffer sources, if pixel_source is set to a non-framebuffer
* and non-NONE source, and the corresponding source property is NULL, then
* the atomic commit should return an error.
*
* Possible values:
*
* "NONE":
* No active pixel source.
* Committing with a NONE pixel source will disable the plane.
*
* "FB":
* Framebuffer source set by the "FB_ID" property.
*
* Note that all the property extensions described here apply either to the * Note that all the property extensions described here apply either to the
* plane or the CRTC (e.g. for the background color, which currently is not * plane or the CRTC (e.g. for the background color, which currently is not
* exposed and assumed to be black). * exposed and assumed to be black).
@ -634,78 +615,3 @@ int drm_plane_create_blend_mode_property(struct drm_plane *plane,
return 0; return 0;
} }
EXPORT_SYMBOL(drm_plane_create_blend_mode_property); EXPORT_SYMBOL(drm_plane_create_blend_mode_property);
static const struct drm_prop_enum_list drm_pixel_source_enum_list[] = {
{ DRM_PLANE_PIXEL_SOURCE_NONE, "NONE" },
{ DRM_PLANE_PIXEL_SOURCE_FB, "FB" },
};
/**
* drm_plane_create_pixel_source_property - create a new pixel source property
* @plane: DRM plane
* @extra_sources: Bitmask of additional supported pixel_sources for the driver.
* DRM_PLANE_PIXEL_SOURCE_FB and DRM_PLANE_PIXEL_SOURCE_NONE will
* always be enabled as supported sources.
*
* This creates a new property describing the current source of pixel data for the
* plane. The pixel_source will be initialized as DRM_PLANE_PIXEL_SOURCE_FB by default.
*
* Drivers can set a custom default source by overriding the pixel_source value in
* drm_plane_funcs.reset()
*
* The property is exposed to userspace as an enumeration property called
* "pixel_source" and has the following enumeration values:
*
* "NONE":
* No active pixel source
*
* "FB":
* Framebuffer pixel source
*
* Returns:
* Zero on success, negative errno on failure.
*/
int drm_plane_create_pixel_source_property(struct drm_plane *plane,
unsigned long extra_sources)
{
struct drm_device *dev = plane->dev;
struct drm_property *prop;
static const unsigned int valid_source_mask = BIT(DRM_PLANE_PIXEL_SOURCE_FB) |
BIT(DRM_PLANE_PIXEL_SOURCE_NONE);
int i;
/* FB is supported by default */
unsigned long supported_sources = extra_sources |
BIT(DRM_PLANE_PIXEL_SOURCE_FB) |
BIT(DRM_PLANE_PIXEL_SOURCE_NONE);
if (WARN_ON(supported_sources & ~valid_source_mask))
return -EINVAL;
prop = drm_property_create(dev, DRM_MODE_PROP_ENUM | DRM_MODE_PROP_ATOMIC, "pixel_source",
hweight32(supported_sources));
if (!prop)
return -ENOMEM;
for (i = 0; i < ARRAY_SIZE(drm_pixel_source_enum_list); i++) {
int ret;
if (!test_bit(drm_pixel_source_enum_list[i].type, &supported_sources))
continue;
ret = drm_property_add_enum(prop, drm_pixel_source_enum_list[i].type,
drm_pixel_source_enum_list[i].name);
if (ret) {
drm_property_destroy(dev, prop);
return ret;
}
}
drm_object_attach_property(&plane->base, prop, DRM_PLANE_PIXEL_SOURCE_FB);
plane->pixel_source_property = prop;
return 0;
}
EXPORT_SYMBOL(drm_plane_create_pixel_source_property);

View File

@ -953,14 +953,6 @@ bool drm_any_plane_has_format(struct drm_device *dev,
} }
EXPORT_SYMBOL(drm_any_plane_has_format); EXPORT_SYMBOL(drm_any_plane_has_format);
static bool drm_plane_needs_disable(struct drm_plane_state *state, struct drm_framebuffer *fb)
{
if (state->pixel_source == DRM_PLANE_PIXEL_SOURCE_NONE)
return true;
return state->pixel_source == DRM_PLANE_PIXEL_SOURCE_FB && fb == NULL;
}
/* /*
* __setplane_internal - setplane handler for internal callers * __setplane_internal - setplane handler for internal callers
* *
@ -983,8 +975,8 @@ static int __setplane_internal(struct drm_plane *plane,
WARN_ON(drm_drv_uses_atomic_modeset(plane->dev)); WARN_ON(drm_drv_uses_atomic_modeset(plane->dev));
/* No visible data means shut it down */ /* No fb means shut it down */
if (drm_plane_needs_disable(plane->state, fb)) { if (!fb) {
plane->old_fb = plane->fb; plane->old_fb = plane->fb;
ret = plane->funcs->disable_plane(plane, ctx); ret = plane->funcs->disable_plane(plane, ctx);
if (!ret) { if (!ret) {
@ -1035,8 +1027,8 @@ static int __setplane_atomic(struct drm_plane *plane,
WARN_ON(!drm_drv_uses_atomic_modeset(plane->dev)); WARN_ON(!drm_drv_uses_atomic_modeset(plane->dev));
/* No visible data means shut it down */ /* No fb means shut it down */
if (drm_plane_needs_disable(plane->state, fb)) if (!fb)
return plane->funcs->disable_plane(plane, ctx); return plane->funcs->disable_plane(plane, ctx);
/* /*
@ -1109,9 +1101,6 @@ int drm_mode_setplane(struct drm_device *dev, void *data,
return -ENOENT; return -ENOENT;
} }
if (plane->state)
plane->state->pixel_source = DRM_PLANE_PIXEL_SOURCE_FB;
if (plane_req->fb_id) { if (plane_req->fb_id) {
fb = drm_framebuffer_lookup(dev, file_priv, plane_req->fb_id); fb = drm_framebuffer_lookup(dev, file_priv, plane_req->fb_id);
if (!fb) { if (!fb) {

View File

@ -58,6 +58,4 @@ int drm_atomic_normalize_zpos(struct drm_device *dev,
struct drm_atomic_state *state); struct drm_atomic_state *state);
int drm_plane_create_blend_mode_property(struct drm_plane *plane, int drm_plane_create_blend_mode_property(struct drm_plane *plane,
unsigned int supported_modes); unsigned int supported_modes);
int drm_plane_create_pixel_source_property(struct drm_plane *plane,
unsigned long extra_sources);
#endif #endif

View File

@ -40,12 +40,6 @@ enum drm_scaling_filter {
DRM_SCALING_FILTER_NEAREST_NEIGHBOR, DRM_SCALING_FILTER_NEAREST_NEIGHBOR,
}; };
enum drm_plane_pixel_source {
DRM_PLANE_PIXEL_SOURCE_NONE,
DRM_PLANE_PIXEL_SOURCE_FB,
DRM_PLANE_PIXEL_SOURCE_MAX
};
/** /**
* struct drm_plane_state - mutable plane state * struct drm_plane_state - mutable plane state
* *
@ -126,14 +120,6 @@ struct drm_plane_state {
/** @hotspot_y: y offset to mouse cursor hotspot */ /** @hotspot_y: y offset to mouse cursor hotspot */
int32_t hotspot_x, hotspot_y; int32_t hotspot_x, hotspot_y;
/**
* @pixel_source:
*
* Source of pixel information for the plane. See
* drm_plane_create_pixel_source_property() for more details.
*/
enum drm_plane_pixel_source pixel_source;
/** /**
* @alpha: * @alpha:
* Opacity of the plane with 0 as completely transparent and 0xffff as * Opacity of the plane with 0 as completely transparent and 0xffff as
@ -727,13 +713,6 @@ struct drm_plane {
*/ */
struct drm_plane_state *state; struct drm_plane_state *state;
/*
* @pixel_source_property:
* Optional pixel_source property for this plane. See
* drm_plane_create_pixel_source_property().
*/
struct drm_property *pixel_source_property;
/** /**
* @alpha_property: * @alpha_property:
* Optional alpha property for this plane. See * Optional alpha property for this plane. See