Commit bbd1e3a5 authored by Benjamin Gaignard's avatar Benjamin Gaignard

drm: sti: use generic zpos for plane

remove private zpos property and use instead the generic new.
zpos range is now fixed per plane type and normalized before
being using in mixer.
Signed-off-by: default avatarBenjamin Gaignard <benjamin.gaignard@linaro.org>

Cc: Inki Dae <inki.dae@samsung.com>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
Cc: Joonyoung Shim <jy0922.shim@samsung.com>
Cc: Seung-Woo Kim <sw0312.kim@samsung.com>
Cc: Andrzej Hajda <a.hajda@samsung.com>
Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Cc: Tobias Jakobi <tjakobi@math.uni-bielefeld.de>
Cc: Gustavo Padovan <gustavo@padovan.org>
Cc: vincent.abriou@st.com
Cc: fabien.dessenne@st.com
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
parent 44d1240d
...@@ -349,8 +349,8 @@ struct drm_plane_funcs sti_cursor_plane_helpers_funcs = { ...@@ -349,8 +349,8 @@ struct drm_plane_funcs sti_cursor_plane_helpers_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 = sti_cursor_destroy, .destroy = sti_cursor_destroy,
.set_property = sti_plane_set_property, .set_property = drm_atomic_helper_plane_set_property,
.reset = drm_atomic_helper_plane_reset, .reset = sti_plane_reset,
.atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state, .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_plane_destroy_state, .atomic_destroy_state = drm_atomic_helper_plane_destroy_state,
.late_register = sti_cursor_late_register, .late_register = sti_cursor_late_register,
......
...@@ -886,8 +886,8 @@ struct drm_plane_funcs sti_gdp_plane_helpers_funcs = { ...@@ -886,8 +886,8 @@ struct drm_plane_funcs sti_gdp_plane_helpers_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 = sti_gdp_destroy, .destroy = sti_gdp_destroy,
.set_property = sti_plane_set_property, .set_property = drm_atomic_helper_plane_set_property,
.reset = drm_atomic_helper_plane_reset, .reset = sti_plane_reset,
.atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state, .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_plane_destroy_state, .atomic_destroy_state = drm_atomic_helper_plane_destroy_state,
.late_register = sti_gdp_late_register, .late_register = sti_gdp_late_register,
......
...@@ -1254,8 +1254,8 @@ struct drm_plane_funcs sti_hqvdp_plane_helpers_funcs = { ...@@ -1254,8 +1254,8 @@ struct drm_plane_funcs sti_hqvdp_plane_helpers_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 = sti_hqvdp_destroy, .destroy = sti_hqvdp_destroy,
.set_property = sti_plane_set_property, .set_property = drm_atomic_helper_plane_set_property,
.reset = drm_atomic_helper_plane_reset, .reset = sti_plane_reset,
.atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state, .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_plane_destroy_state, .atomic_destroy_state = drm_atomic_helper_plane_destroy_state,
.late_register = sti_hqvdp_late_register, .late_register = sti_hqvdp_late_register,
......
...@@ -239,13 +239,10 @@ static void sti_mixer_set_background_area(struct sti_mixer *mixer, ...@@ -239,13 +239,10 @@ static void sti_mixer_set_background_area(struct sti_mixer *mixer,
int sti_mixer_set_plane_depth(struct sti_mixer *mixer, struct sti_plane *plane) int sti_mixer_set_plane_depth(struct sti_mixer *mixer, struct sti_plane *plane)
{ {
int plane_id, depth = plane->zorder; int plane_id, depth = plane->drm_plane.state->normalized_zpos;
unsigned int i; unsigned int i;
u32 mask, val; u32 mask, val;
if ((depth < 1) || (depth > GAM_MIXER_NB_DEPTH_LEVEL))
return 1;
switch (plane->desc) { switch (plane->desc) {
case STI_GDP_0: case STI_GDP_0:
plane_id = GAM_DEPTH_GDP0_ID; plane_id = GAM_DEPTH_GDP0_ID;
...@@ -278,8 +275,8 @@ int sti_mixer_set_plane_depth(struct sti_mixer *mixer, struct sti_plane *plane) ...@@ -278,8 +275,8 @@ int sti_mixer_set_plane_depth(struct sti_mixer *mixer, struct sti_plane *plane)
break; break;
} }
mask |= GAM_DEPTH_MASK_ID << (3 * (depth - 1)); mask |= GAM_DEPTH_MASK_ID << (3 * depth);
plane_id = plane_id << (3 * (depth - 1)); plane_id = plane_id << (3 * depth);
DRM_DEBUG_DRIVER("%s %s depth=%d\n", sti_mixer_to_str(mixer), DRM_DEBUG_DRIVER("%s %s depth=%d\n", sti_mixer_to_str(mixer),
sti_plane_to_str(plane), depth); sti_plane_to_str(plane), depth);
......
...@@ -14,15 +14,6 @@ ...@@ -14,15 +14,6 @@
#include "sti_drv.h" #include "sti_drv.h"
#include "sti_plane.h" #include "sti_plane.h"
/* (Background) < GDP0 < GDP1 < HQVDP0 < GDP2 < GDP3 < (ForeGround) */
enum sti_plane_desc sti_plane_default_zorder[] = {
STI_GDP_0,
STI_GDP_1,
STI_HQVDP_0,
STI_GDP_2,
STI_GDP_3,
};
const char *sti_plane_to_str(struct sti_plane *plane) const char *sti_plane_to_str(struct sti_plane *plane)
{ {
switch (plane->desc) { switch (plane->desc) {
...@@ -96,59 +87,46 @@ void sti_plane_update_fps(struct sti_plane *plane, ...@@ -96,59 +87,46 @@ void sti_plane_update_fps(struct sti_plane *plane,
plane->fps_info.fips_str); plane->fps_info.fips_str);
} }
int sti_plane_set_property(struct drm_plane *drm_plane, static int sti_plane_get_default_zpos(enum drm_plane_type type)
struct drm_property *property,
uint64_t val)
{ {
struct drm_device *dev = drm_plane->dev; switch (type) {
struct sti_private *private = dev->dev_private; case DRM_PLANE_TYPE_PRIMARY:
struct sti_plane *plane = to_sti_plane(drm_plane);
DRM_DEBUG_DRIVER("\n");
if (property == private->plane_zorder_property) {
plane->zorder = val;
return 0; return 0;
case DRM_PLANE_TYPE_OVERLAY:
return 1;
case DRM_PLANE_TYPE_CURSOR:
return 7;
} }
return 0;
}
return -EINVAL; void sti_plane_reset(struct drm_plane *plane)
{
drm_atomic_helper_plane_reset(plane);
plane->state->zpos = sti_plane_get_default_zpos(plane->type);
} }
static void sti_plane_attach_zorder_property(struct drm_plane *drm_plane) static void sti_plane_attach_zorder_property(struct drm_plane *drm_plane,
enum drm_plane_type type)
{ {
struct drm_device *dev = drm_plane->dev; int zpos = sti_plane_get_default_zpos(type);
struct sti_private *private = dev->dev_private;
struct sti_plane *plane = to_sti_plane(drm_plane);
struct drm_property *prop;
prop = private->plane_zorder_property;
if (!prop) {
prop = drm_property_create_range(dev, 0, "zpos", 1,
GAM_MIXER_NB_DEPTH_LEVEL);
if (!prop)
return;
private->plane_zorder_property = prop; switch (type) {
case DRM_PLANE_TYPE_PRIMARY:
case DRM_PLANE_TYPE_OVERLAY:
drm_plane_create_zpos_property(drm_plane, zpos, 0, 6);
break;
case DRM_PLANE_TYPE_CURSOR:
drm_plane_create_zpos_immutable_property(drm_plane, zpos);
break;
} }
drm_object_attach_property(&drm_plane->base, prop, plane->zorder);
} }
void sti_plane_init_property(struct sti_plane *plane, void sti_plane_init_property(struct sti_plane *plane,
enum drm_plane_type type) enum drm_plane_type type)
{ {
unsigned int i; sti_plane_attach_zorder_property(&plane->drm_plane, type);
for (i = 0; i < ARRAY_SIZE(sti_plane_default_zorder); i++)
if (sti_plane_default_zorder[i] == plane->desc)
break;
plane->zorder = i + 1;
if (type == DRM_PLANE_TYPE_OVERLAY)
sti_plane_attach_zorder_property(&plane->drm_plane);
DRM_DEBUG_DRIVER("drm plane:%d mapped to %s with zorder:%d\n", DRM_DEBUG_DRIVER("drm plane:%d mapped to %s\n",
plane->drm_plane.base.id, plane->drm_plane.base.id, sti_plane_to_str(plane));
sti_plane_to_str(plane), plane->zorder);
} }
...@@ -66,14 +66,12 @@ struct sti_fps_info { ...@@ -66,14 +66,12 @@ struct sti_fps_info {
* @plane: drm plane it is bound to (if any) * @plane: drm plane it is bound to (if any)
* @desc: plane type & id * @desc: plane type & id
* @status: to know the status of the plane * @status: to know the status of the plane
* @zorder: plane z-order
* @fps_info: frame per second info * @fps_info: frame per second info
*/ */
struct sti_plane { struct sti_plane {
struct drm_plane drm_plane; struct drm_plane drm_plane;
enum sti_plane_desc desc; enum sti_plane_desc desc;
enum sti_plane_status status; enum sti_plane_status status;
int zorder;
struct sti_fps_info fps_info; struct sti_fps_info fps_info;
}; };
...@@ -82,10 +80,7 @@ void sti_plane_update_fps(struct sti_plane *plane, ...@@ -82,10 +80,7 @@ void sti_plane_update_fps(struct sti_plane *plane,
bool new_frame, bool new_frame,
bool new_field); bool new_field);
int sti_plane_set_property(struct drm_plane *drm_plane,
struct drm_property *property,
uint64_t val);
void sti_plane_init_property(struct sti_plane *plane, void sti_plane_init_property(struct sti_plane *plane,
enum drm_plane_type type); enum drm_plane_type type);
void sti_plane_reset(struct drm_plane *plane);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment