Walk through valid_windows bitmask to skip over invalid windows.
Mark invalid windows with a flag for easy checking.
Change-Id: Idda005b57ca8503462b01ef1193c993a73432e18
Signed-off-by: Jon Mayo <jmayo@nvidia.com>
Reviewed-on: http://git-master/r/326796
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
#define TEGRA_WIN_FLAG_SCAN_COLUMN (1 << 9)
#define TEGRA_WIN_FLAG_INTERLACE (1 << 10)
#define TEGRA_WIN_FLAG_FB (1 << 11)
+#define TEGRA_WIN_FLAG_INVALID (1 << 31) /* window does not exist. */
#define TEGRA_WIN_BLEND_FLAGS_MASK \
(TEGRA_WIN_FLAG_BLEND_PREMULT | TEGRA_WIN_FLAG_BLEND_COVERAGE)
struct tegra_dc_win *tegra_dc_get_window(struct tegra_dc *dc, unsigned win)
{
- if (win >= dc->n_windows)
+ if (win >= DC_N_WINDOWS || !test_bit(win, &dc->valid_windows))
return NULL;
return &dc->windows[win];
tegra_dc_init_lut_defaults(&dc->fb_lut);
dc->n_windows = DC_N_WINDOWS;
- for (i = 0; i < dc->n_windows; i++) {
+ for (i = 0; i < DC_N_WINDOWS; i++) {
struct tegra_dc_win *win = &dc->windows[i];
struct tegra_dc_win *tmp_win = &dc->tmp_wins[i];
+ if (!test_bit(win, &dc->valid_windows))
+ win->flags |= TEGRA_WIN_FLAG_INVALID;
win->idx = i;
win->dc = dc;
tmp_win->idx = i;
return -1;
for (i = 0; i < win_num; i++) {
+ int idx = wins[i].index;
+
ret = tegra_dc_ext_pin_window(user, wins[i].buff_id,
&handle, &phys_addr);
if (ret)
handle->sgt, DMA_TO_DEVICE);
dma_buf_put(handle->buf);
kfree(handle);
- tegra_dc_ext_set_windowattr_basic(&dc->tmp_wins[i],
+ tegra_dc_ext_set_windowattr_basic(&dc->tmp_wins[idx],
&wins[i]);
}
else {
dc->tmp_wins[i].flags = 0;
}
- dc_wins[i] = &dc->tmp_wins[i];
+ dc_wins[i] = &dc->tmp_wins[idx];
}
ret = tegra_dc_bandwidth_negotiate_bw(dc, dc_wins, win_num);