msm: mdss: account for multirect when enumerating pipe formats

The pipe format enumeration is not accounting for multi-rect on the
pipe list. Update the loop enumerating formats to account for multiple
rectangles per pipe.

Change-Id: Ief1980e2888525434e876f7cec4357403ca20cb1
Signed-off-by: Adrian Salido-Moreno <adrianm@codeaurora.org>
This commit is contained in:
Adrian Salido-Moreno 2016-05-10 12:15:44 -07:00 committed by Jeevan Shriram
parent c0cc65346e
commit 4d32c5299e

View file

@ -54,17 +54,23 @@ void mdss_mdp_format_flag_removal(u32 *table, u32 num, u32 remove_bits)
}
}
void mdss_mdp_set_supported_formats(struct mdss_data_type *mdata)
{
#define SET_BIT(value, bit_num) \
{ \
value[bit_num >> 3] |= (1 << (bit_num & 7)); \
} \
}
static inline void __set_pipes_supported_fmt(struct mdss_mdp_pipe *pipe_list,
int count, struct mdss_mdp_format_params *fmt)
{
struct mdss_mdp_pipe *pipe = pipe_list;
int i, j;
struct mdss_mdp_pipe *vig_pipes = mdata->vig_pipes;
struct mdss_mdp_pipe *rgb_pipes = mdata->rgb_pipes;
struct mdss_mdp_pipe *dma_pipes = mdata->dma_pipes;
struct mdss_mdp_pipe *cur_pipes = mdata->cursor_pipes;
for (i = 0; i < count; i++, pipe += j)
for (j = 0; j < pipe->multirect.max_rects; j++)
SET_BIT(pipe[j].supported_formats, fmt->format);
}
void mdss_mdp_set_supported_formats(struct mdss_data_type *mdata)
{
struct mdss_mdp_writeback *wb = mdata->wb;
bool has_tile = mdata->highest_bank_bit && !mdata->has_ubwc;
bool has_ubwc = mdata->has_ubwc;
@ -81,9 +87,8 @@ void mdss_mdp_set_supported_formats(struct mdss_data_type *mdata)
mdata->mdss_caps_map))
continue;
for (j = 0; j < mdata->nvig_pipes; j++)
SET_BIT(vig_pipes[j].supported_formats,
fmt->format);
__set_pipes_supported_fmt(mdata->vig_pipes,
mdata->nvig_pipes, fmt);
if (fmt->flag & VALID_ROT_WB_FORMAT) {
for (j = 0; j < mdata->nwb; j++)
@ -97,19 +102,15 @@ void mdss_mdp_set_supported_formats(struct mdss_data_type *mdata)
}
if (fmt->flag & VALID_MDP_CURSOR_FORMAT &&
mdata->ncursor_pipes) {
for (j = 0; j < mdata->ncursor_pipes; j++)
SET_BIT(cur_pipes[j].supported_formats,
fmt->format);
__set_pipes_supported_fmt(mdata->cursor_pipes,
mdata->ncursor_pipes, fmt);
}
if (!fmt->is_yuv) {
for (j = 0; j < mdata->nrgb_pipes; j++)
SET_BIT(rgb_pipes[j].supported_formats,
fmt->format);
for (j = 0; j < mdata->ndma_pipes; j++)
SET_BIT(dma_pipes[j].supported_formats,
fmt->format);
__set_pipes_supported_fmt(mdata->rgb_pipes,
mdata->nrgb_pipes, fmt);
__set_pipes_supported_fmt(mdata->dma_pipes,
mdata->ndma_pipes, fmt);
}
}
}
@ -123,8 +124,8 @@ void mdss_mdp_set_supported_formats(struct mdss_data_type *mdata)
mdata->mdss_caps_map))
continue;
for (j = 0; j < mdata->nvig_pipes; j++)
SET_BIT(vig_pipes[j].supported_formats, fmt->format);
__set_pipes_supported_fmt(mdata->vig_pipes,
mdata->nvig_pipes, fmt);
if (fmt->flag & VALID_ROT_WB_FORMAT) {
for (j = 0; j < mdata->nwb; j++)
@ -138,19 +139,15 @@ void mdss_mdp_set_supported_formats(struct mdss_data_type *mdata)
}
if (fmt->flag & VALID_MDP_CURSOR_FORMAT &&
mdata->ncursor_pipes) {
for (j = 0; j < mdata->ncursor_pipes; j++)
SET_BIT(cur_pipes[j].supported_formats,
fmt->format);
__set_pipes_supported_fmt(mdata->cursor_pipes,
mdata->ncursor_pipes, fmt);
}
if (!fmt->is_yuv) {
for (j = 0; j < mdata->nrgb_pipes; j++)
SET_BIT(rgb_pipes[j].supported_formats,
fmt->format);
for (j = 0; j < mdata->ndma_pipes; j++)
SET_BIT(dma_pipes[j].supported_formats,
fmt->format);
__set_pipes_supported_fmt(mdata->rgb_pipes,
mdata->nrgb_pipes, fmt);
__set_pipes_supported_fmt(mdata->dma_pipes,
mdata->ndma_pipes, fmt);
}
}
}