summaryrefslogtreecommitdiffstats
path: root/drivers/video
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2015-04-09 06:51:30 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2015-06-17 08:38:43 -0400
commit3397cc6a7199993150d09d9bf055ae130058a684 (patch)
tree15261fe46ec39419dd9901e4c2c2d9d3191b21c9 /drivers/video
parentc65b99f046843d2455aa231747b5a07a999a9f3d (diff)
OMAPDSS: DISPC: work-around for errata i631
Errata i631 description: "When in YUV4:2:0 format in 1D burst, the DISPC DMA skips lines when fetching Chroma sampling." Workaround: "If YUV4:2:0-1D burst is required: Set DISPC_VIDp_ATTRIBUTES[22]DOUBLESTRIDE to 0x0 and DISPC_VIDp_ATTRIBUTES[13:12]ROTATION to 0x1 or 0x3" The description is somewhat confusing, but testing has shown that DSS fetches extra rows from memory when using NV12 format in 1D mode. If the memory after the framebuffer is inaccessible, this leads to OCP errors. The driver always uses DOUBLESTRIDE=0 when using 1D mode, so we only need to handle the ROTATION part. The issue exist on all OMAP4 and OMAP5 based DSS IPs. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/fbdev/omap2/dss/dispc.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/video/fbdev/omap2/dss/dispc.c b/drivers/video/fbdev/omap2/dss/dispc.c
index f4fc77d9d3bf..a074d8b70591 100644
--- a/drivers/video/fbdev/omap2/dss/dispc.c
+++ b/drivers/video/fbdev/omap2/dss/dispc.c
@@ -1741,6 +1741,15 @@ static void dispc_ovl_set_rotation_attrs(enum omap_plane plane, u8 rotation,
1741 row_repeat = false; 1741 row_repeat = false;
1742 } 1742 }
1743 1743
1744 /*
1745 * OMAP4/5 Errata i631:
1746 * NV12 in 1D mode must use ROTATION=1. Otherwise DSS will fetch extra
1747 * rows beyond the framebuffer, which may cause OCP error.
1748 */
1749 if (color_mode == OMAP_DSS_COLOR_NV12 &&
1750 rotation_type != OMAP_DSS_ROT_TILER)
1751 vidrot = 1;
1752
1744 REG_FLD_MOD(DISPC_OVL_ATTRIBUTES(plane), vidrot, 13, 12); 1753 REG_FLD_MOD(DISPC_OVL_ATTRIBUTES(plane), vidrot, 13, 12);
1745 if (dss_has_feature(FEAT_ROWREPEATENABLE)) 1754 if (dss_has_feature(FEAT_ROWREPEATENABLE))
1746 REG_FLD_MOD(DISPC_OVL_ATTRIBUTES(plane), 1755 REG_FLD_MOD(DISPC_OVL_ATTRIBUTES(plane),