From: Imre Deak <imre.deak@intel.com>
To: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 1/6] drm/i915: Merge the PPS register definitions
Date: Tue, 09 Aug 2016 16:24:14 +0300 [thread overview]
Message-ID: <1470749054.5461.34.camel@intel.com> (raw)
In-Reply-To: <20160809115309.GL4329@intel.com>
On ti, 2016-08-09 at 14:53 +0300, Ville Syrjälä wrote:
> On Tue, Aug 09, 2016 at 02:34:07PM +0300, Imre Deak wrote:
> > The PPS registers are pretty much the same everywhere, the differences
> > being:
> > - Register fields appearing, disappearing from one platform to the
> > next: panel-reset-on-powerdown, backlight-on, panel-port,
> > register-unlock
> > - Different register base addresses
> > - Different number of PPS instances: 2 on VLV/CHV/BXT, 1 everywhere
> > else.
> >
> > We can merge the separate set of PPS definitions by extending the PPS
> > instance argument to all platforms and using instance 0 on platforms
> > with a single instance. This means we'll need to calculate the register
> > addresses dynamically based on the given platform and PPS instance.
> >
> > Signed-off-by: Imre Deak <imre.deak@intel.com>
> > ---
> > drivers/gpu/drm/i915/i915_drv.h | 2 +
> > drivers/gpu/drm/i915/i915_reg.h | 145 ++++++++++++++---------------------
> > drivers/gpu/drm/i915/i915_suspend.c | 30 +++-----
> > drivers/gpu/drm/i915/intel_display.c | 22 ++++--
> > drivers/gpu/drm/i915/intel_dp.c | 47 +++++-------
> > drivers/gpu/drm/i915/intel_lvds.c | 43 +++--------
> > 6 files changed, 119 insertions(+), 170 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> > index c36d176..fddaec6 100644
> > --- a/drivers/gpu/drm/i915/i915_drv.h
> > +++ b/drivers/gpu/drm/i915/i915_drv.h
> > @@ -1749,6 +1749,8 @@ struct drm_i915_private {
> >
> > uint32_t psr_mmio_base;
> >
> > + uint32_t pps_mmio_base;
> > +
> > wait_queue_head_t gmbus_wait_queue;
> >
> > struct pci_dev *bridge_dev;
> > diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> > index f38a5e2..b65fe50 100644
> > --- a/drivers/gpu/drm/i915/i915_reg.h
> > +++ b/drivers/gpu/drm/i915/i915_reg.h
> > @@ -3660,8 +3660,17 @@ enum {
> > #define VIDEO_DIP_ENABLE_SPD_HSW (1 << 0)
> >
> > /* Panel power sequencing */
> > -#define PP_STATUS _MMIO(0x61200)
> > -#define PP_ON (1 << 31)
> > +#define PPS_BASE 0x61200
> > +#define VLV_PPS_BASE (VLV_DISPLAY_BASE + PPS_BASE)
> > +#define PCH_PPS_BASE 0xC7200
> > +
> > +#define _MMIO_PPS(pps_idx, reg) _MMIO(dev_priv->pps_mmio_base - \
> > + PPS_BASE + (reg) + \
> > + (pps_idx) * 0x100)
> > +
> > +#define _PP_STATUS 0x61200
> > +#define PP_STATUS(pps_idx) _MMIO_PPS(pps_idx, _PP_STATUS)
> > +#define PP_ON (1 << 31)
> > /*
> > * Indicates that all dependencies of the panel are on:
> > *
> > @@ -3669,14 +3678,14 @@ enum {
> > * - pipe enabled
> > * - LVDS/DVOB/DVOC on
> > */
> > -#define PP_READY (1 << 30)
> > -#define PP_SEQUENCE_NONE (0 << 28)
> > -#define PP_SEQUENCE_POWER_UP (1 << 28)
> > -#define PP_SEQUENCE_POWER_DOWN (2 << 28)
> > -#define PP_SEQUENCE_MASK (3 << 28)
> > -#define PP_SEQUENCE_SHIFT 28
> > -#define PP_CYCLE_DELAY_ACTIVE (1 << 27)
> > -#define PP_SEQUENCE_STATE_MASK 0x0000000f
> > +#define PP_READY (1 << 30)
> > +#define PP_SEQUENCE_NONE (0 << 28)
> > +#define PP_SEQUENCE_POWER_UP (1 << 28)
> > +#define PP_SEQUENCE_POWER_DOWN (2 << 28)
> > +#define PP_SEQUENCE_MASK (3 << 28)
> > +#define PP_SEQUENCE_SHIFT 28
> > +#define PP_CYCLE_DELAY_ACTIVE (1 << 27)
> > +#define PP_SEQUENCE_STATE_MASK 0x0000000f
> > #define PP_SEQUENCE_STATE_OFF_IDLE (0x0 << 0)
> > #define PP_SEQUENCE_STATE_OFF_S0_1 (0x1 << 0)
> > #define PP_SEQUENCE_STATE_OFF_S0_2 (0x2 << 0)
> > @@ -3686,11 +3695,46 @@ enum {
> > #define PP_SEQUENCE_STATE_ON_S1_2 (0xa << 0)
> > #define PP_SEQUENCE_STATE_ON_S1_3 (0xb << 0)
> > #define PP_SEQUENCE_STATE_RESET (0xf << 0)
> > -#define PP_CONTROL _MMIO(0x61204)
> > -#define POWER_TARGET_ON (1 << 0)
> > -#define PP_ON_DELAYS _MMIO(0x61208)
> > -#define PP_OFF_DELAYS _MMIO(0x6120c)
> > -#define PP_DIVISOR _MMIO(0x61210)
> > +
> > +#define _PP_CONTROL 0x61204
> > +#define PP_CONTROL(pps_idx) _MMIO_PPS(pps_idx, _PP_CONTROL)
> > +#define PANEL_UNLOCK_REGS (0xabcd << 16)
> > +#define PANEL_UNLOCK_MASK (0xffff << 16)
> > +#define BXT_POWER_CYCLE_DELAY_MASK 0x1f0
> > +#define BXT_POWER_CYCLE_DELAY_SHIFT 4
> > +#define EDP_FORCE_VDD (1 << 3)
> > +#define EDP_BLC_ENABLE (1 << 2)
> > +#define PANEL_POWER_RESET (1 << 1)
> > +#define PANEL_POWER_OFF (0 << 0)
> > +#define PANEL_POWER_ON (1 << 0)
> > +#define POWER_TARGET_ON (1 << 0)
> > +
> > +#define _PP_ON_DELAYS 0x61208
> > +#define PP_ON_DELAYS(pps_idx) _MMIO_PPS(pps_idx, _PP_ON_DELAYS)
> > +#define PANEL_PORT_SELECT_MASK (3 << 30)
> > +#define PANEL_PORT_SELECT_LVDS (0 << 30)
> > +#define PANEL_PORT_SELECT_DPA (1 << 30)
> > +#define PANEL_PORT_SELECT_DPC (2 << 30)
> > +#define PANEL_PORT_SELECT_DPD (3 << 30)
> > +#define PANEL_PORT_SELECT_VLV(port) ((port) << 30)
> > +#define PANEL_POWER_UP_DELAY_MASK 0x1fff0000
> > +#define PANEL_POWER_UP_DELAY_SHIFT 16
> > +#define PANEL_LIGHT_ON_DELAY_MASK 0x1fff
> > +#define PANEL_LIGHT_ON_DELAY_SHIFT 0
> > +
> > +#define _PP_OFF_DELAYS 0x6120C
> > +#define PP_OFF_DELAYS(pps_idx) _MMIO_PPS(pps_idx, _PP_OFF_DELAYS)
> > +#define PANEL_POWER_DOWN_DELAY_MASK 0x1fff0000
> > +#define PANEL_POWER_DOWN_DELAY_SHIFT 16
> > +#define PANEL_LIGHT_OFF_DELAY_MASK 0x1fff
> > +#define PANEL_LIGHT_OFF_DELAY_SHIFT 0
> > +
> > +#define _PP_DIVISOR 0x61210
> > +#define PP_DIVISOR(pps_idx) _MMIO_PPS(pps_idx, _PP_DIVISOR)
> > +#define PP_REFERENCE_DIVIDER_MASK 0xffffff00
> > +#define PP_REFERENCE_DIVIDER_SHIFT 8
> > +#define PANEL_POWER_CYCLE_DELAY_MASK 0x1f
> > +#define PANEL_POWER_CYCLE_DELAY_SHIFT 0
> >
> > /* Panel fitting */
> > #define PFIT_CONTROL _MMIO(dev_priv->info.display_mmio_offset + 0x61230)
> > @@ -6750,77 +6794,6 @@ enum {
> > #define PCH_LVDS _MMIO(0xe1180)
> > #define LVDS_DETECTED (1 << 1)
> >
> > -/* vlv has 2 sets of panel control regs. */
> > -#define _PIPEA_PP_STATUS (VLV_DISPLAY_BASE + 0x61200)
> > -#define _PIPEA_PP_CONTROL (VLV_DISPLAY_BASE + 0x61204)
> > -#define _PIPEA_PP_ON_DELAYS (VLV_DISPLAY_BASE + 0x61208)
> > -#define PANEL_PORT_SELECT_VLV(port) ((port) << 30)
> > -#define _PIPEA_PP_OFF_DELAYS (VLV_DISPLAY_BASE + 0x6120c)
> > -#define _PIPEA_PP_DIVISOR (VLV_DISPLAY_BASE + 0x61210)
> > -
> > -#define _PIPEB_PP_STATUS (VLV_DISPLAY_BASE + 0x61300)
> > -#define _PIPEB_PP_CONTROL (VLV_DISPLAY_BASE + 0x61304)
> > -#define _PIPEB_PP_ON_DELAYS (VLV_DISPLAY_BASE + 0x61308)
> > -#define _PIPEB_PP_OFF_DELAYS (VLV_DISPLAY_BASE + 0x6130c)
> > -#define _PIPEB_PP_DIVISOR (VLV_DISPLAY_BASE + 0x61310)
> > -
> > -#define VLV_PIPE_PP_STATUS(pipe) _MMIO_PIPE(pipe, _PIPEA_PP_STATUS, _PIPEB_PP_STATUS)
> > -#define VLV_PIPE_PP_CONTROL(pipe) _MMIO_PIPE(pipe, _PIPEA_PP_CONTROL, _PIPEB_PP_CONTROL)
> > -#define VLV_PIPE_PP_ON_DELAYS(pipe) _MMIO_PIPE(pipe, _PIPEA_PP_ON_DELAYS, _PIPEB_PP_ON_DELAYS)
> > -#define VLV_PIPE_PP_OFF_DELAYS(pipe) _MMIO_PIPE(pipe, _PIPEA_PP_OFF_DELAYS, _PIPEB_PP_OFF_DELAYS)
> > -#define VLV_PIPE_PP_DIVISOR(pipe) _MMIO_PIPE(pipe, _PIPEA_PP_DIVISOR, _PIPEB_PP_DIVISOR)
> > -
> > -#define _PCH_PP_STATUS 0xc7200
> > -#define _PCH_PP_CONTROL 0xc7204
> > -#define PANEL_UNLOCK_REGS (0xabcd << 16)
> > -#define PANEL_UNLOCK_MASK (0xffff << 16)
> > -#define BXT_POWER_CYCLE_DELAY_MASK (0x1f0)
> > -#define BXT_POWER_CYCLE_DELAY_SHIFT 4
> > -#define EDP_FORCE_VDD (1 << 3)
> > -#define EDP_BLC_ENABLE (1 << 2)
> > -#define PANEL_POWER_RESET (1 << 1)
> > -#define PANEL_POWER_OFF (0 << 0)
> > -#define PANEL_POWER_ON (1 << 0)
> > -#define _PCH_PP_ON_DELAYS 0xc7208
> > -#define PANEL_PORT_SELECT_MASK (3 << 30)
> > -#define PANEL_PORT_SELECT_LVDS (0 << 30)
> > -#define PANEL_PORT_SELECT_DPA (1 << 30)
> > -#define PANEL_PORT_SELECT_DPC (2 << 30)
> > -#define PANEL_PORT_SELECT_DPD (3 << 30)
> > -#define PANEL_POWER_UP_DELAY_MASK (0x1fff0000)
> > -#define PANEL_POWER_UP_DELAY_SHIFT 16
> > -#define PANEL_LIGHT_ON_DELAY_MASK (0x1fff)
> > -#define PANEL_LIGHT_ON_DELAY_SHIFT 0
> > -
> > -#define _PCH_PP_OFF_DELAYS 0xc720c
> > -#define PANEL_POWER_DOWN_DELAY_MASK (0x1fff0000)
> > -#define PANEL_POWER_DOWN_DELAY_SHIFT 16
> > -#define PANEL_LIGHT_OFF_DELAY_MASK (0x1fff)
> > -#define PANEL_LIGHT_OFF_DELAY_SHIFT 0
> > -
> > -#define _PCH_PP_DIVISOR 0xc7210
> > -#define PP_REFERENCE_DIVIDER_MASK (0xffffff00)
> > -#define PP_REFERENCE_DIVIDER_SHIFT 8
> > -#define PANEL_POWER_CYCLE_DELAY_MASK (0x1f)
> > -#define PANEL_POWER_CYCLE_DELAY_SHIFT 0
> > -
> > -#define PCH_PP_STATUS _MMIO(_PCH_PP_STATUS)
> > -#define PCH_PP_CONTROL _MMIO(_PCH_PP_CONTROL)
> > -#define PCH_PP_ON_DELAYS _MMIO(_PCH_PP_ON_DELAYS)
> > -#define PCH_PP_OFF_DELAYS _MMIO(_PCH_PP_OFF_DELAYS)
> > -#define PCH_PP_DIVISOR _MMIO(_PCH_PP_DIVISOR)
> > -
> > -/* BXT PPS changes - 2nd set of PPS registers */
> > -#define _BXT_PP_STATUS2 0xc7300
> > -#define _BXT_PP_CONTROL2 0xc7304
> > -#define _BXT_PP_ON_DELAYS2 0xc7308
> > -#define _BXT_PP_OFF_DELAYS2 0xc730c
> > -
> > -#define BXT_PP_STATUS(n) _MMIO_PIPE(n, _PCH_PP_STATUS, _BXT_PP_STATUS2)
> > -#define BXT_PP_CONTROL(n) _MMIO_PIPE(n, _PCH_PP_CONTROL, _BXT_PP_CONTROL2)
> > -#define BXT_PP_ON_DELAYS(n) _MMIO_PIPE(n, _PCH_PP_ON_DELAYS, _BXT_PP_ON_DELAYS2)
> > -#define BXT_PP_OFF_DELAYS(n) _MMIO_PIPE(n, _PCH_PP_OFF_DELAYS, _BXT_PP_OFF_DELAYS2)
> > -
> > #define _PCH_DP_B 0xe4100
> > #define PCH_DP_B _MMIO(_PCH_DP_B)
> > #define _PCH_DPB_AUX_CH_CTL 0xe4110
> > diff --git a/drivers/gpu/drm/i915/i915_suspend.c b/drivers/gpu/drm/i915/i915_suspend.c
> > index 5cfe4c7..c826b69 100644
> > --- a/drivers/gpu/drm/i915/i915_suspend.c
> > +++ b/drivers/gpu/drm/i915/i915_suspend.c
> > @@ -44,16 +44,11 @@ static void i915_save_display(struct drm_device *dev)
> > dev_priv->regfile.saveLVDS = I915_READ(LVDS);
> >
> > /* Panel power sequencer */
> > - if (HAS_PCH_SPLIT(dev)) {
> > - dev_priv->regfile.savePP_CONTROL = I915_READ(PCH_PP_CONTROL);
> > - dev_priv->regfile.savePP_ON_DELAYS = I915_READ(PCH_PP_ON_DELAYS);
> > - dev_priv->regfile.savePP_OFF_DELAYS = I915_READ(PCH_PP_OFF_DELAYS);
> > - dev_priv->regfile.savePP_DIVISOR = I915_READ(PCH_PP_DIVISOR);
> > - } else if (INTEL_INFO(dev)->gen <= 4) {
> > - dev_priv->regfile.savePP_CONTROL = I915_READ(PP_CONTROL);
> > - dev_priv->regfile.savePP_ON_DELAYS = I915_READ(PP_ON_DELAYS);
> > - dev_priv->regfile.savePP_OFF_DELAYS = I915_READ(PP_OFF_DELAYS);
> > - dev_priv->regfile.savePP_DIVISOR = I915_READ(PP_DIVISOR);
> > + if (HAS_PCH_SPLIT(dev_priv) || INTEL_GEN(dev_priv) <= 4) {
> > + dev_priv->regfile.savePP_CONTROL = I915_READ(PP_CONTROL(0));
> > + dev_priv->regfile.savePP_ON_DELAYS = I915_READ(PP_ON_DELAYS(0));
> > + dev_priv->regfile.savePP_OFF_DELAYS = I915_READ(PP_OFF_DELAYS(0));
> > + dev_priv->regfile.savePP_DIVISOR = I915_READ(PP_DIVISOR(0));
> > }
> >
> > /* save FBC interval */
> > @@ -79,16 +74,11 @@ static void i915_restore_display(struct drm_device *dev)
> > I915_WRITE(LVDS, dev_priv->regfile.saveLVDS & mask);
> >
> > /* Panel power sequencer */
> > - if (HAS_PCH_SPLIT(dev)) {
> > - I915_WRITE(PCH_PP_ON_DELAYS, dev_priv->regfile.savePP_ON_DELAYS);
> > - I915_WRITE(PCH_PP_OFF_DELAYS, dev_priv->regfile.savePP_OFF_DELAYS);
> > - I915_WRITE(PCH_PP_DIVISOR, dev_priv->regfile.savePP_DIVISOR);
> > - I915_WRITE(PCH_PP_CONTROL, dev_priv->regfile.savePP_CONTROL);
> > - } else if (INTEL_INFO(dev)->gen <= 4) {
> > - I915_WRITE(PP_ON_DELAYS, dev_priv->regfile.savePP_ON_DELAYS);
> > - I915_WRITE(PP_OFF_DELAYS, dev_priv->regfile.savePP_OFF_DELAYS);
> > - I915_WRITE(PP_DIVISOR, dev_priv->regfile.savePP_DIVISOR);
> > - I915_WRITE(PP_CONTROL, dev_priv->regfile.savePP_CONTROL);
> > + if (HAS_PCH_SPLIT(dev_priv) || INTEL_GEN(dev_priv) <= 4) {
> > + I915_WRITE(PP_ON_DELAYS(0), dev_priv->regfile.savePP_ON_DELAYS);
> > + I915_WRITE(PP_OFF_DELAYS(0), dev_priv->regfile.savePP_OFF_DELAYS);
> > + I915_WRITE(PP_DIVISOR(0), dev_priv->regfile.savePP_DIVISOR);
> > + I915_WRITE(PP_CONTROL(0), dev_priv->regfile.savePP_CONTROL);
> > }
> >
> > /* only restore FBC info on the platform that supports FBC*/
> > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> > index c6f27ab..3d5fd06 100644
> > --- a/drivers/gpu/drm/i915/intel_display.c
> > +++ b/drivers/gpu/drm/i915/intel_display.c
> > @@ -1202,8 +1202,8 @@ void assert_panel_unlocked(struct drm_i915_private *dev_priv,
> > if (HAS_PCH_SPLIT(dev)) {
> > u32 port_sel;
> >
> > - pp_reg = PCH_PP_CONTROL;
> > - port_sel = I915_READ(PCH_PP_ON_DELAYS) & PANEL_PORT_SELECT_MASK;
> > + pp_reg = PP_CONTROL(0);
> > + port_sel = I915_READ(PP_ON_DELAYS(0)) & PANEL_PORT_SELECT_MASK;
> >
> > if (port_sel == PANEL_PORT_SELECT_LVDS &&
> > I915_READ(PCH_LVDS) & LVDS_PIPEB_SELECT)
> > @@ -1211,10 +1211,10 @@ void assert_panel_unlocked(struct drm_i915_private *dev_priv,
> > /* XXX: else fix for eDP */
> > } else if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) {
> > /* presumably write lock depends on pipe, not port select */
> > - pp_reg = VLV_PIPE_PP_CONTROL(pipe);
> > + pp_reg = PP_CONTROL(pipe);
> > panel_pipe = pipe;
> > } else {
> > - pp_reg = PP_CONTROL;
> > + pp_reg = PP_CONTROL(0);
> > if (I915_READ(LVDS) & LVDS_PIPEB_SELECT)
> > panel_pipe = PIPE_B;
> > }
> > @@ -9411,7 +9411,7 @@ static void assert_can_disable_lcpll(struct drm_i915_private *dev_priv)
> > I915_STATE_WARN(I915_READ(SPLL_CTL) & SPLL_PLL_ENABLE, "SPLL enabled\n");
> > I915_STATE_WARN(I915_READ(WRPLL_CTL(0)) & WRPLL_PLL_ENABLE, "WRPLL1 enabled\n");
> > I915_STATE_WARN(I915_READ(WRPLL_CTL(1)) & WRPLL_PLL_ENABLE, "WRPLL2 enabled\n");
> > - I915_STATE_WARN(I915_READ(PCH_PP_STATUS) & PP_ON, "Panel power on\n");
> > + I915_STATE_WARN(I915_READ(PP_STATUS(0)) & PP_ON, "Panel power on\n");
> > I915_STATE_WARN(I915_READ(BLC_PWM_CPU_CTL2) & BLM_PWM_ENABLE,
> > "CPU PWM1 enabled\n");
> > if (IS_HASWELL(dev))
> > @@ -14635,12 +14635,24 @@ static bool intel_crt_present(struct drm_device *dev)
> > return true;
> > }
> >
> > +static void intel_pps_init(struct drm_i915_private *dev_priv)
> > +{
> > + if (HAS_PCH_SPLIT(dev_priv) || IS_BROXTON(dev_priv))
> > + dev_priv->pps_mmio_base = PCH_PPS_BASE;
> > + else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
> > + dev_priv->pps_mmio_base = VLV_PPS_BASE;
> > + else
> > + dev_priv->pps_mmio_base = PPS_BASE;
> > +}
> > +
> > static void intel_setup_outputs(struct drm_device *dev)
> > {
> > struct drm_i915_private *dev_priv = to_i915(dev);
> > struct intel_encoder *encoder;
> > bool dpd_is_edp = false;
> >
> > + intel_pps_init(dev_priv);
> > +
> > /*
> > * intel_edp_init_connector() depends on this completing first, to
> > * prevent the registeration of both eDP and LVDS and the incorrect
> > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> > index 8fe2afa..a5cef91 100644
> > --- a/drivers/gpu/drm/i915/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > @@ -463,13 +463,13 @@ typedef bool (*vlv_pipe_check)(struct drm_i915_private *dev_priv,
> > static bool vlv_pipe_has_pp_on(struct drm_i915_private *dev_priv,
> > enum pipe pipe)
> > {
> > - return I915_READ(VLV_PIPE_PP_STATUS(pipe)) & PP_ON;
> > + return I915_READ(PP_STATUS(pipe)) & PP_ON;
> > }
> >
> > static bool vlv_pipe_has_vdd_on(struct drm_i915_private *dev_priv,
> > enum pipe pipe)
> > {
> > - return I915_READ(VLV_PIPE_PP_CONTROL(pipe)) & EDP_FORCE_VDD;
> > + return I915_READ(PP_CONTROL(pipe)) & EDP_FORCE_VDD;
> > }
> >
> > static bool vlv_pipe_any(struct drm_i915_private *dev_priv,
> > @@ -486,7 +486,7 @@ vlv_initial_pps_pipe(struct drm_i915_private *dev_priv,
> > enum pipe pipe;
> >
> > for (pipe = PIPE_A; pipe <= PIPE_B; pipe++) {
> > - u32 port_sel = I915_READ(VLV_PIPE_PP_ON_DELAYS(pipe)) &
> > + u32 port_sel = I915_READ(PP_ON_DELAYS(pipe)) &
> > PANEL_PORT_SELECT_MASK;
> >
> > if (port_sel != PANEL_PORT_SELECT_VLV(port))
> > @@ -583,30 +583,23 @@ static void intel_pps_get_registers(struct drm_i915_private *dev_priv,
> > struct intel_dp *intel_dp,
> > struct pps_registers *regs)
> > {
> > + int pps_idx;
> > +
> > memset(regs, 0, sizeof(*regs));
> >
> > - if (IS_BROXTON(dev_priv)) {
> > - int idx = bxt_power_sequencer_idx(intel_dp);
> > + if (IS_BROXTON(dev_priv))
> > + pps_idx = bxt_power_sequencer_idx(intel_dp);
> > + else if (HAS_PCH_SPLIT(dev_priv))
> > + pps_idx = 0;
>
> int pps_idx = 0;
>
> if (BXT)
> ...
> else if (VLV||CHV)
> ...
>
> is how I'd write this.
Ok, will change it.
>
> > + else
> > + pps_idx = vlv_power_sequencer_pipe(intel_dp);
> >
> > - regs->pp_ctrl = BXT_PP_CONTROL(idx);
> > - regs->pp_stat = BXT_PP_STATUS(idx);
> > - regs->pp_on = BXT_PP_ON_DELAYS(idx);
> > - regs->pp_off = BXT_PP_OFF_DELAYS(idx);
> > - } else if (HAS_PCH_SPLIT(dev_priv)) {
> > - regs->pp_ctrl = PCH_PP_CONTROL;
> > - regs->pp_stat = PCH_PP_STATUS;
> > - regs->pp_on = PCH_PP_ON_DELAYS;
> > - regs->pp_off = PCH_PP_OFF_DELAYS;
> > - regs->pp_div = PCH_PP_DIVISOR;
> > - } else {
> > - enum pipe pipe = vlv_power_sequencer_pipe(intel_dp);
> > -
> > - regs->pp_ctrl = VLV_PIPE_PP_CONTROL(pipe);
> > - regs->pp_stat = VLV_PIPE_PP_STATUS(pipe);
> > - regs->pp_on = VLV_PIPE_PP_ON_DELAYS(pipe);
> > - regs->pp_off = VLV_PIPE_PP_OFF_DELAYS(pipe);
> > - regs->pp_div = VLV_PIPE_PP_DIVISOR(pipe);
> > - }
> > + regs->pp_ctrl = PP_CONTROL(pps_idx);
> > + regs->pp_stat = PP_STATUS(pps_idx);
> > + regs->pp_on = PP_ON_DELAYS(pps_idx);
> > + regs->pp_off = PP_OFF_DELAYS(pps_idx);
> > + if (!IS_BROXTON(dev_priv))
> > + regs->pp_div = PP_DIVISOR(pps_idx);
> > }
> >
> > static i915_reg_t
> > @@ -651,8 +644,8 @@ static int edp_notify_handler(struct notifier_block *this, unsigned long code,
> > i915_reg_t pp_ctrl_reg, pp_div_reg;
> > u32 pp_div;
> >
> > - pp_ctrl_reg = VLV_PIPE_PP_CONTROL(pipe);
> > - pp_div_reg = VLV_PIPE_PP_DIVISOR(pipe);
> > + pp_ctrl_reg = PP_CONTROL(pipe);
> > + pp_div_reg = PP_DIVISOR(pipe);
> > pp_div = I915_READ(pp_div_reg);
> > pp_div &= PP_REFERENCE_DIVIDER_MASK;
> >
> > @@ -2729,7 +2722,7 @@ static void vlv_detach_power_sequencer(struct intel_dp *intel_dp)
> > struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
> > struct drm_i915_private *dev_priv = to_i915(intel_dig_port->base.base.dev);
> > enum pipe pipe = intel_dp->pps_pipe;
> > - i915_reg_t pp_on_reg = VLV_PIPE_PP_ON_DELAYS(pipe);
> > + i915_reg_t pp_on_reg = PP_ON_DELAYS(pipe);
> >
> > edp_panel_vdd_off_sync(intel_dp);
> >
> > diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
> > index 4955047..413e729 100644
> > --- a/drivers/gpu/drm/i915/intel_lvds.c
> > +++ b/drivers/gpu/drm/i915/intel_lvds.c
> > @@ -217,21 +217,12 @@ static void intel_enable_lvds(struct intel_encoder *encoder)
> > struct intel_connector *intel_connector =
> > &lvds_encoder->attached_connector->base;
> > struct drm_i915_private *dev_priv = to_i915(dev);
> > - i915_reg_t ctl_reg, stat_reg;
> > -
> > - if (HAS_PCH_SPLIT(dev)) {
> > - ctl_reg = PCH_PP_CONTROL;
> > - stat_reg = PCH_PP_STATUS;
> > - } else {
> > - ctl_reg = PP_CONTROL;
> > - stat_reg = PP_STATUS;
> > - }
> >
> > I915_WRITE(lvds_encoder->reg, I915_READ(lvds_encoder->reg) | LVDS_PORT_EN);
> >
> > - I915_WRITE(ctl_reg, I915_READ(ctl_reg) | POWER_TARGET_ON);
> > + I915_WRITE(PP_CONTROL(0), I915_READ(PP_CONTROL(0)) | POWER_TARGET_ON);
> > POSTING_READ(lvds_encoder->reg);
> > - if (intel_wait_for_register(dev_priv, stat_reg, PP_ON, PP_ON, 1000))
> > + if (intel_wait_for_register(dev_priv, PP_STATUS(0), PP_ON, PP_ON, 1000))
> > DRM_ERROR("timed out waiting for panel to power on\n");
> >
> > intel_panel_enable_backlight(intel_connector);
> > @@ -242,18 +233,9 @@ static void intel_disable_lvds(struct intel_encoder *encoder)
> > struct drm_device *dev = encoder->base.dev;
> > struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
> > struct drm_i915_private *dev_priv = to_i915(dev);
> > - i915_reg_t ctl_reg, stat_reg;
> >
> > - if (HAS_PCH_SPLIT(dev)) {
> > - ctl_reg = PCH_PP_CONTROL;
> > - stat_reg = PCH_PP_STATUS;
> > - } else {
> > - ctl_reg = PP_CONTROL;
> > - stat_reg = PP_STATUS;
> > - }
> > -
> > - I915_WRITE(ctl_reg, I915_READ(ctl_reg) & ~POWER_TARGET_ON);
> > - if (intel_wait_for_register(dev_priv, stat_reg, PP_ON, 0, 1000))
> > + I915_WRITE(PP_CONTROL(0), I915_READ(PP_CONTROL(0)) & ~POWER_TARGET_ON);
> > + if (intel_wait_for_register(dev_priv, PP_STATUS(0), PP_ON, 0, 1000))
> > DRM_ERROR("timed out waiting for panel to power off\n");
> >
> > I915_WRITE(lvds_encoder->reg, I915_READ(lvds_encoder->reg) & ~LVDS_PORT_EN);
> > @@ -904,13 +886,10 @@ void intel_lvds_init(struct drm_device *dev)
> > * Unlock registers and just leave them unlocked. Do this before
> > * checking quirk lists to avoid bogus WARNINGs.
> > */
> > - if (HAS_PCH_SPLIT(dev)) {
> > - I915_WRITE(PCH_PP_CONTROL,
> > - I915_READ(PCH_PP_CONTROL) | PANEL_UNLOCK_REGS);
> > - } else if (INTEL_INFO(dev_priv)->gen < 5) {
> > - I915_WRITE(PP_CONTROL,
> > - I915_READ(PP_CONTROL) | PANEL_UNLOCK_REGS);
> > - }
> > + if (HAS_PCH_SPLIT(dev_priv) || INTEL_GEN(dev_priv) <= 4)
> > + I915_WRITE(PP_CONTROL(0),
> > + I915_READ(PP_CONTROL(0)) | PANEL_UNLOCK_REGS);
> > +
> > if (!intel_lvds_supported(dev))
> > return;
> >
> > @@ -945,12 +924,12 @@ void intel_lvds_init(struct drm_device *dev)
> >
> > /* Set the Panel Power On/Off timings if uninitialized. */
> > if (INTEL_INFO(dev_priv)->gen < 5 &&
> > - I915_READ(PP_ON_DELAYS) == 0 && I915_READ(PP_OFF_DELAYS) == 0) {
> > + I915_READ(PP_ON_DELAYS(0)) == 0 && I915_READ(PP_OFF_DELAYS(0)) == 0) {
> > /* Set T2 to 40ms and T5 to 200ms */
> > - I915_WRITE(PP_ON_DELAYS, 0x019007d0);
> > + I915_WRITE(PP_ON_DELAYS(0), 0x019007d0);
> >
> > /* Set T3 to 35ms and Tx to 200ms */
> > - I915_WRITE(PP_OFF_DELAYS, 0x015e07d0);
> > + I915_WRITE(PP_OFF_DELAYS(0), 0x015e07d0);
> >
> > DRM_DEBUG_KMS("Panel power timings uninitialized, setting defaults\n");
> > }
> > --
> > 2.5.0
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2016-08-09 13:24 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-09 11:34 [PATCH 0/6] drm/i915: Clean up LVDS/PPS macros, suspend/resume logic Imre Deak
2016-08-09 11:34 ` [PATCH 1/6] drm/i915: Merge the PPS register definitions Imre Deak
2016-08-09 11:53 ` Ville Syrjälä
2016-08-09 13:24 ` Imre Deak [this message]
2016-08-09 17:21 ` [PATCH v2 " Imre Deak
2016-08-09 17:50 ` Ville Syrjälä
2016-08-09 11:34 ` [PATCH 2/6] drm/i915: Merge TARGET_POWER_ON and PANEL_POWER_ON flag definitions Imre Deak
2016-08-09 17:51 ` Ville Syrjälä
2016-08-09 11:34 ` [PATCH 3/6] drm/i915/lvds: Restore initial HW state during encoder enabling Imre Deak
2016-08-09 12:48 ` Ville Syrjälä
2016-08-09 14:40 ` Imre Deak
2016-08-09 14:55 ` Ville Syrjälä
2016-08-09 17:21 ` [PATCH v2 " Imre Deak
2016-08-09 17:46 ` Ville Syrjälä
2016-08-09 18:59 ` [PATCH v3 " Imre Deak
2016-08-09 11:34 ` [PATCH 4/6] drm/i915/dp: Restore PPS HW state from the encoder resume hook Imre Deak
2016-08-09 12:52 ` Ville Syrjälä
2016-08-09 15:15 ` Imre Deak
2016-08-09 17:21 ` [PATCH v2 " Imre Deak
2016-08-09 17:49 ` Ville Syrjälä
2016-08-09 11:34 ` [PATCH 5/6] drm/i915: Apply the PPS register unlock workaround more consistently Imre Deak
2016-08-09 13:01 ` Ville Syrjälä
2016-08-09 15:17 ` Imre Deak
2016-08-09 17:21 ` [PATCH v2 " Imre Deak
2016-08-09 17:46 ` Ville Syrjälä
2016-08-09 18:59 ` [PATCH v3 " Imre Deak
2016-08-09 11:34 ` [PATCH 6/6] drm/i915: Remove LVDS and PPS suspend time save/restore Imre Deak
2016-08-09 18:44 ` Ville Syrjälä
2016-08-09 12:05 ` ✓ Ro.CI.BAT: success for drm/i915: Clean up LVDS/PPS macros, suspend/resume logic Patchwork
2016-08-10 9:35 ` ✗ Ro.CI.BAT: failure for drm/i915: Clean up LVDS/PPS macros, suspend/resume logic (rev7) Patchwork
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=1470749054.5461.34.camel@intel.com \
--to=imre.deak@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=ville.syrjala@linux.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.