pixel_rate = crtc_state->pixel_rate;
        htotal = pipe_mode->crtc_htotal;
-
-       width = drm_rect_width(&plane_state->uapi.dst);
+       width = drm_rect_width(&plane_state->uapi.src) >> 16;
 
        if (plane->id == PLANE_CURSOR) {
                wm = intel_wm_method2(pixel_rate, htotal, width, cpp, latency);
        cpp = plane_state->hw.fb->format->cpp[0];
        pixel_rate = crtc_state->pixel_rate;
        htotal = pipe_mode->crtc_htotal;
-       width = crtc_state->pipe_src_w;
+       width = drm_rect_width(&plane_state->uapi.src) >> 16;
 
        if (plane->id == PLANE_CURSOR) {
                /*
                        crtc->base.primary->state->fb;
                int pixel_rate = crtc->config->pixel_rate;
                int htotal = pipe_mode->crtc_htotal;
-               int hdisplay = crtc->config->pipe_src_w;
+               int width = drm_rect_width(&crtc->base.primary->state->src) >> 16;
                int cpp = fb->format->cpp[0];
                int entries;
 
                entries = intel_wm_method2(pixel_rate, htotal,
-                                          hdisplay, cpp, sr_latency_ns / 100);
+                                          width, cpp, sr_latency_ns / 100);
                entries = DIV_ROUND_UP(entries, I915_FIFO_LINE_SIZE);
                srwm = I965_FIFO_SIZE - entries;
                if (srwm < 0)
                        enabled->base.primary->state->fb;
                int pixel_rate = enabled->config->pixel_rate;
                int htotal = pipe_mode->crtc_htotal;
-               int hdisplay = enabled->config->pipe_src_w;
+               int width = drm_rect_width(&enabled->base.primary->state->src) >> 16;
                int cpp;
                int entries;
 
                else
                        cpp = fb->format->cpp[0];
 
-               entries = intel_wm_method2(pixel_rate, htotal, hdisplay, cpp,
+               entries = intel_wm_method2(pixel_rate, htotal, width, cpp,
                                           sr_latency_ns / 100);
                entries = DIV_ROUND_UP(entries, wm_info->cacheline_size);
                drm_dbg_kms(&dev_priv->drm,
 
        method2 = ilk_wm_method2(crtc_state->pixel_rate,
                                 crtc_state->hw.pipe_mode.crtc_htotal,
-                                drm_rect_width(&plane_state->uapi.dst),
+                                drm_rect_width(&plane_state->uapi.src) >> 16,
                                 cpp, mem_value);
 
        return min(method1, method2);
        method1 = ilk_wm_method1(crtc_state->pixel_rate, cpp, mem_value);
        method2 = ilk_wm_method2(crtc_state->pixel_rate,
                                 crtc_state->hw.pipe_mode.crtc_htotal,
-                                drm_rect_width(&plane_state->uapi.dst),
+                                drm_rect_width(&plane_state->uapi.src) >> 16,
                                 cpp, mem_value);
        return min(method1, method2);
 }
 
        return ilk_wm_method2(crtc_state->pixel_rate,
                              crtc_state->hw.pipe_mode.crtc_htotal,
-                             drm_rect_width(&plane_state->uapi.dst),
+                             drm_rect_width(&plane_state->uapi.src) >> 16,
                              cpp, mem_value);
 }
 
 
        cpp = plane_state->hw.fb->format->cpp[0];
 
-       return ilk_wm_fbc(pri_val, drm_rect_width(&plane_state->uapi.dst),
+       return ilk_wm_fbc(pri_val, drm_rect_width(&plane_state->uapi.src) >> 16,
                          cpp);
 }