[PATCH 00/81] modeset rework

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux