|
@@ -69,6 +69,10 @@
|
|
|
|
|
|
#define BUS_VOTE_19_MHZ 153600000
|
|
#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 */
|
|
/* forward prototype */
|
|
static int sde_rotator_update_perf(struct sde_rot_mgr *mgr);
|
|
static int sde_rotator_update_perf(struct sde_rot_mgr *mgr);
|
|
|
|
|
|
@@ -1991,14 +1995,25 @@ static int sde_rotator_validate_img_roi(struct sde_rotation_item *item)
|
|
static int sde_rotator_validate_fmt_and_item_flags(
|
|
static int sde_rotator_validate_fmt_and_item_flags(
|
|
struct sde_rotation_config *config, struct sde_rotation_item *item)
|
|
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) &&
|
|
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");
|
|
SDEROT_DBG("cannot perform deinterlace on tiled formats\n");
|
|
return -EINVAL;
|
|
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;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|