• Paulo Zanoni's avatar
    drm/i915/fbc: rewrite the multiple_pipes_ok() code for locking · 010cf73d
    Paulo Zanoni authored
    Older FBC platforms have this restriction where FBC can't be enabled
    if multiple pipes are enabled. In the current code, we disable FBC
    before the second pipe becomes visible.
    
    One of the problems with this code is that the current
    multiple_pipes_ok() implementation just iterates through all CRTCs
    looking at their states, but it doesn't make sure that the state
    locks are grabbed. It also can't just grab the locks for every CRTC
    since this would kill one of the biggest advantages of atomic
    modesetting.
    
    After the recent FBC changes, we now have the appropriate locks for
    the given CRTC, so we can just try to maintain the state of each CRTC
    and update it once intel_fbc_pre_update is called.
    
    As a last note, I don't have gen 2/3 machines to test this code. My
    current plan is to enable FBC on just the newer platforms, so this
    patch is just an attempt to get the gen 2/3 code at least looking
    sane, so if one day someone decide to fix FBC on these platforms, they
    may have less work to do.
    
    Not-tested-by: Paulo Zanoni <paulo.r.zanoni@intel.com> (only on HSW+)
    Reviewed-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Signed-off-by: default avatarPaulo Zanoni <paulo.r.zanoni@intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/1453210558-7875-16-git-send-email-paulo.r.zanoni@intel.com
    010cf73d
intel_fbc.c 33.1 KB