[PATCH 00/81] modeset rework

Daniel Vetter
2012-07-11T15:35:05Z

Or: How to fix cpu edp in 81 simple steps. Admittedly this includes some minor
detours.

Yeah, I've managed to pull it through and finally put the last piece into place
that started this entire endeavour: cpu edp on my ivb works!

I'm too lazy to repeat all the high-level overview stuff from the cover-letter
of the rfc series. But I think it's nice to give a short overview of where in
our code we still rely on crtc helper infrastructure:

- We still use the ->mode_fixup callbacks from the crtc helper. We also still
use the encoder->mode_set callbacks. Boht can easily be moved to callbacks in
intel_encoder, but honestly I didn't see the point.
- The fb helper code has a ridiculously incetious relationship with the crtc
helper code. Read through the commit messages to see which pitfalls I've
stumbled into. I plan to eventually fix this up, but this series only contains
the minimal changes to drm_fb_helper.c to move ahead - I need to sharpen my
broadsword first again.
- We also still rely on the crtc helper for hotplug detection and connector
status probing.

Also, after this we still have some large opportunities to clean things up:
- I think we should create struct intel_mode and use it as the adjusted mode
everywhere to store little pieces like needs_tvclock, pipe dithering values or
dp link parameters. That would still be a layering violation, but at least we
wouldn't need to recompute these kinds of things in intel_display.c.
Especially the port bpc computation needed for selecting the pipe bpc and
dithering settings in intel_display.c is rather gross.
- In a related rework I think we should implement ->mode_valid in terms of
->mode_fixup in a generic way - I've hunted too many bugs where ->mode_valid
did the right thing, but ->mode_fixup didn't. Or vice versa, resulting in
funny bugs for user-supplied modes.
- I think we should ditch the idea to rework the hdp handling in the common crtc
helper code and just move things to i915.ko. Which would rid us of the
->detect crtc helper dependencies.
- lvds wire pair and pll enabling is all done. We should be able to move this to
the crtc_enable callbacks.

I haven't thought about how we could merge this (presuming people don't scream
an tear it apart), but there are definitely patches in here which can be merged
right away. If you see one, review + a nod highly appreciated, I've lost the big
picture a bit recently ;-)

Compared to the first part, I haven't yet tested this on anything but snb/ivb -
but the newly addded consistency checks are _extremely_ good, things essentially
started to work correctly once I've squashed the last WARN. So I'm positive that
further testing of the newly added patches on all my other machines won't turn
up anything troubling.

For reviewing this patch-carpet-bomber I suggest you grab the rfc intro mail at

http://lists.freedesktop.org/archives/intel-gfx/2012-July/018635.html

Then read the last patch, which motivated pretty much everything else and work
backwards from there, at least for the high-level picture.

Comments, flames and test reports highly welcome.

Cheers, Daniel

Daniel Vetter (81):
drm/i915: add crtc->enable/disable vfuncs insted of dpms
drm/i915: rip out crtc prepare/commit indirection
drm/i915: add direct encoder disable/enable infrastructure
drm/i915: add missing gen2 pipe A quirk entries
drm/i915: rip out the overlay pipe A workaround
drm/i915: prepare load-detect pipe code for dpms changes
drm/i915/hdmi: convert to encoder->disable/enable
drm/i915/tv: convert to encoder enable/disable
drm/i915/lvds: ditch ->prepare special case
drm/i915/lvds: convert to encoder disable/enable
drm/i915/dp: convert to encoder disable/enable
drm/i915: create VLV_DSIPLAY_BASE #define
drm/i915: group ADPA #defines together
drm/i915: add inte_crt->adpa_reg
drm/i915/crt: convert to encoder disable/enable
drm/i915/sdvo: convert to encoder disable/enable
drm/i915: simplify dvo dpms interface
drm/i915/dvo: convert to encoder disable/enable
drm/i915: simplify possible_clones computation
drm/i915: add port parameter to intel_hdmi_init
drm/i915: convert dpms functions of dvo/sdvo/crt
drm/i915: rip out encoder->disable/enable checks
drm/i915: clean up encoder_prepare/commit
drm/fb helper: don't call drm_crtc_helper_set_config
drm: remove the list_head from drm_mode_set
drm/i915: copy&paste drm_crtc_helper_set_config
drm/i915: call set_base directly
drm/i915: inline intel_best_encoder
drm/i915: copy&paste drm_crtc_helper_set_mode
drm/i915: simplify intel_crtc_prepare_encoders
drm/i915: rip out encoder->prepare/commit
drm/i915: call crtc functions directly
drm/i915: WARN when trying to enabled an unused crtc
drm/i915: Add interfaces to read out encoder/connector hw state
drm/i915/dp: implement get_hw_state
drm/i915/hdmi: implement get_hw_state
drm/i915/tv: implement get_hw_state
drm/i915/lvds: implement get_hw_state
drm/i915/crt: implement get_hw_state
drm/i915/sdvo: implement get_hw_state
drm/i915/dvo: implement get_hw_state
drm/i915: read out the modeset hw state at load and resume time
drm/i915: check connector hw/sw state
drm/i915: rip out intel_crtc->dpms_mode
drm/i915: rip out intel_dp->dpms_mode
drm/i915: ensure the force pipe A quirk is actually followed
drm/i915: introduce struct intel_set_config
drm/i915: extract modeset config save/restore code
drm/i915: extract intel_set_config_compute_mode_changes
drm/i915: extract intel_set_config_update_output_state
drm/i915: implement crtc helper semantics relied upon by the fb
helper
drm/i915: don't update the fb base if there is no fb
drm/i915: convert pointless error checks in set_config to BUGs
drm/i915: don't save all the encoder/crtc state in set_config
drm/i915: stage modeset output changes
drm/i915: push crtc->fb update into pipe_set_base
drm/i915: remove crtc disabling special case
drm/i915: move output commit and crtc disabling into set_mode
drm/i915: extract adjusted mode computation
drm/i915: use staged outuput config in tv->mode_fixup
drm/i915: use staged outuput config in lvds->mode_fixup
drm/i915: compute masks of crtcs affected in set_mode
drm/i915: implement new set_mode code flow
drm/i915: push commit_output_state past crtc disabling
drm/i915: s/intel_encoder_disable/intel_encoder_noop
drm/i915: kill a few unused things in dev_priv
drm/i915: WARN if the pipe won't turn off
drm/i915: switch the load detect code to the staged modeset config
drm/i915: push commit_output_state past the crtc/encoder preparing
drm/i915: disable all crtcs at suspend time
drm/i915: add tons of modeset state checks
drm/i915: extract ironlake_fdi_pll_disable
drm/i915: rip out intel_disable_pch_ports
drm/i915: don't disable fdi links harder in ilk_crtc_enable
drm/i915: don't call dpms funcs after set_mode
drm/i915: update dpms property in set_mode
drm/i915: add encoder->pre_enable/post_disable
drm/i915: clean up the cpu edp pll special case
drm/i915: robustify edp_pll_on/off
drm/i915: rip out dp port enabling cludges^Wchecks
drm/i915: disable the cpu edp port after the cpu pipe

drivers/gpu/drm/drm_fb_helper.c | 2 +-
drivers/gpu/drm/i915/dvo.h | 15 +-
drivers/gpu/drm/i915/dvo_ch7017.c | 21 +-
drivers/gpu/drm/i915/dvo_ch7xxx.c | 17 +-
drivers/gpu/drm/i915/dvo_ivch.c | 23 +-
drivers/gpu/drm/i915/dvo_sil164.c | 20 +-
drivers/gpu/drm/i915/dvo_tfp410.c | 18 +-
drivers/gpu/drm/i915/i915_dma.c | 22 +-
drivers/gpu/drm/i915/i915_drv.c | 6 +-
drivers/gpu/drm/i915/i915_drv.h | 17 +-
drivers/gpu/drm/i915/i915_reg.h | 52 +-
drivers/gpu/drm/i915/intel_crt.c | 157 +++-
drivers/gpu/drm/i915/intel_ddi.c | 59 +-
drivers/gpu/drm/i915/intel_display.c | 1600 +++++++++++++++++++++++++++-------
drivers/gpu/drm/i915/intel_dp.c | 218 +++--
drivers/gpu/drm/i915/intel_drv.h | 94 ++-
drivers/gpu/drm/i915/intel_dvo.c | 105 ++-
drivers/gpu/drm/i915/intel_hdmi.c | 203 +++--
drivers/gpu/drm/i915/intel_lvds.c | 104 +--
drivers/gpu/drm/i915/intel_overlay.c | 58 +--
drivers/gpu/drm/i915/intel_sdvo.c | 178 +++-
drivers/gpu/drm/i915/intel_tv.c | 63 +-
include/drm/drm_crtc.h | 2 -
23 files changed, 2196 insertions(+), 858 deletions(-)

--
1.7.7.6