intel-gfx.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
From: Daniel Vetter <daniel@ffwll.ch>
To: Paulo Zanoni <przanoni@gmail.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>,
	Intel Graphics Development <intel-gfx@lists.freedesktop.org>
Subject: Re: [PATCH 19/81] drm/i915: simplify possible_clones computation
Date: Thu, 12 Jul 2012 20:47:33 +0200	[thread overview]
Message-ID: <20120712184733.GM5039@phenom.ffwll.local> (raw)
In-Reply-To: <CA+gsUGS-qhVBPLvzg8Dhv=-G5CnasChsZnS+NHdSaQ3dTbBKPw@mail.gmail.com>

On Thu, Jul 12, 2012 at 03:10:21PM -0300, Paulo Zanoni wrote:
> Hi
> 
> I like your idea.
> 
> 2012/7/11 Daniel Vetter <daniel.vetter@ffwll.ch>:
> > Intel hw only has one MUX for encoders, so outputs are either not
> > cloneable or all in the same group of cloneable outputs.
> 
> I don't agree with this sentence... Our documentation contains
> sections called "Simultaneous Display Capabilities on a Single Display
> Pipe/Transcoder" describing the details and what/how/who/when cloning
> is possible.
> 
> So in our code, before your patch, these were valid:
> - CRT could be cloned with CRT, SDVO-non-tv, SDVO-lvds
> - DVO-tmds could be cloned with CRT, DVO-tmds  (notice that even
> though DVO-tmds can be cloned with CRT, CRT can't be cloned with
> DVO-tmds! bug!)
> - SDVO-non-tv could be cloned with CRT and SDVO-non-tv
> - SDVO-lvds could be cloned with CRT, SDVO-lvds
> 
> After your patch, all these can be cloned with each other:
> - CRT, DVO-tmds, SDVO-non-tv, SDVO-lvds
> 
> Things that were previously not possible and now are possible:
> 
> - SDVO-non-tv with SDVO-lvds
> - DVO-tmds with SDVO-non-tv (does hardware with both DVO and SDVO exist?)
> - DVO-tmds with SDVO-lvds (same question)

dvo is gen2 only, sdvo is gen3+. For the SDVO-non-tv cloned with SDVO-lvds
I couldn't come up with any reason why cloning SDVO-lvds with SDVO-non-tv
wouldn't work ... After checking the docs the only case I've found as
justification why that would not work is that you can't use the panel
fitter together with anything else. Which explains why lvds can't be
cloned, but not why sdvo-lvds can't be cloned because we simply don't use
the panel fitter there (we use the lvds encoder to do the upscaling ...).

Imo this is a case where the spec is just guidance for implementers and in
the specific case of sdvo-lvds doesn't make much sense - I suspect that
the windows code also uses the panel fitter in some cases for sdvo-lvds
... or they're talking about enabling multiple outputs on the same sdvo
encoder, which again we don't support.

I think we can ignore this special case until someone whith sdvo-tmds +
sdvo-lvds files a bug report about broken clonig ...

All extend the commit message with this discussion.

> Maybe we should find a way to move all this code to inside
> intel_encoder_clones directly? Or keep your patch just like it is, but
> add a check inside intel_encoder_clones preventing SDVO-non-tv with
> SDVO-lvds?
> 
> 
> > This neatly
> > simplifies the code and allows us to ditch some ugly if cascades in
> > the dp and hdmi init code (well, we need these if cascades for other
> > stuff still, but that can be taken care of in follow-up patches).
> >
> > Also explain why sdvo LVDS outputs cannot be cloned: Native LVDS (and
> 
> I think you mean "sdvo LVDS can be cloned".

Yeah, will fix.
> 
> 
> 
> > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> > index 3190e9d..95b1022 100644
> > --- a/drivers/gpu/drm/i915/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > @@ -2481,18 +2481,10 @@ intel_dp_init(struct drm_device *dev, int output_reg)
> >
> >         connector->polled = DRM_CONNECTOR_POLL_HPD;
> >
> > -       if (output_reg == DP_B || output_reg == PCH_DP_B)
> > -               intel_encoder->clone_mask = (1 << INTEL_DP_B_CLONE_BIT);
> > -       else if (output_reg == DP_C || output_reg == PCH_DP_C)
> > -               intel_encoder->clone_mask = (1 << INTEL_DP_C_CLONE_BIT);
> > -       else if (output_reg == DP_D || output_reg == PCH_DP_D)
> > -               intel_encoder->clone_mask = (1 << INTEL_DP_D_CLONE_BIT);
> > +       intel_encoder->cloneable = false;
> >
> > -       if (is_edp(intel_dp)) {
> > -               intel_encoder->clone_mask = (1 << INTEL_EDP_CLONE_BIT);
> > -               INIT_DELAYED_WORK(&intel_dp->panel_vdd_work,
> > -                                 ironlake_panel_vdd_work);
> > -       }
> > +       INIT_DELAYED_WORK(&intel_dp->panel_vdd_work,
> > +                         ironlake_panel_vdd_work);
> 
> 
> You removed the "if" statement... Is this correct? Even if it is
> correct, move to a separate patch?

I've figured 81 patches are enough already, and generally initializing
work items unconditionally is a good thing - we've recently broken resume
due to such an initialization bug.

> > diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
> > index d630db8..5fe044c 100644
> > --- a/drivers/gpu/drm/i915/intel_sdvo.c
> > +++ b/drivers/gpu/drm/i915/intel_sdvo.c
> > @@ -2129,8 +2129,7 @@ intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device)
> >                 connector->connector_type = DRM_MODE_CONNECTOR_HDMIA;
> >                 intel_sdvo->is_hdmi = true;
> >         }
> > -       intel_sdvo->base.clone_mask = ((1 << INTEL_SDVO_NON_TV_CLONE_BIT) |
> > -                                      (1 << INTEL_ANALOG_CLONE_BIT));
> > +       intel_sdvo->base.cloneable= true;
> 
> 
> Please add a white space between "cloneable" and "=".

Will fix.

Thanks, Daniel
> 
> 
> Cheers,
> Paulo
> 
> -- 
> Paulo Zanoni

-- 
Daniel Vetter
Mail: daniel@ffwll.ch
Mobile: +41 (0)79 365 57 48

  reply	other threads:[~2012-07-12 18:47 UTC|newest]

Thread overview: 107+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-11 14:27 [PATCH 00/81] modeset rework Daniel Vetter
2012-07-11 14:27 ` [PATCH 01/81] drm/i915: add crtc->enable/disable vfuncs insted of dpms Daniel Vetter
2012-07-11 14:27 ` [PATCH 02/81] drm/i915: rip out crtc prepare/commit indirection Daniel Vetter
2012-07-12 14:44   ` Daniel Vetter
2012-07-11 14:27 ` [PATCH 03/81] drm/i915: add direct encoder disable/enable infrastructure Daniel Vetter
2012-07-11 14:27 ` [PATCH 04/81] drm/i915: add missing gen2 pipe A quirk entries Daniel Vetter
2012-07-11 14:27 ` [PATCH 05/81] drm/i915: rip out the overlay pipe A workaround Daniel Vetter
2012-07-11 14:27 ` [PATCH 06/81] drm/i915: prepare load-detect pipe code for dpms changes Daniel Vetter
2012-07-11 14:27 ` [PATCH 07/81] drm/i915/hdmi: convert to encoder->disable/enable Daniel Vetter
2012-07-11 14:27 ` [PATCH 08/81] drm/i915/tv: convert to encoder enable/disable Daniel Vetter
2012-07-11 14:27 ` [PATCH 09/81] drm/i915/lvds: ditch ->prepare special case Daniel Vetter
2012-07-22 14:52   ` Daniel Vetter
2012-07-22 16:32     ` Takashi Iwai
2012-07-22 19:20       ` Daniel Vetter
2012-07-11 14:27 ` [PATCH 10/81] drm/i915/lvds: convert to encoder disable/enable Daniel Vetter
2012-07-11 14:27 ` [PATCH 11/81] drm/i915/dp: " Daniel Vetter
2012-07-11 14:27 ` [PATCH 12/81] drm/i915: create VLV_DSIPLAY_BASE #define Daniel Vetter
2012-07-20 12:07   ` Daniel Vetter
2012-07-11 14:27 ` [PATCH 13/81] drm/i915: group ADPA #defines together Daniel Vetter
2012-07-12 13:06   ` Paulo Zanoni
2012-07-11 14:27 ` [PATCH 14/81] drm/i915: add inte_crt->adpa_reg Daniel Vetter
2012-07-20 11:56   ` Chris Wilson
2012-07-20 12:09   ` Daniel Vetter
2012-07-11 14:27 ` [PATCH 15/81] drm/i915/crt: convert to encoder disable/enable Daniel Vetter
2012-07-11 14:27 ` [PATCH 16/81] drm/i915/sdvo: " Daniel Vetter
2012-07-11 14:28 ` [PATCH 17/81] drm/i915: simplify dvo dpms interface Daniel Vetter
2012-07-11 14:28 ` [PATCH 18/81] drm/i915/dvo: convert to encoder disable/enable Daniel Vetter
2012-07-11 14:28 ` [PATCH 19/81] drm/i915: simplify possible_clones computation Daniel Vetter
2012-07-12 18:10   ` Paulo Zanoni
2012-07-12 18:47     ` Daniel Vetter [this message]
2012-07-12 18:08       ` [PATCH] " Daniel Vetter
2012-07-12 19:48         ` Paulo Zanoni
2012-07-11 14:28 ` [PATCH 20/81] drm/i915: add port parameter to intel_hdmi_init Daniel Vetter
2012-07-12 18:19   ` [PATCH] " Daniel Vetter
2012-07-12 19:49     ` Paulo Zanoni
2012-07-17  8:43       ` Daniel Vetter
2012-07-11 14:28 ` [PATCH 21/81] drm/i915: convert dpms functions of dvo/sdvo/crt Daniel Vetter
2012-07-11 14:28 ` [PATCH 22/81] drm/i915: rip out encoder->disable/enable checks Daniel Vetter
2012-07-11 14:28 ` [PATCH 23/81] drm/i915: clean up encoder_prepare/commit Daniel Vetter
2012-07-11 14:28 ` [PATCH 24/81] drm/fb helper: don't call drm_crtc_helper_set_config Daniel Vetter
2012-07-18 15:49   ` Daniel Vetter
2012-07-18 15:50     ` Daniel Vetter
2012-07-20  1:17       ` Dave Airlie
2012-07-11 14:28 ` [PATCH 25/81] drm: remove the list_head from drm_mode_set Daniel Vetter
2012-07-20  1:23   ` Dave Airlie
2012-07-11 14:28 ` [PATCH 26/81] drm/i915: copy&paste drm_crtc_helper_set_config Daniel Vetter
2012-07-11 14:28 ` [PATCH 27/81] drm/i915: call set_base directly Daniel Vetter
2012-07-11 14:28 ` [PATCH 28/81] drm/i915: inline intel_best_encoder Daniel Vetter
2012-07-11 14:28 ` [PATCH 29/81] drm/i915: copy&paste drm_crtc_helper_set_mode Daniel Vetter
2012-07-11 14:28 ` [PATCH 30/81] drm/i915: simplify intel_crtc_prepare_encoders Daniel Vetter
2012-07-11 14:28 ` [PATCH 31/81] drm/i915: rip out encoder->prepare/commit Daniel Vetter
2012-07-11 14:28 ` [PATCH 32/81] drm/i915: call crtc functions directly Daniel Vetter
2012-07-11 14:28 ` [PATCH 33/81] drm/i915: WARN when trying to enabled an unused crtc Daniel Vetter
2012-07-11 14:28 ` [PATCH 34/81] drm/i915: Add interfaces to read out encoder/connector hw state Daniel Vetter
2012-07-11 14:28 ` [PATCH 35/81] drm/i915/dp: implement get_hw_state Daniel Vetter
2012-07-11 14:28 ` [PATCH 36/81] drm/i915/hdmi: " Daniel Vetter
2012-07-11 14:28 ` [PATCH 37/81] drm/i915/tv: " Daniel Vetter
2012-07-11 14:28 ` [PATCH 38/81] drm/i915/lvds: " Daniel Vetter
2012-07-11 14:28 ` [PATCH 39/81] drm/i915/crt: " Daniel Vetter
2012-07-11 14:28 ` [PATCH 40/81] drm/i915/sdvo: " Daniel Vetter
2012-07-11 14:28 ` [PATCH 41/81] drm/i915/dvo: " Daniel Vetter
2012-07-11 14:28 ` [PATCH 42/81] drm/i915: read out the modeset hw state at load and resume time Daniel Vetter
2012-07-11 14:28 ` [PATCH 43/81] drm/i915: check connector hw/sw state Daniel Vetter
2012-07-11 14:28 ` [PATCH 44/81] drm/i915: rip out intel_crtc->dpms_mode Daniel Vetter
2012-07-11 14:28 ` [PATCH 45/81] drm/i915: rip out intel_dp->dpms_mode Daniel Vetter
2012-07-26 18:06   ` Paulo Zanoni
2012-07-11 14:28 ` [PATCH 46/81] drm/i915: ensure the force pipe A quirk is actually followed Daniel Vetter
2012-07-11 14:28 ` [PATCH 47/81] drm/i915: introduce struct intel_set_config Daniel Vetter
2012-07-11 14:28 ` [PATCH 48/81] drm/i915: extract modeset config save/restore code Daniel Vetter
2012-07-11 14:28 ` [PATCH 49/81] drm/i915: extract intel_set_config_compute_mode_changes Daniel Vetter
2012-07-11 14:28 ` [PATCH 50/81] drm/i915: extract intel_set_config_update_output_state Daniel Vetter
2012-07-11 14:28 ` [PATCH 51/81] drm/i915: implement crtc helper semantics relied upon by the fb helper Daniel Vetter
2012-07-11 14:28 ` [PATCH 52/81] drm/i915: don't update the fb base if there is no fb Daniel Vetter
2012-07-11 14:28 ` [PATCH 53/81] drm/i915: convert pointless error checks in set_config to BUGs Daniel Vetter
2012-07-11 14:28 ` [PATCH 54/81] drm/i915: don't save all the encoder/crtc state in set_config Daniel Vetter
2012-07-11 14:28 ` [PATCH 55/81] drm/i915: stage modeset output changes Daniel Vetter
2012-07-11 14:28 ` [PATCH 56/81] drm/i915: push crtc->fb update into pipe_set_base Daniel Vetter
2012-07-11 14:28 ` [PATCH 57/81] drm/i915: remove crtc disabling special case Daniel Vetter
2012-07-11 14:28 ` [PATCH 58/81] drm/i915: move output commit and crtc disabling into set_mode Daniel Vetter
2012-07-11 14:28 ` [PATCH 59/81] drm/i915: extract adjusted mode computation Daniel Vetter
2012-07-11 14:28 ` [PATCH 60/81] drm/i915: use staged outuput config in tv->mode_fixup Daniel Vetter
2012-07-11 14:28 ` [PATCH 61/81] drm/i915: use staged outuput config in lvds->mode_fixup Daniel Vetter
2012-07-11 14:28 ` [PATCH 62/81] drm/i915: compute masks of crtcs affected in set_mode Daniel Vetter
2012-07-11 14:28 ` [PATCH 63/81] drm/i915: implement new set_mode code flow Daniel Vetter
2012-07-11 14:28 ` [PATCH 64/81] drm/i915: push commit_output_state past crtc disabling Daniel Vetter
2012-07-11 14:28 ` [PATCH 65/81] drm/i915: s/intel_encoder_disable/intel_encoder_noop Daniel Vetter
2012-07-11 14:28 ` [PATCH 66/81] drm/i915: kill a few unused things in dev_priv Daniel Vetter
2012-07-11 14:28 ` [PATCH 67/81] drm/i915: WARN if the pipe won't turn off Daniel Vetter
2012-07-11 14:28 ` [PATCH 68/81] drm/i915: switch the load detect code to the staged modeset config Daniel Vetter
2012-07-11 14:28 ` [PATCH 69/81] drm/i915: push commit_output_state past the crtc/encoder preparing Daniel Vetter
2012-07-11 16:02   ` [PATCH] " Daniel Vetter
2012-07-11 14:28 ` [PATCH 70/81] drm/i915: disable all crtcs at suspend time Daniel Vetter
2012-07-11 14:28 ` [PATCH 71/81] drm/i915: add tons of modeset state checks Daniel Vetter
2012-07-11 17:46   ` [PATCH] " Daniel Vetter
2012-07-11 14:28 ` [PATCH 72/81] drm/i915: extract ironlake_fdi_pll_disable Daniel Vetter
2012-07-11 14:28 ` [PATCH 73/81] drm/i915: rip out intel_disable_pch_ports Daniel Vetter
2012-07-11 14:28 ` [PATCH 74/81] drm/i915: don't disable fdi links harder in ilk_crtc_enable Daniel Vetter
2012-07-11 14:28 ` [PATCH 75/81] drm/i915: don't call dpms funcs after set_mode Daniel Vetter
2012-07-11 14:28 ` [PATCH 76/81] drm/i915: update dpms property in set_mode Daniel Vetter
2012-07-11 14:29 ` [PATCH 77/81] drm/i915: add encoder->pre_enable/post_disable Daniel Vetter
2012-07-11 14:29 ` [PATCH 78/81] drm/i915: clean up the cpu edp pll special case Daniel Vetter
2012-07-11 14:29 ` [PATCH 79/81] drm/i915: robustify edp_pll_on/off Daniel Vetter
2012-07-11 17:47   ` [PATCH] " Daniel Vetter
2012-07-11 14:29 ` [PATCH 80/81] drm/i915: rip out dp port enabling cludges^Wchecks Daniel Vetter
2012-07-11 14:38 ` [PATCH 81/81] drm/i915: disable the cpu edp port after the cpu pipe Daniel Vetter
2012-07-15 13:13 ` [PATCH 00/81] modeset rework Chris Wilson
2012-07-15 14:57   ` Daniel Vetter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120712184733.GM5039@phenom.ffwll.local \
    --to=daniel@ffwll.ch \
    --cc=daniel.vetter@ffwll.ch \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=przanoni@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).