On OMAP3/AM43xx some scaling factors cause underflows/synclosts. After
studying this, I found that sometimes the driver uses three-tap scaling
with downscaling factor smaller than x0.5. This causes issues, as x0.5
is the limit for three-tap scaling.
The driver has FEAT_PARAM_DOWNSCALE parameter, but that seems to be for
five-tap scaling, which allows scaling down to x0.25.
This patch adds checks for both horizontal and vertical scaling. For
horizontal the HW always uses 5 taps, so the limit is x0.25.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
                error = (error || in_width > maxsinglelinewidth * 2 ||
                        (in_width > maxsinglelinewidth && *five_taps) ||
                        !*core_clk || *core_clk > dispc_core_clk_rate());
+
+               if (!error) {
+                       /* verify that we're inside the limits of scaler */
+                       if (in_width / 4 > out_width)
+                                       error = 1;
+
+                       if (*five_taps) {
+                               if (in_height / 4 > out_height)
+                                       error = 1;
+                       } else {
+                               if (in_height / 2 > out_height)
+                                       error = 1;
+                       }
+               }
+
                if (error) {
                        if (*decim_x == *decim_y) {
                                *decim_x = min_factor;