Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a135c836 authored by Steve Cohen's avatar Steve Cohen
Browse files

drm/msm/sde: use new format list for virtual VIG pipes



Add a new format list specifically for virtual ViG pipes since
virtual ViG pipes might not support all the formats specified
by the previously used dma_formats list.

Change-Id: Ibf46e8e01d3afe1b24e1be2d801b998cb28d4672
Signed-off-by: default avatarSteve Cohen <cohens@codeaurora.org>
parent 5fe07b01
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -1065,7 +1065,7 @@ static void _sde_sspp_setup_vig(struct sde_mdss_cfg *sde_cfg,
	}

	sblk->format_list = sde_cfg->vig_formats;
	sblk->virt_format_list = sde_cfg->dma_formats;
	sblk->virt_format_list = sde_cfg->virt_vig_formats;
}

static void _sde_sspp_setup_rgb(struct sde_mdss_cfg *sde_cfg,
@@ -3327,6 +3327,7 @@ static int sde_hardware_format_caps(struct sde_mdss_cfg *sde_cfg,
{
	int rc = 0;
	uint32_t dma_list_size, vig_list_size, wb2_list_size;
	uint32_t virt_vig_list_size;
	uint32_t cursor_list_size = 0;
	uint32_t index = 0;

@@ -3345,12 +3346,14 @@ static int sde_hardware_format_caps(struct sde_mdss_cfg *sde_cfg,

	dma_list_size = ARRAY_SIZE(plane_formats);
	vig_list_size = ARRAY_SIZE(plane_formats_yuv);
	virt_vig_list_size = ARRAY_SIZE(plane_formats);
	wb2_list_size = ARRAY_SIZE(wb2_formats);

	dma_list_size += ARRAY_SIZE(rgb_10bit_formats);
	vig_list_size += ARRAY_SIZE(rgb_10bit_formats)
		+ ARRAY_SIZE(tp10_ubwc_formats)
		+ ARRAY_SIZE(p010_formats);
	virt_vig_list_size += ARRAY_SIZE(rgb_10bit_formats);
	if (IS_SDE_MAJOR_MINOR_SAME((hw_rev), SDE_HW_VER_400) ||
		(IS_SDE_MAJOR_MINOR_SAME((hw_rev), SDE_HW_VER_410)))
		vig_list_size += ARRAY_SIZE(p010_ubwc_formats);
@@ -3372,6 +3375,13 @@ static int sde_hardware_format_caps(struct sde_mdss_cfg *sde_cfg,
		goto end;
	}

	sde_cfg->virt_vig_formats = kcalloc(virt_vig_list_size,
		sizeof(struct sde_format_extended), GFP_KERNEL);
	if (!sde_cfg->virt_vig_formats) {
		rc = -ENOMEM;
		goto end;
	}

	sde_cfg->wb_formats = kcalloc(wb2_list_size,
		sizeof(struct sde_format_extended), GFP_KERNEL);
	if (!sde_cfg->wb_formats) {
@@ -3405,11 +3415,16 @@ static int sde_hardware_format_caps(struct sde_mdss_cfg *sde_cfg,
		index += sde_copy_formats(sde_cfg->vig_formats,
			vig_list_size, index, p010_ubwc_formats,
			ARRAY_SIZE(p010_ubwc_formats));

	index += sde_copy_formats(sde_cfg->vig_formats, vig_list_size,
		index, tp10_ubwc_formats,
		ARRAY_SIZE(tp10_ubwc_formats));

	index = sde_copy_formats(sde_cfg->virt_vig_formats, virt_vig_list_size,
		0, plane_formats, ARRAY_SIZE(plane_formats));
	index += sde_copy_formats(sde_cfg->virt_vig_formats, virt_vig_list_size,
		index, rgb_10bit_formats,
		ARRAY_SIZE(rgb_10bit_formats));

	index = sde_copy_formats(sde_cfg->wb_formats, wb2_list_size,
		0, wb2_formats, ARRAY_SIZE(wb2_formats));
	index += sde_copy_formats(sde_cfg->wb_formats, wb2_list_size,
@@ -3498,6 +3513,7 @@ void sde_hw_catalog_deinit(struct sde_mdss_cfg *sde_cfg)
	kfree(sde_cfg->cursor_formats);
	kfree(sde_cfg->vig_formats);
	kfree(sde_cfg->wb_formats);
	kfree(sde_cfg->virt_vig_formats);

	kfree(sde_cfg);
}
+2 −0
Original line number Diff line number Diff line
@@ -999,6 +999,7 @@ struct sde_perf_cfg {
 * @cursor_formats     Supported formats for cursor pipe
 * @vig_formats        Supported formats for vig pipe
 * @wb_formats         Supported formats for wb
 * @virt_vig_formats   Supported formats for virtual vig pipe
 * @vbif_qos_nlvl      number of vbif QoS priority level
 * @ts_prefill_rev     prefill traffic shaper feature revision
 * @macrotile_mode     UBWC parameter for macro tile channel distribution
@@ -1087,6 +1088,7 @@ struct sde_mdss_cfg {
	struct sde_format_extended *cursor_formats;
	struct sde_format_extended *vig_formats;
	struct sde_format_extended *wb_formats;
	struct sde_format_extended *virt_vig_formats;
};

struct sde_mdss_hw_cfg_handler {