intel_allocate_scaler() checks if casf_scaler is true and either
allocates second scaler or fails if it was already allocated. Mimic this
outside of the loop. Also fail the allocation if number of scalers is
less than 2.

Cc: Nemesa Garg <[email protected]>
Cc: Ville Syrjälä <[email protected]>
Signed-off-by: Michał Grzelak <[email protected]>
---
 drivers/gpu/drm/i915/display/skl_scaler.c | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/skl_scaler.c 
b/drivers/gpu/drm/i915/display/skl_scaler.c
index 59a5a3cd3e6a..29e4047c3f99 100644
--- a/drivers/gpu/drm/i915/display/skl_scaler.c
+++ b/drivers/gpu/drm/i915/display/skl_scaler.c
@@ -339,16 +339,24 @@ static int intel_allocate_scaler(struct 
intel_crtc_scaler_state *scaler_state,
        struct intel_display *display = to_intel_display(crtc);
        int scaler_id;
 
-       if (casf_scaler && !HAS_CASF(display))
-               return -1;
+       if (casf_scaler) {
+               if (!HAS_CASF(display))
+                       return -1;
+
+               if (crtc->num_scalers < 2)
+                       return -1;
+
+               if (scaler_state->scalers[1].in_use)
+                       return -1;
+
+               scaler_state->scalers[1].in_use = true;
+               return 1;
+       }
 
        for (scaler_id = 0; scaler_id < crtc->num_scalers; scaler_id++) {
                if (scaler_state->scalers[scaler_id].in_use)
                        continue;
 
-               if (casf_scaler && scaler_id != 1)
-                       continue;
-
                scaler_state->scalers[scaler_id].in_use = true;
 
                return scaler_id;
-- 
2.45.2

Reply via email to