Commit fe59e5cf authored by Tomi Valkeinen's avatar Tomi Valkeinen

OMAPDSS: workaround for MFLAG + NV12 issue

It was found that having two displays enabled and having an NV12 overlay
on one of the displays will cause underflows/synclosts. Debugging this
pointed to some issue with MFLAG.

It is unclear why this issue is happening, but it looks like there is a
HW bug related to MFLAG and FIFO management. Disabling MFLAG makes this
issue go away, but then we lose the benefit of MFLAG. Also forcing MFLAG
always on makes the issue go away.

Also, using certain values for MFLAG_START, MFLAG thresholds and PRELOAD
makes the issue go away, but there was no obvious logic to which values
work and which don't.

As a workaround until more information about this is found, force MFLAG
always on to make NV12 usable.
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent c64aa3a6
...@@ -1328,8 +1328,18 @@ static void dispc_init_mflag(void) ...@@ -1328,8 +1328,18 @@ static void dispc_init_mflag(void)
{ {
int i; int i;
/*
* HACK: NV12 color format and MFLAG seem to have problems working
* together: using two displays, and having an NV12 overlay on one of
* the displays will cause underflows/synclosts when MFLAG_CTRL=2.
* Changing MFLAG thresholds and PRELOAD to certain values seem to
* remove the errors, but there doesn't seem to be a clear logic on
* which values work and which not.
*
* As a work-around, set force MFLAG to always on.
*/
dispc_write_reg(DISPC_GLOBAL_MFLAG_ATTRIBUTE, dispc_write_reg(DISPC_GLOBAL_MFLAG_ATTRIBUTE,
(2 << 0) | /* MFLAG_CTRL = enable */ (1 << 0) | /* MFLAG_CTRL = force always on */
(0 << 2)); /* MFLAG_START = disable */ (0 << 2)); /* MFLAG_START = disable */
for (i = 0; i < dss_feat_get_num_ovls(); ++i) { for (i = 0; i < dss_feat_get_num_ovls(); ++i) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment