diff --git a/drivers/video/fbdev/msm/mdss_mdp_hwio.h b/drivers/video/fbdev/msm/mdss_mdp_hwio.h index f488f00cc248..39dff7798a80 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_hwio.h +++ b/drivers/video/fbdev/msm/mdss_mdp_hwio.h @@ -201,6 +201,7 @@ enum mdss_mdp_sspp_chroma_samp_type { #define MDSS_MDP_REG_SSPP_REQPRIO_FIFO_WM_1 0x054 #define MDSS_MDP_REG_SSPP_REQPRIO_FIFO_WM_2 0x058 #define MDSS_MDP_REG_SSPP_QOS_CTRL 0x06C +#define MDSS_MDP_REG_SSPP_UBWC_ERROR_STATUS 0x138 #define MDSS_MDP_REG_SSPP_SRC_OP_MODE 0x038 #define MDSS_MDP_OP_DEINTERLACE BIT(22) diff --git a/drivers/video/fbdev/msm/mdss_mdp_pipe.c b/drivers/video/fbdev/msm/mdss_mdp_pipe.c index 3ca058f4e237..2292a0f1e974 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_pipe.c +++ b/drivers/video/fbdev/msm/mdss_mdp_pipe.c @@ -1601,6 +1601,10 @@ static int mdss_mdp_format_setup(struct mdss_mdp_pipe *pipe) src_format |= BIT(31); } + /* This bit is only valid for thulium target; noop for other targets */ + if (fmt->is_yuv) + src_format |= BIT(15); + mdss_mdp_pipe_sspp_setup(pipe, &opmode); if (mdss_mdp_is_tile_format(fmt) && mdata->highest_bank_bit) { @@ -1615,6 +1619,9 @@ static int mdss_mdp_format_setup(struct mdss_mdp_pipe *pipe) mdss_mdp_pipe_write(pipe, MDSS_MDP_REG_SSPP_SRC_OP_MODE, opmode); mdss_mdp_pipe_write(pipe, MDSS_MDP_REG_SSPP_SRC_ADDR_SW_STATUS, secure); + /* clear UBWC error */ + mdss_mdp_pipe_write(pipe, MDSS_MDP_REG_SSPP_UBWC_ERROR_STATUS, BIT(31)); + return 0; } diff --git a/drivers/video/fbdev/msm/mdss_mdp_util.c b/drivers/video/fbdev/msm/mdss_mdp_util.c index 179308e1d54c..68638d238cfa 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_util.c +++ b/drivers/video/fbdev/msm/mdss_mdp_util.c @@ -534,10 +534,10 @@ static int mdss_mdp_ubwc_data_check(struct mdss_mdp_data *data, /* | Y meta | ** | Y bitstream | */ /* | data | ** | plane | */ /* ------------------- ** -------------------- */ - /* | CbCr meta | ** | CbCr bitstream | */ + /* | Y bitstream | ** | CbCr bitstream | */ /* | data | ** | plane | */ /* ------------------- ** -------------------- */ - /* | Y bitstream | ** | Y meta | */ + /* | Cbcr metadata | ** | Y meta | */ /* | data | ** | plane | */ /* ------------------- ** -------------------- */ /* | CbCr bitstream | ** | CbCr meta | */ @@ -551,7 +551,7 @@ static int mdss_mdp_ubwc_data_check(struct mdss_mdp_data *data, /* configure CbCr bitstream plane */ data->p[1].addr = base_addr + ps->plane_size[0] - + ps->plane_size[1] + ps->plane_size[2]; + + ps->plane_size[2] + ps->plane_size[3]; data->p[1].len = ps->plane_size[1]; /* configure Y metadata plane */