disp: rotator: add ubwc plane atomic check in rotator

In some targets with offline rotator, ubwc might not be
supported. For those cases, this change adds ubwc
verification for plane during atomic check to prevent
crash.

Change-Id: Ie24a7ba823773204062993996746aa08171fe90f
Signed-off-by: Yashwanth <yvulapu@codeaurora.org>
This commit is contained in:
Yashwanth 2020-09-07 21:35:17 +05:30
parent 8510269a39
commit f4ce8b66ce

View File

@ -69,6 +69,10 @@
#define BUS_VOTE_19_MHZ 153600000
#define ROT_HAS_UBWC(caps) (test_bit(SDE_CAPS_UBWC_2, caps) ||\
test_bit(SDE_CAPS_UBWC_3, caps) ||\
test_bit(SDE_CAPS_UBWC_4, caps))
/* forward prototype */
static int sde_rotator_update_perf(struct sde_rot_mgr *mgr);
@ -1989,14 +1993,25 @@ static int sde_rotator_validate_img_roi(struct sde_rotation_item *item)
static int sde_rotator_validate_fmt_and_item_flags(
struct sde_rotation_config *config, struct sde_rotation_item *item)
{
struct sde_mdp_format_params *fmt;
struct sde_mdp_format_params *in_fmt, *out_fmt;
struct sde_rot_data_type *mdata = sde_rot_get_mdata();
bool has_ubwc;
fmt = sde_get_format_params(item->input.format);
in_fmt = sde_get_format_params(item->input.format);
out_fmt = sde_get_format_params(item->output.format);
if ((item->flags & SDE_ROTATION_DEINTERLACE) &&
sde_mdp_is_ubwc_format(fmt)) {
sde_mdp_is_ubwc_format(in_fmt)) {
SDEROT_DBG("cannot perform deinterlace on tiled formats\n");
return -EINVAL;
}
has_ubwc = ROT_HAS_UBWC(mdata->sde_caps_map);
if (!has_ubwc && (sde_mdp_is_ubwc_format(in_fmt) ||
sde_mdp_is_ubwc_format(out_fmt))) {
SDEROT_ERR("ubwc format is not supported\n");
return -EINVAL;
}
return 0;
}