msm: mdss: Enable UBWC output format for writeback interface
Enable UBWC format for writeback output buffers in applicable target devices. CRs-Fixed: 979566 Change-Id: Ibbfaf9f1c314f44d76f4739ed64562861b26c4be Signed-off-by: Jeykumar Sankaran <jsanka@codeaurora.org> [dkeitel@codeaurora.org: fixed minor whitespace conflicts.] Signed-off-by: David Keitel <dkeitel@codeaurora.org>
This commit is contained in:
parent
6833d26cf6
commit
c5c9cb7764
5 changed files with 23 additions and 13 deletions
|
@ -158,6 +158,7 @@ enum mdss_hw_quirk {
|
||||||
MDSS_QUIRK_DSC_2SLICE_PU_THRPUT,
|
MDSS_QUIRK_DSC_2SLICE_PU_THRPUT,
|
||||||
MDSS_QUIRK_DMA_BI_DIR,
|
MDSS_QUIRK_DMA_BI_DIR,
|
||||||
MDSS_QUIRK_MIN_BUS_VOTE,
|
MDSS_QUIRK_MIN_BUS_VOTE,
|
||||||
|
MDSS_QUIRK_FMT_PACK_PATTERN,
|
||||||
MDSS_QUIRK_MAX,
|
MDSS_QUIRK_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1897,6 +1897,8 @@ ssize_t mdss_mdp_show_capabilities(struct device *dev,
|
||||||
SPRINT(" bwc");
|
SPRINT(" bwc");
|
||||||
if (mdata->has_ubwc)
|
if (mdata->has_ubwc)
|
||||||
SPRINT(" ubwc");
|
SPRINT(" ubwc");
|
||||||
|
if (mdata->has_wb_ubwc)
|
||||||
|
SPRINT(" wb_ubwc");
|
||||||
if (mdata->has_decimation)
|
if (mdata->has_decimation)
|
||||||
SPRINT(" decimation");
|
SPRINT(" decimation");
|
||||||
if (mdata->highest_bank_bit && !mdss_mdp_is_ubwc_supported(mdata))
|
if (mdata->highest_bank_bit && !mdss_mdp_is_ubwc_supported(mdata))
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved.
|
/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 and
|
* it under the terms of the GNU General Public License version 2 and
|
||||||
|
@ -218,7 +218,8 @@ enum {
|
||||||
static struct mdss_mdp_format_params_ubwc mdss_mdp_format_ubwc_map[] = {
|
static struct mdss_mdp_format_params_ubwc mdss_mdp_format_ubwc_map[] = {
|
||||||
{
|
{
|
||||||
.mdp_format = FMT_RGB_565(MDP_RGB_565_UBWC,
|
.mdp_format = FMT_RGB_565(MDP_RGB_565_UBWC,
|
||||||
MDSS_MDP_FETCH_UBWC, VALID_ROT_WB_FORMAT,
|
MDSS_MDP_FETCH_UBWC,
|
||||||
|
VALID_ROT_WB_FORMAT | VALID_MDP_WB_INTF_FORMAT,
|
||||||
C2_R_Cr, C0_G_Y, C1_B_Cb),
|
C2_R_Cr, C0_G_Y, C1_B_Cb),
|
||||||
.micro = {
|
.micro = {
|
||||||
.tile_height = 4,
|
.tile_height = 4,
|
||||||
|
@ -227,7 +228,8 @@ static struct mdss_mdp_format_params_ubwc mdss_mdp_format_ubwc_map[] = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.mdp_format = FMT_RGB_8888(MDP_RGBA_8888_UBWC,
|
.mdp_format = FMT_RGB_8888(MDP_RGBA_8888_UBWC,
|
||||||
MDSS_MDP_FETCH_UBWC, VALID_ROT_WB_FORMAT, 1,
|
MDSS_MDP_FETCH_UBWC,
|
||||||
|
VALID_ROT_WB_FORMAT | VALID_MDP_WB_INTF_FORMAT, 1,
|
||||||
C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA),
|
C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA),
|
||||||
.micro = {
|
.micro = {
|
||||||
.tile_height = 4,
|
.tile_height = 4,
|
||||||
|
@ -236,7 +238,8 @@ static struct mdss_mdp_format_params_ubwc mdss_mdp_format_ubwc_map[] = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.mdp_format = FMT_RGB_8888(MDP_RGBX_8888_UBWC,
|
.mdp_format = FMT_RGB_8888(MDP_RGBX_8888_UBWC,
|
||||||
MDSS_MDP_FETCH_UBWC, VALID_ROT_WB_FORMAT, 0,
|
MDSS_MDP_FETCH_UBWC,
|
||||||
|
VALID_ROT_WB_FORMAT | VALID_MDP_WB_INTF_FORMAT, 0,
|
||||||
C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA),
|
C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA),
|
||||||
.micro = {
|
.micro = {
|
||||||
.tile_height = 4,
|
.tile_height = 4,
|
||||||
|
@ -246,7 +249,8 @@ static struct mdss_mdp_format_params_ubwc mdss_mdp_format_ubwc_map[] = {
|
||||||
{
|
{
|
||||||
.mdp_format = FMT_YUV_PSEUDO(MDP_Y_CBCR_H2V2_UBWC,
|
.mdp_format = FMT_YUV_PSEUDO(MDP_Y_CBCR_H2V2_UBWC,
|
||||||
MDSS_MDP_FETCH_UBWC, MDSS_MDP_CHROMA_420,
|
MDSS_MDP_FETCH_UBWC, MDSS_MDP_CHROMA_420,
|
||||||
VALID_ROT_WB_FORMAT, C1_B_Cb, C2_R_Cr),
|
VALID_ROT_WB_FORMAT | VALID_MDP_WB_INTF_FORMAT,
|
||||||
|
C1_B_Cb, C2_R_Cr),
|
||||||
.micro = {
|
.micro = {
|
||||||
.tile_height = 8,
|
.tile_height = 8,
|
||||||
.tile_width = 32,
|
.tile_width = 32,
|
||||||
|
|
|
@ -299,15 +299,14 @@ static int mdss_mdp_writeback_format_setup(struct mdss_mdp_writeback_ctx *ctx,
|
||||||
if (fmt->is_yuv && test_bit(MDSS_CAPS_YUV_CONFIG, mdata->mdss_caps_map))
|
if (fmt->is_yuv && test_bit(MDSS_CAPS_YUV_CONFIG, mdata->mdss_caps_map))
|
||||||
dst_format |= BIT(15);
|
dst_format |= BIT(15);
|
||||||
|
|
||||||
if (mdata->mdp_rev >= MDSS_MDP_HW_REV_102 &&
|
if (mdss_has_quirk(mdata, MDSS_QUIRK_FMT_PACK_PATTERN)) {
|
||||||
mdata->mdp_rev < MDSS_MDP_HW_REV_200) {
|
|
||||||
pattern = (fmt->element[3] << 24) |
|
pattern = (fmt->element[3] << 24) |
|
||||||
(fmt->element[2] << 16) |
|
(fmt->element[2] << 15) |
|
||||||
(fmt->element[1] << 8) |
|
(fmt->element[1] << 8) |
|
||||||
(fmt->element[0] << 0);
|
(fmt->element[0] << 0);
|
||||||
} else {
|
} else {
|
||||||
pattern = (fmt->element[3] << 24) |
|
pattern = (fmt->element[3] << 24) |
|
||||||
(fmt->element[2] << 15) |
|
(fmt->element[2] << 16) |
|
||||||
(fmt->element[1] << 8) |
|
(fmt->element[1] << 8) |
|
||||||
(fmt->element[0] << 0);
|
(fmt->element[0] << 0);
|
||||||
}
|
}
|
||||||
|
@ -326,8 +325,7 @@ static int mdss_mdp_writeback_format_setup(struct mdss_mdp_writeback_ctx *ctx,
|
||||||
outsize = (ctx->dst_rect.h << 16) | ctx->dst_rect.w;
|
outsize = (ctx->dst_rect.h << 16) | ctx->dst_rect.w;
|
||||||
|
|
||||||
if (mdss_mdp_is_ubwc_format(fmt)) {
|
if (mdss_mdp_is_ubwc_format(fmt)) {
|
||||||
if (!ctl->cdm)
|
opmode |= BIT(0);
|
||||||
opmode |= BIT(0);
|
|
||||||
dst_format |= BIT(31);
|
dst_format |= BIT(31);
|
||||||
if (mdata->highest_bank_bit)
|
if (mdata->highest_bank_bit)
|
||||||
write_config |= (mdata->highest_bank_bit << 8);
|
write_config |= (mdata->highest_bank_bit << 8);
|
||||||
|
@ -343,8 +341,7 @@ static int mdss_mdp_writeback_format_setup(struct mdss_mdp_writeback_ctx *ctx,
|
||||||
}
|
}
|
||||||
mdp_wb_write(ctx, MDSS_MDP_REG_WB_ALPHA_X_VALUE, 0xFF);
|
mdp_wb_write(ctx, MDSS_MDP_REG_WB_ALPHA_X_VALUE, 0xFF);
|
||||||
mdp_wb_write(ctx, MDSS_MDP_REG_WB_DST_FORMAT, dst_format);
|
mdp_wb_write(ctx, MDSS_MDP_REG_WB_DST_FORMAT, dst_format);
|
||||||
if (!ctl->cdm)
|
mdp_wb_write(ctx, MDSS_MDP_REG_WB_DST_OP_MODE, opmode);
|
||||||
mdp_wb_write(ctx, MDSS_MDP_REG_WB_DST_OP_MODE, opmode);
|
|
||||||
mdp_wb_write(ctx, MDSS_MDP_REG_WB_DST_PACK_PATTERN, pattern);
|
mdp_wb_write(ctx, MDSS_MDP_REG_WB_DST_PACK_PATTERN, pattern);
|
||||||
mdp_wb_write(ctx, MDSS_MDP_REG_WB_DST_YSTRIDE0, ystride0);
|
mdp_wb_write(ctx, MDSS_MDP_REG_WB_DST_YSTRIDE0, ystride0);
|
||||||
mdp_wb_write(ctx, MDSS_MDP_REG_WB_DST_YSTRIDE1, ystride1);
|
mdp_wb_write(ctx, MDSS_MDP_REG_WB_DST_YSTRIDE1, ystride1);
|
||||||
|
|
|
@ -345,6 +345,12 @@ static int mdss_mdp_wfd_validate_out_configuration(struct mdss_mdp_wfd *wfd,
|
||||||
layer->buffer.format);
|
layer->buffer.format);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!ctl->mdata->has_wb_ubwc && mdss_mdp_is_ubwc_format(fmt)) {
|
||||||
|
pr_err("wb=%d does not support UBWC fmt:%d\n", wb_idx,
|
||||||
|
layer->buffer.format);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue