diff options
author | Min-wuk Lee <mlee@nvidia.com> | 2013-05-30 19:12:56 +0900 |
---|---|---|
committer | Riham Haidar <rhaidar@nvidia.com> | 2013-05-31 18:01:59 -0700 |
commit | d6f6d7291dde16f238dee903b1c97fdb80f9e3d8 (patch) | |
tree | 56a9c2621caa46e9d1aa81e817805cfcb19252ef /drivers | |
parent | 21694e460574c1228c01c4cae3a7071026020096 (diff) |
video: tegra: dc: Set WIN_OPTIONS with valid phys addr
Do not set WIN_OPTIONS until window physical address is valid.
After suspend, window handle becomes not valid, but UNBLANK
in resume tries to set window enabled and update for Window A,
before its new physical address is set. This makes DECERR_EMEM
error and glitches in resume.
Bug 1294791
Change-Id: I22aedd5e33056d4c0ec9fcd84f28597ec6164889
Signed-off-by: Min-wuk Lee <mlee@nvidia.com>
Reviewed-on: http://git-master/r/234087
Reviewed-by: Riham Haidar <rhaidar@nvidia.com>
Tested-by: Riham Haidar <rhaidar@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/video/tegra/dc/dc.c | 3 | ||||
-rw-r--r-- | drivers/video/tegra/dc/window.c | 2 |
2 files changed, 4 insertions, 1 deletions
diff --git a/drivers/video/tegra/dc/dc.c b/drivers/video/tegra/dc/dc.c index 4590a3416491..17263a35ad31 100644 --- a/drivers/video/tegra/dc/dc.c +++ b/drivers/video/tegra/dc/dc.c @@ -2037,6 +2037,9 @@ static void _tegra_dc_controller_disable(struct tegra_dc *dc) /* disable windows */ w->flags &= ~TEGRA_WIN_FLAG_ENABLED; + /* set window physical address to invalid*/ + w->phys_addr = 0; + /* flush any pending syncpt waits */ while (dc->syncpt[i].min < dc->syncpt[i].max) { trace_display_syncpt_flush(dc, dc->syncpt[i].id, diff --git a/drivers/video/tegra/dc/window.c b/drivers/video/tegra/dc/window.c index 0f9a5fc45001..e9b72cb6147b 100644 --- a/drivers/video/tegra/dc/window.c +++ b/drivers/video/tegra/dc/window.c @@ -389,7 +389,7 @@ int tegra_dc_update_windows(struct tegra_dc_win *windows[], int n) if (!no_vsync) update_mask |= WIN_A_ACT_REQ << win->idx; - if (!WIN_IS_ENABLED(win)) { + if (!WIN_IS_ENABLED(win) || !win->phys_addr) { dc_win->dirty = no_vsync ? 0 : 1; tegra_dc_writel(dc, 0, DC_WIN_WIN_OPTIONS); continue; |