All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paulo Zanoni <przanoni@gmail.com>
To: Daniel Vetter <daniel@ffwll.ch>
Cc: intel-gfx@lists.freedesktop.org, Paulo Zanoni <paulo.r.zanoni@intel.com>
Subject: Re: [PATCH 04/14] drm/i915: check TRANSCODER_EDP on intel_modeset_setup_hw_state
Date: Fri, 19 Oct 2012 16:30:46 -0300	[thread overview]
Message-ID: <CA+gsUGSpGSpAG8gv-QxZno_FcVcv4ev9vWmQn5hVf6ohz_dd+Q@mail.gmail.com> (raw)
In-Reply-To: <20121018220202.GF5309@phenom.ffwll.local>

Hi

2012/10/18 Daniel Vetter <daniel@ffwll.ch>:
> On Thu, Oct 18, 2012 at 06:21:34PM -0300, Paulo Zanoni wrote:
>> From: Paulo Zanoni <paulo.r.zanoni@intel.com>
>>
>> We need to check if any of the pipes is using TRANSCODER_EDP.
>>
>> Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
>
> I wonder whether it doesn't make more sense for haswell to return the
> transcoder in the encoder->get_hw_state function, and then map that to the
> crtc with the intel_pipe_to_cpu_transcoder. That way we don't need to add
> a special-case for eDP.

I know we had some IRC discussions about this comment, but after this
I tried to implement your suggestion. It won't work unless we
completely rewrite a lot of code. For example, on
intel_modeset_setup_hw_state (the function this patch changes) we need
to know which transcoder is associated to the pipe before doing
I915_READ(PIPECONF(pipe)) (because PIPECONF(pipe) is wrong, we need
PIPECONF(cpu_transcoder), which comes later in the patch series), so
we will need to discover the encoder state before discovering the pipe
state, which is not what we do now. Also, having
dev_priv->transcoder_to_pipe_mapping is not as clean as having
pipe_to_transcoder_mapping because every pipe is always associated
with a transcoder, but not every transcoder is associated to a pipe,
so we'd need to keep checking for NULL on unused transcoders.

My first strategy to implement this code also tried to use
"for_each_transcoder" instead of "for_each_pipe" when checking the
pipe state, but it added even more complexity to the function.

I really believe my approach here is as KISS as we can get. A single
special haswell case here prevents a lot of "is this cpu transcoder
being used by some pipe?" checks in a lot of places.

> -Daniel
>
>> ---
>>  drivers/gpu/drm/i915/intel_display.c | 25 +++++++++++++++++++++++++
>>  1 file changed, 25 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
>> index 73ce007..827c5ba 100644
>> --- a/drivers/gpu/drm/i915/intel_display.c
>> +++ b/drivers/gpu/drm/i915/intel_display.c
>> @@ -8551,6 +8551,31 @@ void intel_modeset_setup_hw_state(struct drm_device *dev)
>>       struct intel_encoder *encoder;
>>       struct intel_connector *connector;
>>
>> +     if (IS_HASWELL(dev)) {
>> +             tmp = I915_READ(DDI_FUNC_CTL(TRANSCODER_EDP));
>> +
>> +             if (tmp & TRANS_DDI_FUNC_ENABLE) {
>> +                     switch (tmp & TRANS_DDI_EDP_INPUT_MASK) {
>> +                     case TRANS_DDI_EDP_INPUT_A_ON:
>> +                     case TRANS_DDI_EDP_INPUT_A_ONOFF:
>> +                             pipe = PIPE_A;
>> +                             break;
>> +                     case TRANS_DDI_EDP_INPUT_B_ONOFF:
>> +                             pipe = PIPE_B;
>> +                             break;
>> +                     case TRANS_DDI_EDP_INPUT_C_ONOFF:
>> +                             pipe = PIPE_C;
>> +                             break;
>> +                     }
>> +
>> +                     crtc = to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]);
>> +                     crtc->cpu_transcoder = TRANSCODER_EDP;
>> +
>> +                     DRM_DEBUG_KMS("Pipe %c using transcoder EDP\n",
>> +                                   pipe_name(pipe));
>> +             }
>> +     }
>> +
>>       for_each_pipe(pipe) {
>>               crtc = to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]);
>>
>> --
>> 1.7.11.4
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> +41 (0) 79 365 57 48 - http://blog.ffwll.ch



-- 
Paulo Zanoni

  reply	other threads:[~2012-10-19 19:30 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-18 21:21 [PATCH 00/14] Haswell eDP enablement Paulo Zanoni
2012-10-18 21:21 ` [PATCH 01/14] drm/i915: add TRANSCODER_EDP Paulo Zanoni
2012-10-18 22:00   ` Daniel Vetter
2012-10-18 21:21 ` [PATCH 02/14] drm/i915: convert PIPE_CLK_SEL to transcoder Paulo Zanoni
2012-10-18 21:21 ` [PATCH 03/14] drm/i915: convert DDI_FUNC_CTL " Paulo Zanoni
2012-10-18 21:21 ` [PATCH 04/14] drm/i915: check TRANSCODER_EDP on intel_modeset_setup_hw_state Paulo Zanoni
2012-10-18 22:02   ` Daniel Vetter
2012-10-19 19:30     ` Paulo Zanoni [this message]
2012-10-18 21:21 ` [PATCH 05/14] drm/i915: convert PIPECONF to use transcoder instead of pipe Paulo Zanoni
2012-10-18 22:23   ` Daniel Vetter
2012-10-19 18:36     ` Paulo Zanoni
2012-10-18 21:21 ` [PATCH 06/14] drm/i915: convert PIPE_MSA_MISC to transcoder Paulo Zanoni
2012-10-18 21:21 ` [PATCH 07/14] drm/i915: convert CPU M/N timings " Paulo Zanoni
2012-10-18 22:25   ` Daniel Vetter
2012-10-18 21:21 ` [PATCH 08/14] drm/i915: convert pipe timing definitions " Paulo Zanoni
2012-10-18 22:29   ` Daniel Vetter
2012-10-18 21:21 ` [PATCH 09/14] drm/i915: implement workaround for VTOTAL when using TRANSCODER_EDP Paulo Zanoni
2012-10-18 21:21 ` [PATCH 10/14] drm/i915: select the correct pipe " Paulo Zanoni
2012-10-18 21:21 ` [PATCH 11/14] drm/i915: set the correct eDP aux channel clock divider on DDI Paulo Zanoni
2012-10-18 21:21 ` [PATCH 12/14] drm/i915: set/unset the DDI eDP backlight Paulo Zanoni
2012-10-18 21:21 ` [PATCH 13/14] drm/i915: turn the eDP DDI panel on/off Paulo Zanoni
2012-10-18 21:21 ` [PATCH 14/14] drm/i915: enable DDI eDP Paulo Zanoni

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=CA+gsUGSpGSpAG8gv-QxZno_FcVcv4ev9vWmQn5hVf6ohz_dd+Q@mail.gmail.com \
    --to=przanoni@gmail.com \
    --cc=daniel@ffwll.ch \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=paulo.r.zanoni@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.