From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 01/14] drm/i915: add TRANSCODER_EDP Date: Fri, 19 Oct 2012 00:00:19 +0200 Message-ID: <20121018220019.GE5309@phenom.ffwll.local> References: <1350595304-18237-1-git-send-email-przanoni@gmail.com> <1350595304-18237-2-git-send-email-przanoni@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail-we0-f177.google.com (mail-we0-f177.google.com [74.125.82.177]) by gabe.freedesktop.org (Postfix) with ESMTP id DECD9A0A0D for ; Thu, 18 Oct 2012 14:59:18 -0700 (PDT) Received: by mail-we0-f177.google.com with SMTP id u50so5505954wey.36 for ; Thu, 18 Oct 2012 14:59:17 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1350595304-18237-2-git-send-email-przanoni@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: Paulo Zanoni Cc: intel-gfx@lists.freedesktop.org, Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org On Thu, Oct 18, 2012 at 06:21:31PM -0300, Paulo Zanoni wrote: > From: Paulo Zanoni > > Before Haswell we used to have the CPU pipes and the PCH transcoders. > We had the same amount of pipes and transcoders, and there was a 1:1 > mapping between them. After Haswell what we used to call CPU pipe was > split into CPU pipe and CPU transcoder. So now we have 3 CPU pipes (A, > B and C), 4 CPU transcoders (A, B, C and EDP) and 1 PCH transcoder > (only used for VGA). > > For all the outputs except for EDP we have an 1:1 mapping on the CPU > pipes and CPU transcoders, so if you're using CPU pipe A you have to > use CPU transcoder A. When have an eDP output you have to use > transcoder EDP and you can attach this CPU transcoder to any of the 3 > CPU pipes. When using VGA you need to select a pair of matching CPU > pipes/transcoders (A/A, B/B, C/C) and you also need to enable/use the > PCH transcoder. > > For now we're just creating the cpu_transcoder definitions and setting > cpu_transcoder to TRANSCODER_EDP on DDI eDP code, but none of the > registers was ported to use transcoder instead of pipe. The goal is to > keep the code backwards-compatible since on all cases except when > using eDP we must have pipe == cpu_transcoder. > > Signed-off-by: Paulo Zanoni > --- > drivers/gpu/drm/i915/i915_drv.h | 8 ++++++++ > drivers/gpu/drm/i915/i915_reg.h | 1 + > drivers/gpu/drm/i915/intel_display.c | 18 ++++++++++++++++++ > drivers/gpu/drm/i915/intel_drv.h | 3 +++ > 4 files changed, 30 insertions(+) > > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h > index 4728d30..922ab8d 100644 > --- a/drivers/gpu/drm/i915/i915_drv.h > +++ b/drivers/gpu/drm/i915/i915_drv.h > @@ -58,6 +58,14 @@ enum pipe { > }; > #define pipe_name(p) ((p) + 'A') > > +enum transcoder { > + TRANSCODER_A = 0, > + TRANSCODER_B, > + TRANSCODER_C, > + TRANSCODER_EDP = 0xF, > +}; > +#define transcoder_name(t) ((t) + 'A') > + > enum plane { > PLANE_A = 0, > PLANE_B, > diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h > index c31ee5b..c3fd536 100644 > --- a/drivers/gpu/drm/i915/i915_reg.h > +++ b/drivers/gpu/drm/i915/i915_reg.h > @@ -26,6 +26,7 @@ > #define _I915_REG_H_ > > #define _PIPE(pipe, a, b) ((a) + (pipe)*((b)-(a))) > +#define _TRANSCODER(tran, a, b) ((a) + (tran)*((b)-(a))) > > #define _PORT(port, a, b) ((a) + (port)*((b)-(a))) > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index c2c219b..6bf5ea8 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -927,6 +927,15 @@ intel_vlv_find_best_pll(const intel_limit_t *limit, struct drm_crtc *crtc, > return true; > } > > +enum transcoder pipe_to_cpu_transcoder(struct drm_i915_private *dev_priv, > + enum pipe pipe) > +{ > + struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe]; > + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); > + > + return intel_crtc->cpu_transcoder; > +} We need int intel_ prefix on this to avoid polluting the global namespace. -Daniel > + > static void ironlake_wait_for_vblank(struct drm_device *dev, int pipe) > { > struct drm_i915_private *dev_priv = dev->dev_private; > @@ -3336,6 +3345,9 @@ static void ironlake_crtc_off(struct drm_crtc *crtc) > > static void haswell_crtc_off(struct drm_crtc *crtc) > { > + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); > + > + intel_crtc->cpu_transcoder = intel_crtc->pipe; > intel_ddi_put_crtc_pll(crtc); > } > > @@ -5212,6 +5224,11 @@ static int haswell_crtc_mode_set(struct drm_crtc *crtc, > num_connectors++; > } > > + if (is_cpu_edp) > + intel_crtc->cpu_transcoder = TRANSCODER_EDP; > + else > + intel_crtc->cpu_transcoder = pipe; > + > /* We are not sure yet this won't happen. */ > WARN(!HAS_PCH_LPT(dev), "Unexpected PCH type %d\n", > INTEL_PCH_TYPE(dev)); > @@ -7770,6 +7787,7 @@ static void intel_crtc_init(struct drm_device *dev, int pipe) > /* Swap pipes & planes for FBC on pre-965 */ > intel_crtc->pipe = pipe; > intel_crtc->plane = pipe; > + intel_crtc->cpu_transcoder = pipe; > if (IS_MOBILE(dev) && IS_GEN3(dev)) { > DRM_DEBUG_KMS("swapping pipes & planes for FBC\n"); > intel_crtc->plane = !pipe; > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h > index 95cbd67..8f6eee5 100644 > --- a/drivers/gpu/drm/i915/intel_drv.h > +++ b/drivers/gpu/drm/i915/intel_drv.h > @@ -185,6 +185,7 @@ struct intel_crtc { > struct drm_crtc base; > enum pipe pipe; > enum plane plane; > + enum transcoder cpu_transcoder; > u8 lut_r[256], lut_g[256], lut_b[256]; > /* > * Whether the crtc and the connected output pipeline is active. Implies > @@ -491,6 +492,8 @@ extern struct drm_display_mode *intel_crtc_mode_get(struct drm_device *dev, > struct drm_crtc *crtc); > int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data, > struct drm_file *file_priv); > +extern enum transcoder pipe_to_cpu_transcoder(struct drm_i915_private *dev_priv, > + enum pipe pipe); > extern void intel_wait_for_vblank(struct drm_device *dev, int pipe); > extern void intel_wait_for_pipe_off(struct drm_device *dev, int 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