* [PATCH v6 0/2] drm/i915: Ensure minimum CDCLK requirement for audio @ 2019-03-18 14:34 Imre Deak 2019-03-18 14:34 ` [PATCH v6 1/2] drm/i915: Force 2*96 MHz cdclk on glk/cnl when audio power is enabled Imre Deak ` (5 more replies) 0 siblings, 6 replies; 9+ messages in thread From: Imre Deak @ 2019-03-18 14:34 UTC (permalink / raw) To: intel-gfx This replaces [1] and [2]. The main changes since then: - A device link between i915 and HDA (added meanwhile as a separate change). - Split the CDCLK change to happen before or after any updates to the pipe depending on whether we're increasing or decreasing CDCLK. - Wait for vblank after an optimized CDCLK update. Abhay confirmed that the patchset fixes the audio issues his team saw due to too low CDCLK. [1] https://patchwork.freedesktop.org/patch/230817/?series=42459&rev=7 [2] https://patchwork.freedesktop.org/series/48763/ Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Abhay Kumar <abhay.kumar@intel.com> Tested-by: Abhay Kumar <abhay.kumar@intel.com> Signed-off-by: Imre Deak <imre.deak@intel.com> Ville Syrjälä (2): drm/i915: Force 2*96 MHz cdclk on glk/cnl when audio power is enabled drm/i915: Skip modeset for cdclk changes if possible drivers/gpu/drm/i915/i915_drv.h | 6 +- drivers/gpu/drm/i915/i915_reg.h | 3 +- drivers/gpu/drm/i915/intel_audio.c | 68 ++++++++++++- drivers/gpu/drm/i915/intel_cdclk.c | 185 +++++++++++++++++++++++++---------- drivers/gpu/drm/i915/intel_display.c | 48 ++++++++- drivers/gpu/drm/i915/intel_drv.h | 18 +++- 6 files changed, 268 insertions(+), 60 deletions(-) -- 2.13.2 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v6 1/2] drm/i915: Force 2*96 MHz cdclk on glk/cnl when audio power is enabled 2019-03-18 14:34 [PATCH v6 0/2] drm/i915: Ensure minimum CDCLK requirement for audio Imre Deak @ 2019-03-18 14:34 ` Imre Deak 2019-03-18 14:34 ` [PATCH v6 2/2] drm/i915: Skip modeset for cdclk changes if possible Imre Deak ` (4 subsequent siblings) 5 siblings, 0 replies; 9+ messages in thread From: Imre Deak @ 2019-03-18 14:34 UTC (permalink / raw) To: intel-gfx From: Ville Syrjälä <ville.syrjala@linux.intel.com> CDCLK has to be at least twice the BLCK regardless of audio. Audio driver has to probe using this hook and increase the clock even in absence of any display. v2: Use atomic refcount for get_power, put_power so that we can call each once(Abhay). v3: Reset power well 2 to avoid any transaction on iDisp link during cdclk change(Abhay). v4: Remove Power well 2 reset workaround(Ville). v5: Remove unwanted Power well 2 register defined in v4(Abhay). v6: - Use a dedicated flag instead of state->modeset for min CDCLK changes - Make get/put audio power domain symmetric - Rebased on top of intel_wakref tracking changes. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Abhay Kumar <abhay.kumar@intel.com> Tested-by: Abhay Kumar <abhay.kumar@intel.com> Signed-off-by: Imre Deak <imre.deak@intel.com> --- drivers/gpu/drm/i915/i915_drv.h | 3 ++ drivers/gpu/drm/i915/intel_audio.c | 64 ++++++++++++++++++++++++++++++++++-- drivers/gpu/drm/i915/intel_cdclk.c | 30 ++++++----------- drivers/gpu/drm/i915/intel_display.c | 9 ++++- drivers/gpu/drm/i915/intel_drv.h | 3 ++ 5 files changed, 86 insertions(+), 23 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index c65c2e6649df..6b10cee4e77f 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -1624,6 +1624,8 @@ struct drm_i915_private { struct intel_cdclk_state actual; /* The current hardware cdclk state */ struct intel_cdclk_state hw; + + int force_min_cdclk; } cdclk; /** @@ -1743,6 +1745,7 @@ struct drm_i915_private { * */ struct mutex av_mutex; + int audio_power_refcount; struct { struct mutex mutex; diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c index 502b57ce72ab..57d634c94c7d 100644 --- a/drivers/gpu/drm/i915/intel_audio.c +++ b/drivers/gpu/drm/i915/intel_audio.c @@ -741,18 +741,78 @@ void intel_init_audio_hooks(struct drm_i915_private *dev_priv) } } +static void glk_force_audio_cdclk(struct drm_i915_private *dev_priv, + bool enable) +{ + struct drm_modeset_acquire_ctx ctx; + struct drm_atomic_state *state; + int ret; + + drm_modeset_acquire_init(&ctx, 0); + state = drm_atomic_state_alloc(&dev_priv->drm); + if (WARN_ON(!state)) + return; + + state->acquire_ctx = &ctx; + +retry: + to_intel_atomic_state(state)->cdclk.force_min_cdclk_changed = true; + to_intel_atomic_state(state)->cdclk.force_min_cdclk = + enable ? 2 * 96000 : 0; + + /* + * Protects dev_priv->cdclk.force_min_cdclk + * Need to lock this here in case we have no active pipes + * and thus wouldn't lock it during the commit otherwise. + */ + ret = drm_modeset_lock(&dev_priv->drm.mode_config.connection_mutex, + &ctx); + if (!ret) + ret = drm_atomic_commit(state); + + if (ret == -EDEADLK) { + drm_atomic_state_clear(state); + drm_modeset_backoff(&ctx); + goto retry; + } + + WARN_ON(ret); + + drm_atomic_state_put(state); + + drm_modeset_drop_locks(&ctx); + drm_modeset_acquire_fini(&ctx); +} + static unsigned long i915_audio_component_get_power(struct device *kdev) { + struct drm_i915_private *dev_priv = kdev_to_i915(kdev); + intel_wakeref_t ret; + /* Catch potential impedance mismatches before they occur! */ BUILD_BUG_ON(sizeof(intel_wakeref_t) > sizeof(unsigned long)); - return intel_display_power_get(kdev_to_i915(kdev), POWER_DOMAIN_AUDIO); + ret = intel_display_power_get(dev_priv, POWER_DOMAIN_AUDIO); + + /* Force CDCLK to 2*BCLK as long as we need audio to be powered. */ + if (dev_priv->audio_power_refcount++ == 0) + if (IS_CANNONLAKE(dev_priv) || IS_GEMINILAKE(dev_priv)) + glk_force_audio_cdclk(dev_priv, true); + + return ret; } static void i915_audio_component_put_power(struct device *kdev, unsigned long cookie) { - intel_display_power_put(kdev_to_i915(kdev), POWER_DOMAIN_AUDIO, cookie); + struct drm_i915_private *dev_priv = kdev_to_i915(kdev); + + /* Stop forcing CDCLK to 2*BCLK if no need for audio to be powered. */ + if (--dev_priv->audio_power_refcount == 0) + if (IS_CANNONLAKE(dev_priv) || IS_GEMINILAKE(dev_priv)) + glk_force_audio_cdclk(dev_priv, false); + + intel_display_power_put(dev_priv, POWER_DOMAIN_AUDIO, cookie); } static void i915_audio_component_codec_wake_override(struct device *kdev, diff --git a/drivers/gpu/drm/i915/intel_cdclk.c b/drivers/gpu/drm/i915/intel_cdclk.c index 21fb4e0d6c4e..7dcca84f31d1 100644 --- a/drivers/gpu/drm/i915/intel_cdclk.c +++ b/drivers/gpu/drm/i915/intel_cdclk.c @@ -2187,19 +2187,8 @@ int intel_crtc_compute_min_cdclk(const struct intel_crtc_state *crtc_state) /* * According to BSpec, "The CD clock frequency must be at least twice * the frequency of the Azalia BCLK." and BCLK is 96 MHz by default. - * - * FIXME: Check the actual, not default, BCLK being used. - * - * FIXME: This does not depend on ->has_audio because the higher CDCLK - * is required for audio probe, also when there are no audio capable - * displays connected at probe time. This leads to unnecessarily high - * CDCLK when audio is not required. - * - * FIXME: This limit is only applied when there are displays connected - * at probe time. If we probe without displays, we'll still end up using - * the platform minimum CDCLK, failing audio probe. */ - if (INTEL_GEN(dev_priv) >= 9) + if (crtc_state->has_audio && INTEL_GEN(dev_priv) >= 9) min_cdclk = max(2 * 96000, min_cdclk); /* @@ -2239,7 +2228,7 @@ static int intel_compute_min_cdclk(struct drm_atomic_state *state) intel_state->min_cdclk[i] = min_cdclk; } - min_cdclk = 0; + min_cdclk = intel_state->cdclk.force_min_cdclk; for_each_pipe(dev_priv, pipe) min_cdclk = max(intel_state->min_cdclk[pipe], min_cdclk); @@ -2300,7 +2289,8 @@ static int vlv_modeset_calc_cdclk(struct drm_atomic_state *state) vlv_calc_voltage_level(dev_priv, cdclk); if (!intel_state->active_crtcs) { - cdclk = vlv_calc_cdclk(dev_priv, 0); + cdclk = vlv_calc_cdclk(dev_priv, + intel_state->cdclk.force_min_cdclk); intel_state->cdclk.actual.cdclk = cdclk; intel_state->cdclk.actual.voltage_level = @@ -2333,7 +2323,7 @@ static int bdw_modeset_calc_cdclk(struct drm_atomic_state *state) bdw_calc_voltage_level(cdclk); if (!intel_state->active_crtcs) { - cdclk = bdw_calc_cdclk(0); + cdclk = bdw_calc_cdclk(intel_state->cdclk.force_min_cdclk); intel_state->cdclk.actual.cdclk = cdclk; intel_state->cdclk.actual.voltage_level = @@ -2405,7 +2395,7 @@ static int skl_modeset_calc_cdclk(struct drm_atomic_state *state) skl_calc_voltage_level(cdclk); if (!intel_state->active_crtcs) { - cdclk = skl_calc_cdclk(0, vco); + cdclk = skl_calc_cdclk(intel_state->cdclk.force_min_cdclk, vco); intel_state->cdclk.actual.vco = vco; intel_state->cdclk.actual.cdclk = cdclk; @@ -2444,10 +2434,10 @@ static int bxt_modeset_calc_cdclk(struct drm_atomic_state *state) if (!intel_state->active_crtcs) { if (IS_GEMINILAKE(dev_priv)) { - cdclk = glk_calc_cdclk(0); + cdclk = glk_calc_cdclk(intel_state->cdclk.force_min_cdclk); vco = glk_de_pll_vco(dev_priv, cdclk); } else { - cdclk = bxt_calc_cdclk(0); + cdclk = bxt_calc_cdclk(intel_state->cdclk.force_min_cdclk); vco = bxt_de_pll_vco(dev_priv, cdclk); } @@ -2483,7 +2473,7 @@ static int cnl_modeset_calc_cdclk(struct drm_atomic_state *state) cnl_compute_min_voltage_level(intel_state)); if (!intel_state->active_crtcs) { - cdclk = cnl_calc_cdclk(0); + cdclk = cnl_calc_cdclk(intel_state->cdclk.force_min_cdclk); vco = cnl_cdclk_pll_vco(dev_priv, cdclk); intel_state->cdclk.actual.vco = vco; @@ -2519,7 +2509,7 @@ static int icl_modeset_calc_cdclk(struct drm_atomic_state *state) cnl_compute_min_voltage_level(intel_state)); if (!intel_state->active_crtcs) { - cdclk = icl_calc_cdclk(0, ref); + cdclk = icl_calc_cdclk(intel_state->cdclk.force_min_cdclk, ref); vco = icl_calc_cdclk_pll_vco(dev_priv, cdclk); intel_state->cdclk.actual.vco = vco; diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 61acbaf2af75..b4199cd53349 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -12973,6 +12973,11 @@ static int intel_modeset_checks(struct drm_atomic_state *state) return -EINVAL; } + /* keep the current setting */ + if (!intel_state->cdclk.force_min_cdclk_changed) + intel_state->cdclk.force_min_cdclk = + dev_priv->cdclk.force_min_cdclk; + intel_state->modeset = true; intel_state->active_crtcs = dev_priv->active_crtcs; intel_state->cdclk.logical = dev_priv->cdclk.logical; @@ -13068,7 +13073,7 @@ static int intel_atomic_check(struct drm_device *dev, struct drm_crtc *crtc; struct drm_crtc_state *old_crtc_state, *crtc_state; int ret, i; - bool any_ms = false; + bool any_ms = intel_state->cdclk.force_min_cdclk_changed; /* Catch I915_MODE_FLAG_INHERITED */ for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, @@ -13660,6 +13665,8 @@ static int intel_atomic_commit(struct drm_device *dev, dev_priv->active_crtcs = intel_state->active_crtcs; dev_priv->cdclk.logical = intel_state->cdclk.logical; dev_priv->cdclk.actual = intel_state->cdclk.actual; + dev_priv->cdclk.force_min_cdclk = + intel_state->cdclk.force_min_cdclk; } drm_atomic_state_get(state); diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index d9f188ef21f4..0b84e557c267 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h @@ -556,6 +556,9 @@ struct intel_atomic_state { * state only when all crtc's are DPMS off. */ struct intel_cdclk_state actual; + + int force_min_cdclk; + bool force_min_cdclk_changed; } cdclk; bool dpll_set, modeset; -- 2.13.2 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v6 2/2] drm/i915: Skip modeset for cdclk changes if possible 2019-03-18 14:34 [PATCH v6 0/2] drm/i915: Ensure minimum CDCLK requirement for audio Imre Deak 2019-03-18 14:34 ` [PATCH v6 1/2] drm/i915: Force 2*96 MHz cdclk on glk/cnl when audio power is enabled Imre Deak @ 2019-03-18 14:34 ` Imre Deak 2019-03-18 18:37 ` Ville Syrjälä 2019-03-18 18:01 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Ensure minimum CDCLK requirement for audio Patchwork ` (3 subsequent siblings) 5 siblings, 1 reply; 9+ messages in thread From: Imre Deak @ 2019-03-18 14:34 UTC (permalink / raw) To: intel-gfx From: Ville Syrjälä <ville.syrjala@linux.intel.com> If we have only a single active pipe and the cdclk change only requires the cd2x divider to be updated bxt+ can do the update with forcing a full modeset on the pipe. Try to hook that up. v2: - Wait for vblank after an optimized CDCLK change. - Avoid optimization if the pipe needs a modeset (or was disabled). - Split CDCLK change to a pre/post plane update step. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Abhay Kumar <abhay.kumar@intel.com> Tested-by: Abhay Kumar <abhay.kumar@intel.com> Signed-off-by: Imre Deak <imre.deak@intel.com> --- drivers/gpu/drm/i915/i915_drv.h | 3 +- drivers/gpu/drm/i915/i915_reg.h | 3 +- drivers/gpu/drm/i915/intel_cdclk.c | 155 ++++++++++++++++++++++++++++------- drivers/gpu/drm/i915/intel_display.c | 39 ++++++++- drivers/gpu/drm/i915/intel_drv.h | 15 +++- 5 files changed, 178 insertions(+), 37 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 6b10cee4e77f..d8f91525c94c 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -277,7 +277,8 @@ struct drm_i915_display_funcs { void (*get_cdclk)(struct drm_i915_private *dev_priv, struct intel_cdclk_state *cdclk_state); void (*set_cdclk)(struct drm_i915_private *dev_priv, - const struct intel_cdclk_state *cdclk_state); + const struct intel_cdclk_state *cdclk_state, + enum pipe pipe); int (*get_fifo_size)(struct drm_i915_private *dev_priv, enum i9xx_plane_id i9xx_plane); int (*compute_pipe_wm)(struct intel_crtc_state *cstate); diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index 9b69cec21f7b..12b8170ced96 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h @@ -9521,7 +9521,8 @@ enum skl_power_gate { #define BXT_CDCLK_CD2X_PIPE(pipe) ((pipe) << 20) #define CDCLK_DIVMUX_CD_OVERRIDE (1 << 19) #define BXT_CDCLK_CD2X_PIPE_NONE BXT_CDCLK_CD2X_PIPE(3) -#define ICL_CDCLK_CD2X_PIPE_NONE (7 << 19) +#define ICL_CDCLK_CD2X_PIPE(pipe) ((pipe) << 19) +#define ICL_CDCLK_CD2X_PIPE_NONE ICL_CDCLK_CD2X_PIPE(7) #define BXT_CDCLK_SSA_PRECHARGE_ENABLE (1 << 16) #define CDCLK_FREQ_DECIMAL_MASK (0x7ff) diff --git a/drivers/gpu/drm/i915/intel_cdclk.c b/drivers/gpu/drm/i915/intel_cdclk.c index 7dcca84f31d1..d074517288ea 100644 --- a/drivers/gpu/drm/i915/intel_cdclk.c +++ b/drivers/gpu/drm/i915/intel_cdclk.c @@ -516,7 +516,8 @@ static void vlv_program_pfi_credits(struct drm_i915_private *dev_priv) } static void vlv_set_cdclk(struct drm_i915_private *dev_priv, - const struct intel_cdclk_state *cdclk_state) + const struct intel_cdclk_state *cdclk_state, + enum pipe pipe) { int cdclk = cdclk_state->cdclk; u32 val, cmd = cdclk_state->voltage_level; @@ -598,7 +599,8 @@ static void vlv_set_cdclk(struct drm_i915_private *dev_priv, } static void chv_set_cdclk(struct drm_i915_private *dev_priv, - const struct intel_cdclk_state *cdclk_state) + const struct intel_cdclk_state *cdclk_state, + enum pipe pipe) { int cdclk = cdclk_state->cdclk; u32 val, cmd = cdclk_state->voltage_level; @@ -697,7 +699,8 @@ static void bdw_get_cdclk(struct drm_i915_private *dev_priv, } static void bdw_set_cdclk(struct drm_i915_private *dev_priv, - const struct intel_cdclk_state *cdclk_state) + const struct intel_cdclk_state *cdclk_state, + enum pipe pipe) { int cdclk = cdclk_state->cdclk; u32 val; @@ -987,7 +990,8 @@ static void skl_dpll0_disable(struct drm_i915_private *dev_priv) } static void skl_set_cdclk(struct drm_i915_private *dev_priv, - const struct intel_cdclk_state *cdclk_state) + const struct intel_cdclk_state *cdclk_state, + enum pipe pipe) { int cdclk = cdclk_state->cdclk; int vco = cdclk_state->vco; @@ -1158,7 +1162,7 @@ void skl_init_cdclk(struct drm_i915_private *dev_priv) cdclk_state.cdclk = skl_calc_cdclk(0, cdclk_state.vco); cdclk_state.voltage_level = skl_calc_voltage_level(cdclk_state.cdclk); - skl_set_cdclk(dev_priv, &cdclk_state); + skl_set_cdclk(dev_priv, &cdclk_state, INVALID_PIPE); } /** @@ -1176,7 +1180,7 @@ void skl_uninit_cdclk(struct drm_i915_private *dev_priv) cdclk_state.vco = 0; cdclk_state.voltage_level = skl_calc_voltage_level(cdclk_state.cdclk); - skl_set_cdclk(dev_priv, &cdclk_state); + skl_set_cdclk(dev_priv, &cdclk_state, INVALID_PIPE); } static int bxt_calc_cdclk(int min_cdclk) @@ -1355,7 +1359,8 @@ static void bxt_de_pll_enable(struct drm_i915_private *dev_priv, int vco) } static void bxt_set_cdclk(struct drm_i915_private *dev_priv, - const struct intel_cdclk_state *cdclk_state) + const struct intel_cdclk_state *cdclk_state, + enum pipe pipe) { int cdclk = cdclk_state->cdclk; int vco = cdclk_state->vco; @@ -1408,11 +1413,10 @@ static void bxt_set_cdclk(struct drm_i915_private *dev_priv, bxt_de_pll_enable(dev_priv, vco); val = divider | skl_cdclk_decimal(cdclk); - /* - * FIXME if only the cd2x divider needs changing, it could be done - * without shutting off the pipe (if only one pipe is active). - */ - val |= BXT_CDCLK_CD2X_PIPE_NONE; + if (pipe == INVALID_PIPE) + val |= BXT_CDCLK_CD2X_PIPE_NONE; + else + val |= BXT_CDCLK_CD2X_PIPE(pipe); /* * Disable SSA Precharge when CD clock frequency < 500 MHz, * enable otherwise. @@ -1421,6 +1425,9 @@ static void bxt_set_cdclk(struct drm_i915_private *dev_priv, val |= BXT_CDCLK_SSA_PRECHARGE_ENABLE; I915_WRITE(CDCLK_CTL, val); + if (pipe != INVALID_PIPE) + intel_wait_for_vblank(dev_priv, pipe); + mutex_lock(&dev_priv->pcu_lock); /* * The timeout isn't specified, the 2ms used here is based on @@ -1525,7 +1532,7 @@ void bxt_init_cdclk(struct drm_i915_private *dev_priv) } cdclk_state.voltage_level = bxt_calc_voltage_level(cdclk_state.cdclk); - bxt_set_cdclk(dev_priv, &cdclk_state); + bxt_set_cdclk(dev_priv, &cdclk_state, INVALID_PIPE); } /** @@ -1543,7 +1550,7 @@ void bxt_uninit_cdclk(struct drm_i915_private *dev_priv) cdclk_state.vco = 0; cdclk_state.voltage_level = bxt_calc_voltage_level(cdclk_state.cdclk); - bxt_set_cdclk(dev_priv, &cdclk_state); + bxt_set_cdclk(dev_priv, &cdclk_state, INVALID_PIPE); } static int cnl_calc_cdclk(int min_cdclk) @@ -1663,7 +1670,8 @@ static void cnl_cdclk_pll_enable(struct drm_i915_private *dev_priv, int vco) } static void cnl_set_cdclk(struct drm_i915_private *dev_priv, - const struct intel_cdclk_state *cdclk_state) + const struct intel_cdclk_state *cdclk_state, + enum pipe pipe) { int cdclk = cdclk_state->cdclk; int vco = cdclk_state->vco; @@ -1704,13 +1712,15 @@ static void cnl_set_cdclk(struct drm_i915_private *dev_priv, cnl_cdclk_pll_enable(dev_priv, vco); val = divider | skl_cdclk_decimal(cdclk); - /* - * FIXME if only the cd2x divider needs changing, it could be done - * without shutting off the pipe (if only one pipe is active). - */ - val |= BXT_CDCLK_CD2X_PIPE_NONE; + if (pipe == INVALID_PIPE) + val |= BXT_CDCLK_CD2X_PIPE_NONE; + else + val |= BXT_CDCLK_CD2X_PIPE(pipe); I915_WRITE(CDCLK_CTL, val); + if (pipe != INVALID_PIPE) + intel_wait_for_vblank(dev_priv, pipe); + /* inform PCU of the change */ mutex_lock(&dev_priv->pcu_lock); sandybridge_pcode_write(dev_priv, SKL_PCODE_CDCLK_CONTROL, @@ -1847,10 +1857,12 @@ static int icl_calc_cdclk_pll_vco(struct drm_i915_private *dev_priv, int cdclk) } static void icl_set_cdclk(struct drm_i915_private *dev_priv, - const struct intel_cdclk_state *cdclk_state) + const struct intel_cdclk_state *cdclk_state, + enum pipe pipe) { unsigned int cdclk = cdclk_state->cdclk; unsigned int vco = cdclk_state->vco; + u32 val; int ret; mutex_lock(&dev_priv->pcu_lock); @@ -1872,8 +1884,15 @@ static void icl_set_cdclk(struct drm_i915_private *dev_priv, if (dev_priv->cdclk.hw.vco != vco) cnl_cdclk_pll_enable(dev_priv, vco); - I915_WRITE(CDCLK_CTL, ICL_CDCLK_CD2X_PIPE_NONE | - skl_cdclk_decimal(cdclk)); + val = skl_cdclk_decimal(cdclk); + if (pipe == INVALID_PIPE) + val |= ICL_CDCLK_CD2X_PIPE_NONE; + else + val |= ICL_CDCLK_CD2X_PIPE(pipe); + I915_WRITE(CDCLK_CTL, val); + + if (pipe != INVALID_PIPE) + intel_wait_for_vblank(dev_priv, pipe); mutex_lock(&dev_priv->pcu_lock); sandybridge_pcode_write(dev_priv, SKL_PCODE_CDCLK_CONTROL, @@ -2002,7 +2021,7 @@ void icl_init_cdclk(struct drm_i915_private *dev_priv) sanitized_state.voltage_level = icl_calc_voltage_level(sanitized_state.cdclk); - icl_set_cdclk(dev_priv, &sanitized_state); + icl_set_cdclk(dev_priv, &sanitized_state, INVALID_PIPE); } /** @@ -2020,7 +2039,7 @@ void icl_uninit_cdclk(struct drm_i915_private *dev_priv) cdclk_state.vco = 0; cdclk_state.voltage_level = icl_calc_voltage_level(cdclk_state.cdclk); - icl_set_cdclk(dev_priv, &cdclk_state); + icl_set_cdclk(dev_priv, &cdclk_state, INVALID_PIPE); } /** @@ -2048,7 +2067,7 @@ void cnl_init_cdclk(struct drm_i915_private *dev_priv) cdclk_state.vco = cnl_cdclk_pll_vco(dev_priv, cdclk_state.cdclk); cdclk_state.voltage_level = cnl_calc_voltage_level(cdclk_state.cdclk); - cnl_set_cdclk(dev_priv, &cdclk_state); + cnl_set_cdclk(dev_priv, &cdclk_state, INVALID_PIPE); } /** @@ -2066,7 +2085,7 @@ void cnl_uninit_cdclk(struct drm_i915_private *dev_priv) cdclk_state.vco = 0; cdclk_state.voltage_level = cnl_calc_voltage_level(cdclk_state.cdclk); - cnl_set_cdclk(dev_priv, &cdclk_state); + cnl_set_cdclk(dev_priv, &cdclk_state, INVALID_PIPE); } /** @@ -2086,6 +2105,42 @@ bool intel_cdclk_needs_modeset(const struct intel_cdclk_state *a, } /** + * intel_cdclk_needs_cd2x_update - Determine if two CDCLK states require a cd2x divider update + * @a: first CDCLK state + * @b: second CDCLK state + * + * Returns: + * True if the CDCLK states require just a cd2x divider update, false if not. + */ +bool intel_cdclk_needs_cd2x_update(struct drm_i915_private *dev_priv, + const struct intel_cdclk_state *a, + const struct intel_cdclk_state *b) +{ + /* Older hw doesn't have the capability */ + if (INTEL_GEN(dev_priv) < 10 && !IS_GEN9_LP(dev_priv)) + return false; + + return a->cdclk != b->cdclk && + a->vco == b->vco && + a->ref == b->ref; +} + +/** + * intel_cdclk_can_skip_modeset - Determine if two CDCLK states can a modeset on all pipes + * @a: first CDCLK state + * @b: second CDCLK state + * + * Returns: + * True if the CDCLK states require pipes to be off during reprogramming, + * false if not. + */ +bool intel_cdclk_can_skip_modeset(const struct intel_cdclk_state *a, + const struct intel_cdclk_state *b) +{ + return a->vco == b->vco && a->ref == b->ref; +} + +/** * intel_cdclk_changed - Determine if two CDCLK states are different * @a: first CDCLK state * @b: second CDCLK state @@ -2113,12 +2168,14 @@ void intel_dump_cdclk_state(const struct intel_cdclk_state *cdclk_state, * intel_set_cdclk - Push the CDCLK state to the hardware * @dev_priv: i915 device * @cdclk_state: new CDCLK state + * @pipe: pipe with which to synchronize the update * * Program the hardware based on the passed in CDCLK state, * if necessary. */ -void intel_set_cdclk(struct drm_i915_private *dev_priv, - const struct intel_cdclk_state *cdclk_state) +static void intel_set_cdclk(struct drm_i915_private *dev_priv, + const struct intel_cdclk_state *cdclk_state, + enum pipe pipe) { if (!intel_cdclk_changed(&dev_priv->cdclk.hw, cdclk_state)) return; @@ -2128,7 +2185,7 @@ void intel_set_cdclk(struct drm_i915_private *dev_priv, intel_dump_cdclk_state(cdclk_state, "Changing CDCLK to"); - dev_priv->display.set_cdclk(dev_priv, cdclk_state); + dev_priv->display.set_cdclk(dev_priv, cdclk_state, pipe); if (WARN(intel_cdclk_changed(&dev_priv->cdclk.hw, cdclk_state), "cdclk state doesn't match!\n")) { @@ -2137,6 +2194,44 @@ void intel_set_cdclk(struct drm_i915_private *dev_priv, } } +/** + * intel_set_cdclk_pre_plane_update - Push the CDCLK state to the hardware + * @dev_priv: i915 device + * @cdclk_state: new CDCLK state + * @pipe: pipe with which to synchronize the update + * + * Program the hardware before updating the HW plane state based on the passed + * in CDCLK state, if necessary. + */ +void +intel_set_cdclk_pre_plane_update(struct drm_i915_private *dev_priv, + const struct intel_cdclk_state *cdclk_state, + enum pipe pipe) +{ + if (pipe == INVALID_PIPE || + dev_priv->cdclk.actual.cdclk >= cdclk_state->cdclk) + intel_set_cdclk(dev_priv, cdclk_state, pipe); +} + +/** + * intel_set_cdclk_post_plane_update - Push the CDCLK state to the hardware + * @dev_priv: i915 device + * @cdclk_state: new CDCLK state + * @pipe: pipe with which to synchronize the update + * + * Program the hardware after updating the HW plane state based on the passed + * in CDCLK state, if necessary. + */ +void +intel_set_cdclk_post_plane_update(struct drm_i915_private *dev_priv, + const struct intel_cdclk_state *cdclk_state, + enum pipe pipe) +{ + if (pipe != INVALID_PIPE && + dev_priv->cdclk.actual.cdclk < cdclk_state->cdclk) + intel_set_cdclk(dev_priv, cdclk_state, pipe); +} + static int intel_pixel_rate_to_cdclk(struct drm_i915_private *dev_priv, int pixel_rate) { diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index b4199cd53349..0f9884ec7e8e 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -12982,6 +12982,7 @@ static int intel_modeset_checks(struct drm_atomic_state *state) intel_state->active_crtcs = dev_priv->active_crtcs; intel_state->cdclk.logical = dev_priv->cdclk.logical; intel_state->cdclk.actual = dev_priv->cdclk.actual; + intel_state->cdclk.pipe = INVALID_PIPE; for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) { if (new_crtc_state->active) @@ -13001,6 +13002,8 @@ static int intel_modeset_checks(struct drm_atomic_state *state) * adjusted_mode bits in the crtc directly. */ if (dev_priv->display.modeset_calc_cdclk) { + enum pipe pipe; + ret = dev_priv->display.modeset_calc_cdclk(state); if (ret < 0) return ret; @@ -13017,12 +13020,36 @@ static int intel_modeset_checks(struct drm_atomic_state *state) return ret; } + if (is_power_of_2(intel_state->active_crtcs)) { + struct drm_crtc *crtc; + struct drm_crtc_state *crtc_state; + + pipe = ilog2(intel_state->active_crtcs); + crtc = &intel_get_crtc_for_pipe(dev_priv, pipe)->base; + crtc_state = drm_atomic_get_new_crtc_state(state, crtc); + if (crtc_state && needs_modeset(crtc_state)) + pipe = INVALID_PIPE; + } else { + pipe = INVALID_PIPE; + } + /* All pipes must be switched off while we change the cdclk. */ - if (intel_cdclk_needs_modeset(&dev_priv->cdclk.actual, - &intel_state->cdclk.actual)) { + if (pipe != INVALID_PIPE && + intel_cdclk_needs_cd2x_update(dev_priv, + &dev_priv->cdclk.actual, + &intel_state->cdclk.actual)) { + ret = intel_lock_all_pipes(state); + if (ret < 0) + return ret; + + intel_state->cdclk.pipe = pipe; + } else if (intel_cdclk_needs_modeset(&dev_priv->cdclk.actual, + &intel_state->cdclk.actual)) { ret = intel_modeset_all_pipes(state); if (ret < 0) return ret; + + intel_state->cdclk.pipe = INVALID_PIPE; } DRM_DEBUG_KMS("New cdclk calculated to be logical %u kHz, actual %u kHz\n", @@ -13433,7 +13460,9 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state) if (intel_state->modeset) { drm_atomic_helper_update_legacy_modeset_state(state->dev, state); - intel_set_cdclk(dev_priv, &dev_priv->cdclk.actual); + intel_set_cdclk_pre_plane_update(dev_priv, + &dev_priv->cdclk.actual, + intel_state->cdclk.pipe); /* * SKL workaround: bspec recommends we disable the SAGV when we @@ -13462,6 +13491,10 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state) /* Now enable the clocks, plane, pipe, and connectors that we set up. */ dev_priv->display.update_crtcs(state); + intel_set_cdclk_post_plane_update(dev_priv, + &dev_priv->cdclk.actual, + intel_state->cdclk.pipe); + /* FIXME: We should call drm_atomic_helper_commit_hw_done() here * already, but still need the state for the delayed optimization. To * fix this: diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 0b84e557c267..e5a1e245ee65 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h @@ -559,6 +559,8 @@ struct intel_atomic_state { int force_min_cdclk; bool force_min_cdclk_changed; + /* pipe to which cd2x update is synchronized */ + enum pipe pipe; } cdclk; bool dpll_set, modeset; @@ -1694,12 +1696,21 @@ void intel_init_cdclk_hooks(struct drm_i915_private *dev_priv); void intel_update_max_cdclk(struct drm_i915_private *dev_priv); void intel_update_cdclk(struct drm_i915_private *dev_priv); void intel_update_rawclk(struct drm_i915_private *dev_priv); +bool intel_cdclk_needs_cd2x_update(struct drm_i915_private *dev_priv, + const struct intel_cdclk_state *a, + const struct intel_cdclk_state *b); bool intel_cdclk_needs_modeset(const struct intel_cdclk_state *a, const struct intel_cdclk_state *b); bool intel_cdclk_changed(const struct intel_cdclk_state *a, const struct intel_cdclk_state *b); -void intel_set_cdclk(struct drm_i915_private *dev_priv, - const struct intel_cdclk_state *cdclk_state); +void +intel_set_cdclk_pre_plane_update(struct drm_i915_private *dev_priv, + const struct intel_cdclk_state *cdclk_state, + enum pipe pipe); +void +intel_set_cdclk_post_plane_update(struct drm_i915_private *dev_priv, + const struct intel_cdclk_state *cdclk_state, + enum pipe pipe); void intel_dump_cdclk_state(const struct intel_cdclk_state *cdclk_state, const char *context); -- 2.13.2 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v6 2/2] drm/i915: Skip modeset for cdclk changes if possible 2019-03-18 14:34 ` [PATCH v6 2/2] drm/i915: Skip modeset for cdclk changes if possible Imre Deak @ 2019-03-18 18:37 ` Ville Syrjälä 2019-03-18 19:16 ` Imre Deak 0 siblings, 1 reply; 9+ messages in thread From: Ville Syrjälä @ 2019-03-18 18:37 UTC (permalink / raw) To: Imre Deak; +Cc: intel-gfx On Mon, Mar 18, 2019 at 04:34:35PM +0200, Imre Deak wrote: > @@ -2137,6 +2194,44 @@ void intel_set_cdclk(struct drm_i915_private *dev_priv, > } > } > > +/** > + * intel_set_cdclk_pre_plane_update - Push the CDCLK state to the hardware > + * @dev_priv: i915 device > + * @cdclk_state: new CDCLK state > + * @pipe: pipe with which to synchronize the update > + * > + * Program the hardware before updating the HW plane state based on the passed > + * in CDCLK state, if necessary. > + */ > +void > +intel_set_cdclk_pre_plane_update(struct drm_i915_private *dev_priv, > + const struct intel_cdclk_state *cdclk_state, > + enum pipe pipe) > +{ > + if (pipe == INVALID_PIPE || > + dev_priv->cdclk.actual.cdclk >= cdclk_state->cdclk) cdclk_state == &dev_priv->cdclk.actual so these look a bit buggered. Would be somewhat nice to use the private obj stuff for this but the locking now enforced by that make it difficult. Perhaps a swap(dev_priv->cdlk, state->cdclk) would be possible? A quick scan through the code didn't reveal any uses of state->cdclk outside the compute code paths, so looks safeish. Another option is just comparing against dev_priv->cdclk.hw since we still have that. > + intel_set_cdclk(dev_priv, cdclk_state, pipe); > +} > + > +/** > + * intel_set_cdclk_post_plane_update - Push the CDCLK state to the hardware > + * @dev_priv: i915 device > + * @cdclk_state: new CDCLK state > + * @pipe: pipe with which to synchronize the update > + * > + * Program the hardware after updating the HW plane state based on the passed > + * in CDCLK state, if necessary. > + */ > +void > +intel_set_cdclk_post_plane_update(struct drm_i915_private *dev_priv, > + const struct intel_cdclk_state *cdclk_state, > + enum pipe pipe) > +{ > + if (pipe != INVALID_PIPE && > + dev_priv->cdclk.actual.cdclk < cdclk_state->cdclk) > + intel_set_cdclk(dev_priv, cdclk_state, pipe); > +} > + > static int intel_pixel_rate_to_cdclk(struct drm_i915_private *dev_priv, > int pixel_rate) > { > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index b4199cd53349..0f9884ec7e8e 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -12982,6 +12982,7 @@ static int intel_modeset_checks(struct drm_atomic_state *state) > intel_state->active_crtcs = dev_priv->active_crtcs; > intel_state->cdclk.logical = dev_priv->cdclk.logical; > intel_state->cdclk.actual = dev_priv->cdclk.actual; > + intel_state->cdclk.pipe = INVALID_PIPE; > > for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) { > if (new_crtc_state->active) > @@ -13001,6 +13002,8 @@ static int intel_modeset_checks(struct drm_atomic_state *state) > * adjusted_mode bits in the crtc directly. > */ > if (dev_priv->display.modeset_calc_cdclk) { > + enum pipe pipe; > + > ret = dev_priv->display.modeset_calc_cdclk(state); > if (ret < 0) > return ret; > @@ -13017,12 +13020,36 @@ static int intel_modeset_checks(struct drm_atomic_state *state) > return ret; > } > > + if (is_power_of_2(intel_state->active_crtcs)) { > + struct drm_crtc *crtc; > + struct drm_crtc_state *crtc_state; > + > + pipe = ilog2(intel_state->active_crtcs); > + crtc = &intel_get_crtc_for_pipe(dev_priv, pipe)->base; > + crtc_state = drm_atomic_get_new_crtc_state(state, crtc); > + if (crtc_state && needs_modeset(crtc_state)) > + pipe = INVALID_PIPE; > + } else { > + pipe = INVALID_PIPE; > + } > + > /* All pipes must be switched off while we change the cdclk. */ > - if (intel_cdclk_needs_modeset(&dev_priv->cdclk.actual, > - &intel_state->cdclk.actual)) { > + if (pipe != INVALID_PIPE && > + intel_cdclk_needs_cd2x_update(dev_priv, > + &dev_priv->cdclk.actual, > + &intel_state->cdclk.actual)) { > + ret = intel_lock_all_pipes(state); > + if (ret < 0) > + return ret; > + > + intel_state->cdclk.pipe = pipe; > + } else if (intel_cdclk_needs_modeset(&dev_priv->cdclk.actual, > + &intel_state->cdclk.actual)) { > ret = intel_modeset_all_pipes(state); > if (ret < 0) > return ret; > + > + intel_state->cdclk.pipe = INVALID_PIPE; > } > > DRM_DEBUG_KMS("New cdclk calculated to be logical %u kHz, actual %u kHz\n", > @@ -13433,7 +13460,9 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state) > if (intel_state->modeset) { > drm_atomic_helper_update_legacy_modeset_state(state->dev, state); > > - intel_set_cdclk(dev_priv, &dev_priv->cdclk.actual); > + intel_set_cdclk_pre_plane_update(dev_priv, > + &dev_priv->cdclk.actual, > + intel_state->cdclk.pipe); > > /* > * SKL workaround: bspec recommends we disable the SAGV when we > @@ -13462,6 +13491,10 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state) > /* Now enable the clocks, plane, pipe, and connectors that we set up. */ > dev_priv->display.update_crtcs(state); > > + intel_set_cdclk_post_plane_update(dev_priv, > + &dev_priv->cdclk.actual, > + intel_state->cdclk.pipe); > + > /* FIXME: We should call drm_atomic_helper_commit_hw_done() here > * already, but still need the state for the delayed optimization. To > * fix this: > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h > index 0b84e557c267..e5a1e245ee65 100644 > --- a/drivers/gpu/drm/i915/intel_drv.h > +++ b/drivers/gpu/drm/i915/intel_drv.h > @@ -559,6 +559,8 @@ struct intel_atomic_state { > > int force_min_cdclk; > bool force_min_cdclk_changed; > + /* pipe to which cd2x update is synchronized */ > + enum pipe pipe; > } cdclk; > > bool dpll_set, modeset; > @@ -1694,12 +1696,21 @@ void intel_init_cdclk_hooks(struct drm_i915_private *dev_priv); > void intel_update_max_cdclk(struct drm_i915_private *dev_priv); > void intel_update_cdclk(struct drm_i915_private *dev_priv); > void intel_update_rawclk(struct drm_i915_private *dev_priv); > +bool intel_cdclk_needs_cd2x_update(struct drm_i915_private *dev_priv, > + const struct intel_cdclk_state *a, > + const struct intel_cdclk_state *b); > bool intel_cdclk_needs_modeset(const struct intel_cdclk_state *a, > const struct intel_cdclk_state *b); > bool intel_cdclk_changed(const struct intel_cdclk_state *a, > const struct intel_cdclk_state *b); > -void intel_set_cdclk(struct drm_i915_private *dev_priv, > - const struct intel_cdclk_state *cdclk_state); > +void > +intel_set_cdclk_pre_plane_update(struct drm_i915_private *dev_priv, > + const struct intel_cdclk_state *cdclk_state, > + enum pipe pipe); > +void > +intel_set_cdclk_post_plane_update(struct drm_i915_private *dev_priv, > + const struct intel_cdclk_state *cdclk_state, > + enum pipe pipe); > void intel_dump_cdclk_state(const struct intel_cdclk_state *cdclk_state, > const char *context); > > -- > 2.13.2 -- Ville Syrjälä Intel _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v6 2/2] drm/i915: Skip modeset for cdclk changes if possible 2019-03-18 18:37 ` Ville Syrjälä @ 2019-03-18 19:16 ` Imre Deak 0 siblings, 0 replies; 9+ messages in thread From: Imre Deak @ 2019-03-18 19:16 UTC (permalink / raw) To: Ville Syrjälä; +Cc: intel-gfx On Mon, Mar 18, 2019 at 08:37:33PM +0200, Ville Syrjälä wrote: > On Mon, Mar 18, 2019 at 04:34:35PM +0200, Imre Deak wrote: > > @@ -2137,6 +2194,44 @@ void intel_set_cdclk(struct drm_i915_private *dev_priv, > > } > > } > > > > +/** > > + * intel_set_cdclk_pre_plane_update - Push the CDCLK state to the hardware > > + * @dev_priv: i915 device > > + * @cdclk_state: new CDCLK state > > + * @pipe: pipe with which to synchronize the update > > + * > > + * Program the hardware before updating the HW plane state based on the passed > > + * in CDCLK state, if necessary. > > + */ > > +void > > +intel_set_cdclk_pre_plane_update(struct drm_i915_private *dev_priv, > > + const struct intel_cdclk_state *cdclk_state, > > + enum pipe pipe) > > +{ > > + if (pipe == INVALID_PIPE || > > + dev_priv->cdclk.actual.cdclk >= cdclk_state->cdclk) > > cdclk_state == &dev_priv->cdclk.actual > so these look a bit buggered. Yep, screwed this up.. > Would be somewhat nice to use the private obj stuff for this but > the locking now enforced by that make it difficult. Perhaps a > swap(dev_priv->cdlk, state->cdclk) would be possible? I suppose you mean in intel_atomic_commit() already, where the swap is done already halfway, so in the end state->cdclk would become old_cdclk_state. That sounds fine to me. > A quick scan through the code didn't reveal any uses of state->cdclk > outside the compute code paths, so looks safeish. Another option is > just comparing against dev_priv->cdclk.hw since we still have that. > > > + intel_set_cdclk(dev_priv, cdclk_state, pipe); > > +} > > + > > +/** > > + * intel_set_cdclk_post_plane_update - Push the CDCLK state to the hardware > > + * @dev_priv: i915 device > > + * @cdclk_state: new CDCLK state > > + * @pipe: pipe with which to synchronize the update > > + * > > + * Program the hardware after updating the HW plane state based on the passed > > + * in CDCLK state, if necessary. > > + */ > > +void > > +intel_set_cdclk_post_plane_update(struct drm_i915_private *dev_priv, > > + const struct intel_cdclk_state *cdclk_state, > > + enum pipe pipe) > > +{ > > + if (pipe != INVALID_PIPE && > > + dev_priv->cdclk.actual.cdclk < cdclk_state->cdclk) > > + intel_set_cdclk(dev_priv, cdclk_state, pipe); > > +} > > + > > static int intel_pixel_rate_to_cdclk(struct drm_i915_private *dev_priv, > > int pixel_rate) > > { > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > > index b4199cd53349..0f9884ec7e8e 100644 > > --- a/drivers/gpu/drm/i915/intel_display.c > > +++ b/drivers/gpu/drm/i915/intel_display.c > > @@ -12982,6 +12982,7 @@ static int intel_modeset_checks(struct drm_atomic_state *state) > > intel_state->active_crtcs = dev_priv->active_crtcs; > > intel_state->cdclk.logical = dev_priv->cdclk.logical; > > intel_state->cdclk.actual = dev_priv->cdclk.actual; > > + intel_state->cdclk.pipe = INVALID_PIPE; > > > > for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) { > > if (new_crtc_state->active) > > @@ -13001,6 +13002,8 @@ static int intel_modeset_checks(struct drm_atomic_state *state) > > * adjusted_mode bits in the crtc directly. > > */ > > if (dev_priv->display.modeset_calc_cdclk) { > > + enum pipe pipe; > > + > > ret = dev_priv->display.modeset_calc_cdclk(state); > > if (ret < 0) > > return ret; > > @@ -13017,12 +13020,36 @@ static int intel_modeset_checks(struct drm_atomic_state *state) > > return ret; > > } > > > > + if (is_power_of_2(intel_state->active_crtcs)) { > > + struct drm_crtc *crtc; > > + struct drm_crtc_state *crtc_state; > > + > > + pipe = ilog2(intel_state->active_crtcs); > > + crtc = &intel_get_crtc_for_pipe(dev_priv, pipe)->base; > > + crtc_state = drm_atomic_get_new_crtc_state(state, crtc); > > + if (crtc_state && needs_modeset(crtc_state)) > > + pipe = INVALID_PIPE; > > + } else { > > + pipe = INVALID_PIPE; > > + } > > + > > /* All pipes must be switched off while we change the cdclk. */ > > - if (intel_cdclk_needs_modeset(&dev_priv->cdclk.actual, > > - &intel_state->cdclk.actual)) { > > + if (pipe != INVALID_PIPE && > > + intel_cdclk_needs_cd2x_update(dev_priv, > > + &dev_priv->cdclk.actual, > > + &intel_state->cdclk.actual)) { > > + ret = intel_lock_all_pipes(state); > > + if (ret < 0) > > + return ret; > > + > > + intel_state->cdclk.pipe = pipe; > > + } else if (intel_cdclk_needs_modeset(&dev_priv->cdclk.actual, > > + &intel_state->cdclk.actual)) { > > ret = intel_modeset_all_pipes(state); > > if (ret < 0) > > return ret; > > + > > + intel_state->cdclk.pipe = INVALID_PIPE; > > } > > > > DRM_DEBUG_KMS("New cdclk calculated to be logical %u kHz, actual %u kHz\n", > > @@ -13433,7 +13460,9 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state) > > if (intel_state->modeset) { > > drm_atomic_helper_update_legacy_modeset_state(state->dev, state); > > > > - intel_set_cdclk(dev_priv, &dev_priv->cdclk.actual); > > + intel_set_cdclk_pre_plane_update(dev_priv, > > + &dev_priv->cdclk.actual, > > + intel_state->cdclk.pipe); > > > > /* > > * SKL workaround: bspec recommends we disable the SAGV when we > > @@ -13462,6 +13491,10 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state) > > /* Now enable the clocks, plane, pipe, and connectors that we set up. */ > > dev_priv->display.update_crtcs(state); > > > > + intel_set_cdclk_post_plane_update(dev_priv, > > + &dev_priv->cdclk.actual, > > + intel_state->cdclk.pipe); > > + > > /* FIXME: We should call drm_atomic_helper_commit_hw_done() here > > * already, but still need the state for the delayed optimization. To > > * fix this: > > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h > > index 0b84e557c267..e5a1e245ee65 100644 > > --- a/drivers/gpu/drm/i915/intel_drv.h > > +++ b/drivers/gpu/drm/i915/intel_drv.h > > @@ -559,6 +559,8 @@ struct intel_atomic_state { > > > > int force_min_cdclk; > > bool force_min_cdclk_changed; > > + /* pipe to which cd2x update is synchronized */ > > + enum pipe pipe; > > } cdclk; > > > > bool dpll_set, modeset; > > @@ -1694,12 +1696,21 @@ void intel_init_cdclk_hooks(struct drm_i915_private *dev_priv); > > void intel_update_max_cdclk(struct drm_i915_private *dev_priv); > > void intel_update_cdclk(struct drm_i915_private *dev_priv); > > void intel_update_rawclk(struct drm_i915_private *dev_priv); > > +bool intel_cdclk_needs_cd2x_update(struct drm_i915_private *dev_priv, > > + const struct intel_cdclk_state *a, > > + const struct intel_cdclk_state *b); > > bool intel_cdclk_needs_modeset(const struct intel_cdclk_state *a, > > const struct intel_cdclk_state *b); > > bool intel_cdclk_changed(const struct intel_cdclk_state *a, > > const struct intel_cdclk_state *b); > > -void intel_set_cdclk(struct drm_i915_private *dev_priv, > > - const struct intel_cdclk_state *cdclk_state); > > +void > > +intel_set_cdclk_pre_plane_update(struct drm_i915_private *dev_priv, > > + const struct intel_cdclk_state *cdclk_state, > > + enum pipe pipe); > > +void > > +intel_set_cdclk_post_plane_update(struct drm_i915_private *dev_priv, > > + const struct intel_cdclk_state *cdclk_state, > > + enum pipe pipe); > > void intel_dump_cdclk_state(const struct intel_cdclk_state *cdclk_state, > > const char *context); > > > > -- > > 2.13.2 > > -- > Ville Syrjälä > Intel _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 9+ messages in thread
* ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Ensure minimum CDCLK requirement for audio 2019-03-18 14:34 [PATCH v6 0/2] drm/i915: Ensure minimum CDCLK requirement for audio Imre Deak 2019-03-18 14:34 ` [PATCH v6 1/2] drm/i915: Force 2*96 MHz cdclk on glk/cnl when audio power is enabled Imre Deak 2019-03-18 14:34 ` [PATCH v6 2/2] drm/i915: Skip modeset for cdclk changes if possible Imre Deak @ 2019-03-18 18:01 ` Patchwork 2019-03-18 18:03 ` ✗ Fi.CI.SPARSE: " Patchwork ` (2 subsequent siblings) 5 siblings, 0 replies; 9+ messages in thread From: Patchwork @ 2019-03-18 18:01 UTC (permalink / raw) To: Imre Deak; +Cc: intel-gfx == Series Details == Series: drm/i915: Ensure minimum CDCLK requirement for audio URL : https://patchwork.freedesktop.org/series/58132/ State : warning == Summary == $ dim checkpatch origin/drm-tip f5ea7a63eeb3 drm/i915: Force 2*96 MHz cdclk on glk/cnl when audio power is enabled -:60: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis #60: FILE: drivers/gpu/drm/i915/intel_audio.c:745: +static void glk_force_audio_cdclk(struct drm_i915_private *dev_priv, + bool enable) total: 0 errors, 0 warnings, 1 checks, 212 lines checked e871b62f8db1 drm/i915: Skip modeset for cdclk changes if possible _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 9+ messages in thread
* ✗ Fi.CI.SPARSE: warning for drm/i915: Ensure minimum CDCLK requirement for audio 2019-03-18 14:34 [PATCH v6 0/2] drm/i915: Ensure minimum CDCLK requirement for audio Imre Deak ` (2 preceding siblings ...) 2019-03-18 18:01 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Ensure minimum CDCLK requirement for audio Patchwork @ 2019-03-18 18:03 ` Patchwork 2019-03-18 18:20 ` ✓ Fi.CI.BAT: success " Patchwork 2019-03-19 2:56 ` ✗ Fi.CI.IGT: failure " Patchwork 5 siblings, 0 replies; 9+ messages in thread From: Patchwork @ 2019-03-18 18:03 UTC (permalink / raw) To: Imre Deak; +Cc: intel-gfx == Series Details == Series: drm/i915: Ensure minimum CDCLK requirement for audio URL : https://patchwork.freedesktop.org/series/58132/ State : warning == Summary == $ dim sparse origin/drm-tip Sparse version: v0.5.2 Commit: drm/i915: Force 2*96 MHz cdclk on glk/cnl when audio power is enabled -O:drivers/gpu/drm/i915/intel_cdclk.c:2203:29: warning: expression using sizeof(void) +drivers/gpu/drm/i915/intel_cdclk.c:2192:29: warning: expression using sizeof(void) -O:drivers/gpu/drm/i915/intel_cdclk.c:2244:29: warning: expression using sizeof(void) -O:drivers/gpu/drm/i915/intel_cdclk.c:2244:29: warning: expression using sizeof(void) +drivers/gpu/drm/i915/intel_cdclk.c:2233:29: warning: expression using sizeof(void) +drivers/gpu/drm/i915/intel_cdclk.c:2233:29: warning: expression using sizeof(void) -drivers/gpu/drm/i915/selftests/../i915_drv.h:3558:16: warning: expression using sizeof(void) +drivers/gpu/drm/i915/selftests/../i915_drv.h:3561:16: warning: expression using sizeof(void) Commit: drm/i915: Skip modeset for cdclk changes if possible +drivers/gpu/drm/i915/intel_cdclk.c:2137:6: warning: symbol 'intel_cdclk_can_skip_modeset' was not declared. Should it be static? -drivers/gpu/drm/i915/selftests/../i915_drv.h:3561:16: warning: expression using sizeof(void) +drivers/gpu/drm/i915/selftests/../i915_drv.h:3562:16: warning: expression using sizeof(void) _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 9+ messages in thread
* ✓ Fi.CI.BAT: success for drm/i915: Ensure minimum CDCLK requirement for audio 2019-03-18 14:34 [PATCH v6 0/2] drm/i915: Ensure minimum CDCLK requirement for audio Imre Deak ` (3 preceding siblings ...) 2019-03-18 18:03 ` ✗ Fi.CI.SPARSE: " Patchwork @ 2019-03-18 18:20 ` Patchwork 2019-03-19 2:56 ` ✗ Fi.CI.IGT: failure " Patchwork 5 siblings, 0 replies; 9+ messages in thread From: Patchwork @ 2019-03-18 18:20 UTC (permalink / raw) To: Imre Deak; +Cc: intel-gfx == Series Details == Series: drm/i915: Ensure minimum CDCLK requirement for audio URL : https://patchwork.freedesktop.org/series/58132/ State : success == Summary == CI Bug Log - changes from CI_DRM_5767 -> Patchwork_12498 ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://patchwork.freedesktop.org/api/1.0/series/58132/revisions/1/mbox/ Known issues ------------ Here are the changes found in Patchwork_12498 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@kms_chamelium@common-hpd-after-suspend: - fi-skl-6700k2: PASS -> INCOMPLETE [fdo#104108] * igt@kms_pipe_crc_basic@nonblocking-crc-pipe-a-frame-sequence: - fi-byt-clapper: PASS -> FAIL [fdo#103191] / [fdo#107362] * igt@kms_pipe_crc_basic@nonblocking-crc-pipe-c: - fi-kbl-7567u: PASS -> SKIP [fdo#109271] +27 * igt@prime_vgem@basic-fence-flip: - fi-gdg-551: PASS -> FAIL [fdo#103182] +1 #### Possible fixes #### * igt@i915_selftest@live_execlists: - fi-apl-guc: INCOMPLETE [fdo#103927] / [fdo#109720] -> PASS #### Warnings #### * igt@i915_selftest@live_contexts: - fi-icl-u3: INCOMPLETE [fdo#108569] -> DMESG-FAIL [fdo#108569] * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a: - fi-kbl-7567u: DMESG-FAIL [fdo#105079] -> SKIP [fdo#109271] [fdo#103182]: https://bugs.freedesktop.org/show_bug.cgi?id=103182 [fdo#103191]: https://bugs.freedesktop.org/show_bug.cgi?id=103191 [fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927 [fdo#104108]: https://bugs.freedesktop.org/show_bug.cgi?id=104108 [fdo#105079]: https://bugs.freedesktop.org/show_bug.cgi?id=105079 [fdo#107362]: https://bugs.freedesktop.org/show_bug.cgi?id=107362 [fdo#108569]: https://bugs.freedesktop.org/show_bug.cgi?id=108569 [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271 [fdo#109720]: https://bugs.freedesktop.org/show_bug.cgi?id=109720 Participating hosts (49 -> 40) ------------------------------ Missing (9): fi-kbl-soraka fi-ilk-m540 fi-bdw-5557u fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 fi-icl-y fi-bdw-samus Build changes ------------- * Linux: CI_DRM_5767 -> Patchwork_12498 CI_DRM_5767: 289bd1852756ddd2779c32cd13ae10e7bf44faca @ git://anongit.freedesktop.org/gfx-ci/linux IGT_4888: 71ad19eb8fe4f0eecae3bf063e107293b90b9abc @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools Patchwork_12498: e871b62f8db1ac9783a7fadbc50abe78d2f43730 @ git://anongit.freedesktop.org/gfx-ci/linux == Linux commits == e871b62f8db1 drm/i915: Skip modeset for cdclk changes if possible f5ea7a63eeb3 drm/i915: Force 2*96 MHz cdclk on glk/cnl when audio power is enabled == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12498/ _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 9+ messages in thread
* ✗ Fi.CI.IGT: failure for drm/i915: Ensure minimum CDCLK requirement for audio 2019-03-18 14:34 [PATCH v6 0/2] drm/i915: Ensure minimum CDCLK requirement for audio Imre Deak ` (4 preceding siblings ...) 2019-03-18 18:20 ` ✓ Fi.CI.BAT: success " Patchwork @ 2019-03-19 2:56 ` Patchwork 5 siblings, 0 replies; 9+ messages in thread From: Patchwork @ 2019-03-19 2:56 UTC (permalink / raw) To: Imre Deak; +Cc: intel-gfx == Series Details == Series: drm/i915: Ensure minimum CDCLK requirement for audio URL : https://patchwork.freedesktop.org/series/58132/ State : failure == Summary == CI Bug Log - changes from CI_DRM_5767_full -> Patchwork_12498_full ==================================================== Summary ------- **FAILURE** Serious unknown changes coming with Patchwork_12498_full absolutely need to be verified manually. If you think the reported changes have nothing to do with the changes introduced in Patchwork_12498_full, please notify your bug team to allow them to document this new failure mode, which will reduce false positives in CI. Possible new issues ------------------- Here are the unknown changes that may have been introduced in Patchwork_12498_full: ### IGT changes ### #### Possible regressions #### * igt@gem_tiled_swapping@non-threaded: - shard-iclb: PASS -> FAIL Known issues ------------ Here are the changes found in Patchwork_12498_full that come from known issues: ### IGT changes ### #### Issues hit #### * igt@gem_exec_parallel@bsd1-fds: - shard-iclb: NOTRUN -> SKIP [fdo#109276] +1 * igt@gem_exec_schedule@fifo-bsd2: - shard-snb: NOTRUN -> SKIP [fdo#109271] +69 * igt@gem_exec_schedule@wide-blt: - shard-iclb: PASS -> FAIL [fdo#109633] * igt@i915_pm_rpm@sysfs-read: - shard-skl: PASS -> INCOMPLETE [fdo#107807] * igt@kms_atomic_transition@3x-modeset-transitions: - shard-skl: NOTRUN -> SKIP [fdo#109271] / [fdo#109278] +9 * igt@kms_atomic_transition@6x-modeset-transitions-fencing: - shard-iclb: NOTRUN -> SKIP [fdo#109278] +1 * igt@kms_busy@extended-modeset-hang-newfb-render-b: - shard-snb: NOTRUN -> DMESG-WARN [fdo#107956] * igt@kms_busy@extended-modeset-hang-newfb-render-d: - shard-apl: NOTRUN -> SKIP [fdo#109271] / [fdo#109278] +2 * igt@kms_busy@extended-modeset-hang-newfb-with-reset-render-b: - shard-iclb: NOTRUN -> DMESG-WARN [fdo#107956] * igt@kms_busy@extended-pageflip-hang-newfb-render-c: - shard-apl: NOTRUN -> DMESG-WARN [fdo#107956] * igt@kms_busy@extended-pageflip-modeset-hang-oldfb-render-c: - shard-skl: NOTRUN -> DMESG-WARN [fdo#107956] +1 * igt@kms_ccs@pipe-b-crc-sprite-planes-basic: - shard-iclb: PASS -> FAIL [fdo#107725] * igt@kms_chamelium@vga-frame-dump: - shard-iclb: NOTRUN -> SKIP [fdo#109284] * igt@kms_content_protection@atomic-dpms: - shard-apl: NOTRUN -> FAIL [fdo#108739] * igt@kms_cursor_crc@cursor-size-change: - shard-apl: PASS -> FAIL [fdo#103232] * igt@kms_cursor_legacy@cursor-vs-flip-atomic: - shard-iclb: PASS -> FAIL [fdo#103355] * igt@kms_cursor_legacy@cursor-vs-flip-legacy: - shard-hsw: PASS -> FAIL [fdo#103355] * igt@kms_fbcon_fbt@fbc: - shard-iclb: PASS -> DMESG-WARN [fdo#109593] * igt@kms_fbcon_fbt@psr: - shard-skl: NOTRUN -> FAIL [fdo#103833] * igt@kms_flip@2x-flip-vs-dpms: - shard-iclb: NOTRUN -> SKIP [fdo#109274] +1 * igt@kms_flip@flip-vs-expired-vblank: - shard-glk: PASS -> FAIL [fdo#102887] / [fdo#105363] * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-fullscreen: - shard-skl: NOTRUN -> FAIL [fdo#103167] * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-mmap-cpu: - shard-glk: PASS -> FAIL [fdo#103167] +6 * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-wc: - shard-iclb: NOTRUN -> SKIP [fdo#109280] +3 * igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-render: - shard-iclb: PASS -> FAIL [fdo#103167] +6 * igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-fullscreen: - shard-iclb: PASS -> FAIL [fdo#109247] +17 * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-indfb-draw-pwrite: - shard-hsw: NOTRUN -> SKIP [fdo#109271] +9 * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c: - shard-kbl: PASS -> INCOMPLETE [fdo#103665] * igt@kms_plane_scaling@pipe-b-scaler-with-clipping-clamping: - shard-apl: PASS -> INCOMPLETE [fdo#103927] * igt@kms_psr@basic: - shard-apl: NOTRUN -> SKIP [fdo#109271] +56 * igt@kms_psr@psr2_sprite_plane_move: - shard-iclb: PASS -> SKIP [fdo#109441] +2 * igt@kms_psr@psr2_suspend: - shard-iclb: NOTRUN -> SKIP [fdo#109441] * igt@kms_psr@sprite_mmap_gtt: - shard-iclb: PASS -> FAIL [fdo#107383] +3 * igt@kms_vblank@pipe-c-wait-busy: - shard-snb: NOTRUN -> SKIP [fdo#109271] / [fdo#109278] +9 * igt@kms_vrr@flip-basic: - shard-iclb: NOTRUN -> SKIP [fdo#109502] * igt@perf@oa-exponents: - shard-glk: PASS -> FAIL [fdo#105483] * igt@perf_pmu@semaphore-wait-vcs1: - shard-skl: NOTRUN -> SKIP [fdo#109271] +97 * igt@prime_nv_api@i915_nv_double_export: - shard-iclb: NOTRUN -> SKIP [fdo#109291] * igt@runner@aborted: - shard-iclb: NOTRUN -> FAIL [fdo#109593] * igt@sw_sync@sync_busy_fork_unixsocket: - shard-iclb: NOTRUN -> FAIL [fdo#110150 ] #### Possible fixes #### * igt@gem_create@create-clear: - shard-hsw: INCOMPLETE [fdo#103540] -> PASS * igt@gem_pwrite@big-cpu-fbr: - shard-iclb: TIMEOUT [fdo#109673] -> PASS +1 * igt@kms_ccs@pipe-a-crc-sprite-planes-basic: - shard-glk: FAIL [fdo#108145] -> PASS * igt@kms_color@pipe-a-degamma: - shard-apl: FAIL [fdo#104782] / [fdo#108145] -> PASS * igt@kms_cursor_crc@cursor-128x128-onscreen: - shard-apl: FAIL [fdo#103232] -> PASS +1 * igt@kms_cursor_legacy@cursor-vs-flip-varying-size: - shard-iclb: FAIL [fdo#103355] -> PASS * igt@kms_flip@2x-flip-vs-expired-vblank: - shard-glk: FAIL [fdo#105363] -> PASS * igt@kms_flip@flip-vs-expired-vblank: - shard-apl: FAIL [fdo#102887] / [fdo#105363] -> PASS * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-cpu: - shard-glk: FAIL [fdo#103167] -> PASS * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-pwrite: - shard-apl: FAIL [fdo#103167] -> PASS +1 * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-blt: - shard-iclb: FAIL [fdo#109247] -> PASS +12 * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-draw-render: - shard-iclb: FAIL [fdo#103167] -> PASS +8 * igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-blt: - shard-iclb: FAIL [fdo#105682] / [fdo#109247] -> PASS +1 * {igt@kms_plane@pixel-format-pipe-b-planes}: - shard-apl: FAIL [fdo#110033] -> PASS * igt@kms_plane@plane-panning-bottom-right-suspend-pipe-a-planes: - shard-snb: INCOMPLETE [fdo#105411] -> PASS * {igt@kms_plane@plane-position-covered-pipe-a-planes}: - shard-iclb: FAIL [fdo#110038] -> PASS * igt@kms_plane_alpha_blend@pipe-b-constant-alpha-min: - shard-skl: FAIL [fdo#108145] -> PASS * {igt@kms_plane_multiple@atomic-pipe-b-tiling-none}: - shard-iclb: FAIL [fdo#110037] -> PASS * {igt@kms_plane_multiple@atomic-pipe-c-tiling-none}: - shard-glk: FAIL [fdo#110037] -> PASS +1 * igt@kms_psr2_su@frontbuffer: - shard-iclb: SKIP [fdo#109642] -> PASS * igt@kms_psr@cursor_blt: - shard-iclb: FAIL [fdo#107383] -> PASS +2 * igt@kms_psr@psr2_cursor_plane_move: - shard-iclb: SKIP [fdo#109441] -> PASS * igt@kms_rotation_crc@multiplane-rotation: - shard-iclb: DMESG-WARN [fdo#106885] -> PASS * igt@kms_setmode@basic: - shard-apl: FAIL [fdo#99912] -> PASS #### Warnings #### * igt@i915_selftest@live_contexts: - shard-iclb: DMESG-FAIL [fdo#108569] -> INCOMPLETE [fdo#108569] * igt@kms_plane_scaling@pipe-b-scaler-with-rotation: - shard-glk: SKIP [fdo#109271] / [fdo#109278] -> FAIL [fdo#110098] ### Piglit changes ### #### Issues hit #### * spec@arb_fragment_shader_interlock@arb_fragment_shader_interlock-image-load-store: - pig-hsw-4770r: NOTRUN -> FAIL [fdo#109980] {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [fdo#102887]: https://bugs.freedesktop.org/show_bug.cgi?id=102887 [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167 [fdo#103232]: https://bugs.freedesktop.org/show_bug.cgi?id=103232 [fdo#103355]: https://bugs.freedesktop.org/show_bug.cgi?id=103355 [fdo#103540]: https://bugs.freedesktop.org/show_bug.cgi?id=103540 [fdo#103665]: https://bugs.freedesktop.org/show_bug.cgi?id=103665 [fdo#103833]: https://bugs.freedesktop.org/show_bug.cgi?id=103833 [fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927 [fdo#104782]: https://bugs.freedesktop.org/show_bug.cgi?id=104782 [fdo#105363]: https://bugs.freedesktop.org/show_bug.cgi?id=105363 [fdo#105411]: https://bugs.freedesktop.org/show_bug.cgi?id=105411 [fdo#105483]: https://bugs.freedesktop.org/show_bug.cgi?id=105483 [fdo#105682]: https://bugs.freedesktop.org/show_bug.cgi?id=105682 [fdo#106885]: https://bugs.freedesktop.org/show_bug.cgi?id=106885 [fdo#107383]: https://bugs.freedesktop.org/show_bug.cgi?id=107383 [fdo#107725]: https://bugs.freedesktop.org/show_bug.cgi?id=107725 [fdo#107807]: https://bugs.freedesktop.org/show_bug.cgi?id=107807 [fdo#107956]: https://bugs.freedesktop.org/show_bug.cgi?id=107956 [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145 [fdo#108569]: https://bugs.freedesktop.org/show_bug.cgi?id=108569 [fdo#108739]: https://bugs.freedesktop.org/show_bug.cgi?id=108739 [fdo#109247]: https://bugs.freedesktop.org/show_bug.cgi?id=109247 [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271 [fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274 [fdo#109276]: https://bugs.freedesktop.org/show_bug.cgi?id=109276 [fdo#109278]: https://bugs.freedesktop.org/show_bug.cgi?id=109278 [fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280 [fdo#109284]: https://bugs.freedesktop.org/show_bug.cgi?id=109284 [fdo#109291]: https://bugs.freedesktop.org/show_bug.cgi?id=109291 [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441 [fdo#109502]: https://bugs.freedesktop.org/show_bug.cgi?id=109502 [fdo#109593]: https://bugs.freedesktop.org/show_bug.cgi?id=109593 [fdo#109633]: https://bugs.freedesktop.org/show_bug.cgi?id=109633 [fdo#109642]: https://bugs.freedesktop.org/show_bug.cgi?id=109642 [fdo#109673]: https://bugs.freedesktop.org/show_bug.cgi?id=109673 [fdo#109980]: https://bugs.freedesktop.org/show_bug.cgi?id=109980 [fdo#110033]: https://bugs.freedesktop.org/show_bug.cgi?id=110033 [fdo#110037]: https://bugs.freedesktop.org/show_bug.cgi?id=110037 [fdo#110038]: https://bugs.freedesktop.org/show_bug.cgi?id=110038 [fdo#110098]: https://bugs.freedesktop.org/show_bug.cgi?id=110098 [fdo#110150 ]: https://bugs.freedesktop.org/show_bug.cgi?id=110150 [fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912 Participating hosts (9 -> 10) ------------------------------ Additional (1): pig-hsw-4770r Build changes ------------- * Linux: CI_DRM_5767 -> Patchwork_12498 CI_DRM_5767: 289bd1852756ddd2779c32cd13ae10e7bf44faca @ git://anongit.freedesktop.org/gfx-ci/linux IGT_4888: 71ad19eb8fe4f0eecae3bf063e107293b90b9abc @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools Patchwork_12498: e871b62f8db1ac9783a7fadbc50abe78d2f43730 @ git://anongit.freedesktop.org/gfx-ci/linux piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12498/ _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2019-03-19 2:56 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-03-18 14:34 [PATCH v6 0/2] drm/i915: Ensure minimum CDCLK requirement for audio Imre Deak 2019-03-18 14:34 ` [PATCH v6 1/2] drm/i915: Force 2*96 MHz cdclk on glk/cnl when audio power is enabled Imre Deak 2019-03-18 14:34 ` [PATCH v6 2/2] drm/i915: Skip modeset for cdclk changes if possible Imre Deak 2019-03-18 18:37 ` Ville Syrjälä 2019-03-18 19:16 ` Imre Deak 2019-03-18 18:01 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Ensure minimum CDCLK requirement for audio Patchwork 2019-03-18 18:03 ` ✗ Fi.CI.SPARSE: " Patchwork 2019-03-18 18:20 ` ✓ Fi.CI.BAT: success " Patchwork 2019-03-19 2:56 ` ✗ Fi.CI.IGT: failure " Patchwork
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.