From: Paulo Zanoni <paulo.r.zanoni at intel.com> Hi I've been working on this patch series for some time, and even though it's not 100% bug free yet, I feel it's ready to get some feedback, so I'm sending it as an RFC. The ultimate goal is to make clocking+HDMI+DP+eDP work flawlessly and without hanging the machine. What's the current dinq status? - Only HDMI works, but it only uses WRPLL1 for everything, so dual screen doesn't exactly work everywhere. - DP and eDP patches were sent a long time ago, but they were dropped for not being the ideal solution. Also, code to properly detect if the monitor on a given port is DP or HDMI was never written. - We have problems dealing with the port/pipe clocks and newer SDVs completely freeze when booting. - We are nowhere near to being compliant with the "mode set/unset sequences" our documentation provides. And not following the mode set sequence is the cause of all the current issues we have. This patch series is still based on dinq and not on Daniel's modeset-rework patches. I did this because then I could be 100% sure that any problems were actually introduced by me and not by the modeset-rework branch. I know I will have to rewrite these patches on top of the modeset-rework branch, but, well, it's the path I chose and I knew this (in addition, I get to learn more about both worlds). What does the patch series do? - The first 5 patches try to fix our clock handing and HDMI "mode unset". The patches are mixed because the goal of the "mode unset" changes is to give back the PLLs used so the clocking code can use it. I already discussed these with Daniel and it seems we'll still change these patches even more. - Then there is the DP series. Since DP and HDMI mode set/unset sequences are almost the same (they even share the same registers), I just made the HDMI code also work with DP instead of adding new DP-specific functions. It's a slow series where we add DP support to many functions without actually ever exposing DP by calling intel_dp_init. - Then there are the 2 patches that enable eDP. The second one actually starts exposing eDP on port A. I'm sure I'm still missing some bits of the eDP enablement, but at least my eDP panel works now. - Then the last patches make the DDI code properly detect if DP or HDMI is connected and make things work as expected. The big problem here is that DP and HDMI share the same registers, so you just can't call intel_dp_init and intel_hdmi_init passing the same port as the port argument. What I did here was to split intel_{dp,hdmi}_init_connector from intel_{dp,hdmi}_init, and created DDI's own encoder. So the legacy code still have an 1:1 encoder:connector relationship, but the DDI encoder has 2 connectors: a DP connector and an HDMI connector. What is still missing? - I still need to write a few more assertions and warnings in case things are not as we expect. Also, more debug output will be helpful. - As I already said, there are still some bugs when disabling things. Comments, suggestions? Which color should we paint this? Paulo Zanoni (30): drm/i915: rewrite the LCPLL code drm/i915: disable DDI pipes and ports when initializing drm/i915: wait for idle DDI_BUF_CTL after disabling it drm/i915: implement DDI disable function drm/i915: implement intel_ddi_pll_mode_set drm/i915: extract intel_ddi_enable pipe from intel_ddi_mode_set drm/i915: make intel_ddi_enable_pipe work on DP drm/i915: don't sleep after selecting the DDI pipe clock drm/i915: add DP support to intel_ddi_pll_mode_set drm/i915: add DP support to intel_ddi_disable_port drm/i915: add DP support to intel_ddi_mode_set drm/i915: add basic Haswell DP link train bits drm/i915: add intel_ddi_commit drm/i915: fix Haswell M/N registers drm/i915: fix DP AUX register definitions on Haswell drm/i915: disable DDI on intel_dp_link_down drm/i915: add intel_ddi_prepare_link_retrain drm/i915: add DP support to intel_ddi_disable drm/i915: add Haswell DP encoder_helper function definitions drm/i915: add TRANSCODER_EDP drm/i915: enable eDP on Haswell drm/i915: don't run PCH code on non-PCH ports drm/i915: init DP on port B drm/i915: simplify assignments inside intel_dp.c drm/i915: add intel_dp_to_dev and intel_hdmi_to_dev drm/i915: create intel_digital_port and use it drm/i915: remove encoder args from intel_{dp,hdmi}_add_properties drm/i915: split intel_hdmi_init into encoder and connector pieces drm/i915: split intel_dp_commit into encoder and connector pieces drm/i915: make DDI an encoder drivers/gpu/drm/i915/i915_drv.h | 8 + drivers/gpu/drm/i915/i915_irq.c | 7 +- drivers/gpu/drm/i915/i915_reg.h | 79 ++-- drivers/gpu/drm/i915/intel_ddi.c | 705 +++++++++++++++++++++++++++++------ drivers/gpu/drm/i915/intel_display.c | 150 +++++--- drivers/gpu/drm/i915/intel_dp.c | 407 ++++++++++++++------ drivers/gpu/drm/i915/intel_drv.h | 64 +++- drivers/gpu/drm/i915/intel_hdmi.c | 121 +++--- drivers/gpu/drm/i915/intel_sprite.c | 6 +- 9 files changed, 1177 insertions(+), 370 deletions(-) -- 1.7.11.2