linux/drivers/gpu/drm/i915
Ville Syrjälä c2b6337446 drm/i915: Enable DPLL VGA mode before P1/P2 divider write
Apparently writing the DPLL register P1/P2 divider fields won't trigger
an actual change in the DPLL output unless VGA mode is enabled for
prior to the register write that changes the P1/P2 dividers. The write
with the new P1/P2 divider can itself disable VGA mode again without
problems.

I tested the behaviour on my 946GZ, and when manually frobbing the
register with the display on, the behaviour is very clear. However I
can't explain why this machine actually works. The P1/P2 divider
changes caused by normal modesets do seem to make it through to the
hardware somehow since I get a stable picture on the monitor with
any resolution. Maybe it's the "three times for luck" stuff that
somehow masks the problem, or something.

But apparently there are machines (eg. Nick Bowler's G45) where that
isn't the case and we fail to get the correct clock from the DPLL.

Things used to work because we enabled VGA mode for disabled DPLLs,
so when re-enabling the DPLL VGA mode was enabled just prior to the
first register write, and hence the P1/P2 change went through without
a hitch. That got changed in

b8afb9113c drm/i915: Keep GMCH DPLL VGA mode always disabled

in the name of consistency. In order to keep the consistency part,
leave VGA mode disabled for disabled DPLLs, but turn it on just prior
to updating the P1/P2 dividers to make sure the hardware picks up
on the new values.

Cc: Nick Bowler <nbowler@draconx.ca>
Reported-by: Nick Bowler <nbowler@draconx.ca>
Tested-by: Nick Bowler <nbowler@draconx.ca>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
2015-10-13 17:03:38 +03:00
..
dvo_ch7xxx.c
dvo_ch7017.c
dvo_ivch.c Fix resume from suspend on IBM X30 2015-06-15 12:21:01 +02:00
dvo_ns2501.c drm/i915: Enable dithering on NatSemi DVO2501 for Fujitsu S6010 2015-04-23 21:31:58 +02:00
dvo_sil164.c
dvo_tfp410.c
dvo.h
i915_cmd_parser.c drm/i915: Fix command parser table validator 2015-07-29 10:31:04 +02:00
i915_debugfs.c drm/i915/skl: Adding DDI_E power well domain 2015-08-31 18:40:48 +03:00
i915_dma.c drm/i915: Fake AGP is dead 2015-07-28 13:30:00 +02:00
i915_drv.c Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2015-09-04 15:49:32 -07:00
i915_drv.h Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux 2015-09-11 09:35:56 -07:00
i915_gem_batch_pool.c drm/i915: Split batch pool into size buckets 2015-04-10 08:56:05 +02:00
i915_gem_batch_pool.h drm/i915: Split batch pool into size buckets 2015-04-10 08:56:05 +02:00
i915_gem_context.c drm/i915: Remove the failed context from the fpriv->context_idr 2015-08-14 17:50:41 +02:00
i915_gem_debug.c drm/i915: Implement inter-engine read-read optimisations 2015-05-21 15:11:42 +02:00
i915_gem_dmabuf.c drm/i915: remove unused has_dma_mapping flag 2015-07-13 22:42:41 +02:00
i915_gem_evict.c
i915_gem_execbuffer.c drm/i915: Always mark the object as dirty when used by the GPU 2015-09-02 16:21:53 +03:00
i915_gem_fence.c drm/i915: kerneldoc for tiling IOCTL and swizzle functions 2015-07-27 10:26:30 +02:00
i915_gem_gtt.c Linux 4.2-rc7 2015-08-17 14:13:53 +10:00
i915_gem_gtt.h drm/i915/gtt: Move scratch_pd and scratch_pt into vm struct 2015-06-26 11:06: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 drm/i915: Fix kerneldoc for i915_gem_shrink_all 2015-10-13 16:21:03 +03:00
i915_gem_stolen.c drm/i915: Fix build warning on 32-bit 2015-08-26 10:15:36 +03: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: avoid leaking DMA mappings 2015-07-13 22:42:40 +02:00
i915_gem.c Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2015-09-04 15:49:32 -07:00
i915_gpu_error.c drm/i915: Report IOMMU enabled status for GPU hangs 2015-08-14 17:50:41 +02:00
i915_guc_reg.h drm/i915: Add GuC-related header files 2015-07-21 08:38:00 +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: workaround bad DSL readout v3 2015-09-23 10:13:50 +03:00
i915_params.c drm/i915: Add GuC-related module parameters 2015-07-21 08:37:35 +02:00
i915_reg.h drm/i915/skl: enable DDI-E hotplug 2015-08-26 10:24:25 +03:00
i915_suspend.c drm/i915: use dev_priv for the FBC functions 2015-07-08 11:39:45 +02:00
i915_sysfs.c drm/i915/vlv: fix RC6 residency time calculation 2015-06-15 11:56:37 +02:00
i915_trace_points.c
i915_trace.h Merge tag 'drm-intel-fixes-2015-07-15' into drm-intel-next-queued 2015-07-15 16:36:50 +02:00
i915_vgpu.c
i915_vgpu.h
intel_acpi.c
intel_atomic_plane.c drm/i915: Remove transitional references from intel_plane_atomic_check. 2015-06-22 14:28:29 +02:00
intel_atomic.c drm/i915: Commit planes on each crtc separately. 2015-08-13 12:09:18 +03:00
intel_audio.c drm/i915: fix kernel-doc warnings in intel_audio.c 2015-09-21 10:03:53 +03:00
intel_bios.c drm/i915/bios: handle MIPI Sequence Block v3+ gracefully 2015-09-23 16:59:37 +03:00
intel_bios.h drm/i915: eDP can be present on DDI-E 2015-08-31 18:36:38 +03:00
intel_crt.c drm/i915: Get rid of dpms handling. 2015-08-14 17:50:33 +02:00
intel_csr.c drm/i915: Fix CSR MMIO address check 2015-09-10 10:32:48 +03:00
intel_ddi.c drm/i915: Don't use link_bw for PLL setup 2015-09-01 12:31:44 +03:00
intel_display.c drm/i915: Enable DPLL VGA mode before P1/P2 divider write 2015-10-13 17:03:38 +03:00
intel_dp_mst.c drm/dp/mst: split connector registration into two parts (v2) 2015-10-02 15:34:41 +10:00
intel_dp.c i915: Set ddi_pll_sel in DP MST path 2015-09-01 12:42:27 +03:00
intel_drv.h i915: Set ddi_pll_sel in DP MST path 2015-09-01 12:42:27 +03:00
intel_dsi_panel_vbt.c drm/i915: s/dpio_lock/sb_lock/ 2015-05-28 11:13:51 +02:00
intel_dsi_pll.c drm/i915: Changes required to enable DSI Video Mode on CHT 2015-07-03 07:39:02 +02:00
intel_dsi.c drm/i915: Allow DSI dual link to be configured on any pipe 2015-09-10 16:23:42 +03:00
intel_dsi.h drm/i915: Use the CRC gpio for panel enable/disable 2015-07-21 09:22:43 +02:00
intel_dvo.c drm/i915: Get rid of dpms handling. 2015-08-14 17:50:33 +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: Use new drm_fb_helper functions 2015-08-06 14:13:05 +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: Add GuC-related header files 2015-07-21 08:38:00 +02:00
intel_hdmi.c drm/i915: Enable HDMI on DDI-E 2015-08-31 18:27:02 +03:00
intel_hotplug.c drm/i915: Call non-locking version of drm_kms_helper_poll_enable(), v2 2015-09-30 16:32:27 +03:00
intel_i2c.c Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2015-06-26 13:18:51 -07:00
intel_lrc.c drm/i915: Flush pipecontrol post-sync writes 2015-10-13 16:54:19 +03:00
intel_lrc.h drm/i915: Consider HW CSB write pointer before resetting the sw read pointer 2015-09-28 17:23:19 +03:00
intel_lvds.c drm/i915: Get rid of dpms handling. 2015-08-14 17:50:33 +02:00
intel_mocs.c drm/i915: Added Programming of the MOCS 2015-07-14 17:13:14 +02:00
intel_mocs.h drm/i915: Added Programming of the MOCS 2015-07-14 17:13:14 +02:00
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 drm/i915: Update intel_ring_begin() to take a request structure 2015-06-23 14:02:29 +02:00
intel_panel.c drm/i915: Backlight control using CRC PMIC based PWM driver 2015-07-21 09:22:48 +02:00
intel_pm.c drm/i915: Don't try to use DDR DVFS on CHV when disabled in the BIOS 2015-09-10 15:40:02 +03: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: Flush pipecontrol post-sync writes 2015-10-13 16:54:19 +03:00
intel_ringbuffer.h Merge tag 'drm-intel-fixes-2015-07-15' into drm-intel-next-queued 2015-07-15 16:36:50 +02:00
intel_runtime_pm.c drm/i915/skl: Don't call intel_prepare_ddi when encoder list isn't yet initialized. 2015-09-28 11:05:13 +03:00
intel_sdvo_regs.h
intel_sdvo.c drm/i915: Get rid of dpms handling. 2015-08-14 17:50:33 +02:00
intel_sideband.c drm/i915: s/dpio_lock/sb_lock/ 2015-05-28 11:13:51 +02:00
intel_sprite.c drm/i915: always disable irqs in intel_pipe_update_start 2015-07-15 15:06:02 +02:00
intel_tv.c drm/i915: Get rid of dpms handling. 2015-08-14 17:50:33 +02:00
intel_uncore.c Linux 4.2-rc7 2015-08-17 14:13:53 +10: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-08-16' of git://anongit.freedesktop.org/drm-intel into drm-next 2015-08-17 14:14:44 +10:00