Commit 28c24904 authored by Daniel Stone's avatar Daniel Stone Committed by Heiko Stuebner
Browse files

drm/rockchip: vop2: Simplify format_mod_supported



Make it a little less convoluted, and just directly check if the
combination of plane + format + modifier is supported.

Signed-off-by: default avatarDaniel Stone <daniels@collabora.com>
Signed-off-by: default avatarNicolas Frattaroli <nicolas.frattaroli@collabora.com>
Signed-off-by: default avatarHeiko Stuebner <heiko@sntech.de>
Link: https://patch.msgid.link/20251215-vop2-atomic-fixups-v5-8-83463c075a8d@collabora.com
parent c8c85c0a
Loading
Loading
Loading
Loading
+22 −34
Original line number Diff line number Diff line
@@ -367,59 +367,47 @@ static bool is_yuv_output(u32 bus_format)
	}
}

static bool rockchip_afbc(struct drm_plane *plane, u64 modifier)
{
	int i;

	if (modifier == DRM_FORMAT_MOD_LINEAR)
		return false;

	for (i = 0 ; i < plane->modifier_count; i++)
		if (plane->modifiers[i] == modifier)
			return true;

	return false;
}

static bool rockchip_vop2_mod_supported(struct drm_plane *plane, u32 format,
					u64 modifier)
{
	struct vop2_win *win = to_vop2_win(plane);
	struct vop2 *vop2 = win->vop2;
	int i;

	/* No support for implicit modifiers */
	if (modifier == DRM_FORMAT_MOD_INVALID)
		return false;

	if (vop2->version == VOP_VERSION_RK3568) {
		if (vop2_cluster_window(win)) {
			if (modifier == DRM_FORMAT_MOD_LINEAR) {
	/* The cluster window on 3568 is AFBC-only */
	if (vop2->version == VOP_VERSION_RK3568 && vop2_cluster_window(win) &&
	    !drm_is_afbc(modifier)) {
		drm_dbg_kms(vop2->drm,
			    "Cluster window only supports format with afbc\n");
		return false;
	}
		}
	}

	if (format == DRM_FORMAT_XRGB2101010 || format == DRM_FORMAT_XBGR2101010) {
		if (vop2->version == VOP_VERSION_RK3588) {
			if (!rockchip_afbc(plane, modifier)) {
				drm_dbg_kms(vop2->drm, "Only support 32 bpp format with afbc\n");
	/* 10bpc formats on 3588 are AFBC-only */
	if (vop2->version == VOP_VERSION_RK3588 && !drm_is_afbc(modifier) &&
	    (format == DRM_FORMAT_XRGB2101010 || format == DRM_FORMAT_XBGR2101010)) {
		drm_dbg_kms(vop2->drm, "Only support 10bpc format with afbc\n");
		return false;
	}
		}
	}

	/* Linear is otherwise supported everywhere */
	if (modifier == DRM_FORMAT_MOD_LINEAR)
		return true;

	if (!rockchip_afbc(plane, modifier)) {
		drm_dbg_kms(vop2->drm, "Unsupported format modifier 0x%llx\n",
			    modifier);

	/* Not all format+modifier combinations are allowable */
	if (vop2_convert_afbc_format(format) == VOP2_AFBC_FMT_INVALID)
		return false;

	/* Different windows have different format/modifier support */
	for (i = 0; i < plane->modifier_count; i++) {
		if (plane->modifiers[i] == modifier)
			return true;
	}

	return vop2_convert_afbc_format(format) >= 0;
	return false;
}

/*