disp: msm: sde: new formats added for true inline rotation v2

Advertise the new formats supported with true inline rotation v2 HW
(ABGR8888 compressed and P010).

Change-Id: I0a1b6dfd6bcfd82d9bc61e87680d2c584615e113
Signed-off-by: Steve Cohen <cohens@codeaurora.org>
This commit is contained in:
Steve Cohen
2019-06-11 19:35:38 -04:00
szülő 75ef403bfe
commit 5a55e2d121
3 fájl változott, egészen pontosan 75 új sor hozzáadva és 39 régi sor törölve

Fájl megtekintése

@@ -4049,58 +4049,84 @@ static int sde_hardware_format_caps(struct sde_mdss_cfg *sde_cfg,
uint32_t virt_vig_list_size, in_rot_list_size = 0;
uint32_t cursor_list_size = 0;
uint32_t index = 0;
const struct sde_format_extended *inline_fmt_tbl;
/* cursor input formats */
if (sde_cfg->has_cursor) {
cursor_list_size = ARRAY_SIZE(cursor_formats);
sde_cfg->cursor_formats = kcalloc(cursor_list_size,
sizeof(struct sde_format_extended), GFP_KERNEL);
if (!sde_cfg->cursor_formats) {
rc = -ENOMEM;
goto end;
goto out;
}
index = sde_copy_formats(sde_cfg->cursor_formats,
cursor_list_size, 0, cursor_formats,
ARRAY_SIZE(cursor_formats));
}
/* DMA pipe input formats */
dma_list_size = ARRAY_SIZE(plane_formats);
vig_list_size = ARRAY_SIZE(plane_formats_vig);
if (sde_cfg->has_vig_p010)
vig_list_size += ARRAY_SIZE(p010_ubwc_formats);
virt_vig_list_size = ARRAY_SIZE(plane_formats);
wb2_list_size = ARRAY_SIZE(wb2_formats);
if (IS_SDE_INLINE_ROT_REV_100(sde_cfg->true_inline_rot_rev))
in_rot_list_size = ARRAY_SIZE(true_inline_rot_v1_fmts);
sde_cfg->dma_formats = kcalloc(dma_list_size,
sizeof(struct sde_format_extended), GFP_KERNEL);
if (!sde_cfg->dma_formats) {
rc = -ENOMEM;
goto end;
goto free_cursor;
}
index = sde_copy_formats(sde_cfg->dma_formats, dma_list_size,
0, plane_formats, ARRAY_SIZE(plane_formats));
/* ViG pipe input formats */
vig_list_size = ARRAY_SIZE(plane_formats_vig);
if (sde_cfg->has_vig_p010)
vig_list_size += ARRAY_SIZE(p010_ubwc_formats);
sde_cfg->vig_formats = kcalloc(vig_list_size,
sizeof(struct sde_format_extended), GFP_KERNEL);
if (!sde_cfg->vig_formats) {
rc = -ENOMEM;
goto end;
goto free_dma;
}
index = sde_copy_formats(sde_cfg->vig_formats, vig_list_size,
0, plane_formats_vig, ARRAY_SIZE(plane_formats_vig));
if (sde_cfg->has_vig_p010)
index += sde_copy_formats(sde_cfg->vig_formats,
vig_list_size, index, p010_ubwc_formats,
ARRAY_SIZE(p010_ubwc_formats));
/* Virtual ViG pipe input formats (all virt pipes use DMA formats) */
virt_vig_list_size = ARRAY_SIZE(plane_formats);
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;
goto free_vig;
}
index = sde_copy_formats(sde_cfg->virt_vig_formats, virt_vig_list_size,
0, plane_formats, ARRAY_SIZE(plane_formats));
/* WB output formats */
wb2_list_size = ARRAY_SIZE(wb2_formats);
sde_cfg->wb_formats = kcalloc(wb2_list_size,
sizeof(struct sde_format_extended), GFP_KERNEL);
if (!sde_cfg->wb_formats) {
SDE_ERROR("failed to allocate wb format list\n");
rc = -ENOMEM;
goto end;
goto free_virt;
}
index = sde_copy_formats(sde_cfg->wb_formats, wb2_list_size,
0, wb2_formats, ARRAY_SIZE(wb2_formats));
/* Rotation enabled input formats */
if (IS_SDE_INLINE_ROT_REV_100(sde_cfg->true_inline_rot_rev)) {
inline_fmt_tbl = true_inline_rot_v1_fmts;
in_rot_list_size = ARRAY_SIZE(true_inline_rot_v1_fmts);
} else if (IS_SDE_INLINE_ROT_REV_200(sde_cfg->true_inline_rot_rev)) {
inline_fmt_tbl = true_inline_rot_v2_fmts;
in_rot_list_size = ARRAY_SIZE(true_inline_rot_v2_fmts);
}
if (in_rot_list_size) {
@@ -4109,30 +4135,27 @@ static int sde_hardware_format_caps(struct sde_mdss_cfg *sde_cfg,
if (!sde_cfg->inline_rot_formats) {
SDE_ERROR("failed to alloc inline rot format list\n");
rc = -ENOMEM;
goto end;
goto free_wb;
}
index = sde_copy_formats(sde_cfg->inline_rot_formats,
in_rot_list_size, 0, inline_fmt_tbl, in_rot_list_size);
}
index = sde_copy_formats(sde_cfg->dma_formats, dma_list_size,
0, plane_formats, ARRAY_SIZE(plane_formats));
return 0;
index = sde_copy_formats(sde_cfg->vig_formats, vig_list_size,
0, plane_formats_vig, ARRAY_SIZE(plane_formats_vig));
if (sde_cfg->has_vig_p010)
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->virt_vig_formats, virt_vig_list_size,
0, plane_formats, ARRAY_SIZE(plane_formats));
index = sde_copy_formats(sde_cfg->wb_formats, wb2_list_size,
0, wb2_formats, ARRAY_SIZE(wb2_formats));
if (in_rot_list_size)
index = sde_copy_formats(sde_cfg->inline_rot_formats,
in_rot_list_size, 0, true_inline_rot_v1_fmts,
ARRAY_SIZE(true_inline_rot_v1_fmts));
end:
free_wb:
kfree(sde_cfg->wb_formats);
free_virt:
kfree(sde_cfg->virt_vig_formats);
free_vig:
kfree(sde_cfg->vig_formats);
free_dma:
kfree(sde_cfg->dma_formats);
free_cursor:
if (sde_cfg->has_cursor)
kfree(sde_cfg->cursor_formats);
out:
return rc;
}

Fájl megtekintése

@@ -94,8 +94,13 @@
* True inline rotation supported versions
*/
#define SDE_INLINE_ROT_VERSION_1_0_0 0x100
#define SDE_INLINE_ROT_VERSION_2_0_0 0x200
#define IS_SDE_INLINE_ROT_REV_100(rev) \
((rev) == SDE_INLINE_ROT_VERSION_1_0_0)
#define IS_SDE_INLINE_ROT_REV_200(rev) \
((rev) == SDE_INLINE_ROT_VERSION_2_0_0)
/*
* UIDLE supported versions

Fájl megtekintése

@@ -53,6 +53,8 @@
#define P010_FMTS {DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_DX}
#define P010_UBWC_FMTS {DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_DX | \
DRM_FORMAT_MOD_QCOM_COMPRESSED}
static const struct sde_format_extended plane_formats[] = {
RGB_FMTS,
@@ -146,13 +148,19 @@ static const struct sde_format_extended wb2_formats[] = {
};
static const struct sde_format_extended p010_ubwc_formats[] = {
{DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_DX |
DRM_FORMAT_MOD_QCOM_COMPRESSED},
P010_UBWC_FMTS,
};
static const struct sde_format_extended true_inline_rot_v1_fmts[] = {
{DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_COMPRESSED},
{DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_COMPRESSED |
DRM_FORMAT_MOD_QCOM_DX | DRM_FORMAT_MOD_QCOM_TIGHT}, /* tp10 */
TP10_UBWC_FMTS,
{0, 0},
};
static const struct sde_format_extended true_inline_rot_v2_fmts[] = {
{DRM_FORMAT_ABGR8888, DRM_FORMAT_MOD_QCOM_COMPRESSED},
{DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_COMPRESSED},
TP10_UBWC_FMTS,
P010_UBWC_FMTS,
{0, 0},
};