linux/drivers/gpu/drm/i915
Imre Deak 489375c866 drm/i915/lspcon: Add workaround for resuming in PCON mode
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: Imre Deak <imre.deak@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1477326811-30431-9-git-send-email-imre.deak@intel.com
2016-10-26 12:41:01 +03:00
..
gvt drm/i915/gvt: do not ignore return value of create_scratch_page 2016-10-20 17:31:36 +08:00
dvo_ch7xxx.c
dvo_ch7017.c
dvo_ivch.c
dvo_ns2501.c
dvo_sil164.c
dvo_tfp410.c
dvo.h
i915_cmd_parser.c drm/i915: Allocate intel_engine_cs structure only for the enabled engines 2016-10-14 09:58:43 +01:00
i915_debugfs.c drm/i915: Debugfs support for GuC logging control 2016-10-25 09:34:23 +01:00
i915_drv.c drm/i915: Add a relay backed debugfs interface for capturing GuC logs 2016-10-25 09:34:23 +01:00
i915_drv.h drm/i915: Include the kernel uptime in the error state 2016-10-25 13:22:43 +01:00
i915_gem_batch_pool.c drm/i915: Double check the active status on the batch pool 2016-08-04 20:19:50 +01:00
i915_gem_batch_pool.h drm/i915: Double check the active status on the batch pool 2016-08-04 20:19:50 +01:00
i915_gem_context.c drm/i915: Make IS_IVYBRIDGE only take dev_priv 2016-10-14 12:23:19 +01:00
i915_gem_dmabuf.c drm/prime: Take a ref on the drm_dev when exporting a dma_buf 2016-10-05 15:30:32 +02:00
i915_gem_dmabuf.h drm/i915: Serialise presentation with imported dmabufs 2016-06-17 10:32:26 +01:00
i915_gem_evict.c drm/i915: Move user fault tracking to a separate list 2016-10-24 13:45:35 +01:00
i915_gem_execbuffer.c Merge tag 'drm-intel-next-2016-10-24' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-10-25 16:39:43 +10:00
i915_gem_fence.c drm/i915: Move fence cancellation to runtime suspend 2016-10-24 13:45:38 +01:00
i915_gem_gtt.c drm/i915: Remove RPM sequence checking 2016-10-24 13:45:37 +01:00
i915_gem_gtt.h drm/i915: Remove unused "valid" parameter from pte_encode 2016-10-14 12:40:32 +01:00
i915_gem_render_state.c drm/i915: Make INTEL_GEN only take dev_priv 2016-10-14 12:23:19 +01:00
i915_gem_render_state.h drm/i915: Use VMA for render state page tracking 2016-08-15 11:01:11 +01:00
i915_gem_request.c drm/i915: Allocate intel_engine_cs structure only for the enabled engines 2016-10-14 09:58:43 +01:00
i915_gem_request.h drm/i915: Nonblocking request submission 2016-09-09 14:23:08 +01:00
i915_gem_shrinker.c drm/i915: Treat a framebuffer reference as an active reference whilst shrinking 2016-10-12 17:17:20 +01:00
i915_gem_stolen.c drm/i915: Make IS_GEN macros only take dev_priv 2016-10-14 12:23:22 +01:00
i915_gem_tiling.c drm/i915: Use RPM as the barrier for controlling user mmap access 2016-10-24 13:45:35 +01:00
i915_gem_userptr.c mm: replace get_user_pages_remote() write/force parameters with gup_flags 2016-10-19 08:12:02 -07:00
i915_gem.c drm/i915: Remove two invalid warns 2016-10-26 09:04:56 +01:00
i915_gem.h
i915_gpu_error.c drm/i915: Include the kernel uptime in the error state 2016-10-25 13:22:43 +01:00
i915_guc_reg.h drm/i915/guc: general tidying up (loader) 2016-09-15 10:56:02 +01:00
i915_guc_submission.c drm/i915/guc: WA to address the Ringbuffer coherency issue 2016-10-25 21:00:29 +01:00
i915_ioc32.c
i915_irq.c drm/i915: Add stats for GuC log buffer flush interrupts 2016-10-25 09:34:23 +01:00
i915_memcpy.c drm/i915: Mark the static key for movntqda as static 2016-08-17 12:36:07 +01:00
i915_mm.c drm/i915: Use remap_io_mapping() to prefault all PTE in a single pass 2016-08-19 17:13:36 +01:00
i915_params.c drm/i915: Allow disabling error capture 2016-10-12 12:00:32 +01:00
i915_params.h drm/i915: Allow disabling error capture 2016-10-12 12:00:32 +01:00
i915_pci.c drm/i915: keep declarations in i915_drv.h 2016-09-22 14:53:29 +03:00
i915_pvinfo.h drm/i915: Use offsetof() to calculate the offset of members in PVINFO page 2016-06-17 19:44:25 +01:00
i915_reg.h drm/i915/audio: set proper N/M in modeset 2016-10-26 12:36:30 +03:00
i915_suspend.c drm/i915: Make IS_GEN macros only take dev_priv 2016-10-14 12:23:22 +01:00
i915_sw_fence.c drm/i915: Add a sw fence for collecting up dma fences 2016-09-09 14:22:55 +01:00
i915_sw_fence.h drm/i915: Add a sw fence for collecting up dma fences 2016-09-09 14:22:55 +01:00
i915_sysfs.c drm/i915: Allow disabling error capture 2016-10-12 12:00:32 +01:00
i915_trace_points.c
i915_trace.h drm/i915: Remove surplus drm_device parameter to i915_gem_evict_something() 2016-08-04 20:19:50 +01:00
i915_vgpu.c Merge tag 'drm-intel-next-2016-09-19' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-09-20 06:23:22 +10:00
i915_vgpu.h drm/i915: Fold vGPU active check into inner functions 2016-06-17 19:44:29 +01:00
intel_acpi.c
intel_atomic_plane.c drm: Add drm_rotation_90_or_270() 2016-10-21 18:21:33 +02:00
intel_atomic.c
intel_audio.c drm/i915/audio: set proper N/M in modeset 2016-10-26 12:36:30 +03:00
intel_bios.c drm/i915: Clean up DDI DDC/AUX CH sanitation 2016-10-21 15:43:40 +03:00
intel_bios.h
intel_breadcrumbs.c drm/i915: Allocate intel_engine_cs structure only for the enabled engines 2016-10-14 09:58:43 +01:00
intel_color.c drm/i915: Make IS_CHERRYVIEW only take dev_priv 2016-10-14 12:23:19 +01:00
intel_crt.c drm/i915: Make IS_GEN macros only take dev_priv 2016-10-14 12:23:22 +01:00
intel_csr.c drm/i915: Fix botched merge that downgrades CSR versions. 2016-08-22 16:08:32 +03:00
intel_ddi.c drm/i915: KBL - Recommended buffer translation programming for DisplayPort 2016-10-20 14:50:44 -07:00
intel_device_info.c drm/i915: Reduce trickery in DEV_INFO_FOR_EACH_FLAG 2016-10-05 15:24:54 +03:00
intel_display.c Merge remote-tracking branch 'airlied/drm-next' into drm-intel-next-queued 2016-10-25 08:57:53 +02:00
intel_dp_aux_backlight.c
intel_dp_link_training.c drm/i915/skl: drop workarounds for A0 and B0 revisions 2016-09-26 12:08:22 +03:00
intel_dp_mst.c Revert "drm/i915: start adding dp mst audio" 2016-09-29 11:02:41 +03:00
intel_dp.c drm/i915/lspcon: Add workaround for resuming in PCON mode 2016-10-26 12:41:01 +03:00
intel_dpio_phy.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_dpll_mgr.c drm/i915: Make IS_BROXTON only take dev_priv 2016-10-14 12:23:19 +01:00
intel_dpll_mgr.h drm/i915/dp: Add a standalone function to obtain shared dpll for HSW/BDW/SKL/BXT 2016-09-09 14:53:18 -07:00
intel_drv.h drm/i915/lspcon: Add workaround for resuming in PCON mode 2016-10-26 12:41:01 +03:00
intel_dsi_dcs_backlight.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_dsi_panel_vbt.c drm/i915/dsi: double check element parsing against size if present 2016-09-19 18:38:11 +03:00
intel_dsi_pll.c drm/i915: Make IS_BROXTON only take dev_priv 2016-10-14 12:23:19 +01:00
intel_dsi.c drm/i915: Make IS_CHERRYVIEW only take dev_priv 2016-10-14 12:23:19 +01:00
intel_dsi.h
intel_dvo.c drm/i915: Store port enum in intel_encoder 2016-09-21 09:32:00 -07:00
intel_engine_cs.c drm/i915: Do not use INTEL_INFO(dev_priv)->ring_mask inside WARNs 2016-10-14 12:23:19 +01:00
intel_fbc.c Merge remote-tracking branch 'airlied/drm-next' into drm-intel-next-queued 2016-10-25 08:57:53 +02:00
intel_fbdev.c drm/i915: pdev cleanup 2016-08-22 12:19:52 +01:00
intel_fifo_underrun.c drm/i915: Make IS_GEN macros only take dev_priv 2016-10-14 12:23:22 +01:00
intel_frontbuffer.c drm/i915: Use dev_priv consistently through the intel_frontbuffer interface 2016-08-04 20:20:03 +01:00
intel_frontbuffer.h drm/i915: Use dev_priv consistently through the intel_frontbuffer interface 2016-08-04 20:20:03 +01:00
intel_guc_fwif.h drm/i915: Increase GuC log buffer size to reduce flush interrupts 2016-10-25 09:34:23 +01:00
intel_guc_loader.c drm/i915: Support for GuC interrupts 2016-10-25 09:34:06 +01:00
intel_guc.h drm/i915: Debugfs support for GuC logging control 2016-10-25 09:34:23 +01:00
intel_gvt.c Documentation/gpu: Add section for Intel GVT-g host support 2016-10-20 17:18:39 +08:00
intel_gvt.h drm/i915/gvt: clean up intel_gvt.h as interface for i915 core 2016-10-20 17:18:30 +08:00
intel_hdmi.c drm/i915: Respect alternate_ddc_pin for all DDI ports 2016-10-21 15:43:40 +03:00
intel_hotplug.c drm/i915: Mark i915_hpd_poll_init_work as static 2016-08-17 12:36:15 +01:00
intel_i2c.c drm/i915: GMBUS don't need no forcewake 2016-10-17 14:26:42 +03:00
intel_lrc.c drm/i915: Allocate intel_engine_cs structure only for the enabled engines 2016-10-14 09:58:43 +01:00
intel_lrc.h drm/i915: Update reset path to fix incomplete requests 2016-09-09 14:23:05 +01:00
intel_lspcon.c drm/i915/lspcon: Add workaround for resuming in PCON mode 2016-10-26 12:41:01 +03:00
intel_lvds.c drm/i915: Make IS_GEN macros only take dev_priv 2016-10-14 12:23:22 +01:00
intel_mocs.c drm/i915: Rename struct intel_ringbuffer to struct intel_ring 2016-08-02 22:58:16 +01:00
intel_mocs.h drm/i915: rename 'ring' where it refers to an engine or engine_id 2016-07-21 09:59:41 +01:00
intel_modes.c drm: Remove superflous linux/fb.h includes 2016-08-12 10:41:39 +02:00
intel_opregion.c drm/i915: Ignore OpRegion panel type except on select machines 2016-09-14 11:25:05 +03:00
intel_overlay.c drm/i915: Allocate intel_engine_cs structure only for the enabled engines 2016-10-14 09:58:43 +01:00
intel_panel.c drm/i915/backlight: setup backlight pwm alternate increment on backlight enable 2016-10-10 16:05:52 +03:00
intel_pm.c Merge remote-tracking branch 'airlied/drm-next' into drm-intel-next-queued 2016-10-25 08:57:53 +02:00
intel_psr.c drm/i915: Make IS_CHERRYVIEW only take dev_priv 2016-10-14 12:23:19 +01:00
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c
intel_renderstate.h drm/i915: Remove duplicate golden render state init from execlists 2016-08-02 22:58:30 +01:00
intel_ringbuffer.c drm/i915: Add low level set of routines for programming PM IER/IIR/IMR register set 2016-10-25 09:34:06 +01:00
intel_ringbuffer.h drm/i915: Allocate intel_engine_cs structure only for the enabled engines 2016-10-14 09:58:43 +01:00
intel_runtime_pm.c drm/i915: Remove RPM sequence checking 2016-10-24 13:45:37 +01:00
intel_sdvo_regs.h
intel_sdvo.c drm/i915: Make INTEL_DEVID only take dev_priv 2016-10-14 12:23:19 +01:00
intel_sideband.c drm/i915: Convert wait_for(I915_READ(reg)) to intel_wait_for_register() 2016-06-30 15:42:33 +01:00
intel_sprite.c Merge tag 'drm-intel-next-2016-10-24' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-10-25 16:39:43 +10:00
intel_tv.c drm/i915: Make INTEL_DEVID only take dev_priv 2016-10-14 12:23:19 +01:00
intel_uncore.c drm/i915: Just clear the mmiodebug before a register access 2016-10-10 16:06:41 +03:00
intel_vbt_defs.h
Kconfig drm/i915: Add a relay backed debugfs interface for capturing GuC logs 2016-10-25 09:34:23 +01:00
Kconfig.debug drm/i915: Select DRM_VGEM for igt 2016-07-10 13:22:39 +01:00
Makefile drm/i915: Add lspcon support for I915 driver 2016-10-18 12:42:47 +03:00