* [PATCH 1/3] drm/i915: rearrange vlv dp enable and pre_enable callbacks
@ 2013-06-04 10:26 Jani Nikula
2013-06-04 10:26 ` [PATCH 2/3] drm/i915: rearrange vlv hdmi " Jani Nikula
2013-06-04 10:26 ` [PATCH 3/3] drm/i915: move encoder->enable callback later in VLV crtc enable Jani Nikula
0 siblings, 2 replies; 6+ messages in thread
From: Jani Nikula @ 2013-06-04 10:26 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula
Currently ->pre_enable and ->enable are called back to back. Rearrange
the DP callbacks to make it possible to move ->enable call later.
Basically do everything in ->pre_enable on VLV, and make ->enable a NOP.
There should be no functional changes.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/intel_dp.c | 67 ++++++++++++++++++++-------------------
1 file changed, 35 insertions(+), 32 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index a899f93..543cb12 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1405,47 +1405,46 @@ static void intel_enable_dp(struct intel_encoder *encoder)
intel_dp_complete_link_train(intel_dp);
intel_dp_stop_link_train(intel_dp);
ironlake_edp_backlight_on(intel_dp);
+}
- if (IS_VALLEYVIEW(dev)) {
- struct intel_digital_port *dport =
- enc_to_dig_port(&encoder->base);
- int channel = vlv_dport_to_channel(dport);
-
- vlv_wait_port_ready(dev_priv, channel);
- }
+static void vlv_enable_dp(struct intel_encoder *encoder)
+{
}
static void intel_pre_enable_dp(struct intel_encoder *encoder)
{
struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
struct intel_digital_port *dport = dp_to_dig_port(intel_dp);
+
+ if (dport->port == PORT_A)
+ ironlake_edp_pll_on(intel_dp);
+}
+
+static void vlv_pre_enable_dp(struct intel_encoder *encoder)
+{
+ struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
+ struct intel_digital_port *dport = dp_to_dig_port(intel_dp);
struct drm_device *dev = encoder->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
+ int port = vlv_dport_to_channel(dport);
+ int pipe = intel_crtc->pipe;
+ u32 val;
- if (dport->port == PORT_A && !IS_VALLEYVIEW(dev))
- ironlake_edp_pll_on(intel_dp);
+ val = vlv_dpio_read(dev_priv, DPIO_DATA_LANE_A(port));
+ val = 0;
+ if (pipe)
+ val |= (1<<21);
+ else
+ val &= ~(1<<21);
+ val |= 0x001000c4;
+ vlv_dpio_write(dev_priv, DPIO_DATA_CHANNEL(port), val);
+ vlv_dpio_write(dev_priv, DPIO_PCS_CLOCKBUF0(port), 0x00760018);
+ vlv_dpio_write(dev_priv, DPIO_PCS_CLOCKBUF8(port), 0x00400888);
- if (IS_VALLEYVIEW(dev)) {
- struct intel_crtc *intel_crtc =
- to_intel_crtc(encoder->base.crtc);
- int port = vlv_dport_to_channel(dport);
- int pipe = intel_crtc->pipe;
- u32 val;
-
- val = vlv_dpio_read(dev_priv, DPIO_DATA_LANE_A(port));
- val = 0;
- if (pipe)
- val |= (1<<21);
- else
- val &= ~(1<<21);
- val |= 0x001000c4;
- vlv_dpio_write(dev_priv, DPIO_DATA_CHANNEL(port), val);
+ intel_enable_dp(encoder);
- vlv_dpio_write(dev_priv, DPIO_PCS_CLOCKBUF0(port),
- 0x00760018);
- vlv_dpio_write(dev_priv, DPIO_PCS_CLOCKBUF8(port),
- 0x00400888);
- }
+ vlv_wait_port_ready(dev_priv, port);
}
static void intel_dp_pre_pll_enable(struct intel_encoder *encoder)
@@ -3187,14 +3186,18 @@ intel_dp_init(struct drm_device *dev, int output_reg, enum port port)
drm_encoder_helper_add(&intel_encoder->base, &intel_dp_helper_funcs);
intel_encoder->compute_config = intel_dp_compute_config;
- intel_encoder->enable = intel_enable_dp;
- intel_encoder->pre_enable = intel_pre_enable_dp;
intel_encoder->disable = intel_disable_dp;
intel_encoder->post_disable = intel_post_disable_dp;
intel_encoder->get_hw_state = intel_dp_get_hw_state;
intel_encoder->get_config = intel_dp_get_config;
- if (IS_VALLEYVIEW(dev))
+ if (IS_VALLEYVIEW(dev)) {
+ intel_encoder->enable = vlv_enable_dp;
+ intel_encoder->pre_enable = vlv_pre_enable_dp;
intel_encoder->pre_pll_enable = intel_dp_pre_pll_enable;
+ } else {
+ intel_encoder->enable = intel_enable_dp;
+ intel_encoder->pre_enable = intel_pre_enable_dp;
+ }
intel_dig_port->port = port;
intel_dig_port->dp.output_reg = output_reg;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/3] drm/i915: rearrange vlv hdmi enable and pre_enable callbacks
2013-06-04 10:26 [PATCH 1/3] drm/i915: rearrange vlv dp enable and pre_enable callbacks Jani Nikula
@ 2013-06-04 10:26 ` Jani Nikula
2013-06-04 10:26 ` [PATCH 3/3] drm/i915: move encoder->enable callback later in VLV crtc enable Jani Nikula
1 sibling, 0 replies; 6+ messages in thread
From: Jani Nikula @ 2013-06-04 10:26 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula
Currently ->pre_enable and ->enable are called back to back. Rearrange
the HDMI callbacks to make it possible to move ->enable call later.
Basically do everything in ->pre_enable on VLV, and make ->enable a NOP.
There should be no functional changes.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/intel_hdmi.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 8062a92..7e3a4f4 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -719,14 +719,10 @@ static void intel_enable_hdmi(struct intel_encoder *encoder)
I915_WRITE(intel_hdmi->hdmi_reg, temp);
POSTING_READ(intel_hdmi->hdmi_reg);
}
+}
- if (IS_VALLEYVIEW(dev)) {
- struct intel_digital_port *dport =
- enc_to_dig_port(&encoder->base);
- int channel = vlv_dport_to_channel(dport);
-
- vlv_wait_port_ready(dev_priv, channel);
- }
+static void vlv_enable_hdmi(struct intel_encoder *encoder)
+{
}
static void intel_disable_hdmi(struct intel_encoder *encoder)
@@ -1049,6 +1045,10 @@ static void intel_hdmi_pre_enable(struct intel_encoder *encoder)
0x00760018);
vlv_dpio_write(dev_priv, DPIO_PCS_CLOCKBUF8(port),
0x00400888);
+
+ intel_enable_hdmi(encoder);
+
+ vlv_wait_port_ready(dev_priv, port);
}
static void intel_hdmi_pre_pll_enable(struct intel_encoder *encoder)
@@ -1231,14 +1231,16 @@ void intel_hdmi_init(struct drm_device *dev, int hdmi_reg, enum port port)
drm_encoder_helper_add(&intel_encoder->base, &intel_hdmi_helper_funcs);
intel_encoder->compute_config = intel_hdmi_compute_config;
- intel_encoder->enable = intel_enable_hdmi;
intel_encoder->disable = intel_disable_hdmi;
intel_encoder->get_hw_state = intel_hdmi_get_hw_state;
intel_encoder->get_config = intel_hdmi_get_config;
if (IS_VALLEYVIEW(dev)) {
+ intel_encoder->enable = vlv_enable_hdmi;
intel_encoder->pre_enable = intel_hdmi_pre_enable;
intel_encoder->pre_pll_enable = intel_hdmi_pre_pll_enable;
intel_encoder->post_disable = intel_hdmi_post_disable;
+ } else {
+ intel_encoder->enable = intel_enable_hdmi;
}
intel_encoder->type = INTEL_OUTPUT_HDMI;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/3] drm/i915: move encoder->enable callback later in VLV crtc enable
2013-06-04 10:26 [PATCH 1/3] drm/i915: rearrange vlv dp enable and pre_enable callbacks Jani Nikula
2013-06-04 10:26 ` [PATCH 2/3] drm/i915: rearrange vlv hdmi " Jani Nikula
@ 2013-06-04 10:26 ` Jani Nikula
2013-06-04 10:49 ` Jani Nikula
1 sibling, 1 reply; 6+ messages in thread
From: Jani Nikula @ 2013-06-04 10:26 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula
Encoder ->pre_enable and ->enable callbacks were moved back to back in
VLV crtc enable sequence, which is not very useful. Move ->enable call
at the end of the sequence.
With the previously rearranged VLV DP and HDMI ->pre_enable and ->enable
callbacks in place, this should not cause any functional changes.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/intel_display.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index c112466..4250beb 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -3607,10 +3607,6 @@ static void valleyview_crtc_enable(struct drm_crtc *crtc)
if (encoder->pre_enable)
encoder->pre_enable(encoder);
- /* VLV wants encoder enabling _before_ the pipe is up. */
- for_each_encoder_on_crtc(dev, crtc, encoder)
- encoder->enable(encoder);
-
/* Enable panel fitting for eDP */
i9xx_pfit_enable(intel_crtc);
@@ -3624,6 +3620,9 @@ static void valleyview_crtc_enable(struct drm_crtc *crtc)
intel_crtc_dpms_overlay(intel_crtc, true);
intel_crtc_update_cursor(crtc, true);
+ for_each_encoder_on_crtc(dev, crtc, encoder)
+ encoder->enable(encoder);
+
mutex_unlock(&dev_priv->dpio_lock);
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 3/3] drm/i915: move encoder->enable callback later in VLV crtc enable
2013-06-04 10:26 ` [PATCH 3/3] drm/i915: move encoder->enable callback later in VLV crtc enable Jani Nikula
@ 2013-06-04 10:49 ` Jani Nikula
2013-06-04 11:49 ` Daniel Vetter
0 siblings, 1 reply; 6+ messages in thread
From: Jani Nikula @ 2013-06-04 10:49 UTC (permalink / raw)
To: intel-gfx
Failed to mention that this should address Daniel's complaints about the
->pre_enable and ->enable calls being in the same spot [1]. And while I
needed this for something else, it should be easy to do the eDP
backlight fix Daniel mentions on top.
Cheers,
Jani.
[1] http://mid.gmane.org/CAKMK7uFs9EMvMW8BnS24e5UNm1D7JrfVg3SD5SDFtVEamGfOOg@mail.gmail.com
On Tue, 04 Jun 2013, Jani Nikula <jani.nikula@intel.com> wrote:
> Encoder ->pre_enable and ->enable callbacks were moved back to back in
> VLV crtc enable sequence, which is not very useful. Move ->enable call
> at the end of the sequence.
>
> With the previously rearranged VLV DP and HDMI ->pre_enable and ->enable
> callbacks in place, this should not cause any functional changes.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/i915/intel_display.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index c112466..4250beb 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -3607,10 +3607,6 @@ static void valleyview_crtc_enable(struct drm_crtc *crtc)
> if (encoder->pre_enable)
> encoder->pre_enable(encoder);
>
> - /* VLV wants encoder enabling _before_ the pipe is up. */
> - for_each_encoder_on_crtc(dev, crtc, encoder)
> - encoder->enable(encoder);
> -
> /* Enable panel fitting for eDP */
> i9xx_pfit_enable(intel_crtc);
>
> @@ -3624,6 +3620,9 @@ static void valleyview_crtc_enable(struct drm_crtc *crtc)
> intel_crtc_dpms_overlay(intel_crtc, true);
> intel_crtc_update_cursor(crtc, true);
>
> + for_each_encoder_on_crtc(dev, crtc, encoder)
> + encoder->enable(encoder);
> +
> mutex_unlock(&dev_priv->dpio_lock);
> }
>
> --
> 1.7.9.5
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 3/3] drm/i915: move encoder->enable callback later in VLV crtc enable
2013-06-04 10:49 ` Jani Nikula
@ 2013-06-04 11:49 ` Daniel Vetter
0 siblings, 0 replies; 6+ messages in thread
From: Daniel Vetter @ 2013-06-04 11:49 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Tue, Jun 04, 2013 at 01:49:39PM +0300, Jani Nikula wrote:
>
> Failed to mention that this should address Daniel's complaints about the
> ->pre_enable and ->enable calls being in the same spot [1]. And while I
> needed this for something else, it should be easy to do the eDP
> backlight fix Daniel mentions on top.
Hm, I've thought the edp backlight thing would naturally fall out of this,
since it's the last function called currently in enable_dp (if you ignore
the vlv port ready check). But I guess we could do that as a follow-up,
same for giving intel_dp.c a hard look wrt refactoring ;-)
-Daniel
>
> Cheers,
> Jani.
>
>
> [1] http://mid.gmane.org/CAKMK7uFs9EMvMW8BnS24e5UNm1D7JrfVg3SD5SDFtVEamGfOOg@mail.gmail.com
>
> On Tue, 04 Jun 2013, Jani Nikula <jani.nikula@intel.com> wrote:
> > Encoder ->pre_enable and ->enable callbacks were moved back to back in
> > VLV crtc enable sequence, which is not very useful. Move ->enable call
> > at the end of the sequence.
> >
> > With the previously rearranged VLV DP and HDMI ->pre_enable and ->enable
> > callbacks in place, this should not cause any functional changes.
> >
> > Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> > ---
> > drivers/gpu/drm/i915/intel_display.c | 7 +++----
> > 1 file changed, 3 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> > index c112466..4250beb 100644
> > --- a/drivers/gpu/drm/i915/intel_display.c
> > +++ b/drivers/gpu/drm/i915/intel_display.c
> > @@ -3607,10 +3607,6 @@ static void valleyview_crtc_enable(struct drm_crtc *crtc)
> > if (encoder->pre_enable)
> > encoder->pre_enable(encoder);
> >
> > - /* VLV wants encoder enabling _before_ the pipe is up. */
> > - for_each_encoder_on_crtc(dev, crtc, encoder)
> > - encoder->enable(encoder);
> > -
> > /* Enable panel fitting for eDP */
> > i9xx_pfit_enable(intel_crtc);
> >
> > @@ -3624,6 +3620,9 @@ static void valleyview_crtc_enable(struct drm_crtc *crtc)
> > intel_crtc_dpms_overlay(intel_crtc, true);
> > intel_crtc_update_cursor(crtc, true);
> >
> > + for_each_encoder_on_crtc(dev, crtc, encoder)
> > + encoder->enable(encoder);
> > +
> > mutex_unlock(&dev_priv->dpio_lock);
> > }
> >
> > --
> > 1.7.9.5
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
> _______________________________________________
> 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
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 3/3] drm/i915: move encoder->enable callback later in VLV crtc enable
2013-07-30 8:08 [PATCH 0/3] drm/i915: vlv pre_enable/enable callback refactoring Jani Nikula
@ 2013-07-30 8:08 ` Jani Nikula
0 siblings, 0 replies; 6+ messages in thread
From: Jani Nikula @ 2013-07-30 8:08 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula
Encoder ->pre_enable and ->enable callbacks were moved back to back in
VLV crtc enable sequence, which is not very useful. Move ->enable call
at the end of the sequence.
With the previously rearranged VLV DP and HDMI ->pre_enable and ->enable
callbacks in place, this should not cause any functional changes.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/intel_display.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 7d63d8d..c3c0bf1 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -3663,10 +3663,6 @@ static void valleyview_crtc_enable(struct drm_crtc *crtc)
if (encoder->pre_enable)
encoder->pre_enable(encoder);
- /* VLV wants encoder enabling _before_ the pipe is up. */
- for_each_encoder_on_crtc(dev, crtc, encoder)
- encoder->enable(encoder);
-
i9xx_pfit_enable(intel_crtc);
intel_crtc_load_lut(crtc);
@@ -3677,6 +3673,9 @@ static void valleyview_crtc_enable(struct drm_crtc *crtc)
intel_crtc_update_cursor(crtc, true);
intel_update_fbc(dev);
+
+ for_each_encoder_on_crtc(dev, crtc, encoder)
+ encoder->enable(encoder);
}
static void i9xx_crtc_enable(struct drm_crtc *crtc)
--
1.7.10.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2013-07-30 8:10 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-06-04 10:26 [PATCH 1/3] drm/i915: rearrange vlv dp enable and pre_enable callbacks Jani Nikula
2013-06-04 10:26 ` [PATCH 2/3] drm/i915: rearrange vlv hdmi " Jani Nikula
2013-06-04 10:26 ` [PATCH 3/3] drm/i915: move encoder->enable callback later in VLV crtc enable Jani Nikula
2013-06-04 10:49 ` Jani Nikula
2013-06-04 11:49 ` Daniel Vetter
-- strict thread matches above, loose matches on Subject: below --
2013-07-30 8:08 [PATCH 0/3] drm/i915: vlv pre_enable/enable callback refactoring Jani Nikula
2013-07-30 8:08 ` [PATCH 3/3] drm/i915: move encoder->enable callback later in VLV crtc enable Jani Nikula
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.