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_DMA_BI_DIR,
|
||||
MDSS_QUIRK_MIN_BUS_VOTE,
|
||||
MDSS_QUIRK_FMT_PACK_PATTERN,
|
||||
MDSS_QUIRK_MAX,
|
||||
};
|
||||
|
||||
|
|
|
@ -1897,6 +1897,8 @@ ssize_t mdss_mdp_show_capabilities(struct device *dev,
|
|||
SPRINT(" bwc");
|
||||
if (mdata->has_ubwc)
|
||||
SPRINT(" ubwc");
|
||||
if (mdata->has_wb_ubwc)
|
||||
SPRINT(" wb_ubwc");
|
||||
if (mdata->has_decimation)
|
||||
SPRINT(" decimation");
|
||||
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
|
||||
* 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[] = {
|
||||
{
|
||||
.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),
|
||||
.micro = {
|
||||
.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,
|
||||
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),
|
||||
.micro = {
|
||||
.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,
|
||||
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),
|
||||
.micro = {
|
||||
.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,
|
||||
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 = {
|
||||
.tile_height = 8,
|
||||
.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))
|
||||
dst_format |= BIT(15);
|
||||
|
||||
if (mdata->mdp_rev >= MDSS_MDP_HW_REV_102 &&
|
||||
mdata->mdp_rev < MDSS_MDP_HW_REV_200) {
|
||||
if (mdss_has_quirk(mdata, MDSS_QUIRK_FMT_PACK_PATTERN)) {
|
||||
pattern = (fmt->element[3] << 24) |
|
||||
(fmt->element[2] << 16) |
|
||||
(fmt->element[2] << 15) |
|
||||
(fmt->element[1] << 8) |
|
||||
(fmt->element[0] << 0);
|
||||
} else {
|
||||
pattern = (fmt->element[3] << 24) |
|
||||
(fmt->element[2] << 15) |
|
||||
(fmt->element[2] << 16) |
|
||||
(fmt->element[1] << 8) |
|
||||
(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;
|
||||
|
||||
if (mdss_mdp_is_ubwc_format(fmt)) {
|
||||
if (!ctl->cdm)
|
||||
opmode |= BIT(0);
|
||||
opmode |= BIT(0);
|
||||
dst_format |= BIT(31);
|
||||
if (mdata->highest_bank_bit)
|
||||
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_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_YSTRIDE0, ystride0);
|
||||
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);
|
||||
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;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue