• Imre Deak's avatar
    drm/i915/skl: init/uninit display core as part of the HW power domain state · 73dfc227
    Imre Deak authored
    We need to initialize the display core part early, before initializing
    the rest of the display power state. This is also described in the bspec
    termed "Display initialization sequence". Atm we run this sequence
    during driver loading after power domain HW state initialization which
    is too late and during runtime suspend/resume which is unneeded and can
    interere with DMC functionality which handles HW resources toggled
    by this init/uninit sequence automatically. The init sequence must be
    run as the first step of HW power state initialization and during
    system resume. The uninit sequence must be run during system suspend.
    
    To address the above move the init sequence to the initial HW power
    state setup and the uninit sequence to a new power domains suspend
    function called during system suspend.
    
    As part of the init sequence we also have to reprogram the DMC firmware
    as it's lost across a system suspend/resume cycle.
    
    After this change CD clock initialization during driver loading will
    happen only later after other dependent HW/SW parts are initialized,
    while during system resume it will get initialized as the last step of
    the init sequence. This distinction can be removed by some refactoring
    of platform independent parts. I left this refactoring out from this
    series since I didn't want to change non-SKL parts. This is a TODO for
    later.
    
    v2:
    - fix error path in i915_drm_suspend_late()
    - don't try to re-program the DMC firmware if it failed to load
    Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
    Reviewed-by: default avatarPatrik Jakobsson <patrik.jakobsson@linux.intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/1447774433-20834-1-git-send-email-imre.deak@intel.com
    73dfc227
i915_drv.c 49.6 KB