• Imre Deak's avatar
    drm/i915: Get power refs in encoder->get_power_domains() · bef42cb2
    Imre Deak authored
    Push getting the reference for the encoders' power domains into the
    encoder get_power_domains() hook instead of doing this from the caller.
    This way the encoder can store away the corresponding wakerefs.
    
    This fixes the DSI encoder disabling, which didn't release these
    power references it acquired during HW state readout.
    
    Note that longtime ownership for the corresponding wakerefs can be thus
    acquired / released in two ways. Nevertheless there is always only one
    owner for them:
    
    After HW readout (booting/system resume):
    - encoder->get_power_domains() acquires
    - encoder->disable*() releases
    
    After a modeset (calling intel_atomic_commit()):
    - encoder->enable*() acquires
    - encoder->disable*() releases
    
    * can be any of the encoder enable/disable hooks.
    
    v2:
    - Check that the DSI io_wakerefs are unset both during encoder HW
      readout and enabling. (Chris)
    
    Fixes: 0e6e0be4 ("drm/i915: Markup paired operations on display power domains")
    Cc: Vandita Kulkarni <vandita.kulkarni@intel.com>
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
    Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Link: https://patchwork.freedesktop.org/patch/msgid/20190407124655.31536-1-imre.deak@intel.com
    (cherry picked from commit 3a52fb7e)
    Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
    bef42cb2
intel_display.c 466 KB