linux/drivers/gpu/drm/i915
Hans de Goede ee622fe757 drm/i915: Fix DSI panels with v1 MIPI sequences without a DEASSERT sequence v3
So far models of the Dell Venue 8 Pro, with a panel with MIPI panel
index = 3, one of which has been kindly provided to me by Jan Brummer,
where not working with the i915 driver, giving a black screen on the
first modeset.

The problem with at least these Dells is that their VBT defines a MIPI
ASSERT sequence, but not a DEASSERT sequence. Instead they DEASSERT the
reset in their INIT_OTP sequence, but the deassert must be done before
calling intel_dsi_device_ready(), so that is too late.

Simply doing the INIT_OTP sequence earlier is not enough to fix this,
because the INIT_OTP sequence also sends various MIPI packets to the
panel, which can only happen after calling intel_dsi_device_ready().

This commit fixes this by splitting the INIT_OTP sequence into everything
before the first DSI packet and everything else, including the first DSI
packet. The first part (everything before the first DSI packet) is then
used as deassert sequence.

Changed in v2:
-Split the init OTP sequence into a deassert reset and the actual init
 OTP sequence, instead of calling it earlier and then having the first
 mipi_exec_send_packet() call call intel_dsi_device_ready().

Changes in v3:
-Move the whole shebang to intel_bios.c

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=82880
References: https://bugs.freedesktop.org/show_bug.cgi?id=101205
Cc: Jan-Michael Brummer <jan.brummer@tabos.org>
Reported-by: Jan-Michael Brummer <jan.brummer@tabos.org>
Tested-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Acked-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180214082151.25015-3-hdegoede@redhat.com
(cherry picked from commit fb38e7ade9)
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2018-02-14 11:43:31 -08:00
..
gvt drm/i915/gvt: fix one typo of render_mmio trace 2018-02-14 10:35:00 +08:00
selftests drm/i915/selftests: Fix up igt_reset_engine 2017-12-18 21:54:59 +00:00
dvo_ch7xxx.c drm/i915/dvo: fix debug logging on unknown DID 2017-06-01 15:53:03 +03:00
dvo_ch7017.c drm/i915/lvds: Remove magic from PLL programming 2017-05-10 13:47:55 +03:00
dvo_ivch.c
dvo_ns2501.c
dvo_sil164.c
dvo_tfp410.c
dvo.h
i915_cmd_parser.c drm/i915/cmdparser: Do not check past the cmd length. 2018-02-06 11:41:40 -08:00
i915_debugfs.c drm/i915: Add pretty printer for runtime part of intel_device_info 2017-12-22 09:19:49 +00:00
i915_drv.c drm/i915: Add intel_bios_cleanup() function 2018-02-14 11:41:47 -08:00
i915_drv.h drm/i915: Fix DSI panels with v1 MIPI sequences without a DEASSERT sequence v3 2018-02-14 11:43:31 -08:00
i915_gem_batch_pool.c drm/i915: Reinstate reservation_object zapping for batch_pool objects 2017-06-14 14:06:22 +01:00
i915_gem_batch_pool.h
i915_gem_clflush.c drm/i915: Allow fence allocations to fail 2017-12-13 13:17:44 +00:00
i915_gem_clflush.h drm/i915: Force CPU synchronisation even if userspace requests ASYNC 2017-07-27 22:07:24 +02:00
i915_gem_context.c drm/i915: Avoid truncation before clamping userspace's priority value 2018-02-12 23:34:59 -08:00
i915_gem_context.h drm/i915: Record the default hw state after reset upon load 2017-11-10 17:23:10 +00:00
i915_gem_dmabuf.c drm/i915: s/sg_mask/sg_page_sizes/ 2017-10-09 17:07:29 +01:00
i915_gem_evict.c Linux 4.14-rc7 2017-11-02 12:40:41 +10:00
i915_gem_execbuffer.c drm/i915: make mappable struct resource centric 2017-12-12 12:30:21 +02:00
i915_gem_fence_reg.c drm/i915: Track user GTT faulting per-vma 2017-10-09 17:07:29 +01:00
i915_gem_fence_reg.h
i915_gem_gtt.c drm/i915/ppgtt: Pin page directories before allocation 2018-02-01 07:33:04 -08:00
i915_gem_gtt.h drm/i915: prefer resource_size_t for everything stolen 2017-12-12 12:30:22 +02:00
i915_gem_internal.c drm/i915: Allow internal page allocations to fail 2017-12-15 11:35:43 +00:00
i915_gem_object.c drm/i915: Split obj->cache_coherent to track r/w 2017-08-15 15:46:57 +01:00
i915_gem_object.h drm/i915/gvt: Dmabuf support for GVT-g 2017-12-04 11:24:33 +08:00
i915_gem_render_state.c drm/i915: Pull the unconditional GPU cache invalidation into request construction 2017-11-20 15:56:16 +00:00
i915_gem_render_state.h drm/i915: Stop caching the "golden" renderstate 2017-11-10 17:23:22 +00:00
i915_gem_request.c drm/i915: Always run hangcheck while the GPU is busy 2018-02-01 07:33:02 -08:00
i915_gem_request.h drm/i915: Allow fence allocations to fail 2017-12-13 13:17:44 +00:00
i915_gem_shrinker.c drm/i915: Only attempt to scan the requested number of shrinker slabs 2018-02-01 07:32:41 -08:00
i915_gem_stolen.c drm/i915: prefer resource_size_t for everything stolen 2017-12-12 12:30:22 +02:00
i915_gem_tiling.c drm/i915: Refactor common list iteration over GGTT vma 2017-12-07 23:26:55 +00:00
i915_gem_timeline.c drm/i915: properly init lockdep class 2017-12-14 20:10:01 +02:00
i915_gem_timeline.h drm/i915: Rename i915_gem_timelines_mark_idle 2017-11-27 16:37:15 +00:00
i915_gem_userptr.c previous part 2 tag + ttm regression fix, i915,vc4,core,uapi fixes 2017-11-28 10:01:15 -08:00
i915_gem.c drm/i915: Always run hangcheck while the GPU is busy 2018-02-01 07:33:02 -08:00
i915_gem.h drm/i915: Print the condition causing GEM_BUG_ON 2017-11-16 15:35:47 +02:00
i915_gemfs.c drm/i915: Disable THP until we have a GPU read BW W/A 2017-11-30 10:11:49 +02:00
i915_gemfs.h drm/i915: introduce simple gemfs 2017-10-07 10:11:41 +01:00
i915_gpu_error.c drm/i915: Show if we consider the engine is idle in the GPU error state 2017-12-19 21:55:13 +00:00
i915_ioc32.c
i915_irq.c drm/i915/guc: Introduce USES_GUC_xxx helper macros 2017-12-06 14:41:49 +00:00
i915_memcpy.c drm/i915: Do not enable movntdqa optimization in hypervisor guest 2017-12-22 11:12:15 +00:00
i915_mm.c
i915_oa_bdw.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_bdw.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_bxt.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_bxt.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_cflgt2.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_cflgt2.h drm/i915/perf: add support for Coffeelake GT2 2017-09-18 19:46:36 +01:00
i915_oa_cflgt3.c drm/i915/perf: Fix compiler warning for string truncation 2018-02-12 23:34:50 -08:00
i915_oa_cflgt3.h drm/i915/perf: add support for Coffeelake GT3 2017-11-13 15:59:03 +00:00
i915_oa_chv.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_chv.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_cnl.c drm/i915/perf: Fix compiler warning for string truncation 2018-02-12 23:34:55 -08:00
i915_oa_cnl.h drm/i915/perf: enable perf support on CNL 2017-11-13 15:59:24 +00:00
i915_oa_glk.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_glk.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_hsw.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_hsw.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_kblgt2.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_kblgt2.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_kblgt3.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_kblgt3.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_sklgt2.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_sklgt2.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_sklgt3.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_sklgt3.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_sklgt4.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_sklgt4.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_params.c drm/i915: Add pretty printer for modparams 2017-12-19 15:07:08 +00:00
i915_params.h drm/i915: Add pretty printer for modparams 2017-12-19 15:07:08 +00:00
i915_pci.c Revert "drm/i915: mark all device info struct with __initconst" 2018-02-01 07:32:58 -08:00
i915_perf.c vfs: do bulk POLL* -> EPOLL* replacement 2018-02-11 14:34:03 -08:00
i915_pmu.c drm/i915/pmu: Fix building without CONFIG_PM 2018-02-13 16:56:06 -08:00
i915_pmu.h drm/i915/pmu: Fix sleep under atomic in RC6 readout 2018-02-13 16:56:03 -08:00
i915_pvinfo.h drm/i915: enable to read CSB and CSB write pointer from HWSP in GVT-g VM 2017-10-16 13:56:29 +03:00
i915_reg.h drm/i915: Stop getting the fault address from RING_FAULT_REG 2018-02-01 07:31:38 -08:00
i915_selftest.h drm/i915/selftests: Reduce the volume of the timeout message 2017-11-10 11:31:58 +00:00
i915_suspend.c drm/i915: Move i915_gem_restore_fences to i915_gem_resume 2017-09-29 12:30:17 +01:00
i915_sw_fence.c drm/i915/fence: Use rcu to defer freeing of irq_work 2017-12-14 10:58:59 +02:00
i915_sw_fence.h main drm pull for v4.13 2017-07-09 18:48:37 -07:00
i915_syncmap.c drm/i915: Squash repeated awaits on the same fence 2017-05-03 11:08:48 +01:00
i915_syncmap.h drm/i915: Squash repeated awaits on the same fence 2017-05-03 11:08:48 +01:00
i915_sysfs.c drm/graphics pull request for v4.16-rc1 2018-02-01 17:48:47 -08:00
i915_trace_points.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
i915_trace.h drm/i915/trace: add hw_id to gem requests trace points 2017-12-18 16:10:32 +00:00
i915_utils.h drm/i915: Move some utility functions to i915_util.h 2017-12-22 09:13:47 +00:00
i915_vgpu.c drm/i915: Enable guest i915 full ppgtt functionality 2017-08-15 10:12:48 +08:00
i915_vgpu.h drm/i915: enable to read CSB and CSB write pointer from HWSP in GVT-g VM 2017-10-16 13:56:29 +03:00
i915_vma.c drm/i915: make mappable struct resource centric 2017-12-12 12:30:21 +02:00
i915_vma.h drm/i915: Refactor common list iteration over GGTT vma 2017-12-07 23:26:55 +00:00
intel_acpi.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
intel_atomic_plane.c drm/i915: Pass proper old/new states to intel_plane_atomic_check_with_state() 2017-09-01 16:48:24 +03:00
intel_atomic.c drm/i915/cnl: Fix Cannonlake scaler mode programing. 2017-06-12 09:45:55 -07:00
intel_audio.c drm/i915: Check for fused or unused pipes 2018-02-01 07:32:49 -08:00
intel_bios.c drm/i915: Fix DSI panels with v1 MIPI sequences without a DEASSERT sequence v3 2018-02-14 11:43:31 -08:00
intel_bios.h
intel_breadcrumbs.c drm/i915/breadcrumbs: Ignore unsubmitted signalers 2018-02-13 16:55:45 -08:00
intel_cdclk.c drm/i915/vlv: Add cdclk workaround for DSI 2018-02-14 11:39:44 -08:00
intel_color.c drm/i915: Pass crtc_state to ips toggle functions, v2 2017-11-17 12:14:25 +01:00
intel_crt.c drm/i915: Eliminate crtc->config usage from CRT code 2017-11-09 20:05:18 +02:00
intel_csr.c drm/i915/skl: DMC firmware for skylake v1.27 2017-12-05 15:57:08 +02:00
intel_ddi.c drm/i915: Protect DDI port to DPLL map from theoretical race. 2017-12-19 14:59:53 +02:00
intel_device_info.c drm/i915: Add pretty printer for runtime part of intel_device_info 2017-12-22 09:19:49 +00:00
intel_device_info.h drm/i915: Add pretty printer for runtime part of intel_device_info 2017-12-22 09:19:49 +00:00
intel_display.c drm/i915: Fix using BIT_ULL() vs. BIT() for power domain masks 2018-02-01 07:31:31 -08:00
intel_display.h drm/i915: Move display related definitions to dedicated header 2017-12-22 09:18:24 +00:00
intel_dp_aux_backlight.c drm/i915: Rename global i915 to i915_modparams 2017-09-22 14:50:36 +03:00
intel_dp_link_training.c drm/i915/edp: Do not do link training fallback or prune modes on EDP 2018-02-01 07:32:54 -08:00
intel_dp_mst.c drm/i915: Nuke intel_digital_port->port 2017-11-09 20:06:14 +02:00
intel_dp.c drm-intel-next-2017-12-01: 2017-12-08 08:41:22 +10:00
intel_dpio_phy.c drm/i915: Nuke intel_digital_port->port 2017-11-09 20:06:14 +02:00
intel_dpll_mgr.c drm/i915/cnl: Simplify dco_fraction calculation. 2017-11-16 09:45:39 -08:00
intel_dpll_mgr.h drm/i915/cnl: Initialize PLLs 2017-06-12 09:42:18 -07:00
intel_drv.h drm/i915: Add .get_hw_state() method for planes 2018-01-15 16:44:51 +02:00
intel_dsi_dcs_backlight.c drm/i915: Initialize 'data' in intel_dsi_dcs_backlight.c 2017-08-16 18:02:00 +03:00
intel_dsi_pll.c
intel_dsi_vbt.c drm/i915/bxt: use NULL for GPIO connection ID 2017-08-21 11:52:29 +03:00
intel_dsi.c drm-intel-next-2017-12-01: 2017-12-08 08:41:22 +10:00
intel_dsi.h
intel_dvo.c drm/i915: Populate output_types from .get_config() 2017-10-30 19:53:22 +02:00
intel_engine_cs.c drm/i915: Lock out execlist tasklet while peeking inside for busy-stats 2018-02-13 16:55:55 -08:00
intel_fbc.c drm/i915: make dsm struct resource centric 2017-12-12 12:30:19 +02:00
intel_fbdev.c drm/i915: give stolen_usable_size a more suitable home 2017-12-12 12:30:22 +02:00
intel_fifo_underrun.c drm/i915: Don't rmw PIPESTAT enable bits 2017-09-25 16:54:09 +03:00
intel_frontbuffer.c
intel_frontbuffer.h
intel_guc_ct.c drm/i915/guc: Assert ctch->vma is allocated 2017-11-06 13:57:37 +00:00
intel_guc_ct.h drm/i915/guc: Introduce buffer based cmd transport 2017-05-26 13:26:53 +01:00
intel_guc_fw.c drm/i915/glk: Disable Guc and HuC on GLK 2018-02-01 07:31:12 -08:00
intel_guc_fw.h drm/i915/guc: Move firmware selection to init_early 2017-12-06 14:41:47 +00:00
intel_guc_fwif.h drm/i915/guc: Add support for reset engine using GuC commands 2017-11-02 08:42:11 +00:00
intel_guc_log.c drm/i915/guc: Move GuC workqueue allocations outside of the mutex 2017-12-14 08:06:54 +00:00
intel_guc_log.h drm/i915: Unify uC variable types to avoid flooding checkpatch.pl 2017-10-06 14:09:40 +03:00
intel_guc_reg.h drm/i915/guc: Use consistent name for scratch register count 2017-11-24 20:47:39 +00:00
intel_guc_submission.c drm/i915/guc: Extract doorbell verification into a function 2017-12-14 08:07:00 +00:00
intel_guc_submission.h drm/i915/guc: Move GuC workqueue allocations outside of the mutex 2017-12-14 08:06:54 +00:00
intel_guc.c drm/i915/guc: Move GuC workqueue allocations outside of the mutex 2017-12-14 08:06:54 +00:00
intel_guc.h drm/i915/guc: Move GuC workqueue allocations outside of the mutex 2017-12-14 08:06:54 +00:00
intel_gvt.c drm/i915/guc: Introduce USES_GUC_xxx helper macros 2017-12-06 14:41:49 +00:00
intel_gvt.h drm/i915/gvt: Add gvt options sanitize function 2017-05-30 15:59:47 +03:00
intel_hangcheck.c drm/i915: Always run hangcheck while the GPU is busy 2018-02-01 07:33:02 -08:00
intel_hdmi.c drm/i915: Try EDID bitbanging on HDMI after failed read 2018-02-01 07:31:27 -08:00
intel_hotplug.c drm/i915: Introduce intel_hpd_pin function. 2017-08-11 11:53:47 -07:00
intel_huc.c drm/i915/glk: Disable Guc and HuC on GLK 2018-02-01 07:31:12 -08:00
intel_huc.h drm/i915/huc: Load HuC only if requested 2017-12-06 14:41:54 +00:00
intel_i2c.c drm/i915: Disable GMBUS clock gating around GMBUS transfers on gen9+ 2017-12-22 14:23:14 +02:00
intel_lpe_audio.c drm/i915/lpe: Remove double-encapsulation of info string 2017-12-19 14:59:40 +02:00
intel_lrc.c Linux 4.15-rc8 2018-01-18 09:32:15 +10:00
intel_lrc.h drm/i915: Remove i915.enable_execlists module parameter 2017-11-20 21:53:59 +00:00
intel_lspcon.c drm/i915: Add retries for LSPCON detection 2017-10-13 12:15:10 +03:00
intel_lvds.c drm/i915: Populate output_types from .get_config() 2017-10-30 19:53:22 +02:00
intel_mocs.c drm/i915/cnl: Cannonlake has same MOCS table than Skylake. 2017-06-07 07:29:51 -07:00
intel_mocs.h
intel_modes.c Merge airlied/drm-next into drm-misc-next 2017-11-21 14:17:56 +01:00
intel_opregion.c drm/i915: Move opregion definitions to dedicated intel_opregion.h 2017-12-22 09:19:48 +00:00
intel_opregion.h drm/i915: Move opregion definitions to dedicated intel_opregion.h 2017-12-22 09:19:48 +00:00
intel_overlay.c drm/i915: make mappable struct resource centric 2017-12-12 12:30:21 +02:00
intel_panel.c drm/i915: hide unused intel_panel_set_backlight function 2017-11-27 17:27:15 +01:00
intel_pipe_crc.c drm/i915: Make ips_enabled a property depending on whether IPS is enabled, v3. 2017-11-30 16:49:42 +01:00
intel_pm.c drm/i915/bxt, glk: Increase PCODE timeouts during CDCLK freq changing 2018-02-06 11:41:39 -08:00
intel_psr.c drm/i915/psr: Fix register name mess up. 2018-01-02 13:44:56 +02:00
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c drm/i915/gen9: Send all components in VF state 2017-08-14 12:15:49 +03:00
intel_renderstate.h
intel_ringbuffer.c drm/i915: Move mi_set_context() into the legacy ringbuffer submission 2017-11-23 16:12:06 +00:00
intel_ringbuffer.h drm/i915/pmu: Fix PMU enable vs execlists tasklet race 2018-02-13 16:55:59 -08:00
intel_runtime_pm.c Linux 4.15-rc8 2018-01-18 09:32:15 +10:00
intel_sdvo_regs.h
intel_sdvo.c drm/i915: Eliminate some encoder->crtc usage from SDVO code 2017-11-09 20:04:47 +02:00
intel_sideband.c drm/i915: Move rps.hw_lock to dev_priv and s/hw_lock/pcu_lock 2017-10-11 08:56:56 +01:00
intel_sprite.c drm/i915: Add .get_hw_state() method for planes 2018-01-15 16:44:51 +02:00
intel_tv.c drm/i915: Eliminate some encoder->crtc usage from TV code 2017-11-09 20:04:56 +02:00
intel_uc_fw.c drm/i915/uc: Don't use -EIO to report missing firmware 2017-12-06 14:41:52 +00:00
intel_uc_fw.h drm/i915/guc: Move firmware selection to init_early 2017-12-06 14:41:47 +00:00
intel_uc.c drm/i915/guc: Add uc_fini_wq in gem_init unwind path 2018-02-01 07:31:33 -08:00
intel_uc.h drm/i915/guc: Extract guc_init from guc_init_hw 2017-12-14 08:06:56 +00:00
intel_uncore.c drm/i915: Remove unsafe i915.enable_rc6 2017-12-01 15:20:02 +00:00
intel_uncore.h drm/i915: Re-register PMIC bus access notifier on runtime resume 2017-11-21 11:39:31 +02:00
intel_vbt_defs.h drm/i915/bios: add DP max link rate to VBT child device struct 2018-02-07 12:32:14 -08:00
Kconfig drm/i915/fence: Avoid del_timer_sync() from inside a timer 2017-09-19 13:06:21 +01:00
Kconfig.debug drm/i915: Avoid context dereference inside execlists_submission_tasklet 2017-12-19 23:04:45 +00:00
Makefile drm-intel-next-2017-12-01: 2017-12-08 08:41:22 +10:00