linux_dsm_epyc7002/drivers/gpu/drm/i915
Sonika Jindal 237ed86c69 drm/i915: Check live status before reading edid
The Bspec is very clear that Live status must be checked about before
trying to read EDID over DDC channel. This patch makes sure that HDMI
EDID is read only when live status is up.

The live status doesn't seem to perform very consistent across various
platforms when tested with different monitors. The reason behind that is
some monitors are late to provide right voltage to set live_status up.
So, after getting the interrupt, for a small duration, live status reg
fluctuates, and then settles down showing the correct staus.

This is explained here in, in a rough way:
HPD line  ________________
			 |\ T1 = Monitor Hotplug causing IRQ
			 | \______________________________________
			 | |
                         | |
			 | |   T2 = Live status is stable
			 | |  _____________________________________
			 | | /|
Live status _____________|_|/ |
			 | |  |
			 | |  |
			 | |  |
			T0 T1  T2

(Between T1 and T2 Live status fluctuates or can be even low, depending on
 the monitor)

After several experiments, we have concluded that a max delay
of 30ms is enough to allow the live status to settle down with
most of the monitors. This total delay of 30ms has been split into
a resolution of 3 retries of 10ms each, for the better cases.

This delay is kept at 30ms, keeping in consideration that, HDCP compliance
expect the HPD handler to respond a plug out in 100ms, by disabling port.

v2: Adding checks for VLV/CHV as well. Reusing old ibx and g4x functions
to check digital port status. Adding a separate function to get bxt live
status (Daniel)
v3: Using intel_encoder->hpd_pin to check the live status (Siva)
Moving the live status read to intel_hdmi_probe and passing parameter
to read/not to read the edid. (me)
v4:
* Added live status check for all platforms using
intel_digital_port_connected.
* Rebased on top of Jani's DP cleanup series
* Some monitors take time in setting the live status. So retry for few
times if this is a connect HPD
v5: Removed extra "drm/i915" from commit message. Adding Shashank's sob
    which was missed.
v6: Drop the (!detect_edid && !live_status check) check because for DDI
ports which are enumerated as hdmi as well as DP, we don't have a
mechanism to differentiate between DP and hdmi inside the encoder's
hot_plug. This leads to call to the hdmi's hot_plug hook for DP as well
as hdmi which leads to issues during unplug because of the above check.
v7: Make intel_digital_port_connected global in this patch, some
reformatting of while loop, adding a print when live status is not
up. (Rodrigo)
v8: Rebase it on nightly which involved skipping the hot_plug hook for now
and letting the live_status check happen in detect until the hpd handling
part is finalized (Daniel)

Signed-off-by: Shashank Sharma <shashank.sharma@intel.com>
Signed-off-by: Sonika Jindal <sonika.jindal@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2015-09-23 10:18:45 +02: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: Fix cmdparser STORE/LOAD command descriptors 2015-09-04 10:43:09 +02:00
i915_debugfs.c drm/i915: Use the plane state in intel_crtc_info. 2015-09-10 17:24:42 +02:00
i915_dma.c drm/i915: Don't leak VBT mode data 2015-09-18 14:20:28 +03:00
i915_drv.c drm/i915: Reinitialize HPD after runtime D3 2015-09-02 16:57:03 +02:00
i915_drv.h drm/i915/bxt: Modified HAS_CSR, added support for BXT 2015-09-23 09:42:10 +02:00
i915_gem_batch_pool.c
i915_gem_batch_pool.h
i915_gem_context.c drm/i915: Always enable execlists on BDW for vgpu 2015-09-02 11:45:50 +02:00
i915_gem_debug.c
i915_gem_dmabuf.c
i915_gem_evict.c
i915_gem_execbuffer.c drm/i915: Split alloc from init for lrc 2015-09-14 11:42:34 +02:00
i915_gem_fence.c drm/i915/gtt: Allow >= 4GB offsets in X86_32 2015-08-14 18:16:30 +02:00
i915_gem_gtt.c drm/i915/gtt: Avoid calling kcalloc in a loop when allocating temp bitmaps 2015-09-04 10:09:56 +02:00
i915_gem_gtt.h drm/i915/gtt: Allow >= 4GB offsets in X86_32 2015-08-14 18:16:30 +02:00
i915_gem_render_state.c drm/i915: Add provision to extend Golden context batch 2015-07-21 09:30:57 +02:00
i915_gem_render_state.h drm/i915: Add provision to extend Golden context batch 2015-07-21 09:30:57 +02:00
i915_gem_shrinker.c
i915_gem_stolen.c drm/i915: Set stolen reserved to 0 for pre-g4x platforms 2015-09-14 15:24:18 +02:00
i915_gem_tiling.c Merge tag 'drm-intel-fixes-2015-08-14' into drm-intel-next-fixes 2015-08-14 18:11:30 +02:00
i915_gem_userptr.c drm/i915/userptr: Kill user_size limit check 2015-08-14 18:16:27 +02:00
i915_gem.c drm/i915: fix kernel-doc warnings in i915_gem.c 2015-09-17 10:30:59 +03:00
i915_gpu_error.c drm/i915: add yesno utility function 2015-09-02 11:16:44 +02:00
i915_guc_reg.h drm/i915: GuC-specific firmware loader 2015-08-14 18:16:39 +02:00
i915_guc_submission.c drm/i915: Notify GuC rc6 state 2015-09-02 10:39:01 +02:00
i915_ioc32.c Merge tag 'drm-intel-fixes-2015-07-15' into drm-intel-next-queued 2015-07-15 16:36:50 +02:00
i915_irq.c drm/i915: Future proof interrupt handler. 2015-09-04 10:10:05 +02:00
i915_params.c drm/i915: Mark debug mod options as _unsafe 2015-09-22 17:10:53 +02:00
i915_reg.h drm/i915/bxt: DSI prepare changes for BXT 2015-09-23 10:10:50 +02:00
i915_suspend.c
i915_sysfs.c
i915_trace_points.c
i915_trace.h drm/i915: cleanup pipe_update trace functions with new crtc debug info v3 2015-09-18 14:15:19 +03:00
i915_vgpu.c
i915_vgpu.h drm/i915: Update PV INFO page definition for Intel GVT-g 2015-09-02 11:46:12 +02:00
intel_acpi.c drm/i915: Spell vga_switcheroo consistently 2015-09-22 17:10:52 +02:00
intel_atomic_plane.c drm/i915: Do not handle a null plane state. 2015-09-10 18:27:17 +02:00
intel_atomic.c drm/i915: Make updating pipe without modeset atomic. 2015-09-14 10:03:13 +02:00
intel_audio.c Merge tag 'drm-intel-fixes-2015-07-15' into drm-intel-next-queued 2015-07-15 16:36:50 +02:00
intel_bios.c drm/i915: access the PP_ON_DELAYS/PP_OFF_DELAYS regs only pre GEN5 2015-09-04 10:18:51 +02:00
intel_bios.h drm/i915: access the PP_ON_DELAYS/PP_OFF_DELAYS regs only pre GEN5 2015-09-04 10:18:51 +02:00
intel_crt.c drm/i915: Get rid of dpms handling. 2015-08-14 17:50:33 +02:00
intel_csr.c drm/i915/bxt: Stepping info added for bxt. 2015-09-23 09:42:10 +02:00
intel_ddi.c drm/i915/bxt: Fix wrongly placed ')' in I915_READ() 2015-09-18 14:20:47 +03:00
intel_display.c drm/i915: skip modeset if compatible for everyone. 2015-09-14 10:06:09 +02:00
intel_dp_mst.c Merge tag 'drm-intel-next-fixes-2015-09-02' into drm-intel-next-queued 2015-09-02 14:33:42 +02:00
intel_dp.c drm/i915: Check live status before reading edid 2015-09-23 10:18:45 +02:00
intel_drv.h drm/i915: Check live status before reading edid 2015-09-23 10:18:45 +02:00
intel_dsi_panel_vbt.c
intel_dsi_pll.c drm/i915/bxt: Disable DSI PLL for BXT 2015-09-23 10:10:21 +02:00
intel_dsi.c drm/i915/bxt: DSI prepare changes for BXT 2015-09-23 10:10:50 +02:00
intel_dsi.h drm/i915/bxt: Disable DSI PLL for BXT 2015-09-23 10:10:21 +02:00
intel_dvo.c drm/i915: DVO pixel clock check 2015-08-26 10:29:20 +02:00
intel_fbc.c drm/i915: fix FBC frontbuffer tracking flushing code 2015-08-05 09:59:44 +02:00
intel_fbdev.c drm/i915: Always try to inherit the initial fb. 2015-09-14 09:58:24 +02:00
intel_fifo_underrun.c
intel_frontbuffer.c drm/i915: fix FBC frontbuffer tracking flushing code 2015-08-05 09:59:44 +02:00
intel_guc_fwif.h drm/i915/guc: Support GuC version 4.3 2015-09-02 09:54:56 +02:00
intel_guc_loader.c drm/i915/gen9: Add WaDisableMinuteIaClockGating 2015-09-14 11:12:28 +02:00
intel_guc.h drm/i915: Integrate GuC-based command submission 2015-08-14 18:16:44 +02:00
intel_hdmi.c drm/i915: Check live status before reading edid 2015-09-23 10:18:45 +02:00
intel_hotplug.c drm/i915/skl: enable DDI-E hotplug 2015-08-26 10:24:25 +03:00
intel_i2c.c
intel_lrc.c drm/i915: fix handling gen8_emit_flush_coherentl3_wa result 2015-09-22 17:10:52 +02:00
intel_lrc.h drm/i915: Split alloc from init for lrc 2015-09-14 11:42:34 +02:00
intel_lvds.c drm/i915: access the PP_ON_DELAYS/PP_OFF_DELAYS regs only pre GEN5 2015-09-04 10:18:51 +02:00
intel_mocs.c
intel_mocs.h
intel_modes.c
intel_opregion.c Merge tag 'drm-intel-fixes-2015-07-15' into drm-intel-next-queued 2015-07-15 16:36:50 +02:00
intel_overlay.c
intel_panel.c drm/i915: Spell vga_switcheroo consistently 2015-09-22 17:10:52 +02:00
intel_pm.c drm/i915/bxt: WaGsvDisableTurbo 2015-09-23 09:45:58 +02:00
intel_psr.c drm/i915: VLV/CHV PSR: Increase wait delay time before active PSR. 2015-08-05 10:07:44 +02:00
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c
intel_renderstate.h
intel_ringbuffer.c drm/i915/gen9: WA ST Unit Power Optimization Disable 2015-09-14 16:59:39 +02:00
intel_ringbuffer.h drm/i915: Refactor common ringbuffer allocation code 2015-09-04 10:17:00 +02:00
intel_runtime_pm.c drm/i915: make CSR firmware messages less verbose 2015-09-14 11:12:29 +02:00
intel_sdvo_regs.h
intel_sdvo.c drm/i915: Make some string arrays const 2015-08-26 11:19:36 +02:00
intel_sideband.c
intel_sprite.c drm/i915: cleanup pipe_update trace functions with new crtc debug info v3 2015-09-18 14:15:19 +03:00
intel_tv.c drm/i915: Use ARRAY_SIZE() instead of hand rolling it 2015-08-26 11:19:30 +02:00
intel_uncore.c drm/i915: Increase maximum polling time to 50ms for forcewake request/clear ack 2015-09-23 10:04:06 +02:00
Kconfig drm/i915: Use CONFIG_DRM_FBDEV_EMULATION 2015-08-11 14:00:29 +02:00
Makefile Merge tag 'drm-intel-next-fixes-2015-09-02' into drm-intel-next-queued 2015-09-02 14:33:42 +02:00