• Stanislav Lisovskiy's avatar
    drm/i915: Use intel_plane_data_rate for min_cdclk calculation · 7a9ccdd1
    Stanislav Lisovskiy authored
    There seems to be a bit of confusing redundancy in a way, how
    plane data rate/min cdclk are calculated.
    In fact both min cdclk, pixel rate and plane data rate are all
    part of the same formula as per BSpec.
    
    However currently we have intel_plane_data_rate, which is used
    to calculate plane data rate and which is also used in bandwidth
    calculations. However for calculating min_cdclk we have another
    piece of code, doing almost same calculation, but a bit differently
    and in a different place. However as both are actually part of same
    formula, probably would be wise to use plane data rate calculations
    as a basis anyway, thus avoiding code duplication and possible bugs
    related to this.
    
    Another thing is that I've noticed that during min_cdclk calculations
    we account for plane scaling, while for plane data rate, we don't.
    crtc->pixel_rate seems to account only for pipe ratio, however it is
    clearly stated in BSpec that plane data rate also need to account
    plane ratio as well.
    
    So what this commit does is:
    - Adds a plane ratio calculation to intel_plane_data_rate
    - Removes redundant calculations from skl_plane_min_cdclk which is
      used for gen9+ and now uses intel_plane_data_rate as a basis from
      there as well.
    
    v2: - Don't use 64 division if not needed(Ville Syrjälä)
        - Now use intel_plane_pixel_rate as a basis for calculations both
          at intel_plane_data_rate and skl_plane_min_cdclk(Ville Syrjälä)
    
    v3: - Again fix the division macro
        - Fix plane_pixel_rate to pixel_rate at intel_plane_pixel_rate
          callsites
    
    v4: - Renamed skl_plane_ratio function back(Ville Syrjälä)
    
    v5: - Don't precalculate plane pixel rate for invisible plane,
          check for visibility first, as in invisible case it will
          have dst_w and dst_h equal to zero, causing divide error.
    
    v6: - Removed useless warn in intel_plane_pixel_rate(Ville Syrjälä)
        - Fixed alignment in intel_plane_data_rate(Ville Syrjälä)
        - Changed pixel_rate type to be unsigned int in
          skl_plane_min_cdclk(Ville Syrjälä)
    Signed-off-by: default avatarStanislav Lisovskiy <stanislav.lisovskiy@intel.com>
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20200227150935.2107-1-stanislav.lisovskiy@intel.com
    7a9ccdd1
intel_sprite.c 89 KB