From f4ce8b66ce71a23192d4e694e6a860152bcc2aad Mon Sep 17 00:00:00 2001 From: Yashwanth Date: Mon, 7 Sep 2020 21:35:17 +0530 Subject: [PATCH] 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 --- rotator/sde_rotator_core.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/rotator/sde_rotator_core.c b/rotator/sde_rotator_core.c index 9066c7dad232..599dd68ef900 100644 --- a/rotator/sde_rotator_core.c +++ b/rotator/sde_rotator_core.c @@ -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; }