aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/omap2
diff options
context:
space:
mode:
authorChandrabhanu Mahapatra <cmahapatra@ti.com>2012-09-24 02:38:27 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2012-09-25 09:41:11 -0400
commitd557a9cf2f4f9286759cdd1937ce98641fa35583 (patch)
tree886415e0895ceb77e98af168bf905393f83fc03b /drivers/video/omap2
parent406f7b8baa8f92d88dac448a9dc0dbeb3e330874 (diff)
OMAPDSS: DISPC: Add predecimation limit for TILER based rotations
In OMAP4 and OMAP5 when TILER 2D burst mode is used, a maximum of one line can be skipped as per the respective TRMs. The MBlockStride OCP signal, which is sum of ROWINC and image width in memory, is only 17 bits wide. In 2D mode TILER supports 8192, 16384, 32768 and 65536 values of MBlockStride. In case when 2 or more lines are skipped the ROWINC value exceeds 65536 resulting in OCP errors. So, maximum vertical predecimation achievable is 2. Signed-off-by: Chandrabhanu Mahapatra <cmahapatra@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/video/omap2')
-rw-r--r--drivers/video/omap2/dss/dispc.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index e52c57789383..2137d2a2cc5d 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -2195,7 +2195,8 @@ static int dispc_ovl_calc_scaling(enum omap_plane plane,
2195 const struct omap_video_timings *mgr_timings, 2195 const struct omap_video_timings *mgr_timings,
2196 u16 width, u16 height, u16 out_width, u16 out_height, 2196 u16 width, u16 height, u16 out_width, u16 out_height,
2197 enum omap_color_mode color_mode, bool *five_taps, 2197 enum omap_color_mode color_mode, bool *five_taps,
2198 int *x_predecim, int *y_predecim, u16 pos_x) 2198 int *x_predecim, int *y_predecim, u16 pos_x,
2199 enum omap_dss_rotation_type rotation_type)
2199{ 2200{
2200 struct omap_overlay *ovl = omap_dss_get_overlay(plane); 2201 struct omap_overlay *ovl = omap_dss_get_overlay(plane);
2201 const int maxdownscale = dss_feat_get_param_max(FEAT_PARAM_DOWNSCALE); 2202 const int maxdownscale = dss_feat_get_param_max(FEAT_PARAM_DOWNSCALE);
@@ -2210,7 +2211,8 @@ static int dispc_ovl_calc_scaling(enum omap_plane plane,
2210 return -EINVAL; 2211 return -EINVAL;
2211 2212
2212 *x_predecim = max_decim_limit; 2213 *x_predecim = max_decim_limit;
2213 *y_predecim = max_decim_limit; 2214 *y_predecim = (rotation_type == OMAP_DSS_ROT_TILER &&
2215 dss_has_feature(FEAT_BURST_2D)) ? 2 : max_decim_limit;
2214 2216
2215 if (color_mode == OMAP_DSS_COLOR_CLUT1 || 2217 if (color_mode == OMAP_DSS_COLOR_CLUT1 ||
2216 color_mode == OMAP_DSS_COLOR_CLUT2 || 2218 color_mode == OMAP_DSS_COLOR_CLUT2 ||
@@ -2306,7 +2308,8 @@ int dispc_ovl_setup(enum omap_plane plane, struct omap_overlay_info *oi,
2306 2308
2307 r = dispc_ovl_calc_scaling(plane, channel, mgr_timings, in_width, 2309 r = dispc_ovl_calc_scaling(plane, channel, mgr_timings, in_width,
2308 in_height, out_width, out_height, oi->color_mode, 2310 in_height, out_width, out_height, oi->color_mode,
2309 &five_taps, &x_predecim, &y_predecim, oi->pos_x); 2311 &five_taps, &x_predecim, &y_predecim, oi->pos_x,
2312 oi->rotation_type);
2310 if (r) 2313 if (r)
2311 return r; 2314 return r;
2312 2315