drm/i915: Wrappers for display register waits
authorDaniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Fri, 16 Aug 2019 01:23:43 +0000 (18:23 -0700)
committerChris Wilson <chris@chris-wilson.co.uk>
Fri, 16 Aug 2019 21:19:05 +0000 (22:19 +0100)
To reduce the number of explicit dev_priv->uncore calls in the display
code ahead of the introduction of dev_priv->de_uncore, this patch
introduces a wrapper for one of the main usages of it, the register
waits. When we transition to the new uncore, we can just update the
wrapper to point to the appropriate structure.

Since the vast majority of waits are on a set or clear of a bit or mask,
add set & clear flavours of the wrapper to simplify the code.

Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20190816012343.36433-7-daniele.ceraolospurio@intel.com
17 files changed:
drivers/gpu/drm/i915/display/icl_dsi.c
drivers/gpu/drm/i915/display/intel_cdclk.c
drivers/gpu/drm/i915/display/intel_crt.c
drivers/gpu/drm/i915/display/intel_ddi.c
drivers/gpu/drm/i915/display/intel_display.c
drivers/gpu/drm/i915/display/intel_display_power.c
drivers/gpu/drm/i915/display/intel_dp.c
drivers/gpu/drm/i915/display/intel_dp_mst.c
drivers/gpu/drm/i915/display/intel_dpio_phy.c
drivers/gpu/drm/i915/display/intel_dpll_mgr.c
drivers/gpu/drm/i915/display/intel_fbc.c
drivers/gpu/drm/i915/display/intel_hdcp.c
drivers/gpu/drm/i915/display/intel_lvds.c
drivers/gpu/drm/i915/display/intel_psr.c
drivers/gpu/drm/i915/display/vlv_dsi.c
drivers/gpu/drm/i915/display/vlv_dsi_pll.c
drivers/gpu/drm/i915/i915_drv.h

index ae33639d48ba1ff7e224e86c3487ca0f7f75a967..6e398c33a524eb577e6cc586b71b9eb182f2eca5 100644 (file)
@@ -898,10 +898,8 @@ static void gen11_dsi_enable_transcoder(struct intel_encoder *encoder)
                I915_WRITE(PIPECONF(dsi_trans), tmp);
 
                /* wait for transcoder to be enabled */
-               if (intel_wait_for_register(&dev_priv->uncore,
-                                           PIPECONF(dsi_trans),
-                                           I965_PIPECONF_ACTIVE,
-                                           I965_PIPECONF_ACTIVE, 10))
+               if (intel_de_wait_for_set(dev_priv, PIPECONF(dsi_trans),
+                                         I965_PIPECONF_ACTIVE, 10))
                        DRM_ERROR("DSI transcoder not enabled\n");
        }
 }
@@ -1080,9 +1078,8 @@ static void gen11_dsi_disable_transcoder(struct intel_encoder *encoder)
                I915_WRITE(PIPECONF(dsi_trans), tmp);
 
                /* wait for transcoder to be disabled */
-               if (intel_wait_for_register(&dev_priv->uncore,
-                                           PIPECONF(dsi_trans),
-                                           I965_PIPECONF_ACTIVE, 0, 50))
+               if (intel_de_wait_for_clear(dev_priv, PIPECONF(dsi_trans),
+                                           I965_PIPECONF_ACTIVE, 50))
                        DRM_ERROR("DSI trancoder not disabled\n");
        }
 }
index 59c0ceb21aac50e30ecacd0734c2a3b5329d6b76..d0bc42e5039c4e517127f209cbcaec6adcef4009 100644 (file)
@@ -969,9 +969,7 @@ static void skl_dpll0_enable(struct drm_i915_private *dev_priv, int vco)
 
        I915_WRITE(LCPLL1_CTL, I915_READ(LCPLL1_CTL) | LCPLL_PLL_ENABLE);
 
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   LCPLL1_CTL, LCPLL_PLL_LOCK, LCPLL_PLL_LOCK,
-                                   5))
+       if (intel_de_wait_for_set(dev_priv, LCPLL1_CTL, LCPLL_PLL_LOCK, 5))
                DRM_ERROR("DPLL0 not locked\n");
 
        dev_priv->cdclk.hw.vco = vco;
@@ -983,9 +981,7 @@ static void skl_dpll0_enable(struct drm_i915_private *dev_priv, int vco)
 static void skl_dpll0_disable(struct drm_i915_private *dev_priv)
 {
        I915_WRITE(LCPLL1_CTL, I915_READ(LCPLL1_CTL) & ~LCPLL_PLL_ENABLE);
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   LCPLL1_CTL, LCPLL_PLL_LOCK, 0,
-                                   1))
+       if (intel_de_wait_for_clear(dev_priv, LCPLL1_CTL, LCPLL_PLL_LOCK, 1))
                DRM_ERROR("Couldn't disable DPLL0\n");
 
        dev_priv->cdclk.hw.vco = 0;
@@ -1309,9 +1305,8 @@ static void bxt_de_pll_disable(struct drm_i915_private *dev_priv)
        I915_WRITE(BXT_DE_PLL_ENABLE, 0);
 
        /* Timeout 200us */
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   BXT_DE_PLL_ENABLE, BXT_DE_PLL_LOCK, 0,
-                                   1))
+       if (intel_de_wait_for_clear(dev_priv,
+                                   BXT_DE_PLL_ENABLE, BXT_DE_PLL_LOCK, 1))
                DRM_ERROR("timeout waiting for DE PLL unlock\n");
 
        dev_priv->cdclk.hw.vco = 0;
@@ -1330,11 +1325,8 @@ static void bxt_de_pll_enable(struct drm_i915_private *dev_priv, int vco)
        I915_WRITE(BXT_DE_PLL_ENABLE, BXT_DE_PLL_PLL_ENABLE);
 
        /* Timeout 200us */
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   BXT_DE_PLL_ENABLE,
-                                   BXT_DE_PLL_LOCK,
-                                   BXT_DE_PLL_LOCK,
-                                   1))
+       if (intel_de_wait_for_set(dev_priv,
+                                 BXT_DE_PLL_ENABLE, BXT_DE_PLL_LOCK, 1))
                DRM_ERROR("timeout waiting for DE PLL lock\n");
 
        dev_priv->cdclk.hw.vco = vco;
index 067eb14dbf8062b8b06135186499831422d62742..e6e8d4a820446a7fd99f7b7af735a378d8d0918e 100644 (file)
@@ -443,9 +443,9 @@ static bool intel_ironlake_crt_detect_hotplug(struct drm_connector *connector)
 
                I915_WRITE(crt->adpa_reg, adpa);
 
-               if (intel_wait_for_register(&dev_priv->uncore,
+               if (intel_de_wait_for_clear(dev_priv,
                                            crt->adpa_reg,
-                                           ADPA_CRT_HOTPLUG_FORCE_TRIGGER, 0,
+                                           ADPA_CRT_HOTPLUG_FORCE_TRIGGER,
                                            1000))
                        DRM_DEBUG_KMS("timed out waiting for FORCE_TRIGGER");
 
@@ -497,10 +497,8 @@ static bool valleyview_crt_detect_hotplug(struct drm_connector *connector)
 
        I915_WRITE(crt->adpa_reg, adpa);
 
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   crt->adpa_reg,
-                                   ADPA_CRT_HOTPLUG_FORCE_TRIGGER, 0,
-                                   1000)) {
+       if (intel_de_wait_for_clear(dev_priv, crt->adpa_reg,
+                                   ADPA_CRT_HOTPLUG_FORCE_TRIGGER, 1000)) {
                DRM_DEBUG_KMS("timed out waiting for FORCE_TRIGGER");
                I915_WRITE(crt->adpa_reg, save_adpa);
        }
@@ -550,9 +548,8 @@ static bool intel_crt_detect_hotplug(struct drm_connector *connector)
                                              CRT_HOTPLUG_FORCE_DETECT,
                                              CRT_HOTPLUG_FORCE_DETECT);
                /* wait for FORCE_DETECT to go off */
-               if (intel_wait_for_register(&dev_priv->uncore, PORT_HOTPLUG_EN,
-                                           CRT_HOTPLUG_FORCE_DETECT, 0,
-                                           1000))
+               if (intel_de_wait_for_clear(dev_priv, PORT_HOTPLUG_EN,
+                                           CRT_HOTPLUG_FORCE_DETECT, 1000))
                        DRM_DEBUG_KMS("timed out waiting for FORCE_DETECT to go off");
        }
 
index 8d4593ee5c091a940ebc210e6aacd980cd0ed712..24bc4bcc7b01584313c6703fea5d5d04f0ff0c7d 100644 (file)
@@ -3139,10 +3139,8 @@ static void intel_ddi_enable_fec(struct intel_encoder *encoder,
        val |= DP_TP_CTL_FEC_ENABLE;
        I915_WRITE(DP_TP_CTL(port), val);
 
-       if (intel_wait_for_register(&dev_priv->uncore, DP_TP_STATUS(port),
-                                   DP_TP_STATUS_FEC_ENABLE_LIVE,
-                                   DP_TP_STATUS_FEC_ENABLE_LIVE,
-                                   1))
+       if (intel_de_wait_for_set(dev_priv, DP_TP_STATUS(port),
+                                 DP_TP_STATUS_FEC_ENABLE_LIVE, 1))
                DRM_ERROR("Timed out waiting for FEC Enable Status\n");
 }
 
index 59e1988dd36275b2b140eafd1ed5d0ab319d674a..eda28f251d9356e65bea48a7052f3980196d6553 100644 (file)
@@ -1077,9 +1077,8 @@ intel_wait_for_pipe_off(const struct intel_crtc_state *old_crtc_state)
                i915_reg_t reg = PIPECONF(cpu_transcoder);
 
                /* Wait for the Pipe State to go off */
-               if (intel_wait_for_register(&dev_priv->uncore,
-                                           reg, I965_PIPECONF_ACTIVE, 0,
-                                           100))
+               if (intel_de_wait_for_clear(dev_priv, reg,
+                                           I965_PIPECONF_ACTIVE, 100))
                        WARN(1, "pipe_off wait timed out\n");
        } else {
                intel_wait_for_pipe_scanline_stopped(crtc);
@@ -1383,11 +1382,7 @@ static void _vlv_enable_pll(struct intel_crtc *crtc,
        POSTING_READ(DPLL(pipe));
        udelay(150);
 
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   DPLL(pipe),
-                                   DPLL_LOCK_VLV,
-                                   DPLL_LOCK_VLV,
-                                   1))
+       if (intel_de_wait_for_set(dev_priv, DPLL(pipe), DPLL_LOCK_VLV, 1))
                DRM_ERROR("DPLL %d failed to lock\n", pipe);
 }
 
@@ -1436,9 +1431,7 @@ static void _chv_enable_pll(struct intel_crtc *crtc,
        I915_WRITE(DPLL(pipe), pipe_config->dpll_hw_state.dpll);
 
        /* Check PLL is locked */
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   DPLL(pipe), DPLL_LOCK_VLV, DPLL_LOCK_VLV,
-                                   1))
+       if (intel_de_wait_for_set(dev_priv, DPLL(pipe), DPLL_LOCK_VLV, 1))
                DRM_ERROR("PLL %d failed to lock\n", pipe);
 }
 
@@ -1617,9 +1610,8 @@ void vlv_wait_port_ready(struct drm_i915_private *dev_priv,
                BUG();
        }
 
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   dpll_reg, port_mask, expected_mask,
-                                   1000))
+       if (intel_de_wait_for_register(dev_priv, dpll_reg,
+                                      port_mask, expected_mask, 1000))
                WARN(1, "timed out waiting for port %c ready: got 0x%x, expected 0x%x\n",
                     port_name(dport->base.port),
                     I915_READ(dpll_reg) & port_mask, expected_mask);
@@ -1678,9 +1670,7 @@ static void ironlake_enable_pch_transcoder(const struct intel_crtc_state *crtc_s
        }
 
        I915_WRITE(reg, val | TRANS_ENABLE);
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   reg, TRANS_STATE_ENABLE, TRANS_STATE_ENABLE,
-                                   100))
+       if (intel_de_wait_for_set(dev_priv, reg, TRANS_STATE_ENABLE, 100))
                DRM_ERROR("failed to enable transcoder %c\n", pipe_name(pipe));
 }
 
@@ -1708,11 +1698,8 @@ static void lpt_enable_pch_transcoder(struct drm_i915_private *dev_priv,
                val |= TRANS_PROGRESSIVE;
 
        I915_WRITE(LPT_TRANSCONF, val);
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   LPT_TRANSCONF,
-                                   TRANS_STATE_ENABLE,
-                                   TRANS_STATE_ENABLE,
-                                   100))
+       if (intel_de_wait_for_set(dev_priv, LPT_TRANSCONF,
+                                 TRANS_STATE_ENABLE, 100))
                DRM_ERROR("Failed to enable PCH transcoder\n");
 }
 
@@ -1734,9 +1721,7 @@ static void ironlake_disable_pch_transcoder(struct drm_i915_private *dev_priv,
        val &= ~TRANS_ENABLE;
        I915_WRITE(reg, val);
        /* wait for PCH transcoder off, transcoder state */
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   reg, TRANS_STATE_ENABLE, 0,
-                                   50))
+       if (intel_de_wait_for_clear(dev_priv, reg, TRANS_STATE_ENABLE, 50))
                DRM_ERROR("failed to disable transcoder %c\n", pipe_name(pipe));
 
        if (HAS_PCH_CPT(dev_priv)) {
@@ -1756,9 +1741,8 @@ void lpt_disable_pch_transcoder(struct drm_i915_private *dev_priv)
        val &= ~TRANS_ENABLE;
        I915_WRITE(LPT_TRANSCONF, val);
        /* wait for PCH transcoder off, transcoder state */
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   LPT_TRANSCONF, TRANS_STATE_ENABLE, 0,
-                                   50))
+       if (intel_de_wait_for_clear(dev_priv, LPT_TRANSCONF,
+                                   TRANS_STATE_ENABLE, 50))
                DRM_ERROR("Failed to disable PCH transcoder\n");
 
        /* Workaround: clear timing override bit. */
@@ -5697,9 +5681,7 @@ void hsw_enable_ips(const struct intel_crtc_state *crtc_state)
                 * and don't wait for vblanks until the end of crtc_enable, then
                 * the HW state readout code will complain that the expected
                 * IPS_CTL value is not the one we read. */
-               if (intel_wait_for_register(&dev_priv->uncore,
-                                           IPS_CTL, IPS_ENABLE, IPS_ENABLE,
-                                           50))
+               if (intel_de_wait_for_set(dev_priv, IPS_CTL, IPS_ENABLE, 50))
                        DRM_ERROR("Timed out waiting for IPS enable\n");
        }
 }
@@ -5720,9 +5702,7 @@ void hsw_disable_ips(const struct intel_crtc_state *crtc_state)
                 * 42ms timeout value leads to occasional timeouts so use 100ms
                 * instead.
                 */
-               if (intel_wait_for_register(&dev_priv->uncore,
-                                           IPS_CTL, IPS_ENABLE, 0,
-                                           100))
+               if (intel_de_wait_for_clear(dev_priv, IPS_CTL, IPS_ENABLE, 100))
                        DRM_ERROR("Timed out waiting for IPS disable\n");
        } else {
                I915_WRITE(IPS_CTL, 0);
index 1caae2f612162bbc861dd99d0e7f0b32b1df2293..02f8c3911c59dd1607c7fdc166882197837c47cf 100644 (file)
@@ -319,11 +319,8 @@ static void hsw_wait_for_power_well_enable(struct drm_i915_private *dev_priv,
        int pw_idx = power_well->desc->hsw.idx;
 
        /* Timeout for PW1:10 us, AUX:not specified, other PWs:20 us. */
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   regs->driver,
-                                   HSW_PWR_WELL_CTL_STATE(pw_idx),
-                                   HSW_PWR_WELL_CTL_STATE(pw_idx),
-                                   1)) {
+       if (intel_de_wait_for_set(dev_priv, regs->driver,
+                                 HSW_PWR_WELL_CTL_STATE(pw_idx), 1)) {
                DRM_DEBUG_KMS("%s power well enable timeout\n",
                              power_well->desc->name);
 
@@ -380,9 +377,8 @@ static void gen9_wait_for_power_well_fuses(struct drm_i915_private *dev_priv,
                                           enum skl_power_gate pg)
 {
        /* Timeout 5us for PG#0, for other PGs 1us */
-       WARN_ON(intel_wait_for_register(&dev_priv->uncore, SKL_FUSE_STATUS,
-                                       SKL_FUSE_PG_DIST_STATUS(pg),
-                                       SKL_FUSE_PG_DIST_STATUS(pg), 1));
+       WARN_ON(intel_de_wait_for_set(dev_priv, SKL_FUSE_STATUS,
+                                     SKL_FUSE_PG_DIST_STATUS(pg), 1));
 }
 
 static void hsw_power_well_enable(struct drm_i915_private *dev_priv,
@@ -1380,11 +1376,8 @@ static void assert_chv_phy_status(struct drm_i915_private *dev_priv)
         * The PHY may be busy with some initial calibration and whatnot,
         * so the power state can take a while to actually change.
         */
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   DISPLAY_PHY_STATUS,
-                                   phy_status_mask,
-                                   phy_status,
-                                   10))
+       if (intel_de_wait_for_register(dev_priv, DISPLAY_PHY_STATUS,
+                                      phy_status_mask, phy_status, 10))
                DRM_ERROR("Unexpected PHY_STATUS 0x%08x, expected 0x%08x (PHY_CONTROL=0x%08x)\n",
                          I915_READ(DISPLAY_PHY_STATUS) & phy_status_mask,
                           phy_status, dev_priv->chv_phy_control);
@@ -1415,11 +1408,8 @@ static void chv_dpio_cmn_power_well_enable(struct drm_i915_private *dev_priv,
        vlv_set_power_well(dev_priv, power_well, true);
 
        /* Poll for phypwrgood signal */
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   DISPLAY_PHY_STATUS,
-                                   PHY_POWERGOOD(phy),
-                                   PHY_POWERGOOD(phy),
-                                   1))
+       if (intel_de_wait_for_set(dev_priv, DISPLAY_PHY_STATUS,
+                                 PHY_POWERGOOD(phy), 1))
                DRM_ERROR("Display PHY %d is not power up\n", phy);
 
        vlv_dpio_get(dev_priv);
@@ -4332,8 +4322,7 @@ static void hsw_disable_lcpll(struct drm_i915_private *dev_priv,
        I915_WRITE(LCPLL_CTL, val);
        POSTING_READ(LCPLL_CTL);
 
-       if (intel_wait_for_register(&dev_priv->uncore, LCPLL_CTL,
-                                   LCPLL_PLL_LOCK, 0, 1))
+       if (intel_de_wait_for_clear(dev_priv, LCPLL_CTL, LCPLL_PLL_LOCK, 1))
                DRM_ERROR("LCPLL still locked\n");
 
        val = hsw_read_dcomp(dev_priv);
@@ -4388,8 +4377,7 @@ static void hsw_restore_lcpll(struct drm_i915_private *dev_priv)
        val &= ~LCPLL_PLL_DISABLE;
        I915_WRITE(LCPLL_CTL, val);
 
-       if (intel_wait_for_register(&dev_priv->uncore, LCPLL_CTL,
-                                   LCPLL_PLL_LOCK, LCPLL_PLL_LOCK, 5))
+       if (intel_de_wait_for_set(dev_priv, LCPLL_CTL, LCPLL_PLL_LOCK, 5))
                DRM_ERROR("LCPLL not locked yet\n");
 
        if (val & LCPLL_CD_SOURCE_FCLK) {
index 4884c87c8ed7d6ae318ad30d100c1ac800aca18f..5c45a3bb102dfe2e1871f699f57310691593f14e 100644 (file)
@@ -2371,9 +2371,8 @@ static void wait_panel_status(struct intel_dp *intel_dp,
                        I915_READ(pp_stat_reg),
                        I915_READ(pp_ctrl_reg));
 
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   pp_stat_reg, mask, value,
-                                   5000))
+       if (intel_de_wait_for_register(dev_priv, pp_stat_reg,
+                                      mask, value, 5000))
                DRM_ERROR("Panel status timeout: status %08x control %08x\n",
                                I915_READ(pp_stat_reg),
                                I915_READ(pp_ctrl_reg));
@@ -3960,10 +3959,8 @@ void intel_dp_set_idle_link_train(struct intel_dp *intel_dp)
        if (port == PORT_A)
                return;
 
-       if (intel_wait_for_register(&dev_priv->uncore, DP_TP_STATUS(port),
-                                   DP_TP_STATUS_IDLE_DONE,
-                                   DP_TP_STATUS_IDLE_DONE,
-                                   1))
+       if (intel_de_wait_for_set(dev_priv, DP_TP_STATUS(port),
+                                 DP_TP_STATUS_IDLE_DONE, 1))
                DRM_ERROR("Timed out waiting for DP idle patterns\n");
 }
 
index b1a3df185f4ca802ff8aa8b544c5dd61b9549eb5..83faa246e361a7d6c7ba8b8ead203049e2d7ba86 100644 (file)
@@ -338,11 +338,8 @@ static void intel_mst_enable_dp(struct intel_encoder *encoder,
 
        DRM_DEBUG_KMS("active links %d\n", intel_dp->active_mst_links);
 
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   DP_TP_STATUS(port),
-                                   DP_TP_STATUS_ACT_SENT,
-                                   DP_TP_STATUS_ACT_SENT,
-                                   1))
+       if (intel_de_wait_for_set(dev_priv, DP_TP_STATUS(port),
+                                 DP_TP_STATUS_ACT_SENT, 1))
                DRM_ERROR("Timed out waiting for ACT sent\n");
 
        drm_dp_check_act_status(&intel_dp->mst_mgr);
index 749e5a74825f127dd51a816cd79e5db993674fa7..556d1b30f06a8833bedf55f25ebfdce58140a812 100644 (file)
@@ -345,10 +345,8 @@ static u32 bxt_get_grc(struct drm_i915_private *dev_priv, enum dpio_phy phy)
 static void bxt_phy_wait_grc_done(struct drm_i915_private *dev_priv,
                                  enum dpio_phy phy)
 {
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   BXT_PORT_REF_DW3(phy),
-                                   GRC_DONE, GRC_DONE,
-                                   10))
+       if (intel_de_wait_for_set(dev_priv, BXT_PORT_REF_DW3(phy),
+                                 GRC_DONE, 10))
                DRM_ERROR("timeout waiting for PHY%d GRC\n", phy);
 }
 
index 84a09d96d52f68032e8d64b8cb4474873abe831f..b8148f838354cecafe94b768d20bf3c553ad868c 100644 (file)
@@ -1000,11 +1000,7 @@ static void skl_ddi_pll_enable(struct drm_i915_private *dev_priv,
        I915_WRITE(regs[id].ctl,
                   I915_READ(regs[id].ctl) | LCPLL_PLL_ENABLE);
 
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   DPLL_STATUS,
-                                   DPLL_LOCK(id),
-                                   DPLL_LOCK(id),
-                                   5))
+       if (intel_de_wait_for_set(dev_priv, DPLL_STATUS, DPLL_LOCK(id), 5))
                DRM_ERROR("DPLL %d not locked\n", id);
 }
 
@@ -2016,11 +2012,8 @@ static void cnl_ddi_pll_enable(struct drm_i915_private *dev_priv,
        I915_WRITE(CNL_DPLL_ENABLE(id), val);
 
        /* 2. Wait for DPLL power state enabled in DPLL_ENABLE. */
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   CNL_DPLL_ENABLE(id),
-                                   PLL_POWER_STATE,
-                                   PLL_POWER_STATE,
-                                   5))
+       if (intel_de_wait_for_set(dev_priv, CNL_DPLL_ENABLE(id),
+                                 PLL_POWER_STATE, 5))
                DRM_ERROR("PLL %d Power not enabled\n", id);
 
        /*
@@ -2057,11 +2050,7 @@ static void cnl_ddi_pll_enable(struct drm_i915_private *dev_priv,
        I915_WRITE(CNL_DPLL_ENABLE(id), val);
 
        /* 7. Wait for PLL lock status in DPLL_ENABLE. */
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   CNL_DPLL_ENABLE(id),
-                                   PLL_LOCK,
-                                   PLL_LOCK,
-                                   5))
+       if (intel_de_wait_for_set(dev_priv, CNL_DPLL_ENABLE(id), PLL_LOCK, 5))
                DRM_ERROR("PLL %d not locked\n", id);
 
        /*
@@ -2105,11 +2094,7 @@ static void cnl_ddi_pll_disable(struct drm_i915_private *dev_priv,
        I915_WRITE(CNL_DPLL_ENABLE(id), val);
 
        /* 4. Wait for PLL not locked status in DPLL_ENABLE. */
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   CNL_DPLL_ENABLE(id),
-                                   PLL_LOCK,
-                                   0,
-                                   5))
+       if (intel_de_wait_for_clear(dev_priv, CNL_DPLL_ENABLE(id), PLL_LOCK, 5))
                DRM_ERROR("PLL %d locked\n", id);
 
        /*
@@ -2127,11 +2112,8 @@ static void cnl_ddi_pll_disable(struct drm_i915_private *dev_priv,
        I915_WRITE(CNL_DPLL_ENABLE(id), val);
 
        /* 7. Wait for DPLL power state disabled in DPLL_ENABLE. */
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   CNL_DPLL_ENABLE(id),
-                                   PLL_POWER_STATE,
-                                   0,
-                                   5))
+       if (intel_de_wait_for_clear(dev_priv, CNL_DPLL_ENABLE(id),
+                                   PLL_POWER_STATE, 5))
                DRM_ERROR("PLL %d Power not disabled\n", id);
 }
 
@@ -3252,8 +3234,7 @@ static void icl_pll_power_enable(struct drm_i915_private *dev_priv,
         * The spec says we need to "wait" but it also says it should be
         * immediate.
         */
-       if (intel_wait_for_register(&dev_priv->uncore, enable_reg,
-                                   PLL_POWER_STATE, PLL_POWER_STATE, 1))
+       if (intel_de_wait_for_set(dev_priv, enable_reg, PLL_POWER_STATE, 1))
                DRM_ERROR("PLL %d Power not enabled\n", pll->info->id);
 }
 
@@ -3268,8 +3249,7 @@ static void icl_pll_enable(struct drm_i915_private *dev_priv,
        I915_WRITE(enable_reg, val);
 
        /* Timeout is actually 600us. */
-       if (intel_wait_for_register(&dev_priv->uncore, enable_reg,
-                                   PLL_LOCK, PLL_LOCK, 1))
+       if (intel_de_wait_for_set(dev_priv, enable_reg, PLL_LOCK, 1))
                DRM_ERROR("PLL %d not locked\n", pll->info->id);
 }
 
@@ -3364,8 +3344,7 @@ static void icl_pll_disable(struct drm_i915_private *dev_priv,
        I915_WRITE(enable_reg, val);
 
        /* Timeout is actually 1us. */
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   enable_reg, PLL_LOCK, 0, 1))
+       if (intel_de_wait_for_clear(dev_priv, enable_reg, PLL_LOCK, 1))
                DRM_ERROR("PLL %d locked\n", pll->info->id);
 
        /* DVFS post sequence would be here. See the comment above. */
@@ -3378,8 +3357,7 @@ static void icl_pll_disable(struct drm_i915_private *dev_priv,
         * The spec says we need to "wait" but it also says it should be
         * immediate.
         */
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   enable_reg, PLL_POWER_STATE, 0, 1))
+       if (intel_de_wait_for_clear(dev_priv, enable_reg, PLL_POWER_STATE, 1))
                DRM_ERROR("PLL %d Power not disabled\n", pll->info->id);
 }
 
index f007f667315e90eacf877dbcc3f7ccc2fca377b4..16ed44bfd73480321776757f401912056334f899 100644 (file)
@@ -110,9 +110,8 @@ static void i8xx_fbc_deactivate(struct drm_i915_private *dev_priv)
        I915_WRITE(FBC_CONTROL, fbc_ctl);
 
        /* Wait for compressing bit to clear */
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   FBC_STATUS, FBC_STAT_COMPRESSING, 0,
-                                   10)) {
+       if (intel_de_wait_for_clear(dev_priv, FBC_STATUS,
+                                   FBC_STAT_COMPRESSING, 10)) {
                DRM_DEBUG_KMS("FBC idle timed out\n");
                return;
        }
index 07aa571c6c3dcd39765b51cb9c1df070770b7717..db1db61fea246790146256e61d8ef4a830980973 100644 (file)
@@ -245,8 +245,7 @@ static int intel_hdcp_load_keys(struct drm_i915_private *dev_priv)
 static int intel_write_sha_text(struct drm_i915_private *dev_priv, u32 sha_text)
 {
        I915_WRITE(HDCP_SHA_TEXT, sha_text);
-       if (intel_wait_for_register(&dev_priv->uncore, HDCP_REP_CTL,
-                                   HDCP_SHA1_READY, HDCP_SHA1_READY, 1)) {
+       if (intel_de_wait_for_set(dev_priv, HDCP_REP_CTL, HDCP_SHA1_READY, 1)) {
                DRM_ERROR("Timed out waiting for SHA1 ready\n");
                return -ETIMEDOUT;
        }
@@ -476,9 +475,8 @@ int intel_hdcp_validate_v_prime(struct intel_digital_port *intel_dig_port,
 
        /* Tell the HW we're done with the hash and wait for it to ACK */
        I915_WRITE(HDCP_REP_CTL, rep_ctl | HDCP_SHA1_COMPLETE_HASH);
-       if (intel_wait_for_register(&dev_priv->uncore, HDCP_REP_CTL,
-                                   HDCP_SHA1_COMPLETE,
-                                   HDCP_SHA1_COMPLETE, 1)) {
+       if (intel_de_wait_for_set(dev_priv, HDCP_REP_CTL,
+                                 HDCP_SHA1_COMPLETE, 1)) {
                DRM_ERROR("Timed out waiting for SHA1 complete\n");
                return -ETIMEDOUT;
        }
@@ -621,9 +619,8 @@ static int intel_hdcp_auth(struct intel_connector *connector)
        I915_WRITE(PORT_HDCP_CONF(port), HDCP_CONF_CAPTURE_AN);
 
        /* Wait for An to be acquired */
-       if (intel_wait_for_register(&dev_priv->uncore, PORT_HDCP_STATUS(port),
-                                   HDCP_STATUS_AN_READY,
-                                   HDCP_STATUS_AN_READY, 1)) {
+       if (intel_de_wait_for_set(dev_priv, PORT_HDCP_STATUS(port),
+                                 HDCP_STATUS_AN_READY, 1)) {
                DRM_ERROR("Timed out waiting for An\n");
                return -ETIMEDOUT;
        }
@@ -707,9 +704,9 @@ static int intel_hdcp_auth(struct intel_connector *connector)
        }
 
        /* Wait for encryption confirmation */
-       if (intel_wait_for_register(&dev_priv->uncore, PORT_HDCP_STATUS(port),
-                                   HDCP_STATUS_ENC, HDCP_STATUS_ENC,
-                                   ENCRYPT_STATUS_CHANGE_TIMEOUT_MS)) {
+       if (intel_de_wait_for_set(dev_priv, PORT_HDCP_STATUS(port),
+                                 HDCP_STATUS_ENC,
+                                 ENCRYPT_STATUS_CHANGE_TIMEOUT_MS)) {
                DRM_ERROR("Timed out waiting for encryption\n");
                return -ETIMEDOUT;
        }
@@ -739,8 +736,7 @@ static int _intel_hdcp_disable(struct intel_connector *connector)
 
        hdcp->hdcp_encrypted = false;
        I915_WRITE(PORT_HDCP_CONF(port), 0);
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   PORT_HDCP_STATUS(port), ~0, 0,
+       if (intel_de_wait_for_clear(dev_priv, PORT_HDCP_STATUS(port), ~0,
                                    ENCRYPT_STATUS_CHANGE_TIMEOUT_MS)) {
                DRM_ERROR("Failed to disable HDCP, timeout clearing status\n");
                return -ETIMEDOUT;
@@ -1519,10 +1515,9 @@ static int hdcp2_enable_encryption(struct intel_connector *connector)
                           CTL_LINK_ENCRYPTION_REQ);
        }
 
-       ret = intel_wait_for_register(&dev_priv->uncore, HDCP2_STATUS_DDI(port),
-                                     LINK_ENCRYPTION_STATUS,
-                                     LINK_ENCRYPTION_STATUS,
-                                     ENCRYPT_STATUS_CHANGE_TIMEOUT_MS);
+       ret = intel_de_wait_for_set(dev_priv, HDCP2_STATUS_DDI(port),
+                                   LINK_ENCRYPTION_STATUS,
+                                   ENCRYPT_STATUS_CHANGE_TIMEOUT_MS);
 
        return ret;
 }
@@ -1540,8 +1535,8 @@ static int hdcp2_disable_encryption(struct intel_connector *connector)
        I915_WRITE(HDCP2_CTL_DDI(port),
                   I915_READ(HDCP2_CTL_DDI(port)) & ~CTL_LINK_ENCRYPTION_REQ);
 
-       ret = intel_wait_for_register(&dev_priv->uncore, HDCP2_STATUS_DDI(port),
-                                     LINK_ENCRYPTION_STATUS, 0x0,
+       ret = intel_de_wait_for_clear(dev_priv, HDCP2_STATUS_DDI(port),
+                                     LINK_ENCRYPTION_STATUS,
                                      ENCRYPT_STATUS_CHANGE_TIMEOUT_MS);
        if (ret == -ETIMEDOUT)
                DRM_DEBUG_KMS("Disable Encryption Timedout");
index 78c9ee5230ea6e4355060e07c7ef28104a3af755..b7c459a8931c703510996214464099bad972c40e 100644 (file)
@@ -318,8 +318,7 @@ static void intel_enable_lvds(struct intel_encoder *encoder,
        I915_WRITE(PP_CONTROL(0), I915_READ(PP_CONTROL(0)) | PANEL_POWER_ON);
        POSTING_READ(lvds_encoder->reg);
 
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   PP_STATUS(0), PP_ON, PP_ON, 5000))
+       if (intel_de_wait_for_set(dev_priv, PP_STATUS(0), PP_ON, 5000))
                DRM_ERROR("timed out waiting for panel to power on\n");
 
        intel_panel_enable_backlight(pipe_config, conn_state);
@@ -333,8 +332,7 @@ static void intel_disable_lvds(struct intel_encoder *encoder,
        struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 
        I915_WRITE(PP_CONTROL(0), I915_READ(PP_CONTROL(0)) & ~PANEL_POWER_ON);
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   PP_STATUS(0), PP_ON, 0, 1000))
+       if (intel_de_wait_for_clear(dev_priv, PP_STATUS(0), PP_ON, 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);
index ad7044ea1efe5ac9ab28aa3136a3a301d87f6d49..3bfb720560c2fa170af44acafd088145bccb1dbb 100644 (file)
@@ -825,8 +825,8 @@ static void intel_psr_disable_locked(struct intel_dp *intel_dp)
        }
 
        /* Wait till PSR is idle */
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   psr_status, psr_status_mask, 0, 2000))
+       if (intel_de_wait_for_clear(dev_priv, psr_status,
+                                   psr_status_mask, 2000))
                DRM_ERROR("Timed out waiting PSR idle state\n");
 
        /* Disable PSR on Sink */
@@ -988,7 +988,7 @@ static bool __psr_wait_for_idle_locked(struct drm_i915_private *dev_priv)
 
        mutex_unlock(&dev_priv->psr.lock);
 
-       err = intel_wait_for_register(&dev_priv->uncore, reg, mask, 0, 50);
+       err = intel_de_wait_for_clear(dev_priv, reg, mask, 50);
        if (err)
                DRM_ERROR("Timed out waiting for PSR Idle for re-enable\n");
 
index 6d535855e64e9a40177651e62faf56d2fbd03955..a71b22bdd95b5e5f50c021c0e4d4c5e5cf300292 100644 (file)
@@ -84,9 +84,8 @@ void vlv_dsi_wait_for_fifo_empty(struct intel_dsi *intel_dsi, enum port port)
        mask = LP_CTRL_FIFO_EMPTY | HS_CTRL_FIFO_EMPTY |
                LP_DATA_FIFO_EMPTY | HS_DATA_FIFO_EMPTY;
 
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   MIPI_GEN_FIFO_STAT(port), mask, mask,
-                                   100))
+       if (intel_de_wait_for_set(dev_priv, MIPI_GEN_FIFO_STAT(port),
+                                 mask, 100))
                DRM_ERROR("DPI FIFOs are not empty\n");
 }
 
@@ -154,10 +153,8 @@ static ssize_t intel_dsi_host_transfer(struct mipi_dsi_host *host,
 
        /* note: this is never true for reads */
        if (packet.payload_length) {
-               if (intel_wait_for_register(&dev_priv->uncore,
-                                           MIPI_GEN_FIFO_STAT(port),
-                                           data_mask, 0,
-                                           50))
+               if (intel_de_wait_for_clear(dev_priv, MIPI_GEN_FIFO_STAT(port),
+                                           data_mask, 50))
                        DRM_ERROR("Timeout waiting for HS/LP DATA FIFO !full\n");
 
                write_data(dev_priv, data_reg, packet.payload,
@@ -168,10 +165,8 @@ static ssize_t intel_dsi_host_transfer(struct mipi_dsi_host *host,
                I915_WRITE(MIPI_INTR_STAT(port), GEN_READ_DATA_AVAIL);
        }
 
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   MIPI_GEN_FIFO_STAT(port),
-                                   ctrl_mask, 0,
-                                   50)) {
+       if (intel_de_wait_for_clear(dev_priv, MIPI_GEN_FIFO_STAT(port),
+                                   ctrl_mask, 50)) {
                DRM_ERROR("Timeout waiting for HS/LP CTRL FIFO !full\n");
        }
 
@@ -180,10 +175,8 @@ static ssize_t intel_dsi_host_transfer(struct mipi_dsi_host *host,
        /* ->rx_len is set only for reads */
        if (msg->rx_len) {
                data_mask = GEN_READ_DATA_AVAIL;
-               if (intel_wait_for_register(&dev_priv->uncore,
-                                           MIPI_INTR_STAT(port),
-                                           data_mask, data_mask,
-                                           50))
+               if (intel_de_wait_for_set(dev_priv, MIPI_INTR_STAT(port),
+                                         data_mask, 50))
                        DRM_ERROR("Timeout waiting for read data.\n");
 
                read_data(dev_priv, data_reg, msg->rx_buf, msg->rx_len);
@@ -240,9 +233,7 @@ static int dpi_send_cmd(struct intel_dsi *intel_dsi, u32 cmd, bool hs,
        I915_WRITE(MIPI_DPI_CONTROL(port), cmd);
 
        mask = SPL_PKT_SENT_INTERRUPT;
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   MIPI_INTR_STAT(port), mask, mask,
-                                   100))
+       if (intel_de_wait_for_set(dev_priv, MIPI_INTR_STAT(port), mask, 100))
                DRM_ERROR("Video mode command 0x%08x send failed.\n", cmd);
 
        return 0;
@@ -359,11 +350,8 @@ static bool glk_dsi_enable_io(struct intel_encoder *encoder)
 
        /* Wait for Pwr ACK */
        for_each_dsi_port(port, intel_dsi->ports) {
-               if (intel_wait_for_register(&dev_priv->uncore,
-                                           MIPI_CTRL(port),
-                                           GLK_MIPIIO_PORT_POWERED,
-                                           GLK_MIPIIO_PORT_POWERED,
-                                           20))
+               if (intel_de_wait_for_set(dev_priv, MIPI_CTRL(port),
+                                         GLK_MIPIIO_PORT_POWERED, 20))
                        DRM_ERROR("MIPIO port is powergated\n");
        }
 
@@ -385,11 +373,8 @@ static void glk_dsi_device_ready(struct intel_encoder *encoder)
 
        /* Wait for MIPI PHY status bit to set */
        for_each_dsi_port(port, intel_dsi->ports) {
-               if (intel_wait_for_register(&dev_priv->uncore,
-                                           MIPI_CTRL(port),
-                                           GLK_PHY_STATUS_PORT_READY,
-                                           GLK_PHY_STATUS_PORT_READY,
-                                           20))
+               if (intel_de_wait_for_set(dev_priv, MIPI_CTRL(port),
+                                         GLK_PHY_STATUS_PORT_READY, 20))
                        DRM_ERROR("PHY is not ON\n");
        }
 
@@ -413,11 +398,8 @@ static void glk_dsi_device_ready(struct intel_encoder *encoder)
                        I915_WRITE(MIPI_DEVICE_READY(port), val);
 
                        /* Wait for ULPS active */
-                       if (intel_wait_for_register(&dev_priv->uncore,
-                                                   MIPI_CTRL(port),
-                                                   GLK_ULPS_NOT_ACTIVE,
-                                                   0,
-                                                   20))
+                       if (intel_de_wait_for_clear(dev_priv, MIPI_CTRL(port),
+                                                   GLK_ULPS_NOT_ACTIVE, 20))
                                DRM_ERROR("ULPS not active\n");
 
                        /* Exit ULPS */
@@ -440,21 +422,15 @@ static void glk_dsi_device_ready(struct intel_encoder *encoder)
 
        /* Wait for Stop state */
        for_each_dsi_port(port, intel_dsi->ports) {
-               if (intel_wait_for_register(&dev_priv->uncore,
-                                           MIPI_CTRL(port),
-                                           GLK_DATA_LANE_STOP_STATE,
-                                           GLK_DATA_LANE_STOP_STATE,
-                                           20))
+               if (intel_de_wait_for_set(dev_priv, MIPI_CTRL(port),
+                                         GLK_DATA_LANE_STOP_STATE, 20))
                        DRM_ERROR("Date lane not in STOP state\n");
        }
 
        /* Wait for AFE LATCH */
        for_each_dsi_port(port, intel_dsi->ports) {
-               if (intel_wait_for_register(&dev_priv->uncore,
-                                           BXT_MIPI_PORT_CTRL(port),
-                                           AFE_LATCHOUT,
-                                           AFE_LATCHOUT,
-                                           20))
+               if (intel_de_wait_for_set(dev_priv, BXT_MIPI_PORT_CTRL(port),
+                                         AFE_LATCHOUT, 20))
                        DRM_ERROR("D-PHY not entering LP-11 state\n");
        }
 }
@@ -554,17 +530,15 @@ static void glk_dsi_enter_low_power_mode(struct intel_encoder *encoder)
 
        /* Wait for MIPI PHY status bit to unset */
        for_each_dsi_port(port, intel_dsi->ports) {
-               if (intel_wait_for_register(&dev_priv->uncore,
-                                           MIPI_CTRL(port),
-                                           GLK_PHY_STATUS_PORT_READY, 0, 20))
+               if (intel_de_wait_for_clear(dev_priv, MIPI_CTRL(port),
+                                           GLK_PHY_STATUS_PORT_READY, 20))
                        DRM_ERROR("PHY is not turning OFF\n");
        }
 
        /* Wait for Pwr ACK bit to unset */
        for_each_dsi_port(port, intel_dsi->ports) {
-               if (intel_wait_for_register(&dev_priv->uncore,
-                                           MIPI_CTRL(port),
-                                           GLK_MIPIIO_PORT_POWERED, 0, 20))
+               if (intel_de_wait_for_clear(dev_priv, MIPI_CTRL(port),
+                                           GLK_MIPIIO_PORT_POWERED, 20))
                        DRM_ERROR("MIPI IO Port is not powergated\n");
        }
 }
@@ -583,9 +557,8 @@ static void glk_dsi_disable_mipi_io(struct intel_encoder *encoder)
 
        /* Wait for MIPI PHY status bit to unset */
        for_each_dsi_port(port, intel_dsi->ports) {
-               if (intel_wait_for_register(&dev_priv->uncore,
-                                           MIPI_CTRL(port),
-                                           GLK_PHY_STATUS_PORT_READY, 0, 20))
+               if (intel_de_wait_for_clear(dev_priv, MIPI_CTRL(port),
+                                           GLK_PHY_STATUS_PORT_READY, 20))
                        DRM_ERROR("PHY is not turning OFF\n");
        }
 
@@ -633,9 +606,8 @@ static void vlv_dsi_clear_device_ready(struct intel_encoder *encoder)
                 * Port A only. MIPI Port C has no similar bit for checking.
                 */
                if ((IS_GEN9_LP(dev_priv) || port == PORT_A) &&
-                   intel_wait_for_register(&dev_priv->uncore,
-                                           port_ctrl, AFE_LATCHOUT, 0,
-                                           30))
+                   intel_de_wait_for_clear(dev_priv, port_ctrl,
+                                           AFE_LATCHOUT, 30))
                        DRM_ERROR("DSI LP not going Low\n");
 
                /* Disable MIPI PHY transparent latch */
index 126edbaa814c526635ecc37c32a4e99f00009c89..95f39cd0ce02ef8f84431ae2103835e3192d8251 100644 (file)
@@ -246,11 +246,8 @@ void bxt_dsi_pll_disable(struct intel_encoder *encoder)
         * PLL lock should deassert within 200us.
         * Wait up to 1ms before timing out.
         */
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   BXT_DSI_PLL_ENABLE,
-                                   BXT_DSI_PLL_LOCKED,
-                                   0,
-                                   1))
+       if (intel_de_wait_for_clear(dev_priv, BXT_DSI_PLL_ENABLE,
+                                   BXT_DSI_PLL_LOCKED, 1))
                DRM_ERROR("Timeout waiting for PLL lock deassertion\n");
 }
 
@@ -530,11 +527,8 @@ void bxt_dsi_pll_enable(struct intel_encoder *encoder,
        I915_WRITE(BXT_DSI_PLL_ENABLE, val);
 
        /* Timeout and fail if PLL not locked */
-       if (intel_wait_for_register(&dev_priv->uncore,
-                                   BXT_DSI_PLL_ENABLE,
-                                   BXT_DSI_PLL_LOCKED,
-                                   BXT_DSI_PLL_LOCKED,
-                                   1)) {
+       if (intel_de_wait_for_set(dev_priv, BXT_DSI_PLL_ENABLE,
+                                 BXT_DSI_PLL_LOCKED, 1)) {
                DRM_ERROR("Timed out waiting for DSI PLL to lock\n");
                return;
        }
index 3064b5a70a179dce657478acec4d62f428d5f020..e47788904fe85a336e25ee34580206c3acc48c35 100644 (file)
@@ -2505,6 +2505,20 @@ int i915_reg_read_ioctl(struct drm_device *dev, void *data,
 #define I915_READ_FW(reg__) __I915_REG_OP(read_fw, dev_priv, (reg__))
 #define I915_WRITE_FW(reg__, val__) __I915_REG_OP(write_fw, dev_priv, (reg__), (val__))
 
+/* register wait wrappers for display regs */
+#define intel_de_wait_for_register(dev_priv_, reg_, mask_, value_, timeout_) \
+       intel_wait_for_register(&(dev_priv_)->uncore, \
+                               (reg_), (mask_), (value_), (timeout_))
+
+#define intel_de_wait_for_set(dev_priv_, reg_, mask_, timeout_) ({     \
+       u32 mask__ = (mask_);                                           \
+       intel_de_wait_for_register((dev_priv_), (reg_),                 \
+                                  mask__, mask__, (timeout_)); \
+})
+
+#define intel_de_wait_for_clear(dev_priv_, reg_, mask_, timeout_) \
+       intel_de_wait_for_register((dev_priv_), (reg_), (mask_), 0, (timeout_))
+
 /* i915_mm.c */
 int remap_io_mapping(struct vm_area_struct *vma,
                     unsigned long addr, unsigned long pfn, unsigned long size,