From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> Tweak the parameters we pass to the cursor size_ok() functions in preparation for using them to populate the SIZE_HINT property. Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> --- drivers/gpu/drm/i915/display/intel_cursor.c | 63 +++++++++++---------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c index 31bef0427377..edeeb5f9f795 100644 --- a/drivers/gpu/drm/i915/display/intel_cursor.c +++ b/drivers/gpu/drm/i915/display/intel_cursor.c @@ -65,12 +65,10 @@ static u32 intel_cursor_position(const struct intel_plane_state *plane_state) return pos; } -static bool intel_cursor_size_ok(const struct intel_plane_state *plane_state) +static bool intel_cursor_size_ok(struct drm_i915_private *i915, + int width, int height) { - const struct drm_mode_config *config = - &plane_state->uapi.plane->dev->mode_config; - int width = drm_rect_width(&plane_state->uapi.dst); - int height = drm_rect_height(&plane_state->uapi.dst); + const struct drm_mode_config *config = &i915->drm.mode_config; return width > 0 && width <= config->cursor_width && height > 0 && height <= config->cursor_height; @@ -198,23 +196,25 @@ static u32 i845_cursor_ctl(const struct intel_crtc_state *crtc_state, CURSOR_STRIDE(plane_state->view.color_plane[0].mapping_stride); } -static bool i845_cursor_size_ok(const struct intel_plane_state *plane_state) +static bool i845_cursor_size_ok(struct drm_plane *plane, + int width, int height) { - int width = drm_rect_width(&plane_state->uapi.dst); + struct drm_i915_private *i915 = to_i915(plane->dev); /* * 845g/865g are only limited by the width of their cursors, * the height is arbitrary up to the precision of the register. */ - return intel_cursor_size_ok(plane_state) && IS_ALIGNED(width, 64); + return intel_cursor_size_ok(i915, width, height) && IS_ALIGNED(width, 64); } static int i845_check_cursor(struct intel_crtc_state *crtc_state, struct intel_plane_state *plane_state) { + struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); + struct drm_i915_private *i915 = to_i915(plane->base.dev); const struct drm_framebuffer *fb = plane_state->hw.fb; - struct drm_i915_private *i915 = to_i915(plane_state->uapi.plane->dev); - int ret; + int ret, width, height; ret = intel_check_cursor(crtc_state, plane_state); if (ret) @@ -224,12 +224,14 @@ static int i845_check_cursor(struct intel_crtc_state *crtc_state, if (!fb) return 0; + width = drm_rect_width(&plane_state->uapi.dst); + height = drm_rect_height(&plane_state->uapi.dst); + /* Check for which cursor types we support */ - if (!i845_cursor_size_ok(plane_state)) { + if (!i845_cursor_size_ok(&plane->base, width, height)) { drm_dbg_kms(&i915->drm, "Cursor dimension %dx%d not supported\n", - drm_rect_width(&plane_state->uapi.dst), - drm_rect_height(&plane_state->uapi.dst)); + width, height); return -EINVAL; } @@ -386,14 +388,13 @@ static u32 i9xx_cursor_ctl(const struct intel_crtc_state *crtc_state, return cntl; } -static bool i9xx_cursor_size_ok(const struct intel_plane_state *plane_state) +static bool i9xx_cursor_size_ok(struct drm_plane *plane, + int width, int height, + unsigned int rotation) { - struct drm_i915_private *dev_priv = - to_i915(plane_state->uapi.plane->dev); - int width = drm_rect_width(&plane_state->uapi.dst); - int height = drm_rect_height(&plane_state->uapi.dst); + struct drm_i915_private *i915 = to_i915(plane->dev); - if (!intel_cursor_size_ok(plane_state)) + if (!intel_cursor_size_ok(i915, width, height)) return false; /* Cursor width is limited to a few power-of-two sizes */ @@ -412,8 +413,7 @@ static bool i9xx_cursor_size_ok(const struct intel_plane_state *plane_state) * cursor is not rotated. Everything else requires square * cursors. */ - if (HAS_CUR_FBC(dev_priv) && - plane_state->hw.rotation & DRM_MODE_ROTATE_0) { + if (HAS_CUR_FBC(i915) && rotation & DRM_MODE_ROTATE_0) { if (height < 8 || height > width) return false; } else { @@ -431,7 +431,7 @@ static int i9xx_check_cursor(struct intel_crtc_state *crtc_state, struct drm_i915_private *dev_priv = to_i915(plane->base.dev); const struct drm_framebuffer *fb = plane_state->hw.fb; enum pipe pipe = plane->pipe; - int ret; + int ret, width, height; ret = intel_check_cursor(crtc_state, plane_state); if (ret) @@ -441,24 +441,25 @@ static int i9xx_check_cursor(struct intel_crtc_state *crtc_state, if (!fb) return 0; + width = drm_rect_width(&plane_state->uapi.dst); + height = drm_rect_height(&plane_state->uapi.dst); + /* Check for which cursor types we support */ - if (!i9xx_cursor_size_ok(plane_state)) { - drm_dbg(&dev_priv->drm, - "Cursor dimension %dx%d not supported\n", - drm_rect_width(&plane_state->uapi.dst), - drm_rect_height(&plane_state->uapi.dst)); + if (!i9xx_cursor_size_ok(&plane->base, width, height, + plane_state->hw.rotation)) { + drm_dbg_kms(&dev_priv->drm, + "Cursor dimension %dx%d not supported\n", + width, height); return -EINVAL; } drm_WARN_ON(&dev_priv->drm, plane_state->uapi.visible && plane_state->view.color_plane[0].mapping_stride != fb->pitches[0]); - if (fb->pitches[0] != - drm_rect_width(&plane_state->uapi.dst) * fb->format->cpp[0]) { + if (fb->pitches[0] != width * fb->format->cpp[0]) { drm_dbg_kms(&dev_priv->drm, "Invalid cursor stride (%u) (cursor width %d)\n", - fb->pitches[0], - drm_rect_width(&plane_state->uapi.dst)); + fb->pitches[0], width); return -EINVAL; } -- 2.39.2