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@xxxxxxxxx> > > --- > > 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@xxxxxxxxxxxxxxxxxxxxx > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx > _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx