• Sonika Jindal's avatar
    drm/i915: Add 180 degree primary plane rotation support · 48404c1e
    Sonika Jindal authored
    Primary planes support 180 degree rotation. Expose the feature
    through rotation drm property.
    
    v2: Calculating linear/tiled offsets based on pipe source width and
    height. Added 180 degree rotation support in ironlake_update_plane.
    
    v3: Checking if CRTC is active before issueing update_plane. Added
    wait for vblank to make sure we dont overtake page flips. Disabling
    FBC since it does not work with rotated planes.
    
    v4: Updated rotation checks for pending flips, fbc disable. Creating
    rotation property only for Gen4 onwards. Property resetting as part
    of lastclose.
    
    v5: Resetting property in i915_driver_lastclose properly for planes
    and crtcs. Fixed linear offset calculation that was off by 1 w.r.t
    width in i9xx_update_plane and ironlake_update_plane. Removed tab
    based indentation and unnecessary braces in intel_crtc_set_property
    and intel_update_fbc. FBC and flip related checks should be done only
    for valid crtcs.
    
    v6: Minor nits in FBC disable checks for comments in intel_crtc_set_property
    and positioning the disable code in intel_update_fbc.
    
    v7: In case rotation property on inactive crtc is updated, we return
    successfully printing debug log as crtc is inactive and only property change
    is preserved.
    
    v8: update_plane is changed to update_primary_plane, crtc->fb is changed to
    crtc->primary->fb  and return value of update_primary_plane is ignored.
    
    v9: added rotation property to primary plane instead of crtc. Removing reset
    of rotation property from lastclose. rotation_property is moved to
    drm_mode_config, so drm layer will take care of resetting. Adding updation of
    fbc when rotation is set to 0. Allowing rotation only if value is
    different than old one.
    
    v10: Calling intel_primary_plane_setplane instead of update_primary_plane in
    set_property(Daniel).
    
    v11: Using same set_property function for both primary and sprite, Adding
    primary plane specific code in the same function (Matt).
    
    v12: Removing disabling/ enabling of fbc from set_property because it is done
    from intel_pipe_set_base. Other formatting
    
    v13: we need to call disable_fbc before changing the rotation to 180,
    disable_fbc from intel_pipe_set_base gets called very late, that will
    be used to re-enable fbc if rotation is set to 0 (Ville).
    
    Testcase: igt/kms_rotation_crc
    Signed-off-by: default avatarUma Shankar <uma.shankar@intel.com>
    Signed-off-by: default avatarSagar Kamble <sagar.a.kamble@intel.com>
    Signed-off-by: default avatarSonika Jindal <sonika.jindal@intel.com>
    [danvet: Add FIXME to explain why we need the open-coded update_fbc
    hunk to disable fbc when rotated 180 degree. And make checkpatch
    happier.]
    Acked-by: default avatarMatt Roper <matthew.d.roper@intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    48404c1e
i915_reg.h 250 KB