aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/omapdrm/dss/dispc.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c b/drivers/gpu/drm/omapdrm/dss/dispc.c
index 5554b72cf56a..d956e6266368 100644
--- a/drivers/gpu/drm/omapdrm/dss/dispc.c
+++ b/drivers/gpu/drm/omapdrm/dss/dispc.c
@@ -2506,6 +2506,25 @@ static int dispc_ovl_calc_scaling_44xx(unsigned long pclk, unsigned long lclk,
2506 return -EINVAL; 2506 return -EINVAL;
2507 } 2507 }
2508 2508
2509 if (*decim_x > 4 && color_mode != OMAP_DSS_COLOR_NV12) {
2510 /*
2511 * Let's disable all scaling that requires horizontal
2512 * decimation with higher factor than 4, until we have
2513 * better estimates of what we can and can not
2514 * do. However, NV12 color format appears to work Ok
2515 * with all decimation factors.
2516 *
2517 * When decimating horizontally by more that 4 the dss
2518 * is not able to fetch the data in burst mode. When
2519 * this happens it is hard to tell if there enough
2520 * bandwidth. Despite what theory says this appears to
2521 * be true also for 16-bit color formats.
2522 */
2523 DSSERR("Not enough bandwidth, too much downscaling (x-decimation factor %d > 4)", *decim_x);
2524
2525 return -EINVAL;
2526 }
2527
2509 *core_clk = dispc.feat->calc_core_clk(pclk, in_width, in_height, 2528 *core_clk = dispc.feat->calc_core_clk(pclk, in_width, in_height,
2510 out_width, out_height, mem_to_mem); 2529 out_width, out_height, mem_to_mem);
2511 return 0; 2530 return 0;