• Imre Deak's avatar
    drm/i915/lspcon: Add workaround for resuming in PCON mode · 489375c8
    Imre Deak authored
    On my APL the LSPCON firmware resumes in PCON mode as opposed to the
    expected LS mode. It also appears to be in a state where AUX DPCD reads
    will succeed but return garbage recovering only after a few hundreds of
    milliseconds. After the recovery time DPCD reads will result in the
    correct values and things will continue to work. If I2C over AUX is
    attempted during this recovery time (implying an AUX write transaction)
    the firmware won't recover and will stay in this broken state.
    
    As a workaround check if the firmware is in PCON state after resume and
    if so wait until the correct DPCD values are returned. For this we
    compare the branch descriptor with the one we cached during init time.
    If the firmware was in the LS state, we skip the w/a and continue as
    before.
    
    v2:
    - Use the DP descriptor value cached in intel_dp. (Jani)
    - Get to intel_dp using container_of(), instead of a cached ptr.
      (Shashank)
    - Use usleep_range() instead of msleep().
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98353
    Cc: Shashank Sharma <shashank.sharma@intel.com>
    Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Cc: Jani Nikula <jani.nikula@intel.com>
    Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
    Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/1477326811-30431-9-git-send-email-imre.deak@intel.com
    489375c8
intel_lspcon.c 5.12 KB