drm/msm/mdp5: switch to standard zpos property
Instead of implemeting zpos property on our own, use standard zpos property support. Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Link: https://lore.kernel.org/r/20210525131316.3117809-6-dmitry.baryshkov@linaro.org Signed-off-by: Rob Clark <robdclark@chromium.org>
This commit is contained in:
parent
ed6b97e5b5
commit
7d36db0be3
3 changed files with 10 additions and 109 deletions
|
@ -650,7 +650,7 @@ static int pstate_cmp(const void *a, const void *b)
|
||||||
{
|
{
|
||||||
struct plane_state *pa = (struct plane_state *)a;
|
struct plane_state *pa = (struct plane_state *)a;
|
||||||
struct plane_state *pb = (struct plane_state *)b;
|
struct plane_state *pb = (struct plane_state *)b;
|
||||||
return pa->state->zpos - pb->state->zpos;
|
return pa->state->base.normalized_zpos - pb->state->base.normalized_zpos;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* is there a helper for this? */
|
/* is there a helper for this? */
|
||||||
|
|
|
@ -98,9 +98,6 @@ struct mdp5_plane_state {
|
||||||
struct mdp5_hw_pipe *hwpipe;
|
struct mdp5_hw_pipe *hwpipe;
|
||||||
struct mdp5_hw_pipe *r_hwpipe; /* right hwpipe */
|
struct mdp5_hw_pipe *r_hwpipe; /* right hwpipe */
|
||||||
|
|
||||||
/* aligned with property */
|
|
||||||
uint8_t zpos;
|
|
||||||
|
|
||||||
/* assigned by crtc blender */
|
/* assigned by crtc blender */
|
||||||
enum mdp_mixer_stage_id stage;
|
enum mdp_mixer_stage_id stage;
|
||||||
};
|
};
|
||||||
|
|
|
@ -44,8 +44,9 @@ static void mdp5_plane_destroy(struct drm_plane *plane)
|
||||||
kfree(mdp5_plane);
|
kfree(mdp5_plane);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mdp5_plane_install_rotation_property(struct drm_device *dev,
|
/* helper to install properties which are common to planes and crtcs */
|
||||||
struct drm_plane *plane)
|
static void mdp5_plane_install_properties(struct drm_plane *plane,
|
||||||
|
struct drm_mode_object *obj)
|
||||||
{
|
{
|
||||||
drm_plane_create_rotation_property(plane,
|
drm_plane_create_rotation_property(plane,
|
||||||
DRM_MODE_ROTATE_0,
|
DRM_MODE_ROTATE_0,
|
||||||
|
@ -53,109 +54,12 @@ static void mdp5_plane_install_rotation_property(struct drm_device *dev,
|
||||||
DRM_MODE_ROTATE_180 |
|
DRM_MODE_ROTATE_180 |
|
||||||
DRM_MODE_REFLECT_X |
|
DRM_MODE_REFLECT_X |
|
||||||
DRM_MODE_REFLECT_Y);
|
DRM_MODE_REFLECT_Y);
|
||||||
}
|
|
||||||
|
|
||||||
/* helper to install properties which are common to planes and crtcs */
|
|
||||||
static void mdp5_plane_install_properties(struct drm_plane *plane,
|
|
||||||
struct drm_mode_object *obj)
|
|
||||||
{
|
|
||||||
struct drm_device *dev = plane->dev;
|
|
||||||
struct msm_drm_private *dev_priv = dev->dev_private;
|
|
||||||
struct drm_property *prop;
|
|
||||||
|
|
||||||
#define INSTALL_PROPERTY(name, NAME, init_val, fnc, ...) do { \
|
|
||||||
prop = dev_priv->plane_property[PLANE_PROP_##NAME]; \
|
|
||||||
if (!prop) { \
|
|
||||||
prop = drm_property_##fnc(dev, 0, #name, \
|
|
||||||
##__VA_ARGS__); \
|
|
||||||
if (!prop) { \
|
|
||||||
dev_warn(dev->dev, \
|
|
||||||
"Create property %s failed\n", \
|
|
||||||
#name); \
|
|
||||||
return; \
|
|
||||||
} \
|
|
||||||
dev_priv->plane_property[PLANE_PROP_##NAME] = prop; \
|
|
||||||
} \
|
|
||||||
drm_object_attach_property(&plane->base, prop, init_val); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define INSTALL_RANGE_PROPERTY(name, NAME, min, max, init_val) \
|
|
||||||
INSTALL_PROPERTY(name, NAME, init_val, \
|
|
||||||
create_range, min, max)
|
|
||||||
|
|
||||||
#define INSTALL_ENUM_PROPERTY(name, NAME, init_val) \
|
|
||||||
INSTALL_PROPERTY(name, NAME, init_val, \
|
|
||||||
create_enum, name##_prop_enum_list, \
|
|
||||||
ARRAY_SIZE(name##_prop_enum_list))
|
|
||||||
|
|
||||||
INSTALL_RANGE_PROPERTY(zpos, ZPOS, 1, 255, 1);
|
|
||||||
|
|
||||||
mdp5_plane_install_rotation_property(dev, plane);
|
|
||||||
drm_plane_create_alpha_property(plane);
|
drm_plane_create_alpha_property(plane);
|
||||||
drm_plane_create_blend_mode_property(plane,
|
drm_plane_create_blend_mode_property(plane,
|
||||||
BIT(DRM_MODE_BLEND_PIXEL_NONE) |
|
BIT(DRM_MODE_BLEND_PIXEL_NONE) |
|
||||||
BIT(DRM_MODE_BLEND_PREMULTI) |
|
BIT(DRM_MODE_BLEND_PREMULTI) |
|
||||||
BIT(DRM_MODE_BLEND_COVERAGE));
|
BIT(DRM_MODE_BLEND_COVERAGE));
|
||||||
|
drm_plane_create_zpos_property(plane, 1, 1, 255);
|
||||||
#undef INSTALL_RANGE_PROPERTY
|
|
||||||
#undef INSTALL_ENUM_PROPERTY
|
|
||||||
#undef INSTALL_PROPERTY
|
|
||||||
}
|
|
||||||
|
|
||||||
static int mdp5_plane_atomic_set_property(struct drm_plane *plane,
|
|
||||||
struct drm_plane_state *state, struct drm_property *property,
|
|
||||||
uint64_t val)
|
|
||||||
{
|
|
||||||
struct drm_device *dev = plane->dev;
|
|
||||||
struct mdp5_plane_state *pstate;
|
|
||||||
struct msm_drm_private *dev_priv = dev->dev_private;
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
pstate = to_mdp5_plane_state(state);
|
|
||||||
|
|
||||||
#define SET_PROPERTY(name, NAME, type) do { \
|
|
||||||
if (dev_priv->plane_property[PLANE_PROP_##NAME] == property) { \
|
|
||||||
pstate->name = (type)val; \
|
|
||||||
DBG("Set property %s %d", #name, (type)val); \
|
|
||||||
goto done; \
|
|
||||||
} \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
SET_PROPERTY(zpos, ZPOS, uint8_t);
|
|
||||||
|
|
||||||
DRM_DEV_ERROR(dev->dev, "Invalid property\n");
|
|
||||||
ret = -EINVAL;
|
|
||||||
done:
|
|
||||||
return ret;
|
|
||||||
#undef SET_PROPERTY
|
|
||||||
}
|
|
||||||
|
|
||||||
static int mdp5_plane_atomic_get_property(struct drm_plane *plane,
|
|
||||||
const struct drm_plane_state *state,
|
|
||||||
struct drm_property *property, uint64_t *val)
|
|
||||||
{
|
|
||||||
struct drm_device *dev = plane->dev;
|
|
||||||
struct mdp5_plane_state *pstate;
|
|
||||||
struct msm_drm_private *dev_priv = dev->dev_private;
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
pstate = to_mdp5_plane_state(state);
|
|
||||||
|
|
||||||
#define GET_PROPERTY(name, NAME, type) do { \
|
|
||||||
if (dev_priv->plane_property[PLANE_PROP_##NAME] == property) { \
|
|
||||||
*val = pstate->name; \
|
|
||||||
DBG("Get property %s %lld", #name, *val); \
|
|
||||||
goto done; \
|
|
||||||
} \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
GET_PROPERTY(zpos, ZPOS, uint8_t);
|
|
||||||
|
|
||||||
DRM_DEV_ERROR(dev->dev, "Invalid property\n");
|
|
||||||
ret = -EINVAL;
|
|
||||||
done:
|
|
||||||
return ret;
|
|
||||||
#undef SET_PROPERTY
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -172,7 +76,8 @@ mdp5_plane_atomic_print_state(struct drm_printer *p,
|
||||||
pstate->r_hwpipe ? pstate->r_hwpipe->name :
|
pstate->r_hwpipe ? pstate->r_hwpipe->name :
|
||||||
"(null)");
|
"(null)");
|
||||||
drm_printf(p, "\tblend_mode=%u\n", pstate->base.pixel_blend_mode);
|
drm_printf(p, "\tblend_mode=%u\n", pstate->base.pixel_blend_mode);
|
||||||
drm_printf(p, "\tzpos=%u\n", pstate->zpos);
|
drm_printf(p, "\tzpos=%u\n", pstate->base.zpos);
|
||||||
|
drm_printf(p, "\tnormalized_zpos=%u\n", pstate->base.normalized_zpos);
|
||||||
drm_printf(p, "\talpha=%u\n", pstate->base.alpha);
|
drm_printf(p, "\talpha=%u\n", pstate->base.alpha);
|
||||||
drm_printf(p, "\tstage=%s\n", stage2name(pstate->stage));
|
drm_printf(p, "\tstage=%s\n", stage2name(pstate->stage));
|
||||||
}
|
}
|
||||||
|
@ -188,9 +93,10 @@ static void mdp5_plane_reset(struct drm_plane *plane)
|
||||||
mdp5_state = kzalloc(sizeof(*mdp5_state), GFP_KERNEL);
|
mdp5_state = kzalloc(sizeof(*mdp5_state), GFP_KERNEL);
|
||||||
|
|
||||||
if (plane->type == DRM_PLANE_TYPE_PRIMARY)
|
if (plane->type == DRM_PLANE_TYPE_PRIMARY)
|
||||||
mdp5_state->zpos = STAGE_BASE;
|
mdp5_state->base.zpos = STAGE_BASE;
|
||||||
else
|
else
|
||||||
mdp5_state->zpos = STAGE0 + drm_plane_index(plane);
|
mdp5_state->base.zpos = STAGE0 + drm_plane_index(plane);
|
||||||
|
mdp5_state->base.normalized_zpos = mdp5_state->base.zpos;
|
||||||
|
|
||||||
__drm_atomic_helper_plane_reset(plane, &mdp5_state->base);
|
__drm_atomic_helper_plane_reset(plane, &mdp5_state->base);
|
||||||
}
|
}
|
||||||
|
@ -228,8 +134,6 @@ static const struct drm_plane_funcs mdp5_plane_funcs = {
|
||||||
.update_plane = drm_atomic_helper_update_plane,
|
.update_plane = drm_atomic_helper_update_plane,
|
||||||
.disable_plane = drm_atomic_helper_disable_plane,
|
.disable_plane = drm_atomic_helper_disable_plane,
|
||||||
.destroy = mdp5_plane_destroy,
|
.destroy = mdp5_plane_destroy,
|
||||||
.atomic_set_property = mdp5_plane_atomic_set_property,
|
|
||||||
.atomic_get_property = mdp5_plane_atomic_get_property,
|
|
||||||
.reset = mdp5_plane_reset,
|
.reset = mdp5_plane_reset,
|
||||||
.atomic_duplicate_state = mdp5_plane_duplicate_state,
|
.atomic_duplicate_state = mdp5_plane_duplicate_state,
|
||||||
.atomic_destroy_state = mdp5_plane_destroy_state,
|
.atomic_destroy_state = mdp5_plane_destroy_state,
|
||||||
|
|
Loading…
Add table
Reference in a new issue