• Ville Syrjälä's avatar
    drm/i915: Merge LP1+ watermarks in safer way · d52fea5b
    Ville Syrjälä authored
    On ILK when we disable a particular watermark level, we must
    maintain the actual watermark values for that level for some time
    (until the next vblank possibly). Otherwise we risk underruns.
    
    In order to achieve that result we must merge the LP1+ watermarks a
    bit differently since we must also merge levels that are to be
    disabled. We must also make sure we don't overflow the fields in the
    watermark registers in case the calculated watermarks come out too
    big to fit.
    
    As early as possbile we mark all computed watermark levels as
    disabled if they would exceed the register maximums. We make sure
    to leave the actual watermarks for such levels zeroed out. Then during
    merging, we take the maxium values for every level, regardless if
    they're disabled or not. That may seem a bit pointless since at the
    moment all the watermark levels we merge should have their values
    zeroed if the level is already disabled. However soon we will be
    dealing with intermediate watermarks that, in addition to the new
    watermark values, also contain the previous watermark values, and so
    levels that are disabled may no longer be zeroed out.
    
    v2: Split the patch in two (Paulo)
        Use if() instead of & when merging ->enable (Paulo)
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Reviewed-by: default avatarPaulo Zanoni <paulo.r.zanoni@intel.com>
    [danvet: Fix commit message as noted by Paulo.]
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    d52fea5b
intel_pm.c 179 KB