* [PATCH 0/3] Bigjoiner refactoring
@ 2024-02-21 19:20 Stanislav Lisovskiy
2024-02-21 19:20 ` [PATCH 1/3] drm/i915/bigjoiner: Refactor bigjoiner state readout Stanislav Lisovskiy
` (6 more replies)
0 siblings, 7 replies; 34+ messages in thread
From: Stanislav Lisovskiy @ 2024-02-21 19:20 UTC (permalink / raw)
To: intel-gfx
Cc: Stanislav.Lisovskiy, jani.saarinen, ville.syrjala, vidya.srinivas
There are few things we need to do for bigjoiner, in order
to improve code maintenance and also make testing for Bigjoiner
easier.
Those series contain addition of bigjoiner force debugfs option,
in order to be able to force bigjoiner even if there is no display
support, also we refactor pipe vs transcoder logic, as currently
it is a bit scattered between *_commit_modeset_enables/disables
and *_crtc_enable/disable functions. Same applies to encoders.
We made a decision to handle all the slaves in correspondent master
hook, so slaves and slave checks no longer would be in modesetting
level logic.
Stanislav Lisovskiy (3):
drm/i915/bigjoiner: Refactor bigjoiner state readout
Start separating pipe vs transcoder set logic for bigjoiner during
modeset
drm/i915: Fix bigjoiner case for DP2.0
drivers/gpu/drm/i915/display/intel_ddi.c | 21 +-
drivers/gpu/drm/i915/display/intel_display.c | 205 +++++++++++--------
drivers/gpu/drm/i915/display/intel_display.h | 6 +
drivers/gpu/drm/i915/display/intel_dp_mst.c | 19 +-
4 files changed, 144 insertions(+), 107 deletions(-)
--
2.37.3
^ permalink raw reply [flat|nested] 34+ messages in thread* [PATCH 1/3] drm/i915/bigjoiner: Refactor bigjoiner state readout 2024-02-21 19:20 [PATCH 0/3] Bigjoiner refactoring Stanislav Lisovskiy @ 2024-02-21 19:20 ` Stanislav Lisovskiy 2024-03-01 10:10 ` Ville Syrjälä 2024-02-21 19:20 ` [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner during modeset Stanislav Lisovskiy ` (5 subsequent siblings) 6 siblings, 1 reply; 34+ messages in thread From: Stanislav Lisovskiy @ 2024-02-21 19:20 UTC (permalink / raw) To: intel-gfx Cc: Stanislav.Lisovskiy, jani.saarinen, ville.syrjala, vidya.srinivas Don't call enabled_bigjoiner_pipes twice, lets just move intel_get_bigjoiner_config earlier, because it is anyway calling same function. Also cleanup hsw_enabled_transcoders from irrelevant bigjoiner code. Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> --- drivers/gpu/drm/i915/display/intel_display.c | 22 ++++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index 00ac65a140298..916c13a149fd5 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -3535,7 +3535,6 @@ static u8 hsw_enabled_transcoders(struct intel_crtc *crtc) struct drm_i915_private *dev_priv = to_i915(dev); u8 panel_transcoder_mask = hsw_panel_transcoders(dev_priv); enum transcoder cpu_transcoder; - u8 master_pipes, slave_pipes; u8 enabled_transcoders = 0; /* @@ -3586,15 +3585,6 @@ static u8 hsw_enabled_transcoders(struct intel_crtc *crtc) if (transcoder_ddi_func_is_enabled(dev_priv, cpu_transcoder)) enabled_transcoders |= BIT(cpu_transcoder); - /* bigjoiner slave -> consider the master pipe's transcoder as well */ - enabled_bigjoiner_pipes(dev_priv, &master_pipes, &slave_pipes); - if (slave_pipes & BIT(crtc->pipe)) { - cpu_transcoder = (enum transcoder) - get_bigjoiner_master_pipe(crtc->pipe, master_pipes, slave_pipes); - if (transcoder_ddi_func_is_enabled(dev_priv, cpu_transcoder)) - enabled_transcoders |= BIT(cpu_transcoder); - } - return enabled_transcoders; } @@ -3641,6 +3631,15 @@ static bool hsw_get_transcoder_state(struct intel_crtc *crtc, u32 tmp; enabled_transcoders = hsw_enabled_transcoders(crtc); + + /* bigjoiner slave -> consider the master pipe's transcoder as well */ + if (intel_crtc_is_bigjoiner_slave(pipe_config)) { + unsigned long cpu_transcoder = (enum transcoder) + bigjoiner_master_pipe(pipe_config); + if (transcoder_ddi_func_is_enabled(dev_priv, cpu_transcoder)) + enabled_transcoders |= BIT(cpu_transcoder); + } + if (!enabled_transcoders) return false; @@ -3745,6 +3744,8 @@ static bool hsw_get_pipe_config(struct intel_crtc *crtc, pipe_config->shared_dpll = NULL; + intel_bigjoiner_get_config(pipe_config); + active = hsw_get_transcoder_state(crtc, pipe_config, &crtc->hw_readout_power_domains); if ((IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv)) && @@ -3756,7 +3757,6 @@ static bool hsw_get_pipe_config(struct intel_crtc *crtc, if (!active) goto out; - intel_bigjoiner_get_config(pipe_config); intel_dsc_get_config(pipe_config); if (!transcoder_is_dsi(pipe_config->cpu_transcoder) || -- 2.37.3 ^ permalink raw reply related [flat|nested] 34+ messages in thread
* Re: [PATCH 1/3] drm/i915/bigjoiner: Refactor bigjoiner state readout 2024-02-21 19:20 ` [PATCH 1/3] drm/i915/bigjoiner: Refactor bigjoiner state readout Stanislav Lisovskiy @ 2024-03-01 10:10 ` Ville Syrjälä 2024-03-01 10:22 ` Lisovskiy, Stanislav 0 siblings, 1 reply; 34+ messages in thread From: Ville Syrjälä @ 2024-03-01 10:10 UTC (permalink / raw) To: Stanislav Lisovskiy; +Cc: intel-gfx, jani.saarinen, vidya.srinivas On Wed, Feb 21, 2024 at 09:20:08PM +0200, Stanislav Lisovskiy wrote: > Don't call enabled_bigjoiner_pipes twice, lets just move > intel_get_bigjoiner_config earlier, because it is anyway > calling same function. > Also cleanup hsw_enabled_transcoders from irrelevant bigjoiner code. I still don't like this. > > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > --- > drivers/gpu/drm/i915/display/intel_display.c | 22 ++++++++++---------- > 1 file changed, 11 insertions(+), 11 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > index 00ac65a140298..916c13a149fd5 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.c > +++ b/drivers/gpu/drm/i915/display/intel_display.c > @@ -3535,7 +3535,6 @@ static u8 hsw_enabled_transcoders(struct intel_crtc *crtc) > struct drm_i915_private *dev_priv = to_i915(dev); > u8 panel_transcoder_mask = hsw_panel_transcoders(dev_priv); > enum transcoder cpu_transcoder; > - u8 master_pipes, slave_pipes; > u8 enabled_transcoders = 0; > > /* > @@ -3586,15 +3585,6 @@ static u8 hsw_enabled_transcoders(struct intel_crtc *crtc) > if (transcoder_ddi_func_is_enabled(dev_priv, cpu_transcoder)) > enabled_transcoders |= BIT(cpu_transcoder); > > - /* bigjoiner slave -> consider the master pipe's transcoder as well */ > - enabled_bigjoiner_pipes(dev_priv, &master_pipes, &slave_pipes); > - if (slave_pipes & BIT(crtc->pipe)) { > - cpu_transcoder = (enum transcoder) > - get_bigjoiner_master_pipe(crtc->pipe, master_pipes, slave_pipes); > - if (transcoder_ddi_func_is_enabled(dev_priv, cpu_transcoder)) > - enabled_transcoders |= BIT(cpu_transcoder); > - } > - > return enabled_transcoders; > } > > @@ -3641,6 +3631,15 @@ static bool hsw_get_transcoder_state(struct intel_crtc *crtc, > u32 tmp; > > enabled_transcoders = hsw_enabled_transcoders(crtc); > + > + /* bigjoiner slave -> consider the master pipe's transcoder as well */ > + if (intel_crtc_is_bigjoiner_slave(pipe_config)) { > + unsigned long cpu_transcoder = (enum transcoder) > + bigjoiner_master_pipe(pipe_config); > + if (transcoder_ddi_func_is_enabled(dev_priv, cpu_transcoder)) > + enabled_transcoders |= BIT(cpu_transcoder); > + } > + > if (!enabled_transcoders) > return false; > > @@ -3745,6 +3744,8 @@ static bool hsw_get_pipe_config(struct intel_crtc *crtc, > > pipe_config->shared_dpll = NULL; > > + intel_bigjoiner_get_config(pipe_config); > + > active = hsw_get_transcoder_state(crtc, pipe_config, &crtc->hw_readout_power_domains); > > if ((IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv)) && > @@ -3756,7 +3757,6 @@ static bool hsw_get_pipe_config(struct intel_crtc *crtc, > if (!active) > goto out; > > - intel_bigjoiner_get_config(pipe_config); > intel_dsc_get_config(pipe_config); > > if (!transcoder_is_dsi(pipe_config->cpu_transcoder) || > -- > 2.37.3 -- Ville Syrjälä Intel ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 1/3] drm/i915/bigjoiner: Refactor bigjoiner state readout 2024-03-01 10:10 ` Ville Syrjälä @ 2024-03-01 10:22 ` Lisovskiy, Stanislav 0 siblings, 0 replies; 34+ messages in thread From: Lisovskiy, Stanislav @ 2024-03-01 10:22 UTC (permalink / raw) To: Ville Syrjälä; +Cc: intel-gfx, jani.saarinen, vidya.srinivas On Fri, Mar 01, 2024 at 12:10:19PM +0200, Ville Syrjälä wrote: > On Wed, Feb 21, 2024 at 09:20:08PM +0200, Stanislav Lisovskiy wrote: > > Don't call enabled_bigjoiner_pipes twice, lets just move > > intel_get_bigjoiner_config earlier, because it is anyway > > calling same function. > > Also cleanup hsw_enabled_transcoders from irrelevant bigjoiner code. > > I still don't like this. As of current state of things, I didn't touch this since our last discussion. This is not critical improvement, so lets drop this until the main issues are solved. > > > > > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > > --- > > drivers/gpu/drm/i915/display/intel_display.c | 22 ++++++++++---------- > > 1 file changed, 11 insertions(+), 11 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > > index 00ac65a140298..916c13a149fd5 100644 > > --- a/drivers/gpu/drm/i915/display/intel_display.c > > +++ b/drivers/gpu/drm/i915/display/intel_display.c > > @@ -3535,7 +3535,6 @@ static u8 hsw_enabled_transcoders(struct intel_crtc *crtc) > > struct drm_i915_private *dev_priv = to_i915(dev); > > u8 panel_transcoder_mask = hsw_panel_transcoders(dev_priv); > > enum transcoder cpu_transcoder; > > - u8 master_pipes, slave_pipes; > > u8 enabled_transcoders = 0; > > > > /* > > @@ -3586,15 +3585,6 @@ static u8 hsw_enabled_transcoders(struct intel_crtc *crtc) > > if (transcoder_ddi_func_is_enabled(dev_priv, cpu_transcoder)) > > enabled_transcoders |= BIT(cpu_transcoder); > > > > - /* bigjoiner slave -> consider the master pipe's transcoder as well */ > > - enabled_bigjoiner_pipes(dev_priv, &master_pipes, &slave_pipes); > > - if (slave_pipes & BIT(crtc->pipe)) { > > - cpu_transcoder = (enum transcoder) > > - get_bigjoiner_master_pipe(crtc->pipe, master_pipes, slave_pipes); > > - if (transcoder_ddi_func_is_enabled(dev_priv, cpu_transcoder)) > > - enabled_transcoders |= BIT(cpu_transcoder); > > - } > > - > > return enabled_transcoders; > > } > > > > @@ -3641,6 +3631,15 @@ static bool hsw_get_transcoder_state(struct intel_crtc *crtc, > > u32 tmp; > > > > enabled_transcoders = hsw_enabled_transcoders(crtc); > > + > > + /* bigjoiner slave -> consider the master pipe's transcoder as well */ > > + if (intel_crtc_is_bigjoiner_slave(pipe_config)) { > > + unsigned long cpu_transcoder = (enum transcoder) > > + bigjoiner_master_pipe(pipe_config); > > + if (transcoder_ddi_func_is_enabled(dev_priv, cpu_transcoder)) > > + enabled_transcoders |= BIT(cpu_transcoder); > > + } > > + > > if (!enabled_transcoders) > > return false; > > > > @@ -3745,6 +3744,8 @@ static bool hsw_get_pipe_config(struct intel_crtc *crtc, > > > > pipe_config->shared_dpll = NULL; > > > > + intel_bigjoiner_get_config(pipe_config); > > + > > active = hsw_get_transcoder_state(crtc, pipe_config, &crtc->hw_readout_power_domains); > > > > if ((IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv)) && > > @@ -3756,7 +3757,6 @@ static bool hsw_get_pipe_config(struct intel_crtc *crtc, > > if (!active) > > goto out; > > > > - intel_bigjoiner_get_config(pipe_config); > > intel_dsc_get_config(pipe_config); > > > > if (!transcoder_is_dsi(pipe_config->cpu_transcoder) || > > -- > > 2.37.3 > > -- > Ville Syrjälä > Intel ^ permalink raw reply [flat|nested] 34+ messages in thread
* [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner during modeset 2024-02-21 19:20 [PATCH 0/3] Bigjoiner refactoring Stanislav Lisovskiy 2024-02-21 19:20 ` [PATCH 1/3] drm/i915/bigjoiner: Refactor bigjoiner state readout Stanislav Lisovskiy @ 2024-02-21 19:20 ` Stanislav Lisovskiy 2024-02-27 4:40 ` Srinivas, Vidya 2024-03-01 10:10 ` Ville Syrjälä 2024-02-21 19:20 ` [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 Stanislav Lisovskiy ` (4 subsequent siblings) 6 siblings, 2 replies; 34+ messages in thread From: Stanislav Lisovskiy @ 2024-02-21 19:20 UTC (permalink / raw) To: intel-gfx Cc: Stanislav.Lisovskiy, jani.saarinen, ville.syrjala, vidya.srinivas Handle only bigjoiner masters in skl_commit_modeset_enables/disables, slave crtcs should be handled by master hooks. Same for encoders. That way we can also remove a bunch of checks like intel_crtc_is_bigjoiner_slave. v2: Get rid of master vs slave checks and separation in crtc enable/disable hooks. Use unified iteration cycle for all of those, while enabling/disabling transcoder only for those pipes where its needed(Ville Syrjälä) v3: Move all the intel_encoder_* calls under transcoder code path(Ville Syrjälä) v4: - Call intel_crtc_vblank_on from hsw_crtc_enable only for non-transcoder path (for master pipe that will be called from intel_encoders_enable/intel_enable_ddi) - Fix stupid mistake with using crtc->pipe for the mask, instead of BIT(crtc->pipe) Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> --- drivers/gpu/drm/i915/display/intel_ddi.c | 21 +-- drivers/gpu/drm/i915/display/intel_display.c | 183 ++++++++++++------- drivers/gpu/drm/i915/display/intel_display.h | 6 + 3 files changed, 121 insertions(+), 89 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c index bea4415902044..6071e9f500871 100644 --- a/drivers/gpu/drm/i915/display/intel_ddi.c +++ b/drivers/gpu/drm/i915/display/intel_ddi.c @@ -3100,7 +3100,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, const struct drm_connector_state *old_conn_state) { struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); - struct intel_crtc *slave_crtc; if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST)) { intel_crtc_vblank_off(old_crtc_state); @@ -3117,17 +3116,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, ilk_pfit_disable(old_crtc_state); } - for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, slave_crtc, - intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) { - const struct intel_crtc_state *old_slave_crtc_state = - intel_atomic_get_old_crtc_state(state, slave_crtc); - - intel_crtc_vblank_off(old_slave_crtc_state); - - intel_dsc_disable(old_slave_crtc_state); - skl_scaler_disable(old_slave_crtc_state); - } - /* * When called from DP MST code: * - old_conn_state will be NULL @@ -3363,8 +3351,7 @@ static void intel_enable_ddi(struct intel_atomic_state *state, { drm_WARN_ON(state->base.dev, crtc_state->has_pch_encoder); - if (!intel_crtc_is_bigjoiner_slave(crtc_state)) - intel_ddi_enable_transcoder_func(encoder, crtc_state); + intel_ddi_enable_transcoder_func(encoder, crtc_state); /* Enable/Disable DP2.0 SDP split config before transcoder */ intel_audio_sdp_split_update(crtc_state); @@ -3469,9 +3456,6 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state, struct intel_crtc *crtc) { struct drm_i915_private *i915 = to_i915(encoder->base.dev); - struct intel_crtc_state *crtc_state = - intel_atomic_get_new_crtc_state(state, crtc); - struct intel_crtc *slave_crtc; enum phy phy = intel_port_to_phy(i915, encoder->port); /* FIXME: Add MTL pll_mgr */ @@ -3479,9 +3463,6 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state, return; intel_update_active_dpll(state, crtc, encoder); - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, - intel_crtc_bigjoiner_slave_pipes(crtc_state)) - intel_update_active_dpll(state, slave_crtc, encoder); } static void diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index 916c13a149fd5..e1ea53fd6a288 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -1631,31 +1631,12 @@ static void hsw_configure_cpu_transcoder(const struct intel_crtc_state *crtc_sta hsw_set_transconf(crtc_state); } -static void hsw_crtc_enable(struct intel_atomic_state *state, - struct intel_crtc *crtc) +static void hsw_crtc_enable_pre_transcoder(struct intel_atomic_state *state, + struct intel_crtc *crtc) { const struct intel_crtc_state *new_crtc_state = intel_atomic_get_new_crtc_state(state, crtc); struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); - enum pipe pipe = crtc->pipe, hsw_workaround_pipe; - enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; - bool psl_clkgate_wa; - - if (drm_WARN_ON(&dev_priv->drm, crtc->active)) - return; - - intel_dmc_enable_pipe(dev_priv, crtc->pipe); - - if (!new_crtc_state->bigjoiner_pipes) { - intel_encoders_pre_pll_enable(state, crtc); - - if (new_crtc_state->shared_dpll) - intel_enable_shared_dpll(new_crtc_state); - - intel_encoders_pre_enable(state, crtc); - } else { - icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); - } intel_dsc_enable(new_crtc_state); @@ -1665,19 +1646,17 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, intel_set_pipe_src_size(new_crtc_state); if (DISPLAY_VER(dev_priv) >= 9 || IS_BROADWELL(dev_priv)) bdw_set_pipe_misc(new_crtc_state); +} - if (!intel_crtc_is_bigjoiner_slave(new_crtc_state) && - !transcoder_is_dsi(cpu_transcoder)) - hsw_configure_cpu_transcoder(new_crtc_state); +static void hsw_crtc_enable_post_transcoder(struct intel_atomic_state *state, + struct intel_crtc *crtc) +{ + const struct intel_crtc_state *new_crtc_state = + intel_atomic_get_new_crtc_state(state, crtc); + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); crtc->active = true; - /* Display WA #1180: WaDisableScalarClockGating: glk */ - psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && - new_crtc_state->pch_pfit.enabled; - if (psl_clkgate_wa) - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true); - if (DISPLAY_VER(dev_priv) >= 9) skl_pfit_enable(new_crtc_state); else @@ -1700,27 +1679,84 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, icl_set_pipe_chicken(new_crtc_state); intel_initial_watermarks(state, crtc); +} - if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) - intel_crtc_vblank_on(new_crtc_state); +static void hsw_crtc_enable(struct intel_atomic_state *state, + struct intel_crtc *crtc) +{ + const struct intel_crtc_state *new_crtc_state = + intel_atomic_get_new_crtc_state(state, crtc); + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); + enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; + struct intel_crtc *_crtc; + int slave_pipe_mask = intel_crtc_bigjoiner_slave_pipes(new_crtc_state); + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); + bool psl_clkgate_wa; + enum pipe pipe = crtc->pipe, hsw_workaround_pipe; - intel_encoders_enable(state, crtc); + if (drm_WARN_ON(&dev_priv->drm, crtc->active)) + return; - if (psl_clkgate_wa) { - intel_crtc_wait_for_next_vblank(crtc); - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false); - } + /* + * Use reverse iterator to go through slave pipes first. + * TODO: We might need smarter iterator here + */ + for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, _crtc, + pipe_mask) { + const struct intel_crtc_state *_new_crtc_state = + intel_atomic_get_new_crtc_state(state, _crtc); + bool needs_transcoder = ((slave_pipe_mask & BIT(_crtc->pipe)) == 0) && + !transcoder_is_dsi(cpu_transcoder); + + intel_dmc_enable_pipe(dev_priv, crtc->pipe); + + if (!new_crtc_state->bigjoiner_pipes) { + if (needs_transcoder) + intel_encoders_pre_pll_enable(state, crtc); + + if (new_crtc_state->shared_dpll) + intel_enable_shared_dpll(new_crtc_state); + + if (needs_transcoder) + intel_encoders_pre_enable(state, crtc); + } else { + icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); + } + + hsw_crtc_enable_pre_transcoder(state, _crtc); + + if (needs_transcoder) + hsw_configure_cpu_transcoder(_new_crtc_state); + + /* Display WA #1180: WaDisableScalarClockGating: glk */ + psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && + new_crtc_state->pch_pfit.enabled; + if (psl_clkgate_wa) + glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true); + + hsw_crtc_enable_post_transcoder(state, _crtc); + + if (needs_transcoder) + intel_encoders_enable(state, crtc); + else + intel_crtc_vblank_on(_new_crtc_state); + + if (psl_clkgate_wa) { + intel_crtc_wait_for_next_vblank(crtc); + glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false); + } - /* If we change the relative order between pipe/planes enabling, we need - * to change the workaround. */ - hsw_workaround_pipe = new_crtc_state->hsw_workaround_pipe; - if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != INVALID_PIPE) { - struct intel_crtc *wa_crtc; + /* If we change the relative order between pipe/planes enabling, we need + * to change the workaround. */ + hsw_workaround_pipe = new_crtc_state->hsw_workaround_pipe; + if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != INVALID_PIPE) { + struct intel_crtc *wa_crtc; - wa_crtc = intel_crtc_for_pipe(dev_priv, hsw_workaround_pipe); + wa_crtc = intel_crtc_for_pipe(dev_priv, hsw_workaround_pipe); - intel_crtc_wait_for_next_vblank(wa_crtc); - intel_crtc_wait_for_next_vblank(wa_crtc); + intel_crtc_wait_for_next_vblank(wa_crtc); + intel_crtc_wait_for_next_vblank(wa_crtc); + } } } @@ -1784,28 +1820,27 @@ static void hsw_crtc_disable(struct intel_atomic_state *state, const struct intel_crtc_state *old_crtc_state = intel_atomic_get_old_crtc_state(state, crtc); struct drm_i915_private *i915 = to_i915(crtc->base.dev); + int slave_pipe_mask = intel_crtc_bigjoiner_slave_pipes(old_crtc_state); + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); + struct intel_crtc *_crtc; + + for_each_intel_crtc_in_pipe_mask(&i915->drm, _crtc, + pipe_mask) { + const struct intel_crtc_state *_old_crtc_state = + intel_atomic_get_old_crtc_state(state, _crtc); + bool needs_encoder_disable = (slave_pipe_mask & BIT(_crtc->pipe)) == 0; + + if (needs_encoder_disable) { + intel_encoders_disable(state, _crtc); + intel_encoders_post_disable(state, _crtc); + } - /* - * FIXME collapse everything to one hook. - * Need care with mst->ddi interactions. - */ - if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) { - intel_encoders_disable(state, crtc); - intel_encoders_post_disable(state, crtc); - } - - intel_disable_shared_dpll(old_crtc_state); - - if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) { - struct intel_crtc *slave_crtc; - - intel_encoders_post_pll_disable(state, crtc); + intel_disable_shared_dpll(_old_crtc_state); - intel_dmc_disable_pipe(i915, crtc->pipe); + if (needs_encoder_disable) + intel_encoders_post_pll_disable(state, _crtc); - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, - intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) - intel_dmc_disable_pipe(i915, slave_crtc->pipe); + intel_dmc_disable_pipe(i915, _crtc->pipe); } } @@ -6788,8 +6823,10 @@ static void intel_commit_modeset_disables(struct intel_atomic_state *state) * Slave vblanks are masked till Master Vblanks. */ if (!is_trans_port_sync_slave(old_crtc_state) && - !intel_dp_mst_is_slave_trans(old_crtc_state) && - !intel_crtc_is_bigjoiner_slave(old_crtc_state)) + !intel_dp_mst_is_slave_trans(old_crtc_state)) + continue; + + if (intel_crtc_is_bigjoiner_slave(old_crtc_state)) continue; intel_old_crtc_state_disables(state, old_crtc_state, @@ -6807,6 +6844,9 @@ static void intel_commit_modeset_disables(struct intel_atomic_state *state) if (!old_crtc_state->hw.active) continue; + if (intel_crtc_is_bigjoiner_slave(old_crtc_state)) + continue; + intel_old_crtc_state_disables(state, old_crtc_state, new_crtc_state, crtc); } @@ -6919,8 +6959,10 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state) continue; if (intel_dp_mst_is_slave_trans(new_crtc_state) || - is_trans_port_sync_master(new_crtc_state) || - intel_crtc_is_bigjoiner_master(new_crtc_state)) + is_trans_port_sync_master(new_crtc_state)) + continue; + + if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) continue; modeset_pipes &= ~BIT(pipe); @@ -6930,7 +6972,7 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state) /* * Then we enable all remaining pipes that depend on other - * pipes: MST slaves and port sync masters, big joiner master + * pipes: MST slaves and port sync masters */ for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { enum pipe pipe = crtc->pipe; @@ -6938,6 +6980,9 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state) if ((modeset_pipes & BIT(pipe)) == 0) continue; + if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) + continue; + modeset_pipes &= ~BIT(pipe); intel_enable_crtc(state, crtc); diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h index f4a0773f0fca8..e1e8d956c305e 100644 --- a/drivers/gpu/drm/i915/display/intel_display.h +++ b/drivers/gpu/drm/i915/display/intel_display.h @@ -280,6 +280,12 @@ enum phy_fia { base.head) \ for_each_if((pipe_mask) & BIT(intel_crtc->pipe)) +#define for_each_intel_crtc_in_pipe_mask_reverse(dev, intel_crtc, pipe_mask) \ + list_for_each_entry_reverse(intel_crtc, \ + &(dev)->mode_config.crtc_list, \ + base.head) \ + for_each_if((pipe_mask) & BIT(intel_crtc->pipe)) + #define for_each_intel_encoder(dev, intel_encoder) \ list_for_each_entry(intel_encoder, \ &(dev)->mode_config.encoder_list, \ -- 2.37.3 ^ permalink raw reply related [flat|nested] 34+ messages in thread
* RE: [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner during modeset 2024-02-21 19:20 ` [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner during modeset Stanislav Lisovskiy @ 2024-02-27 4:40 ` Srinivas, Vidya 2024-02-27 4:52 ` Srinivas, Vidya 2024-02-27 9:11 ` Lisovskiy, Stanislav 2024-03-01 10:10 ` Ville Syrjälä 1 sibling, 2 replies; 34+ messages in thread From: Srinivas, Vidya @ 2024-02-27 4:40 UTC (permalink / raw) To: Lisovskiy, Stanislav, intel-gfx@lists.freedesktop.org Cc: Saarinen, Jani, ville.syrjala@linux.intel.com > -----Original Message----- > From: Lisovskiy, Stanislav <stanislav.lisovskiy@intel.com> > Sent: Thursday, February 22, 2024 12:50 AM > To: intel-gfx@lists.freedesktop.org > Cc: Lisovskiy, Stanislav <stanislav.lisovskiy@intel.com>; Saarinen, Jani > <jani.saarinen@intel.com>; ville.syrjala@linux.intel.com; Srinivas, Vidya > <vidya.srinivas@intel.com> > Subject: [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner > during modeset > > Handle only bigjoiner masters in skl_commit_modeset_enables/disables, > slave crtcs should be handled by master hooks. Same for encoders. > That way we can also remove a bunch of checks like > intel_crtc_is_bigjoiner_slave. > > v2: Get rid of master vs slave checks and separation in crtc enable/disable > hooks. > Use unified iteration cycle for all of those, while enabling/disabling > transcoder only for those pipes where its needed(Ville Syrjälä) > > v3: Move all the intel_encoder_* calls under transcoder code path(Ville > Syrjälä) > > v4: - Call intel_crtc_vblank_on from hsw_crtc_enable only for non-transcoder > path > (for master pipe that will be called from > intel_encoders_enable/intel_enable_ddi) > - Fix stupid mistake with using crtc->pipe for the mask, instead of BIT(crtc- > >pipe) > > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > --- > drivers/gpu/drm/i915/display/intel_ddi.c | 21 +-- > drivers/gpu/drm/i915/display/intel_display.c | 183 ++++++++++++------- > drivers/gpu/drm/i915/display/intel_display.h | 6 + > 3 files changed, 121 insertions(+), 89 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c > b/drivers/gpu/drm/i915/display/intel_ddi.c > index bea4415902044..6071e9f500871 100644 > --- a/drivers/gpu/drm/i915/display/intel_ddi.c > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c > @@ -3100,7 +3100,6 @@ static void intel_ddi_post_disable(struct > intel_atomic_state *state, > const struct drm_connector_state > *old_conn_state) { > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > - struct intel_crtc *slave_crtc; > > if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST)) { > intel_crtc_vblank_off(old_crtc_state); > @@ -3117,17 +3116,6 @@ static void intel_ddi_post_disable(struct > intel_atomic_state *state, > ilk_pfit_disable(old_crtc_state); > } > > - for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, slave_crtc, > - > intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) { > - const struct intel_crtc_state *old_slave_crtc_state = > - intel_atomic_get_old_crtc_state(state, slave_crtc); > - > - intel_crtc_vblank_off(old_slave_crtc_state); > - > - intel_dsc_disable(old_slave_crtc_state); > - skl_scaler_disable(old_slave_crtc_state); > - } > - > /* > * When called from DP MST code: > * - old_conn_state will be NULL > @@ -3363,8 +3351,7 @@ static void intel_enable_ddi(struct > intel_atomic_state *state, { > drm_WARN_ON(state->base.dev, crtc_state->has_pch_encoder); > > - if (!intel_crtc_is_bigjoiner_slave(crtc_state)) > - intel_ddi_enable_transcoder_func(encoder, crtc_state); > + intel_ddi_enable_transcoder_func(encoder, crtc_state); > > /* Enable/Disable DP2.0 SDP split config before transcoder */ > intel_audio_sdp_split_update(crtc_state); > @@ -3469,9 +3456,6 @@ void intel_ddi_update_active_dpll(struct > intel_atomic_state *state, > struct intel_crtc *crtc) > { > struct drm_i915_private *i915 = to_i915(encoder->base.dev); > - struct intel_crtc_state *crtc_state = > - intel_atomic_get_new_crtc_state(state, crtc); > - struct intel_crtc *slave_crtc; > enum phy phy = intel_port_to_phy(i915, encoder->port); > > /* FIXME: Add MTL pll_mgr */ > @@ -3479,9 +3463,6 @@ void intel_ddi_update_active_dpll(struct > intel_atomic_state *state, > return; > > intel_update_active_dpll(state, crtc, encoder); > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > - > intel_crtc_bigjoiner_slave_pipes(crtc_state)) > - intel_update_active_dpll(state, slave_crtc, encoder); > } > > static void > diff --git a/drivers/gpu/drm/i915/display/intel_display.c > b/drivers/gpu/drm/i915/display/intel_display.c > index 916c13a149fd5..e1ea53fd6a288 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.c > +++ b/drivers/gpu/drm/i915/display/intel_display.c > @@ -1631,31 +1631,12 @@ static void hsw_configure_cpu_transcoder(const > struct intel_crtc_state *crtc_sta > hsw_set_transconf(crtc_state); > } > > -static void hsw_crtc_enable(struct intel_atomic_state *state, > - struct intel_crtc *crtc) > +static void hsw_crtc_enable_pre_transcoder(struct intel_atomic_state *state, > + struct intel_crtc *crtc) > { > const struct intel_crtc_state *new_crtc_state = > intel_atomic_get_new_crtc_state(state, crtc); > struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > - enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > - enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > - bool psl_clkgate_wa; > - > - if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > - return; > - > - intel_dmc_enable_pipe(dev_priv, crtc->pipe); > - > - if (!new_crtc_state->bigjoiner_pipes) { > - intel_encoders_pre_pll_enable(state, crtc); > - > - if (new_crtc_state->shared_dpll) > - intel_enable_shared_dpll(new_crtc_state); > - > - intel_encoders_pre_enable(state, crtc); > - } else { > - icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > - } > > intel_dsc_enable(new_crtc_state); > > @@ -1665,19 +1646,17 @@ static void hsw_crtc_enable(struct > intel_atomic_state *state, > intel_set_pipe_src_size(new_crtc_state); > if (DISPLAY_VER(dev_priv) >= 9 || IS_BROADWELL(dev_priv)) > bdw_set_pipe_misc(new_crtc_state); > +} > > - if (!intel_crtc_is_bigjoiner_slave(new_crtc_state) && > - !transcoder_is_dsi(cpu_transcoder)) > - hsw_configure_cpu_transcoder(new_crtc_state); > +static void hsw_crtc_enable_post_transcoder(struct intel_atomic_state > *state, > + struct intel_crtc *crtc) > +{ > + const struct intel_crtc_state *new_crtc_state = > + intel_atomic_get_new_crtc_state(state, crtc); > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > crtc->active = true; > > - /* Display WA #1180: WaDisableScalarClockGating: glk */ > - psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > - new_crtc_state->pch_pfit.enabled; > - if (psl_clkgate_wa) > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true); > - > if (DISPLAY_VER(dev_priv) >= 9) > skl_pfit_enable(new_crtc_state); > else > @@ -1700,27 +1679,84 @@ static void hsw_crtc_enable(struct > intel_atomic_state *state, > icl_set_pipe_chicken(new_crtc_state); > > intel_initial_watermarks(state, crtc); > +} > > - if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > - intel_crtc_vblank_on(new_crtc_state); > +static void hsw_crtc_enable(struct intel_atomic_state *state, > + struct intel_crtc *crtc) > +{ > + const struct intel_crtc_state *new_crtc_state = > + intel_atomic_get_new_crtc_state(state, crtc); > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > + enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > + struct intel_crtc *_crtc; > + int slave_pipe_mask = > intel_crtc_bigjoiner_slave_pipes(new_crtc_state); Many thanks for the patch series. Should we calculate slave_pipe_mask only if the modeset was received on the slave pipe. Else, we noticed that each time its traversing through slave pipe even when modeset was received on master (say pipe = 1) Kindly suggest. > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > + bool psl_clkgate_wa; > + enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > - intel_encoders_enable(state, crtc); > + if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > + return; > > - if (psl_clkgate_wa) { > - intel_crtc_wait_for_next_vblank(crtc); > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false); > - } > + /* > + * Use reverse iterator to go through slave pipes first. > + * TODO: We might need smarter iterator here > + */ > + for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, _crtc, > + pipe_mask) { > + const struct intel_crtc_state *_new_crtc_state = > + intel_atomic_get_new_crtc_state(state, _crtc); > + bool needs_transcoder = ((slave_pipe_mask & BIT(_crtc- > >pipe)) == 0) && > + !transcoder_is_dsi(cpu_transcoder); > + > + intel_dmc_enable_pipe(dev_priv, crtc->pipe); > + > + if (!new_crtc_state->bigjoiner_pipes) { > + if (needs_transcoder) > + intel_encoders_pre_pll_enable(state, crtc); Should we use _crtc here. In remaining places in this function also. Kindly suggest. > + > + if (new_crtc_state->shared_dpll) > + intel_enable_shared_dpll(new_crtc_state); > + > + if (needs_transcoder) > + intel_encoders_pre_enable(state, crtc); > + } else { > + icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > + } > + > + hsw_crtc_enable_pre_transcoder(state, _crtc); > + > + if (needs_transcoder) > + hsw_configure_cpu_transcoder(_new_crtc_state); > + > + /* Display WA #1180: WaDisableScalarClockGating: glk */ > + psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > + new_crtc_state->pch_pfit.enabled; > + if (psl_clkgate_wa) > + glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, > true); > + > + hsw_crtc_enable_post_transcoder(state, _crtc); > + > + if (needs_transcoder) > + intel_encoders_enable(state, crtc); > + else > + intel_crtc_vblank_on(_new_crtc_state); > + > + if (psl_clkgate_wa) { > + intel_crtc_wait_for_next_vblank(crtc); > + glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, > false); > + } > > - /* If we change the relative order between pipe/planes enabling, we > need > - * to change the workaround. */ > - hsw_workaround_pipe = new_crtc_state->hsw_workaround_pipe; > - if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != > INVALID_PIPE) { > - struct intel_crtc *wa_crtc; > + /* If we change the relative order between pipe/planes > enabling, we need > + * to change the workaround. */ > + hsw_workaround_pipe = new_crtc_state- > >hsw_workaround_pipe; > + if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != > INVALID_PIPE) { > + struct intel_crtc *wa_crtc; > > - wa_crtc = intel_crtc_for_pipe(dev_priv, > hsw_workaround_pipe); > + wa_crtc = intel_crtc_for_pipe(dev_priv, > hsw_workaround_pipe); > > - intel_crtc_wait_for_next_vblank(wa_crtc); > - intel_crtc_wait_for_next_vblank(wa_crtc); > + intel_crtc_wait_for_next_vblank(wa_crtc); > + intel_crtc_wait_for_next_vblank(wa_crtc); > + } > } > } > > @@ -1784,28 +1820,27 @@ static void hsw_crtc_disable(struct > intel_atomic_state *state, > const struct intel_crtc_state *old_crtc_state = > intel_atomic_get_old_crtc_state(state, crtc); > struct drm_i915_private *i915 = to_i915(crtc->base.dev); > + int slave_pipe_mask = > intel_crtc_bigjoiner_slave_pipes(old_crtc_state); > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > + struct intel_crtc *_crtc; > + > + for_each_intel_crtc_in_pipe_mask(&i915->drm, _crtc, > + pipe_mask) { > + const struct intel_crtc_state *_old_crtc_state = > + intel_atomic_get_old_crtc_state(state, _crtc); > + bool needs_encoder_disable = (slave_pipe_mask & BIT(_crtc- > >pipe)) == > +0; > + > + if (needs_encoder_disable) { > + intel_encoders_disable(state, _crtc); > + intel_encoders_post_disable(state, _crtc); > + } > > - /* > - * FIXME collapse everything to one hook. > - * Need care with mst->ddi interactions. > - */ > - if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) { > - intel_encoders_disable(state, crtc); > - intel_encoders_post_disable(state, crtc); > - } > - > - intel_disable_shared_dpll(old_crtc_state); > - > - if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) { > - struct intel_crtc *slave_crtc; > - > - intel_encoders_post_pll_disable(state, crtc); > + intel_disable_shared_dpll(_old_crtc_state); > > - intel_dmc_disable_pipe(i915, crtc->pipe); > + if (needs_encoder_disable) > + intel_encoders_post_pll_disable(state, _crtc); > > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > - > intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) > - intel_dmc_disable_pipe(i915, slave_crtc->pipe); > + intel_dmc_disable_pipe(i915, _crtc->pipe); > } > } > > @@ -6788,8 +6823,10 @@ static void intel_commit_modeset_disables(struct > intel_atomic_state *state) > * Slave vblanks are masked till Master Vblanks. > */ > if (!is_trans_port_sync_slave(old_crtc_state) && > - !intel_dp_mst_is_slave_trans(old_crtc_state) && > - !intel_crtc_is_bigjoiner_slave(old_crtc_state)) > + !intel_dp_mst_is_slave_trans(old_crtc_state)) > + continue; > + > + if (intel_crtc_is_bigjoiner_slave(old_crtc_state)) > continue; Should we use !intel_crtc_is_bigjoiner_slave here? Kindly suggest. > > intel_old_crtc_state_disables(state, old_crtc_state, @@ - > 6807,6 +6844,9 @@ static void intel_commit_modeset_disables(struct > intel_atomic_state *state) > if (!old_crtc_state->hw.active) > continue; > > + if (intel_crtc_is_bigjoiner_slave(old_crtc_state)) > + continue; > + > intel_old_crtc_state_disables(state, old_crtc_state, > new_crtc_state, crtc); > } > @@ -6919,8 +6959,10 @@ static void skl_commit_modeset_enables(struct > intel_atomic_state *state) > continue; > > if (intel_dp_mst_is_slave_trans(new_crtc_state) || > - is_trans_port_sync_master(new_crtc_state) || > - intel_crtc_is_bigjoiner_master(new_crtc_state)) > + is_trans_port_sync_master(new_crtc_state)) > + continue; > + > + if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > continue; > Should we use !intel_crtc_is_bigjoiner_master here? Kindly suggest. > modeset_pipes &= ~BIT(pipe); > @@ -6930,7 +6972,7 @@ static void skl_commit_modeset_enables(struct > intel_atomic_state *state) > > /* > * Then we enable all remaining pipes that depend on other > - * pipes: MST slaves and port sync masters, big joiner master > + * pipes: MST slaves and port sync masters > */ > for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { > enum pipe pipe = crtc->pipe; > @@ -6938,6 +6980,9 @@ static void skl_commit_modeset_enables(struct > intel_atomic_state *state) > if ((modeset_pipes & BIT(pipe)) == 0) > continue; > > + if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > + continue; > + > modeset_pipes &= ~BIT(pipe); > > intel_enable_crtc(state, crtc); > diff --git a/drivers/gpu/drm/i915/display/intel_display.h > b/drivers/gpu/drm/i915/display/intel_display.h > index f4a0773f0fca8..e1e8d956c305e 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.h > +++ b/drivers/gpu/drm/i915/display/intel_display.h > @@ -280,6 +280,12 @@ enum phy_fia { > base.head) \ > for_each_if((pipe_mask) & BIT(intel_crtc->pipe)) > > +#define for_each_intel_crtc_in_pipe_mask_reverse(dev, intel_crtc, > pipe_mask) \ > + list_for_each_entry_reverse(intel_crtc, > \ > + &(dev)->mode_config.crtc_list, > \ > + base.head) > \ > + for_each_if((pipe_mask) & BIT(intel_crtc->pipe)) > + > #define for_each_intel_encoder(dev, intel_encoder) \ > list_for_each_entry(intel_encoder, \ > &(dev)->mode_config.encoder_list, \ > -- > 2.37.3 ^ permalink raw reply [flat|nested] 34+ messages in thread
* RE: [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner during modeset 2024-02-27 4:40 ` Srinivas, Vidya @ 2024-02-27 4:52 ` Srinivas, Vidya 2024-02-27 9:11 ` Lisovskiy, Stanislav 1 sibling, 0 replies; 34+ messages in thread From: Srinivas, Vidya @ 2024-02-27 4:52 UTC (permalink / raw) To: Srinivas, Vidya, Lisovskiy, Stanislav, intel-gfx@lists.freedesktop.org Cc: Saarinen, Jani, ville.syrjala@linux.intel.com > -----Original Message----- > From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of > Srinivas, Vidya > Sent: Tuesday, February 27, 2024 10:10 AM > To: Lisovskiy, Stanislav <stanislav.lisovskiy@intel.com>; intel- > gfx@lists.freedesktop.org > Cc: Saarinen, Jani <jani.saarinen@intel.com>; ville.syrjala@linux.intel.com > Subject: RE: [PATCH 2/3] Start separating pipe vs transcoder set logic for > bigjoiner during modeset > > > > > -----Original Message----- > > From: Lisovskiy, Stanislav <stanislav.lisovskiy@intel.com> > > Sent: Thursday, February 22, 2024 12:50 AM > > To: intel-gfx@lists.freedesktop.org > > Cc: Lisovskiy, Stanislav <stanislav.lisovskiy@intel.com>; Saarinen, > > Jani <jani.saarinen@intel.com>; ville.syrjala@linux.intel.com; > > Srinivas, Vidya <vidya.srinivas@intel.com> > > Subject: [PATCH 2/3] Start separating pipe vs transcoder set logic for > > bigjoiner during modeset > > > > Handle only bigjoiner masters in skl_commit_modeset_enables/disables, > > slave crtcs should be handled by master hooks. Same for encoders. > > That way we can also remove a bunch of checks like > > intel_crtc_is_bigjoiner_slave. > > > > v2: Get rid of master vs slave checks and separation in crtc > > enable/disable hooks. > > Use unified iteration cycle for all of those, while enabling/disabling > > transcoder only for those pipes where its needed(Ville Syrjälä) > > > > v3: Move all the intel_encoder_* calls under transcoder code > > path(Ville > > Syrjälä) > > > > v4: - Call intel_crtc_vblank_on from hsw_crtc_enable only for > > non-transcoder path > > (for master pipe that will be called from > > intel_encoders_enable/intel_enable_ddi) > > - Fix stupid mistake with using crtc->pipe for the mask, instead > > of BIT(crtc- > > >pipe) > > > > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > > --- > > drivers/gpu/drm/i915/display/intel_ddi.c | 21 +-- > > drivers/gpu/drm/i915/display/intel_display.c | 183 ++++++++++++------- > > drivers/gpu/drm/i915/display/intel_display.h | 6 + > > 3 files changed, 121 insertions(+), 89 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c > > b/drivers/gpu/drm/i915/display/intel_ddi.c > > index bea4415902044..6071e9f500871 100644 > > --- a/drivers/gpu/drm/i915/display/intel_ddi.c > > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c > > @@ -3100,7 +3100,6 @@ static void intel_ddi_post_disable(struct > > intel_atomic_state *state, > > const struct drm_connector_state > > *old_conn_state) { > > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > > - struct intel_crtc *slave_crtc; > > > > if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST)) { > > intel_crtc_vblank_off(old_crtc_state); > > @@ -3117,17 +3116,6 @@ static void intel_ddi_post_disable(struct > > intel_atomic_state *state, > > ilk_pfit_disable(old_crtc_state); > > } > > > > - for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, slave_crtc, > > - > > intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) { > > - const struct intel_crtc_state *old_slave_crtc_state = > > - intel_atomic_get_old_crtc_state(state, slave_crtc); > > - > > - intel_crtc_vblank_off(old_slave_crtc_state); > > - > > - intel_dsc_disable(old_slave_crtc_state); > > - skl_scaler_disable(old_slave_crtc_state); > > - } > > - > > /* > > * When called from DP MST code: > > * - old_conn_state will be NULL > > @@ -3363,8 +3351,7 @@ static void intel_enable_ddi(struct > > intel_atomic_state *state, { > > drm_WARN_ON(state->base.dev, crtc_state->has_pch_encoder); > > > > - if (!intel_crtc_is_bigjoiner_slave(crtc_state)) > > - intel_ddi_enable_transcoder_func(encoder, crtc_state); > > + intel_ddi_enable_transcoder_func(encoder, crtc_state); > > > > /* Enable/Disable DP2.0 SDP split config before transcoder */ > > intel_audio_sdp_split_update(crtc_state); > > @@ -3469,9 +3456,6 @@ void intel_ddi_update_active_dpll(struct > > intel_atomic_state *state, > > struct intel_crtc *crtc) > > { > > struct drm_i915_private *i915 = to_i915(encoder->base.dev); > > - struct intel_crtc_state *crtc_state = > > - intel_atomic_get_new_crtc_state(state, crtc); > > - struct intel_crtc *slave_crtc; > > enum phy phy = intel_port_to_phy(i915, encoder->port); > > > > /* FIXME: Add MTL pll_mgr */ > > @@ -3479,9 +3463,6 @@ void intel_ddi_update_active_dpll(struct > > intel_atomic_state *state, > > return; > > > > intel_update_active_dpll(state, crtc, encoder); > > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > > - > > intel_crtc_bigjoiner_slave_pipes(crtc_state)) > > - intel_update_active_dpll(state, slave_crtc, encoder); > > } > > > > static void > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c > > b/drivers/gpu/drm/i915/display/intel_display.c > > index 916c13a149fd5..e1ea53fd6a288 100644 > > --- a/drivers/gpu/drm/i915/display/intel_display.c > > +++ b/drivers/gpu/drm/i915/display/intel_display.c > > @@ -1631,31 +1631,12 @@ static void > hsw_configure_cpu_transcoder(const > > struct intel_crtc_state *crtc_sta > > hsw_set_transconf(crtc_state); > > } > > > > -static void hsw_crtc_enable(struct intel_atomic_state *state, > > - struct intel_crtc *crtc) > > +static void hsw_crtc_enable_pre_transcoder(struct intel_atomic_state > *state, > > + struct intel_crtc *crtc) > > { > > const struct intel_crtc_state *new_crtc_state = > > intel_atomic_get_new_crtc_state(state, crtc); > > struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > - enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > - enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > - bool psl_clkgate_wa; > > - > > - if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > - return; > > - > > - intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > - > > - if (!new_crtc_state->bigjoiner_pipes) { > > - intel_encoders_pre_pll_enable(state, crtc); > > - > > - if (new_crtc_state->shared_dpll) > > - intel_enable_shared_dpll(new_crtc_state); > > - > > - intel_encoders_pre_enable(state, crtc); > > - } else { > > - icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > - } > > > > intel_dsc_enable(new_crtc_state); > > > > @@ -1665,19 +1646,17 @@ static void hsw_crtc_enable(struct > > intel_atomic_state *state, > > intel_set_pipe_src_size(new_crtc_state); > > if (DISPLAY_VER(dev_priv) >= 9 || IS_BROADWELL(dev_priv)) > > bdw_set_pipe_misc(new_crtc_state); > > +} > > > > - if (!intel_crtc_is_bigjoiner_slave(new_crtc_state) && > > - !transcoder_is_dsi(cpu_transcoder)) > > - hsw_configure_cpu_transcoder(new_crtc_state); > > +static void hsw_crtc_enable_post_transcoder(struct intel_atomic_state > > *state, > > + struct intel_crtc *crtc) > > +{ > > + const struct intel_crtc_state *new_crtc_state = > > + intel_atomic_get_new_crtc_state(state, crtc); > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > crtc->active = true; > > > > - /* Display WA #1180: WaDisableScalarClockGating: glk */ > > - psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > > - new_crtc_state->pch_pfit.enabled; > > - if (psl_clkgate_wa) > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true); > > - > > if (DISPLAY_VER(dev_priv) >= 9) > > skl_pfit_enable(new_crtc_state); > > else > > @@ -1700,27 +1679,84 @@ static void hsw_crtc_enable(struct > > intel_atomic_state *state, > > icl_set_pipe_chicken(new_crtc_state); > > > > intel_initial_watermarks(state, crtc); > > +} > > > > - if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > - intel_crtc_vblank_on(new_crtc_state); > > +static void hsw_crtc_enable(struct intel_atomic_state *state, > > + struct intel_crtc *crtc) > > +{ > > + const struct intel_crtc_state *new_crtc_state = > > + intel_atomic_get_new_crtc_state(state, crtc); > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > + enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > + struct intel_crtc *_crtc; > > + int slave_pipe_mask = > > intel_crtc_bigjoiner_slave_pipes(new_crtc_state); > > > Many thanks for the patch series. > Should we calculate slave_pipe_mask only if the modeset was received on the > slave pipe. Else, we noticed that each time its traversing through slave pipe > even when modeset was received on master (say pipe = 1) Kindly suggest. > > > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > > + bool psl_clkgate_wa; > > + enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > > > - intel_encoders_enable(state, crtc); > > + if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > + return; > > > > - if (psl_clkgate_wa) { > > - intel_crtc_wait_for_next_vblank(crtc); > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false); > > - } > > + /* > > + * Use reverse iterator to go through slave pipes first. > > + * TODO: We might need smarter iterator here > > + */ > > + for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, _crtc, > > + pipe_mask) { > > + const struct intel_crtc_state *_new_crtc_state = > > + intel_atomic_get_new_crtc_state(state, _crtc); > > + bool needs_transcoder = ((slave_pipe_mask & BIT(_crtc- > > >pipe)) == 0) && > > + !transcoder_is_dsi(cpu_transcoder); > > + > > + intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > + > > + if (!new_crtc_state->bigjoiner_pipes) { > > + if (needs_transcoder) > > + intel_encoders_pre_pll_enable(state, crtc); > > > Should we use _crtc here. In remaining places in this function also. > Kindly suggest. > > > + > > + if (new_crtc_state->shared_dpll) > > + intel_enable_shared_dpll(new_crtc_state); > > + > > + if (needs_transcoder) > > + intel_encoders_pre_enable(state, crtc); > > + } else { > > + icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > + } > > + > > + hsw_crtc_enable_pre_transcoder(state, _crtc); > > + > > + if (needs_transcoder) > > + hsw_configure_cpu_transcoder(_new_crtc_state); > > + > > + /* Display WA #1180: WaDisableScalarClockGating: glk */ > > + psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > > + new_crtc_state->pch_pfit.enabled; > > + if (psl_clkgate_wa) > > + glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, > > true); > > + > > + hsw_crtc_enable_post_transcoder(state, _crtc); > > + > > + if (needs_transcoder) > > + intel_encoders_enable(state, crtc); > > + else > > + intel_crtc_vblank_on(_new_crtc_state); > > + > > + if (psl_clkgate_wa) { > > + intel_crtc_wait_for_next_vblank(crtc); > > + glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, > > false); > > + } > > > > - /* If we change the relative order between pipe/planes enabling, we > > need > > - * to change the workaround. */ > > - hsw_workaround_pipe = new_crtc_state->hsw_workaround_pipe; > > - if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != > > INVALID_PIPE) { > > - struct intel_crtc *wa_crtc; > > + /* If we change the relative order between pipe/planes > > enabling, we need > > + * to change the workaround. */ > > + hsw_workaround_pipe = new_crtc_state- > > >hsw_workaround_pipe; > > + if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != > > INVALID_PIPE) { > > + struct intel_crtc *wa_crtc; > > > > - wa_crtc = intel_crtc_for_pipe(dev_priv, > > hsw_workaround_pipe); > > + wa_crtc = intel_crtc_for_pipe(dev_priv, > > hsw_workaround_pipe); > > > > - intel_crtc_wait_for_next_vblank(wa_crtc); > > - intel_crtc_wait_for_next_vblank(wa_crtc); > > + intel_crtc_wait_for_next_vblank(wa_crtc); > > + intel_crtc_wait_for_next_vblank(wa_crtc); > > + } > > } > > } > > > > @@ -1784,28 +1820,27 @@ static void hsw_crtc_disable(struct > > intel_atomic_state *state, > > const struct intel_crtc_state *old_crtc_state = > > intel_atomic_get_old_crtc_state(state, crtc); > > struct drm_i915_private *i915 = to_i915(crtc->base.dev); > > + int slave_pipe_mask = > > intel_crtc_bigjoiner_slave_pipes(old_crtc_state); > > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > > + struct intel_crtc *_crtc; > > + > > + for_each_intel_crtc_in_pipe_mask(&i915->drm, _crtc, > > + pipe_mask) { > > + const struct intel_crtc_state *_old_crtc_state = > > + intel_atomic_get_old_crtc_state(state, _crtc); > > + bool needs_encoder_disable = (slave_pipe_mask & BIT(_crtc- > > >pipe)) == > > +0; > > + > > + if (needs_encoder_disable) { > > + intel_encoders_disable(state, _crtc); > > + intel_encoders_post_disable(state, _crtc); > > + } > > > > - /* > > - * FIXME collapse everything to one hook. > > - * Need care with mst->ddi interactions. > > - */ > > - if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) { > > - intel_encoders_disable(state, crtc); > > - intel_encoders_post_disable(state, crtc); > > - } > > - > > - intel_disable_shared_dpll(old_crtc_state); > > - > > - if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) { > > - struct intel_crtc *slave_crtc; > > - > > - intel_encoders_post_pll_disable(state, crtc); > > + intel_disable_shared_dpll(_old_crtc_state); > > > > - intel_dmc_disable_pipe(i915, crtc->pipe); > > + if (needs_encoder_disable) > > + intel_encoders_post_pll_disable(state, _crtc); > > > > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > > - > > intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) > > - intel_dmc_disable_pipe(i915, slave_crtc->pipe); > > + intel_dmc_disable_pipe(i915, _crtc->pipe); > > } > > } > > > > @@ -6788,8 +6823,10 @@ static void > > intel_commit_modeset_disables(struct > > intel_atomic_state *state) > > * Slave vblanks are masked till Master Vblanks. > > */ > > if (!is_trans_port_sync_slave(old_crtc_state) && > > - !intel_dp_mst_is_slave_trans(old_crtc_state) && > > - !intel_crtc_is_bigjoiner_slave(old_crtc_state)) > > + !intel_dp_mst_is_slave_trans(old_crtc_state)) > > + continue; > > + > > + if (intel_crtc_is_bigjoiner_slave(old_crtc_state)) > > continue; > > Should we use !intel_crtc_is_bigjoiner_slave here? > Kindly suggest. > > > > > intel_old_crtc_state_disables(state, old_crtc_state, @@ - > > 6807,6 +6844,9 @@ static void intel_commit_modeset_disables(struct > > intel_atomic_state *state) > > if (!old_crtc_state->hw.active) > > continue; > > > > + if (intel_crtc_is_bigjoiner_slave(old_crtc_state)) > > + continue; > > + > > intel_old_crtc_state_disables(state, old_crtc_state, > > new_crtc_state, crtc); > > } > > @@ -6919,8 +6959,10 @@ static void skl_commit_modeset_enables(struct > > intel_atomic_state *state) > > continue; > > > > if (intel_dp_mst_is_slave_trans(new_crtc_state) || > > - is_trans_port_sync_master(new_crtc_state) || > > - intel_crtc_is_bigjoiner_master(new_crtc_state)) > > + is_trans_port_sync_master(new_crtc_state)) > > + continue; > > + > > + if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > continue; > > > Should we use !intel_crtc_is_bigjoiner_master here? > Kindly suggest. Apologies, I meant intel_crtc_is_bigjoiner_master > > > modeset_pipes &= ~BIT(pipe); > > @@ -6930,7 +6972,7 @@ static void skl_commit_modeset_enables(struct > > intel_atomic_state *state) > > > > /* > > * Then we enable all remaining pipes that depend on other > > - * pipes: MST slaves and port sync masters, big joiner master > > + * pipes: MST slaves and port sync masters > > */ > > for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { > > enum pipe pipe = crtc->pipe; > > @@ -6938,6 +6980,9 @@ static void skl_commit_modeset_enables(struct > > intel_atomic_state *state) > > if ((modeset_pipes & BIT(pipe)) == 0) > > continue; > > > > + if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > + continue; > > + > > modeset_pipes &= ~BIT(pipe); > > > > intel_enable_crtc(state, crtc); > > diff --git a/drivers/gpu/drm/i915/display/intel_display.h > > b/drivers/gpu/drm/i915/display/intel_display.h > > index f4a0773f0fca8..e1e8d956c305e 100644 > > --- a/drivers/gpu/drm/i915/display/intel_display.h > > +++ b/drivers/gpu/drm/i915/display/intel_display.h > > @@ -280,6 +280,12 @@ enum phy_fia { > > base.head) \ > > for_each_if((pipe_mask) & BIT(intel_crtc->pipe)) > > > > +#define for_each_intel_crtc_in_pipe_mask_reverse(dev, intel_crtc, > > pipe_mask) \ > > + list_for_each_entry_reverse(intel_crtc, > > \ > > + &(dev)->mode_config.crtc_list, > > \ > > + base.head) > > \ > > + for_each_if((pipe_mask) & BIT(intel_crtc->pipe)) > > + > > #define for_each_intel_encoder(dev, intel_encoder) \ > > list_for_each_entry(intel_encoder, \ > > &(dev)->mode_config.encoder_list, \ > > -- > > 2.37.3 ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner during modeset 2024-02-27 4:40 ` Srinivas, Vidya 2024-02-27 4:52 ` Srinivas, Vidya @ 2024-02-27 9:11 ` Lisovskiy, Stanislav 2024-02-27 16:16 ` Srinivas, Vidya 1 sibling, 1 reply; 34+ messages in thread From: Lisovskiy, Stanislav @ 2024-02-27 9:11 UTC (permalink / raw) To: Srinivas, Vidya Cc: intel-gfx@lists.freedesktop.org, Saarinen, Jani, ville.syrjala@linux.intel.com On Tue, Feb 27, 2024 at 06:40:23AM +0200, Srinivas, Vidya wrote: > > > > -----Original Message----- > > From: Lisovskiy, Stanislav <stanislav.lisovskiy@intel.com> > > Sent: Thursday, February 22, 2024 12:50 AM > > To: intel-gfx@lists.freedesktop.org > > Cc: Lisovskiy, Stanislav <stanislav.lisovskiy@intel.com>; Saarinen, Jani > > <jani.saarinen@intel.com>; ville.syrjala@linux.intel.com; Srinivas, Vidya > > <vidya.srinivas@intel.com> > > Subject: [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner > > during modeset > > > > Handle only bigjoiner masters in skl_commit_modeset_enables/disables, > > slave crtcs should be handled by master hooks. Same for encoders. > > That way we can also remove a bunch of checks like > > intel_crtc_is_bigjoiner_slave. > > > > v2: Get rid of master vs slave checks and separation in crtc enable/disable > > hooks. > > Use unified iteration cycle for all of those, while enabling/disabling > > transcoder only for those pipes where its needed(Ville Syrjälä) > > > > v3: Move all the intel_encoder_* calls under transcoder code path(Ville > > Syrjälä) > > > > v4: - Call intel_crtc_vblank_on from hsw_crtc_enable only for non-transcoder > > path > > (for master pipe that will be called from > > intel_encoders_enable/intel_enable_ddi) > > - Fix stupid mistake with using crtc->pipe for the mask, instead of BIT(crtc- > > >pipe) > > > > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > > --- > > drivers/gpu/drm/i915/display/intel_ddi.c | 21 +-- > > drivers/gpu/drm/i915/display/intel_display.c | 183 ++++++++++++------- > > drivers/gpu/drm/i915/display/intel_display.h | 6 + > > 3 files changed, 121 insertions(+), 89 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c > > b/drivers/gpu/drm/i915/display/intel_ddi.c > > index bea4415902044..6071e9f500871 100644 > > --- a/drivers/gpu/drm/i915/display/intel_ddi.c > > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c > > @@ -3100,7 +3100,6 @@ static void intel_ddi_post_disable(struct > > intel_atomic_state *state, > > const struct drm_connector_state > > *old_conn_state) { > > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > > - struct intel_crtc *slave_crtc; > > > > if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST)) { > > intel_crtc_vblank_off(old_crtc_state); > > @@ -3117,17 +3116,6 @@ static void intel_ddi_post_disable(struct > > intel_atomic_state *state, > > ilk_pfit_disable(old_crtc_state); > > } > > > > - for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, slave_crtc, > > - > > intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) { > > - const struct intel_crtc_state *old_slave_crtc_state = > > - intel_atomic_get_old_crtc_state(state, slave_crtc); > > - > > - intel_crtc_vblank_off(old_slave_crtc_state); > > - > > - intel_dsc_disable(old_slave_crtc_state); > > - skl_scaler_disable(old_slave_crtc_state); > > - } > > - > > /* > > * When called from DP MST code: > > * - old_conn_state will be NULL > > @@ -3363,8 +3351,7 @@ static void intel_enable_ddi(struct > > intel_atomic_state *state, { > > drm_WARN_ON(state->base.dev, crtc_state->has_pch_encoder); > > > > - if (!intel_crtc_is_bigjoiner_slave(crtc_state)) > > - intel_ddi_enable_transcoder_func(encoder, crtc_state); > > + intel_ddi_enable_transcoder_func(encoder, crtc_state); > > > > /* Enable/Disable DP2.0 SDP split config before transcoder */ > > intel_audio_sdp_split_update(crtc_state); > > @@ -3469,9 +3456,6 @@ void intel_ddi_update_active_dpll(struct > > intel_atomic_state *state, > > struct intel_crtc *crtc) > > { > > struct drm_i915_private *i915 = to_i915(encoder->base.dev); > > - struct intel_crtc_state *crtc_state = > > - intel_atomic_get_new_crtc_state(state, crtc); > > - struct intel_crtc *slave_crtc; > > enum phy phy = intel_port_to_phy(i915, encoder->port); > > > > /* FIXME: Add MTL pll_mgr */ > > @@ -3479,9 +3463,6 @@ void intel_ddi_update_active_dpll(struct > > intel_atomic_state *state, > > return; > > > > intel_update_active_dpll(state, crtc, encoder); > > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > > - > > intel_crtc_bigjoiner_slave_pipes(crtc_state)) > > - intel_update_active_dpll(state, slave_crtc, encoder); > > } > > > > static void > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c > > b/drivers/gpu/drm/i915/display/intel_display.c > > index 916c13a149fd5..e1ea53fd6a288 100644 > > --- a/drivers/gpu/drm/i915/display/intel_display.c > > +++ b/drivers/gpu/drm/i915/display/intel_display.c > > @@ -1631,31 +1631,12 @@ static void hsw_configure_cpu_transcoder(const > > struct intel_crtc_state *crtc_sta > > hsw_set_transconf(crtc_state); > > } > > > > -static void hsw_crtc_enable(struct intel_atomic_state *state, > > - struct intel_crtc *crtc) > > +static void hsw_crtc_enable_pre_transcoder(struct intel_atomic_state *state, > > + struct intel_crtc *crtc) > > { > > const struct intel_crtc_state *new_crtc_state = > > intel_atomic_get_new_crtc_state(state, crtc); > > struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > - enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > - enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > - bool psl_clkgate_wa; > > - > > - if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > - return; > > - > > - intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > - > > - if (!new_crtc_state->bigjoiner_pipes) { > > - intel_encoders_pre_pll_enable(state, crtc); > > - > > - if (new_crtc_state->shared_dpll) > > - intel_enable_shared_dpll(new_crtc_state); > > - > > - intel_encoders_pre_enable(state, crtc); > > - } else { > > - icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > - } > > > > intel_dsc_enable(new_crtc_state); > > > > @@ -1665,19 +1646,17 @@ static void hsw_crtc_enable(struct > > intel_atomic_state *state, > > intel_set_pipe_src_size(new_crtc_state); > > if (DISPLAY_VER(dev_priv) >= 9 || IS_BROADWELL(dev_priv)) > > bdw_set_pipe_misc(new_crtc_state); > > +} > > > > - if (!intel_crtc_is_bigjoiner_slave(new_crtc_state) && > > - !transcoder_is_dsi(cpu_transcoder)) > > - hsw_configure_cpu_transcoder(new_crtc_state); > > +static void hsw_crtc_enable_post_transcoder(struct intel_atomic_state > > *state, > > + struct intel_crtc *crtc) > > +{ > > + const struct intel_crtc_state *new_crtc_state = > > + intel_atomic_get_new_crtc_state(state, crtc); > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > crtc->active = true; > > > > - /* Display WA #1180: WaDisableScalarClockGating: glk */ > > - psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > > - new_crtc_state->pch_pfit.enabled; > > - if (psl_clkgate_wa) > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true); > > - > > if (DISPLAY_VER(dev_priv) >= 9) > > skl_pfit_enable(new_crtc_state); > > else > > @@ -1700,27 +1679,84 @@ static void hsw_crtc_enable(struct > > intel_atomic_state *state, > > icl_set_pipe_chicken(new_crtc_state); > > > > intel_initial_watermarks(state, crtc); > > +} > > > > - if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > - intel_crtc_vblank_on(new_crtc_state); > > +static void hsw_crtc_enable(struct intel_atomic_state *state, > > + struct intel_crtc *crtc) > > +{ > > + const struct intel_crtc_state *new_crtc_state = > > + intel_atomic_get_new_crtc_state(state, crtc); > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > + enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > + struct intel_crtc *_crtc; > > + int slave_pipe_mask = > > intel_crtc_bigjoiner_slave_pipes(new_crtc_state); > > > Many thanks for the patch series. > Should we calculate slave_pipe_mask only if the modeset > was received on the slave pipe. Else, we noticed that > each time its traversing through slave pipe even when > modeset was received on master (say pipe = 1) > Kindly suggest. That is exactly how it should happen. For bigjoiner if we get a modeset on master pipe, we traverse both master and its slaves. That is how bigjoiner is supposed to work. > > > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > > + bool psl_clkgate_wa; > > + enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > > > - intel_encoders_enable(state, crtc); > > + if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > + return; > > > > - if (psl_clkgate_wa) { > > - intel_crtc_wait_for_next_vblank(crtc); > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false); > > - } > > + /* > > + * Use reverse iterator to go through slave pipes first. > > + * TODO: We might need smarter iterator here > > + */ > > + for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, _crtc, > > + pipe_mask) { > > + const struct intel_crtc_state *_new_crtc_state = > > + intel_atomic_get_new_crtc_state(state, _crtc); > > + bool needs_transcoder = ((slave_pipe_mask & BIT(_crtc- > > >pipe)) == 0) && > > + !transcoder_is_dsi(cpu_transcoder); > > + > > + intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > + > > + if (!new_crtc_state->bigjoiner_pipes) { > > + if (needs_transcoder) > > + intel_encoders_pre_pll_enable(state, crtc); > > > Should we use _crtc here. In remaining places in this function also. > Kindly suggest. Yes, you are right. Even though it doesn't hurt currently, because we call this only for master so crtc is guaranteed to be the one which needs to follow the transcoder path. > > > + > > + if (new_crtc_state->shared_dpll) > > + intel_enable_shared_dpll(new_crtc_state); > > + > > + if (needs_transcoder) > > + intel_encoders_pre_enable(state, crtc); > > + } else { > > + icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > + } > > + > > + hsw_crtc_enable_pre_transcoder(state, _crtc); > > + > > + if (needs_transcoder) > > + hsw_configure_cpu_transcoder(_new_crtc_state); > > + > > + /* Display WA #1180: WaDisableScalarClockGating: glk */ > > + psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > > + new_crtc_state->pch_pfit.enabled; > > + if (psl_clkgate_wa) > > + glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, > > true); > > + > > + hsw_crtc_enable_post_transcoder(state, _crtc); > > + > > + if (needs_transcoder) > > + intel_encoders_enable(state, crtc); > > + else > > + intel_crtc_vblank_on(_new_crtc_state); > > + > > + if (psl_clkgate_wa) { > > + intel_crtc_wait_for_next_vblank(crtc); > > + glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, > > false); > > + } > > > > - /* If we change the relative order between pipe/planes enabling, we > > need > > - * to change the workaround. */ > > - hsw_workaround_pipe = new_crtc_state->hsw_workaround_pipe; > > - if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != > > INVALID_PIPE) { > > - struct intel_crtc *wa_crtc; > > + /* If we change the relative order between pipe/planes > > enabling, we need > > + * to change the workaround. */ > > + hsw_workaround_pipe = new_crtc_state- > > >hsw_workaround_pipe; > > + if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != > > INVALID_PIPE) { > > + struct intel_crtc *wa_crtc; > > > > - wa_crtc = intel_crtc_for_pipe(dev_priv, > > hsw_workaround_pipe); > > + wa_crtc = intel_crtc_for_pipe(dev_priv, > > hsw_workaround_pipe); > > > > - intel_crtc_wait_for_next_vblank(wa_crtc); > > - intel_crtc_wait_for_next_vblank(wa_crtc); > > + intel_crtc_wait_for_next_vblank(wa_crtc); > > + intel_crtc_wait_for_next_vblank(wa_crtc); > > + } > > } > > } > > > > @@ -1784,28 +1820,27 @@ static void hsw_crtc_disable(struct > > intel_atomic_state *state, > > const struct intel_crtc_state *old_crtc_state = > > intel_atomic_get_old_crtc_state(state, crtc); > > struct drm_i915_private *i915 = to_i915(crtc->base.dev); > > + int slave_pipe_mask = > > intel_crtc_bigjoiner_slave_pipes(old_crtc_state); > > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > > + struct intel_crtc *_crtc; > > + > > + for_each_intel_crtc_in_pipe_mask(&i915->drm, _crtc, > > + pipe_mask) { > > + const struct intel_crtc_state *_old_crtc_state = > > + intel_atomic_get_old_crtc_state(state, _crtc); > > + bool needs_encoder_disable = (slave_pipe_mask & BIT(_crtc- > > >pipe)) == > > +0; > > + > > + if (needs_encoder_disable) { > > + intel_encoders_disable(state, _crtc); > > + intel_encoders_post_disable(state, _crtc); > > + } > > > > - /* > > - * FIXME collapse everything to one hook. > > - * Need care with mst->ddi interactions. > > - */ > > - if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) { > > - intel_encoders_disable(state, crtc); > > - intel_encoders_post_disable(state, crtc); > > - } > > - > > - intel_disable_shared_dpll(old_crtc_state); > > - > > - if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) { > > - struct intel_crtc *slave_crtc; > > - > > - intel_encoders_post_pll_disable(state, crtc); > > + intel_disable_shared_dpll(_old_crtc_state); > > > > - intel_dmc_disable_pipe(i915, crtc->pipe); > > + if (needs_encoder_disable) > > + intel_encoders_post_pll_disable(state, _crtc); > > > > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > > - > > intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) > > - intel_dmc_disable_pipe(i915, slave_crtc->pipe); > > + intel_dmc_disable_pipe(i915, _crtc->pipe); > > } > > } > > > > @@ -6788,8 +6823,10 @@ static void intel_commit_modeset_disables(struct > > intel_atomic_state *state) > > * Slave vblanks are masked till Master Vblanks. > > */ > > if (!is_trans_port_sync_slave(old_crtc_state) && > > - !intel_dp_mst_is_slave_trans(old_crtc_state) && > > - !intel_crtc_is_bigjoiner_slave(old_crtc_state)) > > + !intel_dp_mst_is_slave_trans(old_crtc_state)) > > + continue; > > + > > + if (intel_crtc_is_bigjoiner_slave(old_crtc_state)) > > continue; > > Should we use !intel_crtc_is_bigjoiner_slave here? > Kindly suggest. No. The main idea of that whole refactoring is that we never do anything for slave pipes in *commit_modeset_disables/enables. Those are intentionally skipped and handled from master pipes. In bigjoiner slave pipes are no longer independent. So if we detect that pipe is the slave pipe with a check above - we skip it. > > > > > intel_old_crtc_state_disables(state, old_crtc_state, @@ - > > 6807,6 +6844,9 @@ static void intel_commit_modeset_disables(struct > > intel_atomic_state *state) > > if (!old_crtc_state->hw.active) > > continue; > > > > + if (intel_crtc_is_bigjoiner_slave(old_crtc_state)) > > + continue; > > + > > intel_old_crtc_state_disables(state, old_crtc_state, > > new_crtc_state, crtc); > > } > > @@ -6919,8 +6959,10 @@ static void skl_commit_modeset_enables(struct > > intel_atomic_state *state) > > continue; > > > > if (intel_dp_mst_is_slave_trans(new_crtc_state) || > > - is_trans_port_sync_master(new_crtc_state) || > > - intel_crtc_is_bigjoiner_master(new_crtc_state)) > > + is_trans_port_sync_master(new_crtc_state)) > > + continue; > > + > > + if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > continue; > > > Should we use !intel_crtc_is_bigjoiner_master here? > Kindly suggest. See above. We handle here only master pipes and skip slave pipes here. > > > modeset_pipes &= ~BIT(pipe); > > @@ -6930,7 +6972,7 @@ static void skl_commit_modeset_enables(struct > > intel_atomic_state *state) > > > > /* > > * Then we enable all remaining pipes that depend on other > > - * pipes: MST slaves and port sync masters, big joiner master > > + * pipes: MST slaves and port sync masters > > */ > > for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { > > enum pipe pipe = crtc->pipe; > > @@ -6938,6 +6980,9 @@ static void skl_commit_modeset_enables(struct > > intel_atomic_state *state) > > if ((modeset_pipes & BIT(pipe)) == 0) > > continue; > > > > + if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > + continue; > > + > > modeset_pipes &= ~BIT(pipe); > > > > intel_enable_crtc(state, crtc); > > diff --git a/drivers/gpu/drm/i915/display/intel_display.h > > b/drivers/gpu/drm/i915/display/intel_display.h > > index f4a0773f0fca8..e1e8d956c305e 100644 > > --- a/drivers/gpu/drm/i915/display/intel_display.h > > +++ b/drivers/gpu/drm/i915/display/intel_display.h > > @@ -280,6 +280,12 @@ enum phy_fia { > > base.head) \ > > for_each_if((pipe_mask) & BIT(intel_crtc->pipe)) > > > > +#define for_each_intel_crtc_in_pipe_mask_reverse(dev, intel_crtc, > > pipe_mask) \ > > + list_for_each_entry_reverse(intel_crtc, > > \ > > + &(dev)->mode_config.crtc_list, > > \ > > + base.head) > > \ > > + for_each_if((pipe_mask) & BIT(intel_crtc->pipe)) > > + > > #define for_each_intel_encoder(dev, intel_encoder) \ > > list_for_each_entry(intel_encoder, \ > > &(dev)->mode_config.encoder_list, \ > > -- > > 2.37.3 > ^ permalink raw reply [flat|nested] 34+ messages in thread
* RE: [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner during modeset 2024-02-27 9:11 ` Lisovskiy, Stanislav @ 2024-02-27 16:16 ` Srinivas, Vidya 0 siblings, 0 replies; 34+ messages in thread From: Srinivas, Vidya @ 2024-02-27 16:16 UTC (permalink / raw) To: Lisovskiy, Stanislav Cc: intel-gfx@lists.freedesktop.org, Saarinen, Jani, ville.syrjala@linux.intel.com > -----Original Message----- > From: Lisovskiy, Stanislav <stanislav.lisovskiy@intel.com> > Sent: Tuesday, February 27, 2024 2:41 PM > To: Srinivas, Vidya <vidya.srinivas@intel.com> > Cc: intel-gfx@lists.freedesktop.org; Saarinen, Jani <jani.saarinen@intel.com>; > ville.syrjala@linux.intel.com > Subject: Re: [PATCH 2/3] Start separating pipe vs transcoder set logic for > bigjoiner during modeset > > On Tue, Feb 27, 2024 at 06:40:23AM +0200, Srinivas, Vidya wrote: > > > > > > > -----Original Message----- > > > From: Lisovskiy, Stanislav <stanislav.lisovskiy@intel.com> > > > Sent: Thursday, February 22, 2024 12:50 AM > > > To: intel-gfx@lists.freedesktop.org > > > Cc: Lisovskiy, Stanislav <stanislav.lisovskiy@intel.com>; Saarinen, > > > Jani <jani.saarinen@intel.com>; ville.syrjala@linux.intel.com; > > > Srinivas, Vidya <vidya.srinivas@intel.com> > > > Subject: [PATCH 2/3] Start separating pipe vs transcoder set logic > > > for bigjoiner during modeset > > > > > > Handle only bigjoiner masters in > > > skl_commit_modeset_enables/disables, > > > slave crtcs should be handled by master hooks. Same for encoders. > > > That way we can also remove a bunch of checks like > > > intel_crtc_is_bigjoiner_slave. > > > > > > v2: Get rid of master vs slave checks and separation in crtc > > > enable/disable hooks. > > > Use unified iteration cycle for all of those, while enabling/disabling > > > transcoder only for those pipes where its needed(Ville Syrjälä) > > > > > > v3: Move all the intel_encoder_* calls under transcoder code > > > path(Ville > > > Syrjälä) > > > > > > v4: - Call intel_crtc_vblank_on from hsw_crtc_enable only for > > > non-transcoder path > > > (for master pipe that will be called from > > > intel_encoders_enable/intel_enable_ddi) > > > - Fix stupid mistake with using crtc->pipe for the mask, > > > instead of BIT(crtc- > > > >pipe) > > > > > > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > > > --- > > > drivers/gpu/drm/i915/display/intel_ddi.c | 21 +-- > > > drivers/gpu/drm/i915/display/intel_display.c | 183 ++++++++++++------- > > > drivers/gpu/drm/i915/display/intel_display.h | 6 + > > > 3 files changed, 121 insertions(+), 89 deletions(-) > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c > > > b/drivers/gpu/drm/i915/display/intel_ddi.c > > > index bea4415902044..6071e9f500871 100644 > > > --- a/drivers/gpu/drm/i915/display/intel_ddi.c > > > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c > > > @@ -3100,7 +3100,6 @@ static void intel_ddi_post_disable(struct > > > intel_atomic_state *state, > > > const struct drm_connector_state > > > *old_conn_state) { > > > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > > > - struct intel_crtc *slave_crtc; > > > > > > if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST)) { > > > intel_crtc_vblank_off(old_crtc_state); > > > @@ -3117,17 +3116,6 @@ static void intel_ddi_post_disable(struct > > > intel_atomic_state *state, > > > ilk_pfit_disable(old_crtc_state); > > > } > > > > > > - for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, slave_crtc, > > > - > > > intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) { > > > - const struct intel_crtc_state *old_slave_crtc_state = > > > - intel_atomic_get_old_crtc_state(state, slave_crtc); > > > - > > > - intel_crtc_vblank_off(old_slave_crtc_state); > > > - > > > - intel_dsc_disable(old_slave_crtc_state); > > > - skl_scaler_disable(old_slave_crtc_state); > > > - } > > > - > > > /* > > > * When called from DP MST code: > > > * - old_conn_state will be NULL > > > @@ -3363,8 +3351,7 @@ static void intel_enable_ddi(struct > > > intel_atomic_state *state, { > > > drm_WARN_ON(state->base.dev, crtc_state->has_pch_encoder); > > > > > > - if (!intel_crtc_is_bigjoiner_slave(crtc_state)) > > > - intel_ddi_enable_transcoder_func(encoder, crtc_state); > > > + intel_ddi_enable_transcoder_func(encoder, crtc_state); > > > > > > /* Enable/Disable DP2.0 SDP split config before transcoder */ > > > intel_audio_sdp_split_update(crtc_state); > > > @@ -3469,9 +3456,6 @@ void intel_ddi_update_active_dpll(struct > > > intel_atomic_state *state, > > > struct intel_crtc *crtc) > > > { > > > struct drm_i915_private *i915 = to_i915(encoder->base.dev); > > > - struct intel_crtc_state *crtc_state = > > > - intel_atomic_get_new_crtc_state(state, crtc); > > > - struct intel_crtc *slave_crtc; > > > enum phy phy = intel_port_to_phy(i915, encoder->port); > > > > > > /* FIXME: Add MTL pll_mgr */ > > > @@ -3479,9 +3463,6 @@ void intel_ddi_update_active_dpll(struct > > > intel_atomic_state *state, > > > return; > > > > > > intel_update_active_dpll(state, crtc, encoder); > > > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > > > - > > > intel_crtc_bigjoiner_slave_pipes(crtc_state)) > > > - intel_update_active_dpll(state, slave_crtc, encoder); > > > } > > > > > > static void > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c > > > b/drivers/gpu/drm/i915/display/intel_display.c > > > index 916c13a149fd5..e1ea53fd6a288 100644 > > > --- a/drivers/gpu/drm/i915/display/intel_display.c > > > +++ b/drivers/gpu/drm/i915/display/intel_display.c > > > @@ -1631,31 +1631,12 @@ static void > > > hsw_configure_cpu_transcoder(const > > > struct intel_crtc_state *crtc_sta > > > hsw_set_transconf(crtc_state); > > > } > > > > > > -static void hsw_crtc_enable(struct intel_atomic_state *state, > > > - struct intel_crtc *crtc) > > > +static void hsw_crtc_enable_pre_transcoder(struct intel_atomic_state > *state, > > > + struct intel_crtc *crtc) > > > { > > > const struct intel_crtc_state *new_crtc_state = > > > intel_atomic_get_new_crtc_state(state, crtc); > > > struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > - enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > > - enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > > - bool psl_clkgate_wa; > > > - > > > - if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > > - return; > > > - > > > - intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > > - > > > - if (!new_crtc_state->bigjoiner_pipes) { > > > - intel_encoders_pre_pll_enable(state, crtc); > > > - > > > - if (new_crtc_state->shared_dpll) > > > - intel_enable_shared_dpll(new_crtc_state); > > > - > > > - intel_encoders_pre_enable(state, crtc); > > > - } else { > > > - icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > > - } > > > > > > intel_dsc_enable(new_crtc_state); > > > > > > @@ -1665,19 +1646,17 @@ static void hsw_crtc_enable(struct > > > intel_atomic_state *state, > > > intel_set_pipe_src_size(new_crtc_state); > > > if (DISPLAY_VER(dev_priv) >= 9 || IS_BROADWELL(dev_priv)) > > > bdw_set_pipe_misc(new_crtc_state); > > > +} > > > > > > - if (!intel_crtc_is_bigjoiner_slave(new_crtc_state) && > > > - !transcoder_is_dsi(cpu_transcoder)) > > > - hsw_configure_cpu_transcoder(new_crtc_state); > > > +static void hsw_crtc_enable_post_transcoder(struct > > > +intel_atomic_state > > > *state, > > > + struct intel_crtc *crtc) > > > +{ > > > + const struct intel_crtc_state *new_crtc_state = > > > + intel_atomic_get_new_crtc_state(state, crtc); > > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > > > crtc->active = true; > > > > > > - /* Display WA #1180: WaDisableScalarClockGating: glk */ > > > - psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > > > - new_crtc_state->pch_pfit.enabled; > > > - if (psl_clkgate_wa) > > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true); > > > - > > > if (DISPLAY_VER(dev_priv) >= 9) > > > skl_pfit_enable(new_crtc_state); > > > else > > > @@ -1700,27 +1679,84 @@ static void hsw_crtc_enable(struct > > > intel_atomic_state *state, > > > icl_set_pipe_chicken(new_crtc_state); > > > > > > intel_initial_watermarks(state, crtc); > > > +} > > > > > > - if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > > - intel_crtc_vblank_on(new_crtc_state); > > > +static void hsw_crtc_enable(struct intel_atomic_state *state, > > > + struct intel_crtc *crtc) > > > +{ > > > + const struct intel_crtc_state *new_crtc_state = > > > + intel_atomic_get_new_crtc_state(state, crtc); > > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > + enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > > + struct intel_crtc *_crtc; > > > + int slave_pipe_mask = > > > intel_crtc_bigjoiner_slave_pipes(new_crtc_state); > > > > > > Many thanks for the patch series. > > Should we calculate slave_pipe_mask only if the modeset was received > > on the slave pipe. Else, we noticed that each time its traversing > > through slave pipe even when modeset was received on master (say pipe > > = 1) Kindly suggest. > > That is exactly how it should happen. For bigjoiner if we get a modeset on > master pipe, we traverse both master and its slaves. > That is how bigjoiner is supposed to work. Hello Stan Many thanks for the inputs and info. Apologies, actually we tried to use your series as is but we faced drm_WARN panic and we couldn't get the 6k working. We tried to debug a bit and based on that we added these comments here. We have added all the details in VLK-52374. Could you kindly help check and suggest? Thank you so much. Regards Vidya > > > > > > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > > > + bool psl_clkgate_wa; > > > + enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > > > > > - intel_encoders_enable(state, crtc); > > > + if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > > + return; > > > > > > - if (psl_clkgate_wa) { > > > - intel_crtc_wait_for_next_vblank(crtc); > > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false); > > > - } > > > + /* > > > + * Use reverse iterator to go through slave pipes first. > > > + * TODO: We might need smarter iterator here > > > + */ > > > + for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, _crtc, > > > + pipe_mask) { > > > + const struct intel_crtc_state *_new_crtc_state = > > > + intel_atomic_get_new_crtc_state(state, _crtc); > > > + bool needs_transcoder = ((slave_pipe_mask & BIT(_crtc- > > > >pipe)) == 0) && > > > + !transcoder_is_dsi(cpu_transcoder); > > > + > > > + intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > > + > > > + if (!new_crtc_state->bigjoiner_pipes) { > > > + if (needs_transcoder) > > > + intel_encoders_pre_pll_enable(state, crtc); > > > > > > Should we use _crtc here. In remaining places in this function also. > > Kindly suggest. > > Yes, you are right. Even though it doesn't hurt currently, because we call this > only for master so crtc is guaranteed to be the one which needs to follow the > transcoder path. > > > > > > + > > > + if (new_crtc_state->shared_dpll) > > > + intel_enable_shared_dpll(new_crtc_state); > > > + > > > + if (needs_transcoder) > > > + intel_encoders_pre_enable(state, crtc); > > > + } else { > > > + icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > > + } > > > + > > > + hsw_crtc_enable_pre_transcoder(state, _crtc); > > > + > > > + if (needs_transcoder) > > > + hsw_configure_cpu_transcoder(_new_crtc_state); > > > + > > > + /* Display WA #1180: WaDisableScalarClockGating: glk */ > > > + psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > > > + new_crtc_state->pch_pfit.enabled; > > > + if (psl_clkgate_wa) > > > + glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, > > > true); > > > + > > > + hsw_crtc_enable_post_transcoder(state, _crtc); > > > + > > > + if (needs_transcoder) > > > + intel_encoders_enable(state, crtc); > > > + else > > > + intel_crtc_vblank_on(_new_crtc_state); > > > + > > > + if (psl_clkgate_wa) { > > > + intel_crtc_wait_for_next_vblank(crtc); > > > + glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, > > > false); > > > + } > > > > > > - /* If we change the relative order between pipe/planes enabling, we > > > need > > > - * to change the workaround. */ > > > - hsw_workaround_pipe = new_crtc_state->hsw_workaround_pipe; > > > - if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != > > > INVALID_PIPE) { > > > - struct intel_crtc *wa_crtc; > > > + /* If we change the relative order between pipe/planes > > > enabling, we need > > > + * to change the workaround. */ > > > + hsw_workaround_pipe = new_crtc_state- > > > >hsw_workaround_pipe; > > > + if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != > > > INVALID_PIPE) { > > > + struct intel_crtc *wa_crtc; > > > > > > - wa_crtc = intel_crtc_for_pipe(dev_priv, > > > hsw_workaround_pipe); > > > + wa_crtc = intel_crtc_for_pipe(dev_priv, > > > hsw_workaround_pipe); > > > > > > - intel_crtc_wait_for_next_vblank(wa_crtc); > > > - intel_crtc_wait_for_next_vblank(wa_crtc); > > > + intel_crtc_wait_for_next_vblank(wa_crtc); > > > + intel_crtc_wait_for_next_vblank(wa_crtc); > > > + } > > > } > > > } > > > > > > @@ -1784,28 +1820,27 @@ static void hsw_crtc_disable(struct > > > intel_atomic_state *state, > > > const struct intel_crtc_state *old_crtc_state = > > > intel_atomic_get_old_crtc_state(state, crtc); > > > struct drm_i915_private *i915 = to_i915(crtc->base.dev); > > > + int slave_pipe_mask = > > > intel_crtc_bigjoiner_slave_pipes(old_crtc_state); > > > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > > > + struct intel_crtc *_crtc; > > > + > > > + for_each_intel_crtc_in_pipe_mask(&i915->drm, _crtc, > > > + pipe_mask) { > > > + const struct intel_crtc_state *_old_crtc_state = > > > + intel_atomic_get_old_crtc_state(state, _crtc); > > > + bool needs_encoder_disable = (slave_pipe_mask & BIT(_crtc- > > > >pipe)) == > > > +0; > > > + > > > + if (needs_encoder_disable) { > > > + intel_encoders_disable(state, _crtc); > > > + intel_encoders_post_disable(state, _crtc); > > > + } > > > > > > - /* > > > - * FIXME collapse everything to one hook. > > > - * Need care with mst->ddi interactions. > > > - */ > > > - if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) { > > > - intel_encoders_disable(state, crtc); > > > - intel_encoders_post_disable(state, crtc); > > > - } > > > - > > > - intel_disable_shared_dpll(old_crtc_state); > > > - > > > - if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) { > > > - struct intel_crtc *slave_crtc; > > > - > > > - intel_encoders_post_pll_disable(state, crtc); > > > + intel_disable_shared_dpll(_old_crtc_state); > > > > > > - intel_dmc_disable_pipe(i915, crtc->pipe); > > > + if (needs_encoder_disable) > > > + intel_encoders_post_pll_disable(state, _crtc); > > > > > > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > > > - > > > intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) > > > - intel_dmc_disable_pipe(i915, slave_crtc->pipe); > > > + intel_dmc_disable_pipe(i915, _crtc->pipe); > > > } > > > } > > > > > > @@ -6788,8 +6823,10 @@ static void > > > intel_commit_modeset_disables(struct > > > intel_atomic_state *state) > > > * Slave vblanks are masked till Master Vblanks. > > > */ > > > if (!is_trans_port_sync_slave(old_crtc_state) && > > > - !intel_dp_mst_is_slave_trans(old_crtc_state) && > > > - !intel_crtc_is_bigjoiner_slave(old_crtc_state)) > > > + !intel_dp_mst_is_slave_trans(old_crtc_state)) > > > + continue; > > > + > > > + if (intel_crtc_is_bigjoiner_slave(old_crtc_state)) > > > continue; > > > > Should we use !intel_crtc_is_bigjoiner_slave here? > > Kindly suggest. > > No. The main idea of that whole refactoring is that we never do anything for > slave pipes in *commit_modeset_disables/enables. Those are intentionally > skipped and handled from master pipes. In bigjoiner slave pipes are no > longer independent. > So if we detect that pipe is the slave pipe with a check above - we skip it. > > > > > > > > > intel_old_crtc_state_disables(state, old_crtc_state, @@ - > > > 6807,6 +6844,9 @@ static void intel_commit_modeset_disables(struct > > > intel_atomic_state *state) > > > if (!old_crtc_state->hw.active) > > > continue; > > > > > > + if (intel_crtc_is_bigjoiner_slave(old_crtc_state)) > > > + continue; > > > + > > > intel_old_crtc_state_disables(state, old_crtc_state, > > > new_crtc_state, crtc); > > > } > > > @@ -6919,8 +6959,10 @@ static void > skl_commit_modeset_enables(struct > > > intel_atomic_state *state) > > > continue; > > > > > > if (intel_dp_mst_is_slave_trans(new_crtc_state) || > > > - is_trans_port_sync_master(new_crtc_state) || > > > - intel_crtc_is_bigjoiner_master(new_crtc_state)) > > > + is_trans_port_sync_master(new_crtc_state)) > > > + continue; > > > + > > > + if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > > continue; > > > > > Should we use !intel_crtc_is_bigjoiner_master here? > > Kindly suggest. > > See above. We handle here only master pipes and skip slave pipes here. > > > > > > modeset_pipes &= ~BIT(pipe); > > > @@ -6930,7 +6972,7 @@ static void skl_commit_modeset_enables(struct > > > intel_atomic_state *state) > > > > > > /* > > > * Then we enable all remaining pipes that depend on other > > > - * pipes: MST slaves and port sync masters, big joiner master > > > + * pipes: MST slaves and port sync masters > > > */ > > > for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { > > > enum pipe pipe = crtc->pipe; > > > @@ -6938,6 +6980,9 @@ static void skl_commit_modeset_enables(struct > > > intel_atomic_state *state) > > > if ((modeset_pipes & BIT(pipe)) == 0) > > > continue; > > > > > > + if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > > + continue; > > > + > > > modeset_pipes &= ~BIT(pipe); > > > > > > intel_enable_crtc(state, crtc); > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.h > > > b/drivers/gpu/drm/i915/display/intel_display.h > > > index f4a0773f0fca8..e1e8d956c305e 100644 > > > --- a/drivers/gpu/drm/i915/display/intel_display.h > > > +++ b/drivers/gpu/drm/i915/display/intel_display.h > > > @@ -280,6 +280,12 @@ enum phy_fia { > > > base.head) \ > > > for_each_if((pipe_mask) & BIT(intel_crtc->pipe)) > > > > > > +#define for_each_intel_crtc_in_pipe_mask_reverse(dev, intel_crtc, > > > pipe_mask) \ > > > + list_for_each_entry_reverse(intel_crtc, > > > \ > > > + &(dev)->mode_config.crtc_list, > > > \ > > > + base.head) > > > \ > > > + for_each_if((pipe_mask) & BIT(intel_crtc->pipe)) > > > + > > > #define for_each_intel_encoder(dev, intel_encoder) \ > > > list_for_each_entry(intel_encoder, \ > > > &(dev)->mode_config.encoder_list, \ > > > -- > > > 2.37.3 > > ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner during modeset 2024-02-21 19:20 ` [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner during modeset Stanislav Lisovskiy 2024-02-27 4:40 ` Srinivas, Vidya @ 2024-03-01 10:10 ` Ville Syrjälä 2024-03-01 10:27 ` Lisovskiy, Stanislav 1 sibling, 1 reply; 34+ messages in thread From: Ville Syrjälä @ 2024-03-01 10:10 UTC (permalink / raw) To: Stanislav Lisovskiy; +Cc: intel-gfx, jani.saarinen, vidya.srinivas On Wed, Feb 21, 2024 at 09:20:09PM +0200, Stanislav Lisovskiy wrote: > Handle only bigjoiner masters in skl_commit_modeset_enables/disables, > slave crtcs should be handled by master hooks. Same for encoders. > That way we can also remove a bunch of checks like intel_crtc_is_bigjoiner_slave. > > v2: Get rid of master vs slave checks and separation in crtc enable/disable hooks. > Use unified iteration cycle for all of those, while enabling/disabling > transcoder only for those pipes where its needed(Ville Syrjälä) > > v3: Move all the intel_encoder_* calls under transcoder code path(Ville Syrjälä) > > v4: - Call intel_crtc_vblank_on from hsw_crtc_enable only for non-transcoder path > (for master pipe that will be called from intel_encoders_enable/intel_enable_ddi) > - Fix stupid mistake with using crtc->pipe for the mask, instead of BIT(crtc->pipe) > > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > --- > drivers/gpu/drm/i915/display/intel_ddi.c | 21 +-- > drivers/gpu/drm/i915/display/intel_display.c | 183 ++++++++++++------- > drivers/gpu/drm/i915/display/intel_display.h | 6 + > 3 files changed, 121 insertions(+), 89 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c > index bea4415902044..6071e9f500871 100644 > --- a/drivers/gpu/drm/i915/display/intel_ddi.c > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c > @@ -3100,7 +3100,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, > const struct drm_connector_state *old_conn_state) > { > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > - struct intel_crtc *slave_crtc; > > if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST)) { > intel_crtc_vblank_off(old_crtc_state); > @@ -3117,17 +3116,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, > ilk_pfit_disable(old_crtc_state); > } The master pipe stuff is right here ^ ... > > - for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, slave_crtc, > - intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) { > - const struct intel_crtc_state *old_slave_crtc_state = > - intel_atomic_get_old_crtc_state(state, slave_crtc); > - > - intel_crtc_vblank_off(old_slave_crtc_state); > - > - intel_dsc_disable(old_slave_crtc_state); > - skl_scaler_disable(old_slave_crtc_state); > - } .. but now you're moving the slave pipe stuff somewhere else? We should be just iterating the pipes here (assuming this is the correct spot to do these steps). > - > /* > * When called from DP MST code: > * - old_conn_state will be NULL > @@ -3363,8 +3351,7 @@ static void intel_enable_ddi(struct intel_atomic_state *state, > { > drm_WARN_ON(state->base.dev, crtc_state->has_pch_encoder); > > - if (!intel_crtc_is_bigjoiner_slave(crtc_state)) > - intel_ddi_enable_transcoder_func(encoder, crtc_state); > + intel_ddi_enable_transcoder_func(encoder, crtc_state); > > /* Enable/Disable DP2.0 SDP split config before transcoder */ > intel_audio_sdp_split_update(crtc_state); > @@ -3469,9 +3456,6 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state, > struct intel_crtc *crtc) > { > struct drm_i915_private *i915 = to_i915(encoder->base.dev); > - struct intel_crtc_state *crtc_state = > - intel_atomic_get_new_crtc_state(state, crtc); > - struct intel_crtc *slave_crtc; > enum phy phy = intel_port_to_phy(i915, encoder->port); > > /* FIXME: Add MTL pll_mgr */ > @@ -3479,9 +3463,6 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state, > return; > > intel_update_active_dpll(state, crtc, encoder); > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > - intel_crtc_bigjoiner_slave_pipes(crtc_state)) > - intel_update_active_dpll(state, slave_crtc, encoder); > } > > static void > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > index 916c13a149fd5..e1ea53fd6a288 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.c > +++ b/drivers/gpu/drm/i915/display/intel_display.c > @@ -1631,31 +1631,12 @@ static void hsw_configure_cpu_transcoder(const struct intel_crtc_state *crtc_sta > hsw_set_transconf(crtc_state); > } > > -static void hsw_crtc_enable(struct intel_atomic_state *state, > - struct intel_crtc *crtc) > +static void hsw_crtc_enable_pre_transcoder(struct intel_atomic_state *state, > + struct intel_crtc *crtc) > { > const struct intel_crtc_state *new_crtc_state = > intel_atomic_get_new_crtc_state(state, crtc); > struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > - enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > - enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > - bool psl_clkgate_wa; > - > - if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > - return; > - > - intel_dmc_enable_pipe(dev_priv, crtc->pipe); > - > - if (!new_crtc_state->bigjoiner_pipes) { > - intel_encoders_pre_pll_enable(state, crtc); > - > - if (new_crtc_state->shared_dpll) > - intel_enable_shared_dpll(new_crtc_state); > - > - intel_encoders_pre_enable(state, crtc); > - } else { > - icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > - } > > intel_dsc_enable(new_crtc_state); > > @@ -1665,19 +1646,17 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, > intel_set_pipe_src_size(new_crtc_state); > if (DISPLAY_VER(dev_priv) >= 9 || IS_BROADWELL(dev_priv)) > bdw_set_pipe_misc(new_crtc_state); > +} > > - if (!intel_crtc_is_bigjoiner_slave(new_crtc_state) && > - !transcoder_is_dsi(cpu_transcoder)) > - hsw_configure_cpu_transcoder(new_crtc_state); > +static void hsw_crtc_enable_post_transcoder(struct intel_atomic_state *state, > + struct intel_crtc *crtc) > +{ > + const struct intel_crtc_state *new_crtc_state = > + intel_atomic_get_new_crtc_state(state, crtc); > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > crtc->active = true; > > - /* Display WA #1180: WaDisableScalarClockGating: glk */ > - psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > - new_crtc_state->pch_pfit.enabled; > - if (psl_clkgate_wa) > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true); > - > if (DISPLAY_VER(dev_priv) >= 9) > skl_pfit_enable(new_crtc_state); > else > @@ -1700,27 +1679,84 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, > icl_set_pipe_chicken(new_crtc_state); > > intel_initial_watermarks(state, crtc); > +} > > - if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > - intel_crtc_vblank_on(new_crtc_state); > +static void hsw_crtc_enable(struct intel_atomic_state *state, > + struct intel_crtc *crtc) > +{ > + const struct intel_crtc_state *new_crtc_state = > + intel_atomic_get_new_crtc_state(state, crtc); > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > + enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > + struct intel_crtc *_crtc; > + int slave_pipe_mask = intel_crtc_bigjoiner_slave_pipes(new_crtc_state); > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > + bool psl_clkgate_wa; > + enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > - intel_encoders_enable(state, crtc); > + if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > + return; > > - if (psl_clkgate_wa) { > - intel_crtc_wait_for_next_vblank(crtc); > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false); > - } > + /* > + * Use reverse iterator to go through slave pipes first. > + * TODO: We might need smarter iterator here > + */ > + for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, _crtc, > + pipe_mask) { > + const struct intel_crtc_state *_new_crtc_state = > + intel_atomic_get_new_crtc_state(state, _crtc); > + bool needs_transcoder = ((slave_pipe_mask & BIT(_crtc->pipe)) == 0) && > + !transcoder_is_dsi(cpu_transcoder); > + > + intel_dmc_enable_pipe(dev_priv, crtc->pipe); > + > + if (!new_crtc_state->bigjoiner_pipes) { > + if (needs_transcoder) > + intel_encoders_pre_pll_enable(state, crtc); > + > + if (new_crtc_state->shared_dpll) > + intel_enable_shared_dpll(new_crtc_state); > + > + if (needs_transcoder) > + intel_encoders_pre_enable(state, crtc); > + } else { > + icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > + } That mess needs to be eliminated entirely. > + > + hsw_crtc_enable_pre_transcoder(state, _crtc); > + > + if (needs_transcoder) > + hsw_configure_cpu_transcoder(_new_crtc_state); These transcoder things should not be within any pipe loop at all. > + > + /* Display WA #1180: WaDisableScalarClockGating: glk */ > + psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > + new_crtc_state->pch_pfit.enabled; > + if (psl_clkgate_wa) > + glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true); > + > + hsw_crtc_enable_post_transcoder(state, _crtc); > + > + if (needs_transcoder) > + intel_encoders_enable(state, crtc); > + else > + intel_crtc_vblank_on(_new_crtc_state); > + > + if (psl_clkgate_wa) { > + intel_crtc_wait_for_next_vblank(crtc); > + glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false); > + } > > - /* If we change the relative order between pipe/planes enabling, we need > - * to change the workaround. */ > - hsw_workaround_pipe = new_crtc_state->hsw_workaround_pipe; > - if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != INVALID_PIPE) { > - struct intel_crtc *wa_crtc; > + /* If we change the relative order between pipe/planes enabling, we need > + * to change the workaround. */ > + hsw_workaround_pipe = new_crtc_state->hsw_workaround_pipe; > + if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != INVALID_PIPE) { > + struct intel_crtc *wa_crtc; > > - wa_crtc = intel_crtc_for_pipe(dev_priv, hsw_workaround_pipe); > + wa_crtc = intel_crtc_for_pipe(dev_priv, hsw_workaround_pipe); > > - intel_crtc_wait_for_next_vblank(wa_crtc); > - intel_crtc_wait_for_next_vblank(wa_crtc); > + intel_crtc_wait_for_next_vblank(wa_crtc); > + intel_crtc_wait_for_next_vblank(wa_crtc); > + } > } > } > > @@ -1784,28 +1820,27 @@ static void hsw_crtc_disable(struct intel_atomic_state *state, > const struct intel_crtc_state *old_crtc_state = > intel_atomic_get_old_crtc_state(state, crtc); > struct drm_i915_private *i915 = to_i915(crtc->base.dev); > + int slave_pipe_mask = intel_crtc_bigjoiner_slave_pipes(old_crtc_state); > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > + struct intel_crtc *_crtc; > + > + for_each_intel_crtc_in_pipe_mask(&i915->drm, _crtc, > + pipe_mask) { > + const struct intel_crtc_state *_old_crtc_state = > + intel_atomic_get_old_crtc_state(state, _crtc); > + bool needs_encoder_disable = (slave_pipe_mask & BIT(_crtc->pipe)) == 0; > + > + if (needs_encoder_disable) { > + intel_encoders_disable(state, _crtc); > + intel_encoders_post_disable(state, _crtc); > + } > > - /* > - * FIXME collapse everything to one hook. > - * Need care with mst->ddi interactions. > - */ > - if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) { > - intel_encoders_disable(state, crtc); > - intel_encoders_post_disable(state, crtc); > - } > - > - intel_disable_shared_dpll(old_crtc_state); > - > - if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) { > - struct intel_crtc *slave_crtc; > - > - intel_encoders_post_pll_disable(state, crtc); > + intel_disable_shared_dpll(_old_crtc_state); > > - intel_dmc_disable_pipe(i915, crtc->pipe); > + if (needs_encoder_disable) > + intel_encoders_post_pll_disable(state, _crtc); > > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > - intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) > - intel_dmc_disable_pipe(i915, slave_crtc->pipe); > + intel_dmc_disable_pipe(i915, _crtc->pipe); > } > } > > @@ -6788,8 +6823,10 @@ static void intel_commit_modeset_disables(struct intel_atomic_state *state) > * Slave vblanks are masked till Master Vblanks. > */ > if (!is_trans_port_sync_slave(old_crtc_state) && > - !intel_dp_mst_is_slave_trans(old_crtc_state) && > - !intel_crtc_is_bigjoiner_slave(old_crtc_state)) > + !intel_dp_mst_is_slave_trans(old_crtc_state)) > + continue; > + > + if (intel_crtc_is_bigjoiner_slave(old_crtc_state)) > continue; > > intel_old_crtc_state_disables(state, old_crtc_state, > @@ -6807,6 +6844,9 @@ static void intel_commit_modeset_disables(struct intel_atomic_state *state) > if (!old_crtc_state->hw.active) > continue; > > + if (intel_crtc_is_bigjoiner_slave(old_crtc_state)) > + continue; > + > intel_old_crtc_state_disables(state, old_crtc_state, > new_crtc_state, crtc); > } > @@ -6919,8 +6959,10 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state) > continue; > > if (intel_dp_mst_is_slave_trans(new_crtc_state) || > - is_trans_port_sync_master(new_crtc_state) || > - intel_crtc_is_bigjoiner_master(new_crtc_state)) > + is_trans_port_sync_master(new_crtc_state)) > + continue; > + > + if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > continue; > > modeset_pipes &= ~BIT(pipe); > @@ -6930,7 +6972,7 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state) > > /* > * Then we enable all remaining pipes that depend on other > - * pipes: MST slaves and port sync masters, big joiner master > + * pipes: MST slaves and port sync masters > */ > for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { > enum pipe pipe = crtc->pipe; > @@ -6938,6 +6980,9 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state) > if ((modeset_pipes & BIT(pipe)) == 0) > continue; > > + if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > + continue; > + > modeset_pipes &= ~BIT(pipe); We are modesetting all the joined pipes here. The bitmask should reflect that. > > intel_enable_crtc(state, crtc); > diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h > index f4a0773f0fca8..e1e8d956c305e 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.h > +++ b/drivers/gpu/drm/i915/display/intel_display.h > @@ -280,6 +280,12 @@ enum phy_fia { > base.head) \ > for_each_if((pipe_mask) & BIT(intel_crtc->pipe)) > > +#define for_each_intel_crtc_in_pipe_mask_reverse(dev, intel_crtc, pipe_mask) \ > + list_for_each_entry_reverse(intel_crtc, \ > + &(dev)->mode_config.crtc_list, \ > + base.head) \ > + for_each_if((pipe_mask) & BIT(intel_crtc->pipe)) > + > #define for_each_intel_encoder(dev, intel_encoder) \ > list_for_each_entry(intel_encoder, \ > &(dev)->mode_config.encoder_list, \ > -- > 2.37.3 -- Ville Syrjälä Intel ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner during modeset 2024-03-01 10:10 ` Ville Syrjälä @ 2024-03-01 10:27 ` Lisovskiy, Stanislav 2024-03-01 10:43 ` Ville Syrjälä 0 siblings, 1 reply; 34+ messages in thread From: Lisovskiy, Stanislav @ 2024-03-01 10:27 UTC (permalink / raw) To: Ville Syrjälä; +Cc: intel-gfx, jani.saarinen, vidya.srinivas On Fri, Mar 01, 2024 at 12:10:52PM +0200, Ville Syrjälä wrote: > On Wed, Feb 21, 2024 at 09:20:09PM +0200, Stanislav Lisovskiy wrote: > > Handle only bigjoiner masters in skl_commit_modeset_enables/disables, > > slave crtcs should be handled by master hooks. Same for encoders. > > That way we can also remove a bunch of checks like intel_crtc_is_bigjoiner_slave. > > > > v2: Get rid of master vs slave checks and separation in crtc enable/disable hooks. > > Use unified iteration cycle for all of those, while enabling/disabling > > transcoder only for those pipes where its needed(Ville Syrjälä) > > > > v3: Move all the intel_encoder_* calls under transcoder code path(Ville Syrjälä) > > > > v4: - Call intel_crtc_vblank_on from hsw_crtc_enable only for non-transcoder path > > (for master pipe that will be called from intel_encoders_enable/intel_enable_ddi) > > - Fix stupid mistake with using crtc->pipe for the mask, instead of BIT(crtc->pipe) > > > > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > > --- > > drivers/gpu/drm/i915/display/intel_ddi.c | 21 +-- > > drivers/gpu/drm/i915/display/intel_display.c | 183 ++++++++++++------- > > drivers/gpu/drm/i915/display/intel_display.h | 6 + > > 3 files changed, 121 insertions(+), 89 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c > > index bea4415902044..6071e9f500871 100644 > > --- a/drivers/gpu/drm/i915/display/intel_ddi.c > > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c > > @@ -3100,7 +3100,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, > > const struct drm_connector_state *old_conn_state) > > { > > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > > - struct intel_crtc *slave_crtc; > > > > if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST)) { > > intel_crtc_vblank_off(old_crtc_state); > > @@ -3117,17 +3116,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, > > ilk_pfit_disable(old_crtc_state); > > } > > The master pipe stuff is right here ^ ... > > > > > - for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, slave_crtc, > > - intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) { > > - const struct intel_crtc_state *old_slave_crtc_state = > > - intel_atomic_get_old_crtc_state(state, slave_crtc); > > - > > - intel_crtc_vblank_off(old_slave_crtc_state); > > - > > - intel_dsc_disable(old_slave_crtc_state); > > - skl_scaler_disable(old_slave_crtc_state); > > - } > > .. but now you're moving the slave pipe stuff somewhere else? > > We should be just iterating the pipes here (assuming this > is the correct spot to do these steps). > > > - > > /* > > * When called from DP MST code: > > * - old_conn_state will be NULL > > @@ -3363,8 +3351,7 @@ static void intel_enable_ddi(struct intel_atomic_state *state, > > { > > drm_WARN_ON(state->base.dev, crtc_state->has_pch_encoder); > > > > - if (!intel_crtc_is_bigjoiner_slave(crtc_state)) > > - intel_ddi_enable_transcoder_func(encoder, crtc_state); > > + intel_ddi_enable_transcoder_func(encoder, crtc_state); > > > > /* Enable/Disable DP2.0 SDP split config before transcoder */ > > intel_audio_sdp_split_update(crtc_state); > > @@ -3469,9 +3456,6 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state, > > struct intel_crtc *crtc) > > { > > struct drm_i915_private *i915 = to_i915(encoder->base.dev); > > - struct intel_crtc_state *crtc_state = > > - intel_atomic_get_new_crtc_state(state, crtc); > > - struct intel_crtc *slave_crtc; > > enum phy phy = intel_port_to_phy(i915, encoder->port); > > > > /* FIXME: Add MTL pll_mgr */ > > @@ -3479,9 +3463,6 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state, > > return; > > > > intel_update_active_dpll(state, crtc, encoder); > > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > > - intel_crtc_bigjoiner_slave_pipes(crtc_state)) > > - intel_update_active_dpll(state, slave_crtc, encoder); > > } > > > > static void > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > > index 916c13a149fd5..e1ea53fd6a288 100644 > > --- a/drivers/gpu/drm/i915/display/intel_display.c > > +++ b/drivers/gpu/drm/i915/display/intel_display.c > > @@ -1631,31 +1631,12 @@ static void hsw_configure_cpu_transcoder(const struct intel_crtc_state *crtc_sta > > hsw_set_transconf(crtc_state); > > } > > > > -static void hsw_crtc_enable(struct intel_atomic_state *state, > > - struct intel_crtc *crtc) > > +static void hsw_crtc_enable_pre_transcoder(struct intel_atomic_state *state, > > + struct intel_crtc *crtc) > > { > > const struct intel_crtc_state *new_crtc_state = > > intel_atomic_get_new_crtc_state(state, crtc); > > struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > - enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > - enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > - bool psl_clkgate_wa; > > - > > - if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > - return; > > - > > - intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > - > > - if (!new_crtc_state->bigjoiner_pipes) { > > - intel_encoders_pre_pll_enable(state, crtc); > > - > > - if (new_crtc_state->shared_dpll) > > - intel_enable_shared_dpll(new_crtc_state); > > - > > - intel_encoders_pre_enable(state, crtc); > > - } else { > > - icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > - } > > > > intel_dsc_enable(new_crtc_state); > > > > @@ -1665,19 +1646,17 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, > > intel_set_pipe_src_size(new_crtc_state); > > if (DISPLAY_VER(dev_priv) >= 9 || IS_BROADWELL(dev_priv)) > > bdw_set_pipe_misc(new_crtc_state); > > +} > > > > - if (!intel_crtc_is_bigjoiner_slave(new_crtc_state) && > > - !transcoder_is_dsi(cpu_transcoder)) > > - hsw_configure_cpu_transcoder(new_crtc_state); > > +static void hsw_crtc_enable_post_transcoder(struct intel_atomic_state *state, > > + struct intel_crtc *crtc) > > +{ > > + const struct intel_crtc_state *new_crtc_state = > > + intel_atomic_get_new_crtc_state(state, crtc); > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > crtc->active = true; > > > > - /* Display WA #1180: WaDisableScalarClockGating: glk */ > > - psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > > - new_crtc_state->pch_pfit.enabled; > > - if (psl_clkgate_wa) > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true); > > - > > if (DISPLAY_VER(dev_priv) >= 9) > > skl_pfit_enable(new_crtc_state); > > else > > @@ -1700,27 +1679,84 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, > > icl_set_pipe_chicken(new_crtc_state); > > > > intel_initial_watermarks(state, crtc); > > +} > > > > - if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > - intel_crtc_vblank_on(new_crtc_state); > > +static void hsw_crtc_enable(struct intel_atomic_state *state, > > + struct intel_crtc *crtc) > > +{ > > + const struct intel_crtc_state *new_crtc_state = > > + intel_atomic_get_new_crtc_state(state, crtc); > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > + enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > + struct intel_crtc *_crtc; > > + int slave_pipe_mask = intel_crtc_bigjoiner_slave_pipes(new_crtc_state); > > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > > + bool psl_clkgate_wa; > > + enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > > > - intel_encoders_enable(state, crtc); > > + if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > + return; > > > > - if (psl_clkgate_wa) { > > - intel_crtc_wait_for_next_vblank(crtc); > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false); > > - } > > + /* > > + * Use reverse iterator to go through slave pipes first. > > + * TODO: We might need smarter iterator here > > + */ > > + for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, _crtc, > > + pipe_mask) { > > + const struct intel_crtc_state *_new_crtc_state = > > + intel_atomic_get_new_crtc_state(state, _crtc); > > + bool needs_transcoder = ((slave_pipe_mask & BIT(_crtc->pipe)) == 0) && > > + !transcoder_is_dsi(cpu_transcoder); > > + > > + intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > + > > + if (!new_crtc_state->bigjoiner_pipes) { > > + if (needs_transcoder) > > + intel_encoders_pre_pll_enable(state, crtc); > > + > > + if (new_crtc_state->shared_dpll) > > + intel_enable_shared_dpll(new_crtc_state); > > + > > + if (needs_transcoder) > > + intel_encoders_pre_enable(state, crtc); > > + } else { > > + icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > + } > > That mess needs to be eliminated entirely. Yeah, was thinking about this too, was just a bit unsure how.. > > > + > > + hsw_crtc_enable_pre_transcoder(state, _crtc); > > + > > + if (needs_transcoder) > > + hsw_configure_cpu_transcoder(_new_crtc_state); > > These transcoder things should not be within any pipe loop at all. I didn't want to split the loop, which I would have to do otherwise, but may be it makes sense, since transcoder path is needed only for master pipe. However what if _hypothetically_ :) we would have more than one master pipe? > > > + > > + /* Display WA #1180: WaDisableScalarClockGating: glk */ > > + psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > > + new_crtc_state->pch_pfit.enabled; > > + if (psl_clkgate_wa) > > + glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true); > > + > > + hsw_crtc_enable_post_transcoder(state, _crtc); > > + > > + if (needs_transcoder) > > + intel_encoders_enable(state, crtc); > > + else > > + intel_crtc_vblank_on(_new_crtc_state); > > + > > + if (psl_clkgate_wa) { > > + intel_crtc_wait_for_next_vblank(crtc); > > + glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false); > > + } > > > > - /* If we change the relative order between pipe/planes enabling, we need > > - * to change the workaround. */ > > - hsw_workaround_pipe = new_crtc_state->hsw_workaround_pipe; > > - if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != INVALID_PIPE) { > > - struct intel_crtc *wa_crtc; > > + /* If we change the relative order between pipe/planes enabling, we need > > + * to change the workaround. */ > > + hsw_workaround_pipe = new_crtc_state->hsw_workaround_pipe; > > + if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != INVALID_PIPE) { > > + struct intel_crtc *wa_crtc; > > > > - wa_crtc = intel_crtc_for_pipe(dev_priv, hsw_workaround_pipe); > > + wa_crtc = intel_crtc_for_pipe(dev_priv, hsw_workaround_pipe); > > > > - intel_crtc_wait_for_next_vblank(wa_crtc); > > - intel_crtc_wait_for_next_vblank(wa_crtc); > > + intel_crtc_wait_for_next_vblank(wa_crtc); > > + intel_crtc_wait_for_next_vblank(wa_crtc); > > + } > > } > > } > > > > @@ -1784,28 +1820,27 @@ static void hsw_crtc_disable(struct intel_atomic_state *state, > > const struct intel_crtc_state *old_crtc_state = > > intel_atomic_get_old_crtc_state(state, crtc); > > struct drm_i915_private *i915 = to_i915(crtc->base.dev); > > + int slave_pipe_mask = intel_crtc_bigjoiner_slave_pipes(old_crtc_state); > > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > > + struct intel_crtc *_crtc; > > + > > + for_each_intel_crtc_in_pipe_mask(&i915->drm, _crtc, > > + pipe_mask) { > > + const struct intel_crtc_state *_old_crtc_state = > > + intel_atomic_get_old_crtc_state(state, _crtc); > > + bool needs_encoder_disable = (slave_pipe_mask & BIT(_crtc->pipe)) == 0; > > + > > + if (needs_encoder_disable) { > > + intel_encoders_disable(state, _crtc); > > + intel_encoders_post_disable(state, _crtc); > > + } > > > > - /* > > - * FIXME collapse everything to one hook. > > - * Need care with mst->ddi interactions. > > - */ > > - if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) { > > - intel_encoders_disable(state, crtc); > > - intel_encoders_post_disable(state, crtc); > > - } > > - > > - intel_disable_shared_dpll(old_crtc_state); > > - > > - if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) { > > - struct intel_crtc *slave_crtc; > > - > > - intel_encoders_post_pll_disable(state, crtc); > > + intel_disable_shared_dpll(_old_crtc_state); > > > > - intel_dmc_disable_pipe(i915, crtc->pipe); > > + if (needs_encoder_disable) > > + intel_encoders_post_pll_disable(state, _crtc); > > > > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > > - intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) > > - intel_dmc_disable_pipe(i915, slave_crtc->pipe); > > + intel_dmc_disable_pipe(i915, _crtc->pipe); > > } > > } > > > > @@ -6788,8 +6823,10 @@ static void intel_commit_modeset_disables(struct intel_atomic_state *state) > > * Slave vblanks are masked till Master Vblanks. > > */ > > if (!is_trans_port_sync_slave(old_crtc_state) && > > - !intel_dp_mst_is_slave_trans(old_crtc_state) && > > - !intel_crtc_is_bigjoiner_slave(old_crtc_state)) > > + !intel_dp_mst_is_slave_trans(old_crtc_state)) > > + continue; > > + > > + if (intel_crtc_is_bigjoiner_slave(old_crtc_state)) > > continue; > > > > intel_old_crtc_state_disables(state, old_crtc_state, > > @@ -6807,6 +6844,9 @@ static void intel_commit_modeset_disables(struct intel_atomic_state *state) > > if (!old_crtc_state->hw.active) > > continue; > > > > + if (intel_crtc_is_bigjoiner_slave(old_crtc_state)) > > + continue; > > + > > intel_old_crtc_state_disables(state, old_crtc_state, > > new_crtc_state, crtc); > > } > > @@ -6919,8 +6959,10 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state) > > continue; > > > > if (intel_dp_mst_is_slave_trans(new_crtc_state) || > > - is_trans_port_sync_master(new_crtc_state) || > > - intel_crtc_is_bigjoiner_master(new_crtc_state)) > > + is_trans_port_sync_master(new_crtc_state)) > > + continue; > > + > > + if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > continue; > > > > modeset_pipes &= ~BIT(pipe); > > @@ -6930,7 +6972,7 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state) > > > > /* > > * Then we enable all remaining pipes that depend on other > > - * pipes: MST slaves and port sync masters, big joiner master > > + * pipes: MST slaves and port sync masters > > */ > > for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { > > enum pipe pipe = crtc->pipe; > > @@ -6938,6 +6980,9 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state) > > if ((modeset_pipes & BIT(pipe)) == 0) > > continue; > > > > + if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > + continue; > > + > > modeset_pipes &= ~BIT(pipe); > > We are modesetting all the joined pipes here. The bitmask should reflect > that. Ohhh thanks for spotting. That might explain some issues we have atm. > > > > > intel_enable_crtc(state, crtc); > > diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h > > index f4a0773f0fca8..e1e8d956c305e 100644 > > --- a/drivers/gpu/drm/i915/display/intel_display.h > > +++ b/drivers/gpu/drm/i915/display/intel_display.h > > @@ -280,6 +280,12 @@ enum phy_fia { > > base.head) \ > > for_each_if((pipe_mask) & BIT(intel_crtc->pipe)) > > > > +#define for_each_intel_crtc_in_pipe_mask_reverse(dev, intel_crtc, pipe_mask) \ > > + list_for_each_entry_reverse(intel_crtc, \ > > + &(dev)->mode_config.crtc_list, \ > > + base.head) \ > > + for_each_if((pipe_mask) & BIT(intel_crtc->pipe)) > > + > > #define for_each_intel_encoder(dev, intel_encoder) \ > > list_for_each_entry(intel_encoder, \ > > &(dev)->mode_config.encoder_list, \ > > -- > > 2.37.3 > > -- > Ville Syrjälä > Intel ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner during modeset 2024-03-01 10:27 ` Lisovskiy, Stanislav @ 2024-03-01 10:43 ` Ville Syrjälä 2024-03-01 12:29 ` Lisovskiy, Stanislav 0 siblings, 1 reply; 34+ messages in thread From: Ville Syrjälä @ 2024-03-01 10:43 UTC (permalink / raw) To: Lisovskiy, Stanislav; +Cc: intel-gfx, jani.saarinen, vidya.srinivas On Fri, Mar 01, 2024 at 12:27:18PM +0200, Lisovskiy, Stanislav wrote: > On Fri, Mar 01, 2024 at 12:10:52PM +0200, Ville Syrjälä wrote: > > On Wed, Feb 21, 2024 at 09:20:09PM +0200, Stanislav Lisovskiy wrote: > > > Handle only bigjoiner masters in skl_commit_modeset_enables/disables, > > > slave crtcs should be handled by master hooks. Same for encoders. > > > That way we can also remove a bunch of checks like intel_crtc_is_bigjoiner_slave. > > > > > > v2: Get rid of master vs slave checks and separation in crtc enable/disable hooks. > > > Use unified iteration cycle for all of those, while enabling/disabling > > > transcoder only for those pipes where its needed(Ville Syrjälä) > > > > > > v3: Move all the intel_encoder_* calls under transcoder code path(Ville Syrjälä) > > > > > > v4: - Call intel_crtc_vblank_on from hsw_crtc_enable only for non-transcoder path > > > (for master pipe that will be called from intel_encoders_enable/intel_enable_ddi) > > > - Fix stupid mistake with using crtc->pipe for the mask, instead of BIT(crtc->pipe) > > > > > > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > > > --- > > > drivers/gpu/drm/i915/display/intel_ddi.c | 21 +-- > > > drivers/gpu/drm/i915/display/intel_display.c | 183 ++++++++++++------- > > > drivers/gpu/drm/i915/display/intel_display.h | 6 + > > > 3 files changed, 121 insertions(+), 89 deletions(-) > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c > > > index bea4415902044..6071e9f500871 100644 > > > --- a/drivers/gpu/drm/i915/display/intel_ddi.c > > > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c > > > @@ -3100,7 +3100,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, > > > const struct drm_connector_state *old_conn_state) > > > { > > > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > > > - struct intel_crtc *slave_crtc; > > > > > > if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST)) { > > > intel_crtc_vblank_off(old_crtc_state); > > > @@ -3117,17 +3116,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, > > > ilk_pfit_disable(old_crtc_state); > > > } > > > > The master pipe stuff is right here ^ ... > > > > > > > > - for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, slave_crtc, > > > - intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) { > > > - const struct intel_crtc_state *old_slave_crtc_state = > > > - intel_atomic_get_old_crtc_state(state, slave_crtc); > > > - > > > - intel_crtc_vblank_off(old_slave_crtc_state); > > > - > > > - intel_dsc_disable(old_slave_crtc_state); > > > - skl_scaler_disable(old_slave_crtc_state); > > > - } > > > > .. but now you're moving the slave pipe stuff somewhere else? > > > > We should be just iterating the pipes here (assuming this > > is the correct spot to do these steps). > > > > > - > > > /* > > > * When called from DP MST code: > > > * - old_conn_state will be NULL > > > @@ -3363,8 +3351,7 @@ static void intel_enable_ddi(struct intel_atomic_state *state, > > > { > > > drm_WARN_ON(state->base.dev, crtc_state->has_pch_encoder); > > > > > > - if (!intel_crtc_is_bigjoiner_slave(crtc_state)) > > > - intel_ddi_enable_transcoder_func(encoder, crtc_state); > > > + intel_ddi_enable_transcoder_func(encoder, crtc_state); > > > > > > /* Enable/Disable DP2.0 SDP split config before transcoder */ > > > intel_audio_sdp_split_update(crtc_state); > > > @@ -3469,9 +3456,6 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state, > > > struct intel_crtc *crtc) > > > { > > > struct drm_i915_private *i915 = to_i915(encoder->base.dev); > > > - struct intel_crtc_state *crtc_state = > > > - intel_atomic_get_new_crtc_state(state, crtc); > > > - struct intel_crtc *slave_crtc; > > > enum phy phy = intel_port_to_phy(i915, encoder->port); > > > > > > /* FIXME: Add MTL pll_mgr */ > > > @@ -3479,9 +3463,6 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state, > > > return; > > > > > > intel_update_active_dpll(state, crtc, encoder); > > > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > > > - intel_crtc_bigjoiner_slave_pipes(crtc_state)) > > > - intel_update_active_dpll(state, slave_crtc, encoder); > > > } > > > > > > static void > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > > > index 916c13a149fd5..e1ea53fd6a288 100644 > > > --- a/drivers/gpu/drm/i915/display/intel_display.c > > > +++ b/drivers/gpu/drm/i915/display/intel_display.c > > > @@ -1631,31 +1631,12 @@ static void hsw_configure_cpu_transcoder(const struct intel_crtc_state *crtc_sta > > > hsw_set_transconf(crtc_state); > > > } > > > > > > -static void hsw_crtc_enable(struct intel_atomic_state *state, > > > - struct intel_crtc *crtc) > > > +static void hsw_crtc_enable_pre_transcoder(struct intel_atomic_state *state, > > > + struct intel_crtc *crtc) > > > { > > > const struct intel_crtc_state *new_crtc_state = > > > intel_atomic_get_new_crtc_state(state, crtc); > > > struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > - enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > > - enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > > - bool psl_clkgate_wa; > > > - > > > - if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > > - return; > > > - > > > - intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > > - > > > - if (!new_crtc_state->bigjoiner_pipes) { > > > - intel_encoders_pre_pll_enable(state, crtc); > > > - > > > - if (new_crtc_state->shared_dpll) > > > - intel_enable_shared_dpll(new_crtc_state); > > > - > > > - intel_encoders_pre_enable(state, crtc); > > > - } else { > > > - icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > > - } > > > > > > intel_dsc_enable(new_crtc_state); > > > > > > @@ -1665,19 +1646,17 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, > > > intel_set_pipe_src_size(new_crtc_state); > > > if (DISPLAY_VER(dev_priv) >= 9 || IS_BROADWELL(dev_priv)) > > > bdw_set_pipe_misc(new_crtc_state); > > > +} > > > > > > - if (!intel_crtc_is_bigjoiner_slave(new_crtc_state) && > > > - !transcoder_is_dsi(cpu_transcoder)) > > > - hsw_configure_cpu_transcoder(new_crtc_state); > > > +static void hsw_crtc_enable_post_transcoder(struct intel_atomic_state *state, > > > + struct intel_crtc *crtc) > > > +{ > > > + const struct intel_crtc_state *new_crtc_state = > > > + intel_atomic_get_new_crtc_state(state, crtc); > > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > > > crtc->active = true; > > > > > > - /* Display WA #1180: WaDisableScalarClockGating: glk */ > > > - psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > > > - new_crtc_state->pch_pfit.enabled; > > > - if (psl_clkgate_wa) > > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true); > > > - > > > if (DISPLAY_VER(dev_priv) >= 9) > > > skl_pfit_enable(new_crtc_state); > > > else > > > @@ -1700,27 +1679,84 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, > > > icl_set_pipe_chicken(new_crtc_state); > > > > > > intel_initial_watermarks(state, crtc); > > > +} > > > > > > - if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > > - intel_crtc_vblank_on(new_crtc_state); > > > +static void hsw_crtc_enable(struct intel_atomic_state *state, > > > + struct intel_crtc *crtc) > > > +{ > > > + const struct intel_crtc_state *new_crtc_state = > > > + intel_atomic_get_new_crtc_state(state, crtc); > > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > + enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > > + struct intel_crtc *_crtc; > > > + int slave_pipe_mask = intel_crtc_bigjoiner_slave_pipes(new_crtc_state); > > > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > > > + bool psl_clkgate_wa; > > > + enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > > > > > - intel_encoders_enable(state, crtc); > > > + if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > > + return; > > > > > > - if (psl_clkgate_wa) { > > > - intel_crtc_wait_for_next_vblank(crtc); > > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false); > > > - } > > > + /* > > > + * Use reverse iterator to go through slave pipes first. > > > + * TODO: We might need smarter iterator here > > > + */ > > > + for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, _crtc, > > > + pipe_mask) { > > > + const struct intel_crtc_state *_new_crtc_state = > > > + intel_atomic_get_new_crtc_state(state, _crtc); > > > + bool needs_transcoder = ((slave_pipe_mask & BIT(_crtc->pipe)) == 0) && > > > + !transcoder_is_dsi(cpu_transcoder); > > > + > > > + intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > > + > > > + if (!new_crtc_state->bigjoiner_pipes) { > > > + if (needs_transcoder) > > > + intel_encoders_pre_pll_enable(state, crtc); > > > + > > > + if (new_crtc_state->shared_dpll) > > > + intel_enable_shared_dpll(new_crtc_state); > > > + > > > + if (needs_transcoder) > > > + intel_encoders_pre_enable(state, crtc); > > > + } else { > > > + icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > > + } > > > > That mess needs to be eliminated entirely. > > Yeah, was thinking about this too, was just a bit unsure how.. > > > > > > + > > > + hsw_crtc_enable_pre_transcoder(state, _crtc); > > > + > > > + if (needs_transcoder) > > > + hsw_configure_cpu_transcoder(_new_crtc_state); > > > > These transcoder things should not be within any pipe loop at all. > > I didn't want to split the loop, which I would have to do otherwise, > but may be it makes sense, since transcoder path is needed only for master > pipe. However what if _hypothetically_ :) we would have more than one master > pipe? Doesn't matter how many pipes there are. There is always just one transcoder. > > > > > > + > > > + /* Display WA #1180: WaDisableScalarClockGating: glk */ > > > + psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > > > + new_crtc_state->pch_pfit.enabled; > > > + if (psl_clkgate_wa) > > > + glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true); > > > + > > > + hsw_crtc_enable_post_transcoder(state, _crtc); > > > + > > > + if (needs_transcoder) > > > + intel_encoders_enable(state, crtc); > > > + else > > > + intel_crtc_vblank_on(_new_crtc_state); > > > + > > > + if (psl_clkgate_wa) { > > > + intel_crtc_wait_for_next_vblank(crtc); > > > + glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false); > > > + } > > > > > > - /* If we change the relative order between pipe/planes enabling, we need > > > - * to change the workaround. */ > > > - hsw_workaround_pipe = new_crtc_state->hsw_workaround_pipe; > > > - if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != INVALID_PIPE) { > > > - struct intel_crtc *wa_crtc; > > > + /* If we change the relative order between pipe/planes enabling, we need > > > + * to change the workaround. */ > > > + hsw_workaround_pipe = new_crtc_state->hsw_workaround_pipe; > > > + if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != INVALID_PIPE) { > > > + struct intel_crtc *wa_crtc; > > > > > > - wa_crtc = intel_crtc_for_pipe(dev_priv, hsw_workaround_pipe); > > > + wa_crtc = intel_crtc_for_pipe(dev_priv, hsw_workaround_pipe); > > > > > > - intel_crtc_wait_for_next_vblank(wa_crtc); > > > - intel_crtc_wait_for_next_vblank(wa_crtc); > > > + intel_crtc_wait_for_next_vblank(wa_crtc); > > > + intel_crtc_wait_for_next_vblank(wa_crtc); > > > + } > > > } > > > } > > > > > > @@ -1784,28 +1820,27 @@ static void hsw_crtc_disable(struct intel_atomic_state *state, > > > const struct intel_crtc_state *old_crtc_state = > > > intel_atomic_get_old_crtc_state(state, crtc); > > > struct drm_i915_private *i915 = to_i915(crtc->base.dev); > > > + int slave_pipe_mask = intel_crtc_bigjoiner_slave_pipes(old_crtc_state); > > > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > > > + struct intel_crtc *_crtc; > > > + > > > + for_each_intel_crtc_in_pipe_mask(&i915->drm, _crtc, > > > + pipe_mask) { > > > + const struct intel_crtc_state *_old_crtc_state = > > > + intel_atomic_get_old_crtc_state(state, _crtc); > > > + bool needs_encoder_disable = (slave_pipe_mask & BIT(_crtc->pipe)) == 0; > > > + > > > + if (needs_encoder_disable) { > > > + intel_encoders_disable(state, _crtc); > > > + intel_encoders_post_disable(state, _crtc); > > > + } > > > > > > - /* > > > - * FIXME collapse everything to one hook. > > > - * Need care with mst->ddi interactions. > > > - */ > > > - if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) { > > > - intel_encoders_disable(state, crtc); > > > - intel_encoders_post_disable(state, crtc); > > > - } > > > - > > > - intel_disable_shared_dpll(old_crtc_state); > > > - > > > - if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) { > > > - struct intel_crtc *slave_crtc; > > > - > > > - intel_encoders_post_pll_disable(state, crtc); > > > + intel_disable_shared_dpll(_old_crtc_state); > > > > > > - intel_dmc_disable_pipe(i915, crtc->pipe); > > > + if (needs_encoder_disable) > > > + intel_encoders_post_pll_disable(state, _crtc); > > > > > > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > > > - intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) > > > - intel_dmc_disable_pipe(i915, slave_crtc->pipe); > > > + intel_dmc_disable_pipe(i915, _crtc->pipe); > > > } > > > } > > > > > > @@ -6788,8 +6823,10 @@ static void intel_commit_modeset_disables(struct intel_atomic_state *state) > > > * Slave vblanks are masked till Master Vblanks. > > > */ > > > if (!is_trans_port_sync_slave(old_crtc_state) && > > > - !intel_dp_mst_is_slave_trans(old_crtc_state) && > > > - !intel_crtc_is_bigjoiner_slave(old_crtc_state)) > > > + !intel_dp_mst_is_slave_trans(old_crtc_state)) > > > + continue; > > > + > > > + if (intel_crtc_is_bigjoiner_slave(old_crtc_state)) > > > continue; > > > > > > intel_old_crtc_state_disables(state, old_crtc_state, > > > @@ -6807,6 +6844,9 @@ static void intel_commit_modeset_disables(struct intel_atomic_state *state) > > > if (!old_crtc_state->hw.active) > > > continue; > > > > > > + if (intel_crtc_is_bigjoiner_slave(old_crtc_state)) > > > + continue; > > > + > > > intel_old_crtc_state_disables(state, old_crtc_state, > > > new_crtc_state, crtc); > > > } > > > @@ -6919,8 +6959,10 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state) > > > continue; > > > > > > if (intel_dp_mst_is_slave_trans(new_crtc_state) || > > > - is_trans_port_sync_master(new_crtc_state) || > > > - intel_crtc_is_bigjoiner_master(new_crtc_state)) > > > + is_trans_port_sync_master(new_crtc_state)) > > > + continue; > > > + > > > + if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > > continue; > > > > > > modeset_pipes &= ~BIT(pipe); > > > @@ -6930,7 +6972,7 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state) > > > > > > /* > > > * Then we enable all remaining pipes that depend on other > > > - * pipes: MST slaves and port sync masters, big joiner master > > > + * pipes: MST slaves and port sync masters > > > */ > > > for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { > > > enum pipe pipe = crtc->pipe; > > > @@ -6938,6 +6980,9 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state) > > > if ((modeset_pipes & BIT(pipe)) == 0) > > > continue; > > > > > > + if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > > + continue; > > > + > > > modeset_pipes &= ~BIT(pipe); > > > > We are modesetting all the joined pipes here. The bitmask should reflect > > that. > > Ohhh thanks for spotting. That might explain some issues we have atm. > > > > > > > > > intel_enable_crtc(state, crtc); > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h > > > index f4a0773f0fca8..e1e8d956c305e 100644 > > > --- a/drivers/gpu/drm/i915/display/intel_display.h > > > +++ b/drivers/gpu/drm/i915/display/intel_display.h > > > @@ -280,6 +280,12 @@ enum phy_fia { > > > base.head) \ > > > for_each_if((pipe_mask) & BIT(intel_crtc->pipe)) > > > > > > +#define for_each_intel_crtc_in_pipe_mask_reverse(dev, intel_crtc, pipe_mask) \ > > > + list_for_each_entry_reverse(intel_crtc, \ > > > + &(dev)->mode_config.crtc_list, \ > > > + base.head) \ > > > + for_each_if((pipe_mask) & BIT(intel_crtc->pipe)) > > > + > > > #define for_each_intel_encoder(dev, intel_encoder) \ > > > list_for_each_entry(intel_encoder, \ > > > &(dev)->mode_config.encoder_list, \ > > > -- > > > 2.37.3 > > > > -- > > Ville Syrjälä > > Intel -- Ville Syrjälä Intel ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner during modeset 2024-03-01 10:43 ` Ville Syrjälä @ 2024-03-01 12:29 ` Lisovskiy, Stanislav 2024-03-01 14:40 ` Ville Syrjälä 0 siblings, 1 reply; 34+ messages in thread From: Lisovskiy, Stanislav @ 2024-03-01 12:29 UTC (permalink / raw) To: Ville Syrjälä; +Cc: intel-gfx, jani.saarinen, vidya.srinivas On Fri, Mar 01, 2024 at 12:43:46PM +0200, Ville Syrjälä wrote: > On Fri, Mar 01, 2024 at 12:27:18PM +0200, Lisovskiy, Stanislav wrote: > > On Fri, Mar 01, 2024 at 12:10:52PM +0200, Ville Syrjälä wrote: > > > On Wed, Feb 21, 2024 at 09:20:09PM +0200, Stanislav Lisovskiy wrote: > > > > Handle only bigjoiner masters in skl_commit_modeset_enables/disables, > > > > slave crtcs should be handled by master hooks. Same for encoders. > > > > That way we can also remove a bunch of checks like intel_crtc_is_bigjoiner_slave. > > > > > > > > v2: Get rid of master vs slave checks and separation in crtc enable/disable hooks. > > > > Use unified iteration cycle for all of those, while enabling/disabling > > > > transcoder only for those pipes where its needed(Ville Syrjälä) > > > > > > > > v3: Move all the intel_encoder_* calls under transcoder code path(Ville Syrjälä) > > > > > > > > v4: - Call intel_crtc_vblank_on from hsw_crtc_enable only for non-transcoder path > > > > (for master pipe that will be called from intel_encoders_enable/intel_enable_ddi) > > > > - Fix stupid mistake with using crtc->pipe for the mask, instead of BIT(crtc->pipe) > > > > > > > > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > > > > --- > > > > drivers/gpu/drm/i915/display/intel_ddi.c | 21 +-- > > > > drivers/gpu/drm/i915/display/intel_display.c | 183 ++++++++++++------- > > > > drivers/gpu/drm/i915/display/intel_display.h | 6 + > > > > 3 files changed, 121 insertions(+), 89 deletions(-) > > > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c > > > > index bea4415902044..6071e9f500871 100644 > > > > --- a/drivers/gpu/drm/i915/display/intel_ddi.c > > > > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c > > > > @@ -3100,7 +3100,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, > > > > const struct drm_connector_state *old_conn_state) > > > > { > > > > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > > > > - struct intel_crtc *slave_crtc; > > > > > > > > if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST)) { > > > > intel_crtc_vblank_off(old_crtc_state); > > > > @@ -3117,17 +3116,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, > > > > ilk_pfit_disable(old_crtc_state); > > > > } > > > > > > The master pipe stuff is right here ^ ... > > > > > > > > > > > - for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, slave_crtc, > > > > - intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) { > > > > - const struct intel_crtc_state *old_slave_crtc_state = > > > > - intel_atomic_get_old_crtc_state(state, slave_crtc); > > > > - > > > > - intel_crtc_vblank_off(old_slave_crtc_state); > > > > - > > > > - intel_dsc_disable(old_slave_crtc_state); > > > > - skl_scaler_disable(old_slave_crtc_state); > > > > - } > > > > > > .. but now you're moving the slave pipe stuff somewhere else? > > > > > > We should be just iterating the pipes here (assuming this > > > is the correct spot to do these steps). > > > > > > > - > > > > /* > > > > * When called from DP MST code: > > > > * - old_conn_state will be NULL > > > > @@ -3363,8 +3351,7 @@ static void intel_enable_ddi(struct intel_atomic_state *state, > > > > { > > > > drm_WARN_ON(state->base.dev, crtc_state->has_pch_encoder); > > > > > > > > - if (!intel_crtc_is_bigjoiner_slave(crtc_state)) > > > > - intel_ddi_enable_transcoder_func(encoder, crtc_state); > > > > + intel_ddi_enable_transcoder_func(encoder, crtc_state); > > > > > > > > /* Enable/Disable DP2.0 SDP split config before transcoder */ > > > > intel_audio_sdp_split_update(crtc_state); > > > > @@ -3469,9 +3456,6 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state, > > > > struct intel_crtc *crtc) > > > > { > > > > struct drm_i915_private *i915 = to_i915(encoder->base.dev); > > > > - struct intel_crtc_state *crtc_state = > > > > - intel_atomic_get_new_crtc_state(state, crtc); > > > > - struct intel_crtc *slave_crtc; > > > > enum phy phy = intel_port_to_phy(i915, encoder->port); > > > > > > > > /* FIXME: Add MTL pll_mgr */ > > > > @@ -3479,9 +3463,6 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state, > > > > return; > > > > > > > > intel_update_active_dpll(state, crtc, encoder); > > > > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > > > > - intel_crtc_bigjoiner_slave_pipes(crtc_state)) > > > > - intel_update_active_dpll(state, slave_crtc, encoder); > > > > } > > > > > > > > static void > > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > > > > index 916c13a149fd5..e1ea53fd6a288 100644 > > > > --- a/drivers/gpu/drm/i915/display/intel_display.c > > > > +++ b/drivers/gpu/drm/i915/display/intel_display.c > > > > @@ -1631,31 +1631,12 @@ static void hsw_configure_cpu_transcoder(const struct intel_crtc_state *crtc_sta > > > > hsw_set_transconf(crtc_state); > > > > } > > > > > > > > -static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > - struct intel_crtc *crtc) > > > > +static void hsw_crtc_enable_pre_transcoder(struct intel_atomic_state *state, > > > > + struct intel_crtc *crtc) > > > > { > > > > const struct intel_crtc_state *new_crtc_state = > > > > intel_atomic_get_new_crtc_state(state, crtc); > > > > struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > - enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > > > - enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > > > - bool psl_clkgate_wa; > > > > - > > > > - if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > > > - return; > > > > - > > > > - intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > > > - > > > > - if (!new_crtc_state->bigjoiner_pipes) { > > > > - intel_encoders_pre_pll_enable(state, crtc); > > > > - > > > > - if (new_crtc_state->shared_dpll) > > > > - intel_enable_shared_dpll(new_crtc_state); > > > > - > > > > - intel_encoders_pre_enable(state, crtc); > > > > - } else { > > > > - icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > > > - } > > > > > > > > intel_dsc_enable(new_crtc_state); > > > > > > > > @@ -1665,19 +1646,17 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > intel_set_pipe_src_size(new_crtc_state); > > > > if (DISPLAY_VER(dev_priv) >= 9 || IS_BROADWELL(dev_priv)) > > > > bdw_set_pipe_misc(new_crtc_state); > > > > +} > > > > > > > > - if (!intel_crtc_is_bigjoiner_slave(new_crtc_state) && > > > > - !transcoder_is_dsi(cpu_transcoder)) > > > > - hsw_configure_cpu_transcoder(new_crtc_state); > > > > +static void hsw_crtc_enable_post_transcoder(struct intel_atomic_state *state, > > > > + struct intel_crtc *crtc) > > > > +{ > > > > + const struct intel_crtc_state *new_crtc_state = > > > > + intel_atomic_get_new_crtc_state(state, crtc); > > > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > > > > > crtc->active = true; > > > > > > > > - /* Display WA #1180: WaDisableScalarClockGating: glk */ > > > > - psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > > > > - new_crtc_state->pch_pfit.enabled; > > > > - if (psl_clkgate_wa) > > > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true); > > > > - > > > > if (DISPLAY_VER(dev_priv) >= 9) > > > > skl_pfit_enable(new_crtc_state); > > > > else > > > > @@ -1700,27 +1679,84 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > icl_set_pipe_chicken(new_crtc_state); > > > > > > > > intel_initial_watermarks(state, crtc); > > > > +} > > > > > > > > - if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > > > - intel_crtc_vblank_on(new_crtc_state); > > > > +static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > + struct intel_crtc *crtc) > > > > +{ > > > > + const struct intel_crtc_state *new_crtc_state = > > > > + intel_atomic_get_new_crtc_state(state, crtc); > > > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > + enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > > > + struct intel_crtc *_crtc; > > > > + int slave_pipe_mask = intel_crtc_bigjoiner_slave_pipes(new_crtc_state); > > > > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > > > > + bool psl_clkgate_wa; > > > > + enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > > > > > > > - intel_encoders_enable(state, crtc); > > > > + if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > > > + return; > > > > > > > > - if (psl_clkgate_wa) { > > > > - intel_crtc_wait_for_next_vblank(crtc); > > > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false); > > > > - } > > > > + /* > > > > + * Use reverse iterator to go through slave pipes first. > > > > + * TODO: We might need smarter iterator here > > > > + */ > > > > + for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, _crtc, > > > > + pipe_mask) { > > > > + const struct intel_crtc_state *_new_crtc_state = > > > > + intel_atomic_get_new_crtc_state(state, _crtc); > > > > + bool needs_transcoder = ((slave_pipe_mask & BIT(_crtc->pipe)) == 0) && > > > > + !transcoder_is_dsi(cpu_transcoder); > > > > + > > > > + intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > > > + > > > > + if (!new_crtc_state->bigjoiner_pipes) { > > > > + if (needs_transcoder) > > > > + intel_encoders_pre_pll_enable(state, crtc); > > > > + > > > > + if (new_crtc_state->shared_dpll) > > > > + intel_enable_shared_dpll(new_crtc_state); > > > > + > > > > + if (needs_transcoder) > > > > + intel_encoders_pre_enable(state, crtc); > > > > + } else { > > > > + icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > > > + } > > > > > > That mess needs to be eliminated entirely. > > > > Yeah, was thinking about this too, was just a bit unsure how.. > > > > > > > > > + > > > > + hsw_crtc_enable_pre_transcoder(state, _crtc); > > > > + > > > > + if (needs_transcoder) > > > > + hsw_configure_cpu_transcoder(_new_crtc_state); > > > > > > These transcoder things should not be within any pipe loop at all. > > > > I didn't want to split the loop, which I would have to do otherwise, > > but may be it makes sense, since transcoder path is needed only for master > > pipe. However what if _hypothetically_ :) we would have more than one master > > pipe? > > Doesn't matter how many pipes there are. There is always just one > transcoder. How I see it now, the sequence for example for master hsw_crtc_enable is: pipe1 stuff before transcoder (transcoder programming not needed) pipe1 stuff after transcoder pipe0 stuff before transcoder transcoder programmed pipe0 stuff after transcoder if we want to have a single unified loop for all pipes, I guess we have to have a transcoder check inside a loop, because we cant do the "pipe0 stuff after transcoder" thing, before the transcoder is programmed. I could of course split it this way: for (...) pipe stuff before transcoder transcoder programmed for (...) pipe stuff after transcoder but then the sequence still will be different from original, it will look like: pipe1 stuff before transcoder pipe0 stuff before transcoder transcoder programmed pipe1 stuff after transcoder pipe0 stuff after transcoder which is different from original sequence, because we in fact want that: program pipe1(slave) program pipe0 stuff before transcoder(master) program transcoder program pipe0 stuff after transcoder(master) So do you think that splitting won't harm or you see some other way to do that? Stan > > > > > > > > > > + > > > > + /* Display WA #1180: WaDisableScalarClockGating: glk */ > > > > + psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > > > > + new_crtc_state->pch_pfit.enabled; > > > > + if (psl_clkgate_wa) > > > > + glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true); > > > > + > > > > + hsw_crtc_enable_post_transcoder(state, _crtc); > > > > + > > > > + if (needs_transcoder) > > > > + intel_encoders_enable(state, crtc); > > > > + else > > > > + intel_crtc_vblank_on(_new_crtc_state); > > > > + > > > > + if (psl_clkgate_wa) { > > > > + intel_crtc_wait_for_next_vblank(crtc); > > > > + glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false); > > > > + } > > > > > > > > - /* If we change the relative order between pipe/planes enabling, we need > > > > - * to change the workaround. */ > > > > - hsw_workaround_pipe = new_crtc_state->hsw_workaround_pipe; > > > > - if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != INVALID_PIPE) { > > > > - struct intel_crtc *wa_crtc; > > > > + /* If we change the relative order between pipe/planes enabling, we need > > > > + * to change the workaround. */ > > > > + hsw_workaround_pipe = new_crtc_state->hsw_workaround_pipe; > > > > + if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != INVALID_PIPE) { > > > > + struct intel_crtc *wa_crtc; > > > > > > > > - wa_crtc = intel_crtc_for_pipe(dev_priv, hsw_workaround_pipe); > > > > + wa_crtc = intel_crtc_for_pipe(dev_priv, hsw_workaround_pipe); > > > > > > > > - intel_crtc_wait_for_next_vblank(wa_crtc); > > > > - intel_crtc_wait_for_next_vblank(wa_crtc); > > > > + intel_crtc_wait_for_next_vblank(wa_crtc); > > > > + intel_crtc_wait_for_next_vblank(wa_crtc); > > > > + } > > > > } > > > > } > > > > > > > > @@ -1784,28 +1820,27 @@ static void hsw_crtc_disable(struct intel_atomic_state *state, > > > > const struct intel_crtc_state *old_crtc_state = > > > > intel_atomic_get_old_crtc_state(state, crtc); > > > > struct drm_i915_private *i915 = to_i915(crtc->base.dev); > > > > + int slave_pipe_mask = intel_crtc_bigjoiner_slave_pipes(old_crtc_state); > > > > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > > > > + struct intel_crtc *_crtc; > > > > + > > > > + for_each_intel_crtc_in_pipe_mask(&i915->drm, _crtc, > > > > + pipe_mask) { > > > > + const struct intel_crtc_state *_old_crtc_state = > > > > + intel_atomic_get_old_crtc_state(state, _crtc); > > > > + bool needs_encoder_disable = (slave_pipe_mask & BIT(_crtc->pipe)) == 0; > > > > + > > > > + if (needs_encoder_disable) { > > > > + intel_encoders_disable(state, _crtc); > > > > + intel_encoders_post_disable(state, _crtc); > > > > + } > > > > > > > > - /* > > > > - * FIXME collapse everything to one hook. > > > > - * Need care with mst->ddi interactions. > > > > - */ > > > > - if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) { > > > > - intel_encoders_disable(state, crtc); > > > > - intel_encoders_post_disable(state, crtc); > > > > - } > > > > - > > > > - intel_disable_shared_dpll(old_crtc_state); > > > > - > > > > - if (!intel_crtc_is_bigjoiner_slave(old_crtc_state)) { > > > > - struct intel_crtc *slave_crtc; > > > > - > > > > - intel_encoders_post_pll_disable(state, crtc); > > > > + intel_disable_shared_dpll(_old_crtc_state); > > > > > > > > - intel_dmc_disable_pipe(i915, crtc->pipe); > > > > + if (needs_encoder_disable) > > > > + intel_encoders_post_pll_disable(state, _crtc); > > > > > > > > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > > > > - intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) > > > > - intel_dmc_disable_pipe(i915, slave_crtc->pipe); > > > > + intel_dmc_disable_pipe(i915, _crtc->pipe); > > > > } > > > > } > > > > > > > > @@ -6788,8 +6823,10 @@ static void intel_commit_modeset_disables(struct intel_atomic_state *state) > > > > * Slave vblanks are masked till Master Vblanks. > > > > */ > > > > if (!is_trans_port_sync_slave(old_crtc_state) && > > > > - !intel_dp_mst_is_slave_trans(old_crtc_state) && > > > > - !intel_crtc_is_bigjoiner_slave(old_crtc_state)) > > > > + !intel_dp_mst_is_slave_trans(old_crtc_state)) > > > > + continue; > > > > + > > > > + if (intel_crtc_is_bigjoiner_slave(old_crtc_state)) > > > > continue; > > > > > > > > intel_old_crtc_state_disables(state, old_crtc_state, > > > > @@ -6807,6 +6844,9 @@ static void intel_commit_modeset_disables(struct intel_atomic_state *state) > > > > if (!old_crtc_state->hw.active) > > > > continue; > > > > > > > > + if (intel_crtc_is_bigjoiner_slave(old_crtc_state)) > > > > + continue; > > > > + > > > > intel_old_crtc_state_disables(state, old_crtc_state, > > > > new_crtc_state, crtc); > > > > } > > > > @@ -6919,8 +6959,10 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state) > > > > continue; > > > > > > > > if (intel_dp_mst_is_slave_trans(new_crtc_state) || > > > > - is_trans_port_sync_master(new_crtc_state) || > > > > - intel_crtc_is_bigjoiner_master(new_crtc_state)) > > > > + is_trans_port_sync_master(new_crtc_state)) > > > > + continue; > > > > + > > > > + if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > > > continue; > > > > > > > > modeset_pipes &= ~BIT(pipe); > > > > @@ -6930,7 +6972,7 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state) > > > > > > > > /* > > > > * Then we enable all remaining pipes that depend on other > > > > - * pipes: MST slaves and port sync masters, big joiner master > > > > + * pipes: MST slaves and port sync masters > > > > */ > > > > for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { > > > > enum pipe pipe = crtc->pipe; > > > > @@ -6938,6 +6980,9 @@ static void skl_commit_modeset_enables(struct intel_atomic_state *state) > > > > if ((modeset_pipes & BIT(pipe)) == 0) > > > > continue; > > > > > > > > + if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > > > + continue; > > > > + > > > > modeset_pipes &= ~BIT(pipe); > > > > > > We are modesetting all the joined pipes here. The bitmask should reflect > > > that. > > > > Ohhh thanks for spotting. That might explain some issues we have atm. > > > > > > > > > > > > > intel_enable_crtc(state, crtc); > > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h > > > > index f4a0773f0fca8..e1e8d956c305e 100644 > > > > --- a/drivers/gpu/drm/i915/display/intel_display.h > > > > +++ b/drivers/gpu/drm/i915/display/intel_display.h > > > > @@ -280,6 +280,12 @@ enum phy_fia { > > > > base.head) \ > > > > for_each_if((pipe_mask) & BIT(intel_crtc->pipe)) > > > > > > > > +#define for_each_intel_crtc_in_pipe_mask_reverse(dev, intel_crtc, pipe_mask) \ > > > > + list_for_each_entry_reverse(intel_crtc, \ > > > > + &(dev)->mode_config.crtc_list, \ > > > > + base.head) \ > > > > + for_each_if((pipe_mask) & BIT(intel_crtc->pipe)) > > > > + > > > > #define for_each_intel_encoder(dev, intel_encoder) \ > > > > list_for_each_entry(intel_encoder, \ > > > > &(dev)->mode_config.encoder_list, \ > > > > -- > > > > 2.37.3 > > > > > > -- > > > Ville Syrjälä > > > Intel > > -- > Ville Syrjälä > Intel ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner during modeset 2024-03-01 12:29 ` Lisovskiy, Stanislav @ 2024-03-01 14:40 ` Ville Syrjälä 2024-03-01 15:17 ` Lisovskiy, Stanislav 0 siblings, 1 reply; 34+ messages in thread From: Ville Syrjälä @ 2024-03-01 14:40 UTC (permalink / raw) To: Lisovskiy, Stanislav; +Cc: intel-gfx, jani.saarinen, vidya.srinivas On Fri, Mar 01, 2024 at 02:29:28PM +0200, Lisovskiy, Stanislav wrote: > On Fri, Mar 01, 2024 at 12:43:46PM +0200, Ville Syrjälä wrote: > > On Fri, Mar 01, 2024 at 12:27:18PM +0200, Lisovskiy, Stanislav wrote: > > > On Fri, Mar 01, 2024 at 12:10:52PM +0200, Ville Syrjälä wrote: > > > > On Wed, Feb 21, 2024 at 09:20:09PM +0200, Stanislav Lisovskiy wrote: > > > > > Handle only bigjoiner masters in skl_commit_modeset_enables/disables, > > > > > slave crtcs should be handled by master hooks. Same for encoders. > > > > > That way we can also remove a bunch of checks like intel_crtc_is_bigjoiner_slave. > > > > > > > > > > v2: Get rid of master vs slave checks and separation in crtc enable/disable hooks. > > > > > Use unified iteration cycle for all of those, while enabling/disabling > > > > > transcoder only for those pipes where its needed(Ville Syrjälä) > > > > > > > > > > v3: Move all the intel_encoder_* calls under transcoder code path(Ville Syrjälä) > > > > > > > > > > v4: - Call intel_crtc_vblank_on from hsw_crtc_enable only for non-transcoder path > > > > > (for master pipe that will be called from intel_encoders_enable/intel_enable_ddi) > > > > > - Fix stupid mistake with using crtc->pipe for the mask, instead of BIT(crtc->pipe) > > > > > > > > > > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > > > > > --- > > > > > drivers/gpu/drm/i915/display/intel_ddi.c | 21 +-- > > > > > drivers/gpu/drm/i915/display/intel_display.c | 183 ++++++++++++------- > > > > > drivers/gpu/drm/i915/display/intel_display.h | 6 + > > > > > 3 files changed, 121 insertions(+), 89 deletions(-) > > > > > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c > > > > > index bea4415902044..6071e9f500871 100644 > > > > > --- a/drivers/gpu/drm/i915/display/intel_ddi.c > > > > > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c > > > > > @@ -3100,7 +3100,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, > > > > > const struct drm_connector_state *old_conn_state) > > > > > { > > > > > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > > > > > - struct intel_crtc *slave_crtc; > > > > > > > > > > if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST)) { > > > > > intel_crtc_vblank_off(old_crtc_state); > > > > > @@ -3117,17 +3116,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, > > > > > ilk_pfit_disable(old_crtc_state); > > > > > } > > > > > > > > The master pipe stuff is right here ^ ... > > > > > > > > > > > > > > - for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, slave_crtc, > > > > > - intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) { > > > > > - const struct intel_crtc_state *old_slave_crtc_state = > > > > > - intel_atomic_get_old_crtc_state(state, slave_crtc); > > > > > - > > > > > - intel_crtc_vblank_off(old_slave_crtc_state); > > > > > - > > > > > - intel_dsc_disable(old_slave_crtc_state); > > > > > - skl_scaler_disable(old_slave_crtc_state); > > > > > - } > > > > > > > > .. but now you're moving the slave pipe stuff somewhere else? > > > > > > > > We should be just iterating the pipes here (assuming this > > > > is the correct spot to do these steps). > > > > > > > > > - > > > > > /* > > > > > * When called from DP MST code: > > > > > * - old_conn_state will be NULL > > > > > @@ -3363,8 +3351,7 @@ static void intel_enable_ddi(struct intel_atomic_state *state, > > > > > { > > > > > drm_WARN_ON(state->base.dev, crtc_state->has_pch_encoder); > > > > > > > > > > - if (!intel_crtc_is_bigjoiner_slave(crtc_state)) > > > > > - intel_ddi_enable_transcoder_func(encoder, crtc_state); > > > > > + intel_ddi_enable_transcoder_func(encoder, crtc_state); > > > > > > > > > > /* Enable/Disable DP2.0 SDP split config before transcoder */ > > > > > intel_audio_sdp_split_update(crtc_state); > > > > > @@ -3469,9 +3456,6 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state, > > > > > struct intel_crtc *crtc) > > > > > { > > > > > struct drm_i915_private *i915 = to_i915(encoder->base.dev); > > > > > - struct intel_crtc_state *crtc_state = > > > > > - intel_atomic_get_new_crtc_state(state, crtc); > > > > > - struct intel_crtc *slave_crtc; > > > > > enum phy phy = intel_port_to_phy(i915, encoder->port); > > > > > > > > > > /* FIXME: Add MTL pll_mgr */ > > > > > @@ -3479,9 +3463,6 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state, > > > > > return; > > > > > > > > > > intel_update_active_dpll(state, crtc, encoder); > > > > > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > > > > > - intel_crtc_bigjoiner_slave_pipes(crtc_state)) > > > > > - intel_update_active_dpll(state, slave_crtc, encoder); > > > > > } > > > > > > > > > > static void > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > > > > > index 916c13a149fd5..e1ea53fd6a288 100644 > > > > > --- a/drivers/gpu/drm/i915/display/intel_display.c > > > > > +++ b/drivers/gpu/drm/i915/display/intel_display.c > > > > > @@ -1631,31 +1631,12 @@ static void hsw_configure_cpu_transcoder(const struct intel_crtc_state *crtc_sta > > > > > hsw_set_transconf(crtc_state); > > > > > } > > > > > > > > > > -static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > > - struct intel_crtc *crtc) > > > > > +static void hsw_crtc_enable_pre_transcoder(struct intel_atomic_state *state, > > > > > + struct intel_crtc *crtc) > > > > > { > > > > > const struct intel_crtc_state *new_crtc_state = > > > > > intel_atomic_get_new_crtc_state(state, crtc); > > > > > struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > > - enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > > > > - enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > > > > - bool psl_clkgate_wa; > > > > > - > > > > > - if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > > > > - return; > > > > > - > > > > > - intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > > > > - > > > > > - if (!new_crtc_state->bigjoiner_pipes) { > > > > > - intel_encoders_pre_pll_enable(state, crtc); > > > > > - > > > > > - if (new_crtc_state->shared_dpll) > > > > > - intel_enable_shared_dpll(new_crtc_state); > > > > > - > > > > > - intel_encoders_pre_enable(state, crtc); > > > > > - } else { > > > > > - icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > > > > - } > > > > > > > > > > intel_dsc_enable(new_crtc_state); > > > > > > > > > > @@ -1665,19 +1646,17 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > > intel_set_pipe_src_size(new_crtc_state); > > > > > if (DISPLAY_VER(dev_priv) >= 9 || IS_BROADWELL(dev_priv)) > > > > > bdw_set_pipe_misc(new_crtc_state); > > > > > +} > > > > > > > > > > - if (!intel_crtc_is_bigjoiner_slave(new_crtc_state) && > > > > > - !transcoder_is_dsi(cpu_transcoder)) > > > > > - hsw_configure_cpu_transcoder(new_crtc_state); > > > > > +static void hsw_crtc_enable_post_transcoder(struct intel_atomic_state *state, > > > > > + struct intel_crtc *crtc) > > > > > +{ > > > > > + const struct intel_crtc_state *new_crtc_state = > > > > > + intel_atomic_get_new_crtc_state(state, crtc); > > > > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > > > > > > > crtc->active = true; > > > > > > > > > > - /* Display WA #1180: WaDisableScalarClockGating: glk */ > > > > > - psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > > > > > - new_crtc_state->pch_pfit.enabled; > > > > > - if (psl_clkgate_wa) > > > > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true); > > > > > - > > > > > if (DISPLAY_VER(dev_priv) >= 9) > > > > > skl_pfit_enable(new_crtc_state); > > > > > else > > > > > @@ -1700,27 +1679,84 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > > icl_set_pipe_chicken(new_crtc_state); > > > > > > > > > > intel_initial_watermarks(state, crtc); > > > > > +} > > > > > > > > > > - if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > > > > - intel_crtc_vblank_on(new_crtc_state); > > > > > +static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > > + struct intel_crtc *crtc) > > > > > +{ > > > > > + const struct intel_crtc_state *new_crtc_state = > > > > > + intel_atomic_get_new_crtc_state(state, crtc); > > > > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > > + enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > > > > + struct intel_crtc *_crtc; > > > > > + int slave_pipe_mask = intel_crtc_bigjoiner_slave_pipes(new_crtc_state); > > > > > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > > > > > + bool psl_clkgate_wa; > > > > > + enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > > > > > > > > > - intel_encoders_enable(state, crtc); > > > > > + if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > > > > + return; > > > > > > > > > > - if (psl_clkgate_wa) { > > > > > - intel_crtc_wait_for_next_vblank(crtc); > > > > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false); > > > > > - } > > > > > + /* > > > > > + * Use reverse iterator to go through slave pipes first. > > > > > + * TODO: We might need smarter iterator here > > > > > + */ > > > > > + for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, _crtc, > > > > > + pipe_mask) { > > > > > + const struct intel_crtc_state *_new_crtc_state = > > > > > + intel_atomic_get_new_crtc_state(state, _crtc); > > > > > + bool needs_transcoder = ((slave_pipe_mask & BIT(_crtc->pipe)) == 0) && > > > > > + !transcoder_is_dsi(cpu_transcoder); > > > > > + > > > > > + intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > > > > + > > > > > + if (!new_crtc_state->bigjoiner_pipes) { > > > > > + if (needs_transcoder) > > > > > + intel_encoders_pre_pll_enable(state, crtc); > > > > > + > > > > > + if (new_crtc_state->shared_dpll) > > > > > + intel_enable_shared_dpll(new_crtc_state); > > > > > + > > > > > + if (needs_transcoder) > > > > > + intel_encoders_pre_enable(state, crtc); > > > > > + } else { > > > > > + icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > > > > + } > > > > > > > > That mess needs to be eliminated entirely. > > > > > > Yeah, was thinking about this too, was just a bit unsure how.. > > > > > > > > > > > > + > > > > > + hsw_crtc_enable_pre_transcoder(state, _crtc); > > > > > + > > > > > + if (needs_transcoder) > > > > > + hsw_configure_cpu_transcoder(_new_crtc_state); > > > > > > > > These transcoder things should not be within any pipe loop at all. > > > > > > I didn't want to split the loop, which I would have to do otherwise, > > > but may be it makes sense, since transcoder path is needed only for master > > > pipe. However what if _hypothetically_ :) we would have more than one master > > > pipe? > > > > Doesn't matter how many pipes there are. There is always just one > > transcoder. > > How I see it now, the sequence for example for master hsw_crtc_enable is: > > pipe1 stuff before transcoder > (transcoder programming not needed) > pipe1 stuff after transcoder > > pipe0 stuff before transcoder > transcoder programmed > pipe0 stuff after transcoder > > if we want to have a single unified loop for all pipes, I guess we have to > have a transcoder check inside a loop, because we cant do the > "pipe0 stuff after transcoder" thing, before the transcoder is programmed. > > I could of course split it this way: > > for (...) > pipe stuff before transcoder > > transcoder programmed > > for (...) > pipe stuff after transcoder > > but then the sequence still will be different from original, it will look like: > pipe1 stuff before transcoder > > pipe0 stuff before transcoder > > transcoder programmed > > pipe1 stuff after transcoder > > pipe0 stuff after transcoder > > which is different from original sequence, because we in fact > want that: > program pipe1(slave) > > program pipe0 stuff before transcoder(master) > program transcoder > program pipe0 stuff after transcoder(master) > > So do you think that splitting won't harm or you see some other way to do that? The current code is mostly nonsense I think. Probably only work through the power of prayer. I think we need to be able to control the per-pipe vs. per-transcoder steps more freely to make it actually correct. I fired off a quick attempt at converting the disable side, since that is a bit more straightforwad. The end result looks fairly reasonable to me at least. https://patchwork.freedesktop.org/series/130619/ -- Ville Syrjälä Intel ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner during modeset 2024-03-01 14:40 ` Ville Syrjälä @ 2024-03-01 15:17 ` Lisovskiy, Stanislav 2024-03-01 15:26 ` Ville Syrjälä 0 siblings, 1 reply; 34+ messages in thread From: Lisovskiy, Stanislav @ 2024-03-01 15:17 UTC (permalink / raw) To: Ville Syrjälä; +Cc: intel-gfx, jani.saarinen, vidya.srinivas On Fri, Mar 01, 2024 at 04:40:28PM +0200, Ville Syrjälä wrote: > On Fri, Mar 01, 2024 at 02:29:28PM +0200, Lisovskiy, Stanislav wrote: > > On Fri, Mar 01, 2024 at 12:43:46PM +0200, Ville Syrjälä wrote: > > > On Fri, Mar 01, 2024 at 12:27:18PM +0200, Lisovskiy, Stanislav wrote: > > > > On Fri, Mar 01, 2024 at 12:10:52PM +0200, Ville Syrjälä wrote: > > > > > On Wed, Feb 21, 2024 at 09:20:09PM +0200, Stanislav Lisovskiy wrote: > > > > > > Handle only bigjoiner masters in skl_commit_modeset_enables/disables, > > > > > > slave crtcs should be handled by master hooks. Same for encoders. > > > > > > That way we can also remove a bunch of checks like intel_crtc_is_bigjoiner_slave. > > > > > > > > > > > > v2: Get rid of master vs slave checks and separation in crtc enable/disable hooks. > > > > > > Use unified iteration cycle for all of those, while enabling/disabling > > > > > > transcoder only for those pipes where its needed(Ville Syrjälä) > > > > > > > > > > > > v3: Move all the intel_encoder_* calls under transcoder code path(Ville Syrjälä) > > > > > > > > > > > > v4: - Call intel_crtc_vblank_on from hsw_crtc_enable only for non-transcoder path > > > > > > (for master pipe that will be called from intel_encoders_enable/intel_enable_ddi) > > > > > > - Fix stupid mistake with using crtc->pipe for the mask, instead of BIT(crtc->pipe) > > > > > > > > > > > > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > > > > > > --- > > > > > > drivers/gpu/drm/i915/display/intel_ddi.c | 21 +-- > > > > > > drivers/gpu/drm/i915/display/intel_display.c | 183 ++++++++++++------- > > > > > > drivers/gpu/drm/i915/display/intel_display.h | 6 + > > > > > > 3 files changed, 121 insertions(+), 89 deletions(-) > > > > > > > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c > > > > > > index bea4415902044..6071e9f500871 100644 > > > > > > --- a/drivers/gpu/drm/i915/display/intel_ddi.c > > > > > > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c > > > > > > @@ -3100,7 +3100,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, > > > > > > const struct drm_connector_state *old_conn_state) > > > > > > { > > > > > > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > > > > > > - struct intel_crtc *slave_crtc; > > > > > > > > > > > > if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST)) { > > > > > > intel_crtc_vblank_off(old_crtc_state); > > > > > > @@ -3117,17 +3116,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, > > > > > > ilk_pfit_disable(old_crtc_state); > > > > > > } > > > > > > > > > > The master pipe stuff is right here ^ ... > > > > > > > > > > > > > > > > > - for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, slave_crtc, > > > > > > - intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) { > > > > > > - const struct intel_crtc_state *old_slave_crtc_state = > > > > > > - intel_atomic_get_old_crtc_state(state, slave_crtc); > > > > > > - > > > > > > - intel_crtc_vblank_off(old_slave_crtc_state); > > > > > > - > > > > > > - intel_dsc_disable(old_slave_crtc_state); > > > > > > - skl_scaler_disable(old_slave_crtc_state); > > > > > > - } > > > > > > > > > > .. but now you're moving the slave pipe stuff somewhere else? > > > > > > > > > > We should be just iterating the pipes here (assuming this > > > > > is the correct spot to do these steps). > > > > > > > > > > > - > > > > > > /* > > > > > > * When called from DP MST code: > > > > > > * - old_conn_state will be NULL > > > > > > @@ -3363,8 +3351,7 @@ static void intel_enable_ddi(struct intel_atomic_state *state, > > > > > > { > > > > > > drm_WARN_ON(state->base.dev, crtc_state->has_pch_encoder); > > > > > > > > > > > > - if (!intel_crtc_is_bigjoiner_slave(crtc_state)) > > > > > > - intel_ddi_enable_transcoder_func(encoder, crtc_state); > > > > > > + intel_ddi_enable_transcoder_func(encoder, crtc_state); > > > > > > > > > > > > /* Enable/Disable DP2.0 SDP split config before transcoder */ > > > > > > intel_audio_sdp_split_update(crtc_state); > > > > > > @@ -3469,9 +3456,6 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state, > > > > > > struct intel_crtc *crtc) > > > > > > { > > > > > > struct drm_i915_private *i915 = to_i915(encoder->base.dev); > > > > > > - struct intel_crtc_state *crtc_state = > > > > > > - intel_atomic_get_new_crtc_state(state, crtc); > > > > > > - struct intel_crtc *slave_crtc; > > > > > > enum phy phy = intel_port_to_phy(i915, encoder->port); > > > > > > > > > > > > /* FIXME: Add MTL pll_mgr */ > > > > > > @@ -3479,9 +3463,6 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state, > > > > > > return; > > > > > > > > > > > > intel_update_active_dpll(state, crtc, encoder); > > > > > > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > > > > > > - intel_crtc_bigjoiner_slave_pipes(crtc_state)) > > > > > > - intel_update_active_dpll(state, slave_crtc, encoder); > > > > > > } > > > > > > > > > > > > static void > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > > > > > > index 916c13a149fd5..e1ea53fd6a288 100644 > > > > > > --- a/drivers/gpu/drm/i915/display/intel_display.c > > > > > > +++ b/drivers/gpu/drm/i915/display/intel_display.c > > > > > > @@ -1631,31 +1631,12 @@ static void hsw_configure_cpu_transcoder(const struct intel_crtc_state *crtc_sta > > > > > > hsw_set_transconf(crtc_state); > > > > > > } > > > > > > > > > > > > -static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > > > - struct intel_crtc *crtc) > > > > > > +static void hsw_crtc_enable_pre_transcoder(struct intel_atomic_state *state, > > > > > > + struct intel_crtc *crtc) > > > > > > { > > > > > > const struct intel_crtc_state *new_crtc_state = > > > > > > intel_atomic_get_new_crtc_state(state, crtc); > > > > > > struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > > > - enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > > > > > - enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > > > > > - bool psl_clkgate_wa; > > > > > > - > > > > > > - if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > > > > > - return; > > > > > > - > > > > > > - intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > > > > > - > > > > > > - if (!new_crtc_state->bigjoiner_pipes) { > > > > > > - intel_encoders_pre_pll_enable(state, crtc); > > > > > > - > > > > > > - if (new_crtc_state->shared_dpll) > > > > > > - intel_enable_shared_dpll(new_crtc_state); > > > > > > - > > > > > > - intel_encoders_pre_enable(state, crtc); > > > > > > - } else { > > > > > > - icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > > > > > - } > > > > > > > > > > > > intel_dsc_enable(new_crtc_state); > > > > > > > > > > > > @@ -1665,19 +1646,17 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > > > intel_set_pipe_src_size(new_crtc_state); > > > > > > if (DISPLAY_VER(dev_priv) >= 9 || IS_BROADWELL(dev_priv)) > > > > > > bdw_set_pipe_misc(new_crtc_state); > > > > > > +} > > > > > > > > > > > > - if (!intel_crtc_is_bigjoiner_slave(new_crtc_state) && > > > > > > - !transcoder_is_dsi(cpu_transcoder)) > > > > > > - hsw_configure_cpu_transcoder(new_crtc_state); > > > > > > +static void hsw_crtc_enable_post_transcoder(struct intel_atomic_state *state, > > > > > > + struct intel_crtc *crtc) > > > > > > +{ > > > > > > + const struct intel_crtc_state *new_crtc_state = > > > > > > + intel_atomic_get_new_crtc_state(state, crtc); > > > > > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > > > > > > > > > crtc->active = true; > > > > > > > > > > > > - /* Display WA #1180: WaDisableScalarClockGating: glk */ > > > > > > - psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > > > > > > - new_crtc_state->pch_pfit.enabled; > > > > > > - if (psl_clkgate_wa) > > > > > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true); > > > > > > - > > > > > > if (DISPLAY_VER(dev_priv) >= 9) > > > > > > skl_pfit_enable(new_crtc_state); > > > > > > else > > > > > > @@ -1700,27 +1679,84 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > > > icl_set_pipe_chicken(new_crtc_state); > > > > > > > > > > > > intel_initial_watermarks(state, crtc); > > > > > > +} > > > > > > > > > > > > - if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > > > > > - intel_crtc_vblank_on(new_crtc_state); > > > > > > +static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > > > + struct intel_crtc *crtc) > > > > > > +{ > > > > > > + const struct intel_crtc_state *new_crtc_state = > > > > > > + intel_atomic_get_new_crtc_state(state, crtc); > > > > > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > > > + enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > > > > > + struct intel_crtc *_crtc; > > > > > > + int slave_pipe_mask = intel_crtc_bigjoiner_slave_pipes(new_crtc_state); > > > > > > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > > > > > > + bool psl_clkgate_wa; > > > > > > + enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > > > > > > > > > > > - intel_encoders_enable(state, crtc); > > > > > > + if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > > > > > + return; > > > > > > > > > > > > - if (psl_clkgate_wa) { > > > > > > - intel_crtc_wait_for_next_vblank(crtc); > > > > > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false); > > > > > > - } > > > > > > + /* > > > > > > + * Use reverse iterator to go through slave pipes first. > > > > > > + * TODO: We might need smarter iterator here > > > > > > + */ > > > > > > + for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, _crtc, > > > > > > + pipe_mask) { > > > > > > + const struct intel_crtc_state *_new_crtc_state = > > > > > > + intel_atomic_get_new_crtc_state(state, _crtc); > > > > > > + bool needs_transcoder = ((slave_pipe_mask & BIT(_crtc->pipe)) == 0) && > > > > > > + !transcoder_is_dsi(cpu_transcoder); > > > > > > + > > > > > > + intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > > > > > + > > > > > > + if (!new_crtc_state->bigjoiner_pipes) { > > > > > > + if (needs_transcoder) > > > > > > + intel_encoders_pre_pll_enable(state, crtc); > > > > > > + > > > > > > + if (new_crtc_state->shared_dpll) > > > > > > + intel_enable_shared_dpll(new_crtc_state); > > > > > > + > > > > > > + if (needs_transcoder) > > > > > > + intel_encoders_pre_enable(state, crtc); > > > > > > + } else { > > > > > > + icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > > > > > + } > > > > > > > > > > That mess needs to be eliminated entirely. > > > > > > > > Yeah, was thinking about this too, was just a bit unsure how.. > > > > > > > > > > > > > > > + > > > > > > + hsw_crtc_enable_pre_transcoder(state, _crtc); > > > > > > + > > > > > > + if (needs_transcoder) > > > > > > + hsw_configure_cpu_transcoder(_new_crtc_state); > > > > > > > > > > These transcoder things should not be within any pipe loop at all. > > > > > > > > I didn't want to split the loop, which I would have to do otherwise, > > > > but may be it makes sense, since transcoder path is needed only for master > > > > pipe. However what if _hypothetically_ :) we would have more than one master > > > > pipe? > > > > > > Doesn't matter how many pipes there are. There is always just one > > > transcoder. > > > > How I see it now, the sequence for example for master hsw_crtc_enable is: > > > > pipe1 stuff before transcoder > > (transcoder programming not needed) > > pipe1 stuff after transcoder > > > > pipe0 stuff before transcoder > > transcoder programmed > > pipe0 stuff after transcoder > > > > if we want to have a single unified loop for all pipes, I guess we have to > > have a transcoder check inside a loop, because we cant do the > > "pipe0 stuff after transcoder" thing, before the transcoder is programmed. > > > > I could of course split it this way: > > > > for (...) > > pipe stuff before transcoder > > > > transcoder programmed > > > > for (...) > > pipe stuff after transcoder > > > > but then the sequence still will be different from original, it will look like: > > pipe1 stuff before transcoder > > > > pipe0 stuff before transcoder > > > > transcoder programmed > > > > pipe1 stuff after transcoder > > > > pipe0 stuff after transcoder > > > > which is different from original sequence, because we in fact > > want that: > > program pipe1(slave) > > > > program pipe0 stuff before transcoder(master) > > program transcoder > > program pipe0 stuff after transcoder(master) > > > > So do you think that splitting won't harm or you see some other way to do that? > > The current code is mostly nonsense I think. Probably only work > through the power of prayer. I think we need to be able to control > the per-pipe vs. per-transcoder steps more freely to make it actually > correct. Ville, could you communicate to me next time, if you decide to do everything yourself or you see it some other way. Basically I was trying to discuss how you see things here and then it just ends up that way. If you didn't like the whole approach why I hear this only now, was following all your comments and asking questions. You could either communicate your ideas to me or at least communicate that you plan to send own series.. Now we had a discussion, some particular things were discussed, then suddenly you say that everything is crap and send own series. Is that really professional team work? Stan > > I fired off a quick attempt at converting the disable side, > since that is a bit more straightforwad. The end result looks > fairly reasonable to me at least. > https://patchwork.freedesktop.org/series/130619/ Ville, could you communicate to me next time, if you decide to do everything > > -- > Ville Syrjälä > Intel ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner during modeset 2024-03-01 15:17 ` Lisovskiy, Stanislav @ 2024-03-01 15:26 ` Ville Syrjälä 2024-03-01 15:42 ` Lisovskiy, Stanislav 0 siblings, 1 reply; 34+ messages in thread From: Ville Syrjälä @ 2024-03-01 15:26 UTC (permalink / raw) To: Lisovskiy, Stanislav; +Cc: intel-gfx, jani.saarinen, vidya.srinivas On Fri, Mar 01, 2024 at 05:17:41PM +0200, Lisovskiy, Stanislav wrote: > On Fri, Mar 01, 2024 at 04:40:28PM +0200, Ville Syrjälä wrote: > > On Fri, Mar 01, 2024 at 02:29:28PM +0200, Lisovskiy, Stanislav wrote: > > > On Fri, Mar 01, 2024 at 12:43:46PM +0200, Ville Syrjälä wrote: > > > > On Fri, Mar 01, 2024 at 12:27:18PM +0200, Lisovskiy, Stanislav wrote: > > > > > On Fri, Mar 01, 2024 at 12:10:52PM +0200, Ville Syrjälä wrote: > > > > > > On Wed, Feb 21, 2024 at 09:20:09PM +0200, Stanislav Lisovskiy wrote: > > > > > > > Handle only bigjoiner masters in skl_commit_modeset_enables/disables, > > > > > > > slave crtcs should be handled by master hooks. Same for encoders. > > > > > > > That way we can also remove a bunch of checks like intel_crtc_is_bigjoiner_slave. > > > > > > > > > > > > > > v2: Get rid of master vs slave checks and separation in crtc enable/disable hooks. > > > > > > > Use unified iteration cycle for all of those, while enabling/disabling > > > > > > > transcoder only for those pipes where its needed(Ville Syrjälä) > > > > > > > > > > > > > > v3: Move all the intel_encoder_* calls under transcoder code path(Ville Syrjälä) > > > > > > > > > > > > > > v4: - Call intel_crtc_vblank_on from hsw_crtc_enable only for non-transcoder path > > > > > > > (for master pipe that will be called from intel_encoders_enable/intel_enable_ddi) > > > > > > > - Fix stupid mistake with using crtc->pipe for the mask, instead of BIT(crtc->pipe) > > > > > > > > > > > > > > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > > > > > > > --- > > > > > > > drivers/gpu/drm/i915/display/intel_ddi.c | 21 +-- > > > > > > > drivers/gpu/drm/i915/display/intel_display.c | 183 ++++++++++++------- > > > > > > > drivers/gpu/drm/i915/display/intel_display.h | 6 + > > > > > > > 3 files changed, 121 insertions(+), 89 deletions(-) > > > > > > > > > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c > > > > > > > index bea4415902044..6071e9f500871 100644 > > > > > > > --- a/drivers/gpu/drm/i915/display/intel_ddi.c > > > > > > > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c > > > > > > > @@ -3100,7 +3100,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, > > > > > > > const struct drm_connector_state *old_conn_state) > > > > > > > { > > > > > > > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > > > > > > > - struct intel_crtc *slave_crtc; > > > > > > > > > > > > > > if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST)) { > > > > > > > intel_crtc_vblank_off(old_crtc_state); > > > > > > > @@ -3117,17 +3116,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, > > > > > > > ilk_pfit_disable(old_crtc_state); > > > > > > > } > > > > > > > > > > > > The master pipe stuff is right here ^ ... > > > > > > > > > > > > > > > > > > > > - for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, slave_crtc, > > > > > > > - intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) { > > > > > > > - const struct intel_crtc_state *old_slave_crtc_state = > > > > > > > - intel_atomic_get_old_crtc_state(state, slave_crtc); > > > > > > > - > > > > > > > - intel_crtc_vblank_off(old_slave_crtc_state); > > > > > > > - > > > > > > > - intel_dsc_disable(old_slave_crtc_state); > > > > > > > - skl_scaler_disable(old_slave_crtc_state); > > > > > > > - } > > > > > > > > > > > > .. but now you're moving the slave pipe stuff somewhere else? > > > > > > > > > > > > We should be just iterating the pipes here (assuming this > > > > > > is the correct spot to do these steps). > > > > > > > > > > > > > - > > > > > > > /* > > > > > > > * When called from DP MST code: > > > > > > > * - old_conn_state will be NULL > > > > > > > @@ -3363,8 +3351,7 @@ static void intel_enable_ddi(struct intel_atomic_state *state, > > > > > > > { > > > > > > > drm_WARN_ON(state->base.dev, crtc_state->has_pch_encoder); > > > > > > > > > > > > > > - if (!intel_crtc_is_bigjoiner_slave(crtc_state)) > > > > > > > - intel_ddi_enable_transcoder_func(encoder, crtc_state); > > > > > > > + intel_ddi_enable_transcoder_func(encoder, crtc_state); > > > > > > > > > > > > > > /* Enable/Disable DP2.0 SDP split config before transcoder */ > > > > > > > intel_audio_sdp_split_update(crtc_state); > > > > > > > @@ -3469,9 +3456,6 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state, > > > > > > > struct intel_crtc *crtc) > > > > > > > { > > > > > > > struct drm_i915_private *i915 = to_i915(encoder->base.dev); > > > > > > > - struct intel_crtc_state *crtc_state = > > > > > > > - intel_atomic_get_new_crtc_state(state, crtc); > > > > > > > - struct intel_crtc *slave_crtc; > > > > > > > enum phy phy = intel_port_to_phy(i915, encoder->port); > > > > > > > > > > > > > > /* FIXME: Add MTL pll_mgr */ > > > > > > > @@ -3479,9 +3463,6 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state, > > > > > > > return; > > > > > > > > > > > > > > intel_update_active_dpll(state, crtc, encoder); > > > > > > > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > > > > > > > - intel_crtc_bigjoiner_slave_pipes(crtc_state)) > > > > > > > - intel_update_active_dpll(state, slave_crtc, encoder); > > > > > > > } > > > > > > > > > > > > > > static void > > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > > > > > > > index 916c13a149fd5..e1ea53fd6a288 100644 > > > > > > > --- a/drivers/gpu/drm/i915/display/intel_display.c > > > > > > > +++ b/drivers/gpu/drm/i915/display/intel_display.c > > > > > > > @@ -1631,31 +1631,12 @@ static void hsw_configure_cpu_transcoder(const struct intel_crtc_state *crtc_sta > > > > > > > hsw_set_transconf(crtc_state); > > > > > > > } > > > > > > > > > > > > > > -static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > > > > - struct intel_crtc *crtc) > > > > > > > +static void hsw_crtc_enable_pre_transcoder(struct intel_atomic_state *state, > > > > > > > + struct intel_crtc *crtc) > > > > > > > { > > > > > > > const struct intel_crtc_state *new_crtc_state = > > > > > > > intel_atomic_get_new_crtc_state(state, crtc); > > > > > > > struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > > > > - enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > > > > > > - enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > > > > > > - bool psl_clkgate_wa; > > > > > > > - > > > > > > > - if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > > > > > > - return; > > > > > > > - > > > > > > > - intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > > > > > > - > > > > > > > - if (!new_crtc_state->bigjoiner_pipes) { > > > > > > > - intel_encoders_pre_pll_enable(state, crtc); > > > > > > > - > > > > > > > - if (new_crtc_state->shared_dpll) > > > > > > > - intel_enable_shared_dpll(new_crtc_state); > > > > > > > - > > > > > > > - intel_encoders_pre_enable(state, crtc); > > > > > > > - } else { > > > > > > > - icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > > > > > > - } > > > > > > > > > > > > > > intel_dsc_enable(new_crtc_state); > > > > > > > > > > > > > > @@ -1665,19 +1646,17 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > > > > intel_set_pipe_src_size(new_crtc_state); > > > > > > > if (DISPLAY_VER(dev_priv) >= 9 || IS_BROADWELL(dev_priv)) > > > > > > > bdw_set_pipe_misc(new_crtc_state); > > > > > > > +} > > > > > > > > > > > > > > - if (!intel_crtc_is_bigjoiner_slave(new_crtc_state) && > > > > > > > - !transcoder_is_dsi(cpu_transcoder)) > > > > > > > - hsw_configure_cpu_transcoder(new_crtc_state); > > > > > > > +static void hsw_crtc_enable_post_transcoder(struct intel_atomic_state *state, > > > > > > > + struct intel_crtc *crtc) > > > > > > > +{ > > > > > > > + const struct intel_crtc_state *new_crtc_state = > > > > > > > + intel_atomic_get_new_crtc_state(state, crtc); > > > > > > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > > > > > > > > > > > crtc->active = true; > > > > > > > > > > > > > > - /* Display WA #1180: WaDisableScalarClockGating: glk */ > > > > > > > - psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > > > > > > > - new_crtc_state->pch_pfit.enabled; > > > > > > > - if (psl_clkgate_wa) > > > > > > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true); > > > > > > > - > > > > > > > if (DISPLAY_VER(dev_priv) >= 9) > > > > > > > skl_pfit_enable(new_crtc_state); > > > > > > > else > > > > > > > @@ -1700,27 +1679,84 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > > > > icl_set_pipe_chicken(new_crtc_state); > > > > > > > > > > > > > > intel_initial_watermarks(state, crtc); > > > > > > > +} > > > > > > > > > > > > > > - if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > > > > > > - intel_crtc_vblank_on(new_crtc_state); > > > > > > > +static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > > > > + struct intel_crtc *crtc) > > > > > > > +{ > > > > > > > + const struct intel_crtc_state *new_crtc_state = > > > > > > > + intel_atomic_get_new_crtc_state(state, crtc); > > > > > > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > > > > + enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > > > > > > + struct intel_crtc *_crtc; > > > > > > > + int slave_pipe_mask = intel_crtc_bigjoiner_slave_pipes(new_crtc_state); > > > > > > > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > > > > > > > + bool psl_clkgate_wa; > > > > > > > + enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > > > > > > > > > > > > > - intel_encoders_enable(state, crtc); > > > > > > > + if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > > > > > > + return; > > > > > > > > > > > > > > - if (psl_clkgate_wa) { > > > > > > > - intel_crtc_wait_for_next_vblank(crtc); > > > > > > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false); > > > > > > > - } > > > > > > > + /* > > > > > > > + * Use reverse iterator to go through slave pipes first. > > > > > > > + * TODO: We might need smarter iterator here > > > > > > > + */ > > > > > > > + for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, _crtc, > > > > > > > + pipe_mask) { > > > > > > > + const struct intel_crtc_state *_new_crtc_state = > > > > > > > + intel_atomic_get_new_crtc_state(state, _crtc); > > > > > > > + bool needs_transcoder = ((slave_pipe_mask & BIT(_crtc->pipe)) == 0) && > > > > > > > + !transcoder_is_dsi(cpu_transcoder); > > > > > > > + > > > > > > > + intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > > > > > > + > > > > > > > + if (!new_crtc_state->bigjoiner_pipes) { > > > > > > > + if (needs_transcoder) > > > > > > > + intel_encoders_pre_pll_enable(state, crtc); > > > > > > > + > > > > > > > + if (new_crtc_state->shared_dpll) > > > > > > > + intel_enable_shared_dpll(new_crtc_state); > > > > > > > + > > > > > > > + if (needs_transcoder) > > > > > > > + intel_encoders_pre_enable(state, crtc); > > > > > > > + } else { > > > > > > > + icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > > > > > > + } > > > > > > > > > > > > That mess needs to be eliminated entirely. > > > > > > > > > > Yeah, was thinking about this too, was just a bit unsure how.. > > > > > > > > > > > > > > > > > > + > > > > > > > + hsw_crtc_enable_pre_transcoder(state, _crtc); > > > > > > > + > > > > > > > + if (needs_transcoder) > > > > > > > + hsw_configure_cpu_transcoder(_new_crtc_state); > > > > > > > > > > > > These transcoder things should not be within any pipe loop at all. > > > > > > > > > > I didn't want to split the loop, which I would have to do otherwise, > > > > > but may be it makes sense, since transcoder path is needed only for master > > > > > pipe. However what if _hypothetically_ :) we would have more than one master > > > > > pipe? > > > > > > > > Doesn't matter how many pipes there are. There is always just one > > > > transcoder. > > > > > > How I see it now, the sequence for example for master hsw_crtc_enable is: > > > > > > pipe1 stuff before transcoder > > > (transcoder programming not needed) > > > pipe1 stuff after transcoder > > > > > > pipe0 stuff before transcoder > > > transcoder programmed > > > pipe0 stuff after transcoder > > > > > > if we want to have a single unified loop for all pipes, I guess we have to > > > have a transcoder check inside a loop, because we cant do the > > > "pipe0 stuff after transcoder" thing, before the transcoder is programmed. > > > > > > I could of course split it this way: > > > > > > for (...) > > > pipe stuff before transcoder > > > > > > transcoder programmed > > > > > > for (...) > > > pipe stuff after transcoder > > > > > > but then the sequence still will be different from original, it will look like: > > > pipe1 stuff before transcoder > > > > > > pipe0 stuff before transcoder > > > > > > transcoder programmed > > > > > > pipe1 stuff after transcoder > > > > > > pipe0 stuff after transcoder > > > > > > which is different from original sequence, because we in fact > > > want that: > > > program pipe1(slave) > > > > > > program pipe0 stuff before transcoder(master) > > > program transcoder > > > program pipe0 stuff after transcoder(master) > > > > > > So do you think that splitting won't harm or you see some other way to do that? > > > > The current code is mostly nonsense I think. Probably only work > > through the power of prayer. I think we need to be able to control > > the per-pipe vs. per-transcoder steps more freely to make it actually > > correct. > > > Ville, could you communicate to me next time, if you decide to do everything > yourself or you see it some other way. > Basically I was trying to discuss how you see things here and then it just ends > up that way. > If you didn't like the whole approach why I hear this only now, was following > all your comments and asking questions. > You could either communicate your ideas to me or at least communicate that you > plan to send own series.. > Now we had a discussion, some particular things were discussed, then suddenly > you say that everything is crap and send own series. > > Is that really professional team work? > > Stan > > > > > I fired off a quick attempt at converting the disable side, > > since that is a bit more straightforwad. The end result looks > > fairly reasonable to me at least. > > https://patchwork.freedesktop.org/series/130619/ > > Ville, could you communicate to me next time, if you decide to do everything I didn't do everything. Just enough to demonstrate the direction where I think we should go. -- Ville Syrjälä Intel ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner during modeset 2024-03-01 15:26 ` Ville Syrjälä @ 2024-03-01 15:42 ` Lisovskiy, Stanislav 2024-03-01 15:58 ` Ville Syrjälä 0 siblings, 1 reply; 34+ messages in thread From: Lisovskiy, Stanislav @ 2024-03-01 15:42 UTC (permalink / raw) To: Ville Syrjälä; +Cc: intel-gfx, jani.saarinen, vidya.srinivas On Fri, Mar 01, 2024 at 05:26:19PM +0200, Ville Syrjälä wrote: > On Fri, Mar 01, 2024 at 05:17:41PM +0200, Lisovskiy, Stanislav wrote: > > On Fri, Mar 01, 2024 at 04:40:28PM +0200, Ville Syrjälä wrote: > > > On Fri, Mar 01, 2024 at 02:29:28PM +0200, Lisovskiy, Stanislav wrote: > > > > On Fri, Mar 01, 2024 at 12:43:46PM +0200, Ville Syrjälä wrote: > > > > > On Fri, Mar 01, 2024 at 12:27:18PM +0200, Lisovskiy, Stanislav wrote: > > > > > > On Fri, Mar 01, 2024 at 12:10:52PM +0200, Ville Syrjälä wrote: > > > > > > > On Wed, Feb 21, 2024 at 09:20:09PM +0200, Stanislav Lisovskiy wrote: > > > > > > > > Handle only bigjoiner masters in skl_commit_modeset_enables/disables, > > > > > > > > slave crtcs should be handled by master hooks. Same for encoders. > > > > > > > > That way we can also remove a bunch of checks like intel_crtc_is_bigjoiner_slave. > > > > > > > > > > > > > > > > v2: Get rid of master vs slave checks and separation in crtc enable/disable hooks. > > > > > > > > Use unified iteration cycle for all of those, while enabling/disabling > > > > > > > > transcoder only for those pipes where its needed(Ville Syrjälä) > > > > > > > > > > > > > > > > v3: Move all the intel_encoder_* calls under transcoder code path(Ville Syrjälä) > > > > > > > > > > > > > > > > v4: - Call intel_crtc_vblank_on from hsw_crtc_enable only for non-transcoder path > > > > > > > > (for master pipe that will be called from intel_encoders_enable/intel_enable_ddi) > > > > > > > > - Fix stupid mistake with using crtc->pipe for the mask, instead of BIT(crtc->pipe) > > > > > > > > > > > > > > > > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > > > > > > > > --- > > > > > > > > drivers/gpu/drm/i915/display/intel_ddi.c | 21 +-- > > > > > > > > drivers/gpu/drm/i915/display/intel_display.c | 183 ++++++++++++------- > > > > > > > > drivers/gpu/drm/i915/display/intel_display.h | 6 + > > > > > > > > 3 files changed, 121 insertions(+), 89 deletions(-) > > > > > > > > > > > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c > > > > > > > > index bea4415902044..6071e9f500871 100644 > > > > > > > > --- a/drivers/gpu/drm/i915/display/intel_ddi.c > > > > > > > > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c > > > > > > > > @@ -3100,7 +3100,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, > > > > > > > > const struct drm_connector_state *old_conn_state) > > > > > > > > { > > > > > > > > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > > > > > > > > - struct intel_crtc *slave_crtc; > > > > > > > > > > > > > > > > if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST)) { > > > > > > > > intel_crtc_vblank_off(old_crtc_state); > > > > > > > > @@ -3117,17 +3116,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, > > > > > > > > ilk_pfit_disable(old_crtc_state); > > > > > > > > } > > > > > > > > > > > > > > The master pipe stuff is right here ^ ... > > > > > > > > > > > > > > > > > > > > > > > - for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, slave_crtc, > > > > > > > > - intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) { > > > > > > > > - const struct intel_crtc_state *old_slave_crtc_state = > > > > > > > > - intel_atomic_get_old_crtc_state(state, slave_crtc); > > > > > > > > - > > > > > > > > - intel_crtc_vblank_off(old_slave_crtc_state); > > > > > > > > - > > > > > > > > - intel_dsc_disable(old_slave_crtc_state); > > > > > > > > - skl_scaler_disable(old_slave_crtc_state); > > > > > > > > - } > > > > > > > > > > > > > > .. but now you're moving the slave pipe stuff somewhere else? > > > > > > > > > > > > > > We should be just iterating the pipes here (assuming this > > > > > > > is the correct spot to do these steps). > > > > > > > > > > > > > > > - > > > > > > > > /* > > > > > > > > * When called from DP MST code: > > > > > > > > * - old_conn_state will be NULL > > > > > > > > @@ -3363,8 +3351,7 @@ static void intel_enable_ddi(struct intel_atomic_state *state, > > > > > > > > { > > > > > > > > drm_WARN_ON(state->base.dev, crtc_state->has_pch_encoder); > > > > > > > > > > > > > > > > - if (!intel_crtc_is_bigjoiner_slave(crtc_state)) > > > > > > > > - intel_ddi_enable_transcoder_func(encoder, crtc_state); > > > > > > > > + intel_ddi_enable_transcoder_func(encoder, crtc_state); > > > > > > > > > > > > > > > > /* Enable/Disable DP2.0 SDP split config before transcoder */ > > > > > > > > intel_audio_sdp_split_update(crtc_state); > > > > > > > > @@ -3469,9 +3456,6 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state, > > > > > > > > struct intel_crtc *crtc) > > > > > > > > { > > > > > > > > struct drm_i915_private *i915 = to_i915(encoder->base.dev); > > > > > > > > - struct intel_crtc_state *crtc_state = > > > > > > > > - intel_atomic_get_new_crtc_state(state, crtc); > > > > > > > > - struct intel_crtc *slave_crtc; > > > > > > > > enum phy phy = intel_port_to_phy(i915, encoder->port); > > > > > > > > > > > > > > > > /* FIXME: Add MTL pll_mgr */ > > > > > > > > @@ -3479,9 +3463,6 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state, > > > > > > > > return; > > > > > > > > > > > > > > > > intel_update_active_dpll(state, crtc, encoder); > > > > > > > > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > > > > > > > > - intel_crtc_bigjoiner_slave_pipes(crtc_state)) > > > > > > > > - intel_update_active_dpll(state, slave_crtc, encoder); > > > > > > > > } > > > > > > > > > > > > > > > > static void > > > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > > > > > > > > index 916c13a149fd5..e1ea53fd6a288 100644 > > > > > > > > --- a/drivers/gpu/drm/i915/display/intel_display.c > > > > > > > > +++ b/drivers/gpu/drm/i915/display/intel_display.c > > > > > > > > @@ -1631,31 +1631,12 @@ static void hsw_configure_cpu_transcoder(const struct intel_crtc_state *crtc_sta > > > > > > > > hsw_set_transconf(crtc_state); > > > > > > > > } > > > > > > > > > > > > > > > > -static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > > > > > - struct intel_crtc *crtc) > > > > > > > > +static void hsw_crtc_enable_pre_transcoder(struct intel_atomic_state *state, > > > > > > > > + struct intel_crtc *crtc) > > > > > > > > { > > > > > > > > const struct intel_crtc_state *new_crtc_state = > > > > > > > > intel_atomic_get_new_crtc_state(state, crtc); > > > > > > > > struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > > > > > - enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > > > > > > > - enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > > > > > > > - bool psl_clkgate_wa; > > > > > > > > - > > > > > > > > - if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > > > > > > > - return; > > > > > > > > - > > > > > > > > - intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > > > > > > > - > > > > > > > > - if (!new_crtc_state->bigjoiner_pipes) { > > > > > > > > - intel_encoders_pre_pll_enable(state, crtc); > > > > > > > > - > > > > > > > > - if (new_crtc_state->shared_dpll) > > > > > > > > - intel_enable_shared_dpll(new_crtc_state); > > > > > > > > - > > > > > > > > - intel_encoders_pre_enable(state, crtc); > > > > > > > > - } else { > > > > > > > > - icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > > > > > > > - } > > > > > > > > > > > > > > > > intel_dsc_enable(new_crtc_state); > > > > > > > > > > > > > > > > @@ -1665,19 +1646,17 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > > > > > intel_set_pipe_src_size(new_crtc_state); > > > > > > > > if (DISPLAY_VER(dev_priv) >= 9 || IS_BROADWELL(dev_priv)) > > > > > > > > bdw_set_pipe_misc(new_crtc_state); > > > > > > > > +} > > > > > > > > > > > > > > > > - if (!intel_crtc_is_bigjoiner_slave(new_crtc_state) && > > > > > > > > - !transcoder_is_dsi(cpu_transcoder)) > > > > > > > > - hsw_configure_cpu_transcoder(new_crtc_state); > > > > > > > > +static void hsw_crtc_enable_post_transcoder(struct intel_atomic_state *state, > > > > > > > > + struct intel_crtc *crtc) > > > > > > > > +{ > > > > > > > > + const struct intel_crtc_state *new_crtc_state = > > > > > > > > + intel_atomic_get_new_crtc_state(state, crtc); > > > > > > > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > > > > > > > > > > > > > crtc->active = true; > > > > > > > > > > > > > > > > - /* Display WA #1180: WaDisableScalarClockGating: glk */ > > > > > > > > - psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > > > > > > > > - new_crtc_state->pch_pfit.enabled; > > > > > > > > - if (psl_clkgate_wa) > > > > > > > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true); > > > > > > > > - > > > > > > > > if (DISPLAY_VER(dev_priv) >= 9) > > > > > > > > skl_pfit_enable(new_crtc_state); > > > > > > > > else > > > > > > > > @@ -1700,27 +1679,84 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > > > > > icl_set_pipe_chicken(new_crtc_state); > > > > > > > > > > > > > > > > intel_initial_watermarks(state, crtc); > > > > > > > > +} > > > > > > > > > > > > > > > > - if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > > > > > > > - intel_crtc_vblank_on(new_crtc_state); > > > > > > > > +static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > > > > > + struct intel_crtc *crtc) > > > > > > > > +{ > > > > > > > > + const struct intel_crtc_state *new_crtc_state = > > > > > > > > + intel_atomic_get_new_crtc_state(state, crtc); > > > > > > > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > > > > > + enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > > > > > > > + struct intel_crtc *_crtc; > > > > > > > > + int slave_pipe_mask = intel_crtc_bigjoiner_slave_pipes(new_crtc_state); > > > > > > > > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > > > > > > > > + bool psl_clkgate_wa; > > > > > > > > + enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > > > > > > > > > > > > > > > - intel_encoders_enable(state, crtc); > > > > > > > > + if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > > > > > > > + return; > > > > > > > > > > > > > > > > - if (psl_clkgate_wa) { > > > > > > > > - intel_crtc_wait_for_next_vblank(crtc); > > > > > > > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false); > > > > > > > > - } > > > > > > > > + /* > > > > > > > > + * Use reverse iterator to go through slave pipes first. > > > > > > > > + * TODO: We might need smarter iterator here > > > > > > > > + */ > > > > > > > > + for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, _crtc, > > > > > > > > + pipe_mask) { > > > > > > > > + const struct intel_crtc_state *_new_crtc_state = > > > > > > > > + intel_atomic_get_new_crtc_state(state, _crtc); > > > > > > > > + bool needs_transcoder = ((slave_pipe_mask & BIT(_crtc->pipe)) == 0) && > > > > > > > > + !transcoder_is_dsi(cpu_transcoder); > > > > > > > > + > > > > > > > > + intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > > > > > > > + > > > > > > > > + if (!new_crtc_state->bigjoiner_pipes) { > > > > > > > > + if (needs_transcoder) > > > > > > > > + intel_encoders_pre_pll_enable(state, crtc); > > > > > > > > + > > > > > > > > + if (new_crtc_state->shared_dpll) > > > > > > > > + intel_enable_shared_dpll(new_crtc_state); > > > > > > > > + > > > > > > > > + if (needs_transcoder) > > > > > > > > + intel_encoders_pre_enable(state, crtc); > > > > > > > > + } else { > > > > > > > > + icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > > > > > > > + } > > > > > > > > > > > > > > That mess needs to be eliminated entirely. > > > > > > > > > > > > Yeah, was thinking about this too, was just a bit unsure how.. > > > > > > > > > > > > > > > > > > > > > + > > > > > > > > + hsw_crtc_enable_pre_transcoder(state, _crtc); > > > > > > > > + > > > > > > > > + if (needs_transcoder) > > > > > > > > + hsw_configure_cpu_transcoder(_new_crtc_state); > > > > > > > > > > > > > > These transcoder things should not be within any pipe loop at all. > > > > > > > > > > > > I didn't want to split the loop, which I would have to do otherwise, > > > > > > but may be it makes sense, since transcoder path is needed only for master > > > > > > pipe. However what if _hypothetically_ :) we would have more than one master > > > > > > pipe? > > > > > > > > > > Doesn't matter how many pipes there are. There is always just one > > > > > transcoder. > > > > > > > > How I see it now, the sequence for example for master hsw_crtc_enable is: > > > > > > > > pipe1 stuff before transcoder > > > > (transcoder programming not needed) > > > > pipe1 stuff after transcoder > > > > > > > > pipe0 stuff before transcoder > > > > transcoder programmed > > > > pipe0 stuff after transcoder > > > > > > > > if we want to have a single unified loop for all pipes, I guess we have to > > > > have a transcoder check inside a loop, because we cant do the > > > > "pipe0 stuff after transcoder" thing, before the transcoder is programmed. > > > > > > > > I could of course split it this way: > > > > > > > > for (...) > > > > pipe stuff before transcoder > > > > > > > > transcoder programmed > > > > > > > > for (...) > > > > pipe stuff after transcoder > > > > > > > > but then the sequence still will be different from original, it will look like: > > > > pipe1 stuff before transcoder > > > > > > > > pipe0 stuff before transcoder > > > > > > > > transcoder programmed > > > > > > > > pipe1 stuff after transcoder > > > > > > > > pipe0 stuff after transcoder > > > > > > > > which is different from original sequence, because we in fact > > > > want that: > > > > program pipe1(slave) > > > > > > > > program pipe0 stuff before transcoder(master) > > > > program transcoder > > > > program pipe0 stuff after transcoder(master) > > > > > > > > So do you think that splitting won't harm or you see some other way to do that? > > > > > > The current code is mostly nonsense I think. Probably only work > > > through the power of prayer. I think we need to be able to control > > > the per-pipe vs. per-transcoder steps more freely to make it actually > > > correct. > > > > > > Ville, could you communicate to me next time, if you decide to do everything > > yourself or you see it some other way. > > Basically I was trying to discuss how you see things here and then it just ends > > up that way. > > If you didn't like the whole approach why I hear this only now, was following > > all your comments and asking questions. > > You could either communicate your ideas to me or at least communicate that you > > plan to send own series.. > > Now we had a discussion, some particular things were discussed, then suddenly > > you say that everything is crap and send own series. > > > > Is that really professional team work? > > > > Stan > > > > > > > > I fired off a quick attempt at converting the disable side, > > > since that is a bit more straightforwad. The end result looks > > > fairly reasonable to me at least. > > > https://patchwork.freedesktop.org/series/130619/ > > > > Ville, could you communicate to me next time, if you decide to do everything > > I didn't do everything. Just enough to demonstrate the direction > where I think we should go. Okay. What I should do now? Am I supposed to to do the enable side or just review your changes? Could you please communicate clearly, what is our plan here. > > -- > Ville Syrjälä > Intel ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner during modeset 2024-03-01 15:42 ` Lisovskiy, Stanislav @ 2024-03-01 15:58 ` Ville Syrjälä 0 siblings, 0 replies; 34+ messages in thread From: Ville Syrjälä @ 2024-03-01 15:58 UTC (permalink / raw) To: Lisovskiy, Stanislav; +Cc: intel-gfx, jani.saarinen, vidya.srinivas On Fri, Mar 01, 2024 at 05:42:59PM +0200, Lisovskiy, Stanislav wrote: > On Fri, Mar 01, 2024 at 05:26:19PM +0200, Ville Syrjälä wrote: > > On Fri, Mar 01, 2024 at 05:17:41PM +0200, Lisovskiy, Stanislav wrote: > > > On Fri, Mar 01, 2024 at 04:40:28PM +0200, Ville Syrjälä wrote: > > > > On Fri, Mar 01, 2024 at 02:29:28PM +0200, Lisovskiy, Stanislav wrote: > > > > > On Fri, Mar 01, 2024 at 12:43:46PM +0200, Ville Syrjälä wrote: > > > > > > On Fri, Mar 01, 2024 at 12:27:18PM +0200, Lisovskiy, Stanislav wrote: > > > > > > > On Fri, Mar 01, 2024 at 12:10:52PM +0200, Ville Syrjälä wrote: > > > > > > > > On Wed, Feb 21, 2024 at 09:20:09PM +0200, Stanislav Lisovskiy wrote: > > > > > > > > > Handle only bigjoiner masters in skl_commit_modeset_enables/disables, > > > > > > > > > slave crtcs should be handled by master hooks. Same for encoders. > > > > > > > > > That way we can also remove a bunch of checks like intel_crtc_is_bigjoiner_slave. > > > > > > > > > > > > > > > > > > v2: Get rid of master vs slave checks and separation in crtc enable/disable hooks. > > > > > > > > > Use unified iteration cycle for all of those, while enabling/disabling > > > > > > > > > transcoder only for those pipes where its needed(Ville Syrjälä) > > > > > > > > > > > > > > > > > > v3: Move all the intel_encoder_* calls under transcoder code path(Ville Syrjälä) > > > > > > > > > > > > > > > > > > v4: - Call intel_crtc_vblank_on from hsw_crtc_enable only for non-transcoder path > > > > > > > > > (for master pipe that will be called from intel_encoders_enable/intel_enable_ddi) > > > > > > > > > - Fix stupid mistake with using crtc->pipe for the mask, instead of BIT(crtc->pipe) > > > > > > > > > > > > > > > > > > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > > > > > > > > > --- > > > > > > > > > drivers/gpu/drm/i915/display/intel_ddi.c | 21 +-- > > > > > > > > > drivers/gpu/drm/i915/display/intel_display.c | 183 ++++++++++++------- > > > > > > > > > drivers/gpu/drm/i915/display/intel_display.h | 6 + > > > > > > > > > 3 files changed, 121 insertions(+), 89 deletions(-) > > > > > > > > > > > > > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c > > > > > > > > > index bea4415902044..6071e9f500871 100644 > > > > > > > > > --- a/drivers/gpu/drm/i915/display/intel_ddi.c > > > > > > > > > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c > > > > > > > > > @@ -3100,7 +3100,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, > > > > > > > > > const struct drm_connector_state *old_conn_state) > > > > > > > > > { > > > > > > > > > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > > > > > > > > > - struct intel_crtc *slave_crtc; > > > > > > > > > > > > > > > > > > if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST)) { > > > > > > > > > intel_crtc_vblank_off(old_crtc_state); > > > > > > > > > @@ -3117,17 +3116,6 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, > > > > > > > > > ilk_pfit_disable(old_crtc_state); > > > > > > > > > } > > > > > > > > > > > > > > > > The master pipe stuff is right here ^ ... > > > > > > > > > > > > > > > > > > > > > > > > > > - for_each_intel_crtc_in_pipe_mask(&dev_priv->drm, slave_crtc, > > > > > > > > > - intel_crtc_bigjoiner_slave_pipes(old_crtc_state)) { > > > > > > > > > - const struct intel_crtc_state *old_slave_crtc_state = > > > > > > > > > - intel_atomic_get_old_crtc_state(state, slave_crtc); > > > > > > > > > - > > > > > > > > > - intel_crtc_vblank_off(old_slave_crtc_state); > > > > > > > > > - > > > > > > > > > - intel_dsc_disable(old_slave_crtc_state); > > > > > > > > > - skl_scaler_disable(old_slave_crtc_state); > > > > > > > > > - } > > > > > > > > > > > > > > > > .. but now you're moving the slave pipe stuff somewhere else? > > > > > > > > > > > > > > > > We should be just iterating the pipes here (assuming this > > > > > > > > is the correct spot to do these steps). > > > > > > > > > > > > > > > > > - > > > > > > > > > /* > > > > > > > > > * When called from DP MST code: > > > > > > > > > * - old_conn_state will be NULL > > > > > > > > > @@ -3363,8 +3351,7 @@ static void intel_enable_ddi(struct intel_atomic_state *state, > > > > > > > > > { > > > > > > > > > drm_WARN_ON(state->base.dev, crtc_state->has_pch_encoder); > > > > > > > > > > > > > > > > > > - if (!intel_crtc_is_bigjoiner_slave(crtc_state)) > > > > > > > > > - intel_ddi_enable_transcoder_func(encoder, crtc_state); > > > > > > > > > + intel_ddi_enable_transcoder_func(encoder, crtc_state); > > > > > > > > > > > > > > > > > > /* Enable/Disable DP2.0 SDP split config before transcoder */ > > > > > > > > > intel_audio_sdp_split_update(crtc_state); > > > > > > > > > @@ -3469,9 +3456,6 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state, > > > > > > > > > struct intel_crtc *crtc) > > > > > > > > > { > > > > > > > > > struct drm_i915_private *i915 = to_i915(encoder->base.dev); > > > > > > > > > - struct intel_crtc_state *crtc_state = > > > > > > > > > - intel_atomic_get_new_crtc_state(state, crtc); > > > > > > > > > - struct intel_crtc *slave_crtc; > > > > > > > > > enum phy phy = intel_port_to_phy(i915, encoder->port); > > > > > > > > > > > > > > > > > > /* FIXME: Add MTL pll_mgr */ > > > > > > > > > @@ -3479,9 +3463,6 @@ void intel_ddi_update_active_dpll(struct intel_atomic_state *state, > > > > > > > > > return; > > > > > > > > > > > > > > > > > > intel_update_active_dpll(state, crtc, encoder); > > > > > > > > > - for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc, > > > > > > > > > - intel_crtc_bigjoiner_slave_pipes(crtc_state)) > > > > > > > > > - intel_update_active_dpll(state, slave_crtc, encoder); > > > > > > > > > } > > > > > > > > > > > > > > > > > > static void > > > > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > > > > > > > > > index 916c13a149fd5..e1ea53fd6a288 100644 > > > > > > > > > --- a/drivers/gpu/drm/i915/display/intel_display.c > > > > > > > > > +++ b/drivers/gpu/drm/i915/display/intel_display.c > > > > > > > > > @@ -1631,31 +1631,12 @@ static void hsw_configure_cpu_transcoder(const struct intel_crtc_state *crtc_sta > > > > > > > > > hsw_set_transconf(crtc_state); > > > > > > > > > } > > > > > > > > > > > > > > > > > > -static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > > > > > > - struct intel_crtc *crtc) > > > > > > > > > +static void hsw_crtc_enable_pre_transcoder(struct intel_atomic_state *state, > > > > > > > > > + struct intel_crtc *crtc) > > > > > > > > > { > > > > > > > > > const struct intel_crtc_state *new_crtc_state = > > > > > > > > > intel_atomic_get_new_crtc_state(state, crtc); > > > > > > > > > struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > > > > > > - enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > > > > > > > > - enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > > > > > > > > - bool psl_clkgate_wa; > > > > > > > > > - > > > > > > > > > - if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > > > > > > > > - return; > > > > > > > > > - > > > > > > > > > - intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > > > > > > > > - > > > > > > > > > - if (!new_crtc_state->bigjoiner_pipes) { > > > > > > > > > - intel_encoders_pre_pll_enable(state, crtc); > > > > > > > > > - > > > > > > > > > - if (new_crtc_state->shared_dpll) > > > > > > > > > - intel_enable_shared_dpll(new_crtc_state); > > > > > > > > > - > > > > > > > > > - intel_encoders_pre_enable(state, crtc); > > > > > > > > > - } else { > > > > > > > > > - icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > > > > > > > > - } > > > > > > > > > > > > > > > > > > intel_dsc_enable(new_crtc_state); > > > > > > > > > > > > > > > > > > @@ -1665,19 +1646,17 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > > > > > > intel_set_pipe_src_size(new_crtc_state); > > > > > > > > > if (DISPLAY_VER(dev_priv) >= 9 || IS_BROADWELL(dev_priv)) > > > > > > > > > bdw_set_pipe_misc(new_crtc_state); > > > > > > > > > +} > > > > > > > > > > > > > > > > > > - if (!intel_crtc_is_bigjoiner_slave(new_crtc_state) && > > > > > > > > > - !transcoder_is_dsi(cpu_transcoder)) > > > > > > > > > - hsw_configure_cpu_transcoder(new_crtc_state); > > > > > > > > > +static void hsw_crtc_enable_post_transcoder(struct intel_atomic_state *state, > > > > > > > > > + struct intel_crtc *crtc) > > > > > > > > > +{ > > > > > > > > > + const struct intel_crtc_state *new_crtc_state = > > > > > > > > > + intel_atomic_get_new_crtc_state(state, crtc); > > > > > > > > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > > > > > > > > > > > > > > > crtc->active = true; > > > > > > > > > > > > > > > > > > - /* Display WA #1180: WaDisableScalarClockGating: glk */ > > > > > > > > > - psl_clkgate_wa = DISPLAY_VER(dev_priv) == 10 && > > > > > > > > > - new_crtc_state->pch_pfit.enabled; > > > > > > > > > - if (psl_clkgate_wa) > > > > > > > > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true); > > > > > > > > > - > > > > > > > > > if (DISPLAY_VER(dev_priv) >= 9) > > > > > > > > > skl_pfit_enable(new_crtc_state); > > > > > > > > > else > > > > > > > > > @@ -1700,27 +1679,84 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > > > > > > icl_set_pipe_chicken(new_crtc_state); > > > > > > > > > > > > > > > > > > intel_initial_watermarks(state, crtc); > > > > > > > > > +} > > > > > > > > > > > > > > > > > > - if (intel_crtc_is_bigjoiner_slave(new_crtc_state)) > > > > > > > > > - intel_crtc_vblank_on(new_crtc_state); > > > > > > > > > +static void hsw_crtc_enable(struct intel_atomic_state *state, > > > > > > > > > + struct intel_crtc *crtc) > > > > > > > > > +{ > > > > > > > > > + const struct intel_crtc_state *new_crtc_state = > > > > > > > > > + intel_atomic_get_new_crtc_state(state, crtc); > > > > > > > > > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > > > > > > > > > + enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; > > > > > > > > > + struct intel_crtc *_crtc; > > > > > > > > > + int slave_pipe_mask = intel_crtc_bigjoiner_slave_pipes(new_crtc_state); > > > > > > > > > + int pipe_mask = slave_pipe_mask | BIT(crtc->pipe); > > > > > > > > > + bool psl_clkgate_wa; > > > > > > > > > + enum pipe pipe = crtc->pipe, hsw_workaround_pipe; > > > > > > > > > > > > > > > > > > - intel_encoders_enable(state, crtc); > > > > > > > > > + if (drm_WARN_ON(&dev_priv->drm, crtc->active)) > > > > > > > > > + return; > > > > > > > > > > > > > > > > > > - if (psl_clkgate_wa) { > > > > > > > > > - intel_crtc_wait_for_next_vblank(crtc); > > > > > > > > > - glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false); > > > > > > > > > - } > > > > > > > > > + /* > > > > > > > > > + * Use reverse iterator to go through slave pipes first. > > > > > > > > > + * TODO: We might need smarter iterator here > > > > > > > > > + */ > > > > > > > > > + for_each_intel_crtc_in_pipe_mask_reverse(&dev_priv->drm, _crtc, > > > > > > > > > + pipe_mask) { > > > > > > > > > + const struct intel_crtc_state *_new_crtc_state = > > > > > > > > > + intel_atomic_get_new_crtc_state(state, _crtc); > > > > > > > > > + bool needs_transcoder = ((slave_pipe_mask & BIT(_crtc->pipe)) == 0) && > > > > > > > > > + !transcoder_is_dsi(cpu_transcoder); > > > > > > > > > + > > > > > > > > > + intel_dmc_enable_pipe(dev_priv, crtc->pipe); > > > > > > > > > + > > > > > > > > > + if (!new_crtc_state->bigjoiner_pipes) { > > > > > > > > > + if (needs_transcoder) > > > > > > > > > + intel_encoders_pre_pll_enable(state, crtc); > > > > > > > > > + > > > > > > > > > + if (new_crtc_state->shared_dpll) > > > > > > > > > + intel_enable_shared_dpll(new_crtc_state); > > > > > > > > > + > > > > > > > > > + if (needs_transcoder) > > > > > > > > > + intel_encoders_pre_enable(state, crtc); > > > > > > > > > + } else { > > > > > > > > > + icl_ddi_bigjoiner_pre_enable(state, new_crtc_state); > > > > > > > > > + } > > > > > > > > > > > > > > > > That mess needs to be eliminated entirely. > > > > > > > > > > > > > > Yeah, was thinking about this too, was just a bit unsure how.. > > > > > > > > > > > > > > > > > > > > > > > > + > > > > > > > > > + hsw_crtc_enable_pre_transcoder(state, _crtc); > > > > > > > > > + > > > > > > > > > + if (needs_transcoder) > > > > > > > > > + hsw_configure_cpu_transcoder(_new_crtc_state); > > > > > > > > > > > > > > > > These transcoder things should not be within any pipe loop at all. > > > > > > > > > > > > > > I didn't want to split the loop, which I would have to do otherwise, > > > > > > > but may be it makes sense, since transcoder path is needed only for master > > > > > > > pipe. However what if _hypothetically_ :) we would have more than one master > > > > > > > pipe? > > > > > > > > > > > > Doesn't matter how many pipes there are. There is always just one > > > > > > transcoder. > > > > > > > > > > How I see it now, the sequence for example for master hsw_crtc_enable is: > > > > > > > > > > pipe1 stuff before transcoder > > > > > (transcoder programming not needed) > > > > > pipe1 stuff after transcoder > > > > > > > > > > pipe0 stuff before transcoder > > > > > transcoder programmed > > > > > pipe0 stuff after transcoder > > > > > > > > > > if we want to have a single unified loop for all pipes, I guess we have to > > > > > have a transcoder check inside a loop, because we cant do the > > > > > "pipe0 stuff after transcoder" thing, before the transcoder is programmed. > > > > > > > > > > I could of course split it this way: > > > > > > > > > > for (...) > > > > > pipe stuff before transcoder > > > > > > > > > > transcoder programmed > > > > > > > > > > for (...) > > > > > pipe stuff after transcoder > > > > > > > > > > but then the sequence still will be different from original, it will look like: > > > > > pipe1 stuff before transcoder > > > > > > > > > > pipe0 stuff before transcoder > > > > > > > > > > transcoder programmed > > > > > > > > > > pipe1 stuff after transcoder > > > > > > > > > > pipe0 stuff after transcoder > > > > > > > > > > which is different from original sequence, because we in fact > > > > > want that: > > > > > program pipe1(slave) > > > > > > > > > > program pipe0 stuff before transcoder(master) > > > > > program transcoder > > > > > program pipe0 stuff after transcoder(master) > > > > > > > > > > So do you think that splitting won't harm or you see some other way to do that? > > > > > > > > The current code is mostly nonsense I think. Probably only work > > > > through the power of prayer. I think we need to be able to control > > > > the per-pipe vs. per-transcoder steps more freely to make it actually > > > > correct. > > > > > > > > > Ville, could you communicate to me next time, if you decide to do everything > > > yourself or you see it some other way. > > > Basically I was trying to discuss how you see things here and then it just ends > > > up that way. > > > If you didn't like the whole approach why I hear this only now, was following > > > all your comments and asking questions. > > > You could either communicate your ideas to me or at least communicate that you > > > plan to send own series.. > > > Now we had a discussion, some particular things were discussed, then suddenly > > > you say that everything is crap and send own series. > > > > > > Is that really professional team work? > > > > > > Stan > > > > > > > > > > > I fired off a quick attempt at converting the disable side, > > > > since that is a bit more straightforwad. The end result looks > > > > fairly reasonable to me at least. > > > > https://patchwork.freedesktop.org/series/130619/ > > > > > > Ville, could you communicate to me next time, if you decide to do everything > > > > I didn't do everything. Just enough to demonstrate the direction > > where I think we should go. > > Okay. What I should do now? Am I supposed to to do the enable side or just review your > changes? Could you please communicate clearly, what is our plan here. We need the enable side done, and then we need to look at the MST support. + whatever else needs done. As far as my series goes, I think most of it should probably be in a state that could be reviewed. I'm definitely still not fully sold on that first rename patch, but couldn't immediately come up with a good alternative. Also I have no idea my stuff even works. All I can say is that it compiles. So we really need to get the CI side properly sorted to have any confidence in any of this. -- Ville Syrjälä Intel ^ permalink raw reply [flat|nested] 34+ messages in thread
* [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 2024-02-21 19:20 [PATCH 0/3] Bigjoiner refactoring Stanislav Lisovskiy 2024-02-21 19:20 ` [PATCH 1/3] drm/i915/bigjoiner: Refactor bigjoiner state readout Stanislav Lisovskiy 2024-02-21 19:20 ` [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner during modeset Stanislav Lisovskiy @ 2024-02-21 19:20 ` Stanislav Lisovskiy 2024-02-21 22:35 ` Manasi Navare 2024-02-26 19:56 ` Jani Nikula 2024-02-21 23:18 ` ✗ Fi.CI.CHECKPATCH: warning for Bigjoiner refactoring (rev8) Patchwork ` (3 subsequent siblings) 6 siblings, 2 replies; 34+ messages in thread From: Stanislav Lisovskiy @ 2024-02-21 19:20 UTC (permalink / raw) To: intel-gfx Cc: Stanislav.Lisovskiy, jani.saarinen, ville.syrjala, vidya.srinivas Patch calculates bigjoiner pipes in mst compute. Patch also passes bigjoiner bool to validate plane max size. Signed-off-by: vsrini4 <vidya.srinivas@intel.com> Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> --- drivers/gpu/drm/i915/display/intel_dp_mst.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c index 5307ddd4edcf5..fd27d9976c050 100644 --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c @@ -523,6 +523,7 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder, struct drm_connector_state *conn_state) { struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); + struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc); struct intel_dp_mst_encoder *intel_mst = enc_to_mst(encoder); struct intel_dp *intel_dp = &intel_mst->primary->dp; const struct intel_connector *connector = @@ -540,6 +541,10 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder, if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) return -EINVAL; + if (intel_dp_need_bigjoiner(intel_dp, adjusted_mode->crtc_hdisplay, + adjusted_mode->crtc_clock)) + pipe_config->bigjoiner_pipes = GENMASK(crtc->pipe + 1, crtc->pipe); + pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB; pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; pipe_config->has_pch_encoder = false; @@ -1318,12 +1323,6 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, * corresponding link capabilities of the sink) in case the * stream is uncompressed for it by the last branch device. */ - if (mode_rate > max_rate || mode->clock > max_dotclk || - drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port->full_pbn) { - *status = MODE_CLOCK_HIGH; - return 0; - } - if (mode->clock < 10000) { *status = MODE_CLOCK_LOW; return 0; @@ -1343,6 +1342,12 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, return 0; } + if (mode_rate > max_rate || mode->clock > max_dotclk || + drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port->full_pbn) { + *status = MODE_CLOCK_HIGH; + return 0; + } + if (DISPLAY_VER(dev_priv) >= 10 && drm_dp_sink_supports_dsc(intel_connector->dp.dsc_dpcd)) { /* @@ -1385,7 +1390,7 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, return 0; } - *status = intel_mode_valid_max_plane_size(dev_priv, mode, false); + *status = intel_mode_valid_max_plane_size(dev_priv, mode, bigjoiner); return 0; } -- 2.37.3 ^ permalink raw reply related [flat|nested] 34+ messages in thread
* Re: [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 2024-02-21 19:20 ` [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 Stanislav Lisovskiy @ 2024-02-21 22:35 ` Manasi Navare 2024-02-26 19:56 ` Jani Nikula 1 sibling, 0 replies; 34+ messages in thread From: Manasi Navare @ 2024-02-21 22:35 UTC (permalink / raw) To: Stanislav Lisovskiy Cc: intel-gfx, jani.saarinen, ville.syrjala, vidya.srinivas Thanks Stan and Vidya for this patch. ACK for the bigjoiner pipes calc and plane max size validation changes. @Ville Syrjälä : Do you see any gaps now with MST bigjoiner enabling in crtc_enable hooks () ? Or just these changes would suffice? Regards Manasi On Wed, Feb 21, 2024 at 11:20 AM Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> wrote: > > Patch calculates bigjoiner pipes in mst compute. > Patch also passes bigjoiner bool to validate plane > max size. > > Signed-off-by: vsrini4 <vidya.srinivas@intel.com> > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > --- > drivers/gpu/drm/i915/display/intel_dp_mst.c | 19 ++++++++++++------- > 1 file changed, 12 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c > index 5307ddd4edcf5..fd27d9976c050 100644 > --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c > +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c > @@ -523,6 +523,7 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder, > struct drm_connector_state *conn_state) > { > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > + struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc); > struct intel_dp_mst_encoder *intel_mst = enc_to_mst(encoder); > struct intel_dp *intel_dp = &intel_mst->primary->dp; > const struct intel_connector *connector = > @@ -540,6 +541,10 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder, > if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) > return -EINVAL; > > + if (intel_dp_need_bigjoiner(intel_dp, adjusted_mode->crtc_hdisplay, > + adjusted_mode->crtc_clock)) > + pipe_config->bigjoiner_pipes = GENMASK(crtc->pipe + 1, crtc->pipe); > + > pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB; > pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; > pipe_config->has_pch_encoder = false; > @@ -1318,12 +1323,6 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, > * corresponding link capabilities of the sink) in case the > * stream is uncompressed for it by the last branch device. > */ > - if (mode_rate > max_rate || mode->clock > max_dotclk || > - drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port->full_pbn) { > - *status = MODE_CLOCK_HIGH; > - return 0; > - } > - > if (mode->clock < 10000) { > *status = MODE_CLOCK_LOW; > return 0; > @@ -1343,6 +1342,12 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, > return 0; > } > > + if (mode_rate > max_rate || mode->clock > max_dotclk || > + drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port->full_pbn) { > + *status = MODE_CLOCK_HIGH; > + return 0; > + } > + > if (DISPLAY_VER(dev_priv) >= 10 && > drm_dp_sink_supports_dsc(intel_connector->dp.dsc_dpcd)) { > /* > @@ -1385,7 +1390,7 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, > return 0; > } > > - *status = intel_mode_valid_max_plane_size(dev_priv, mode, false); > + *status = intel_mode_valid_max_plane_size(dev_priv, mode, bigjoiner); > return 0; > } > > -- > 2.37.3 > ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 2024-02-21 19:20 ` [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 Stanislav Lisovskiy 2024-02-21 22:35 ` Manasi Navare @ 2024-02-26 19:56 ` Jani Nikula 2024-02-27 9:04 ` Lisovskiy, Stanislav 1 sibling, 1 reply; 34+ messages in thread From: Jani Nikula @ 2024-02-26 19:56 UTC (permalink / raw) To: Stanislav Lisovskiy, intel-gfx Cc: Stanislav.Lisovskiy, jani.saarinen, ville.syrjala, vidya.srinivas On Wed, 21 Feb 2024, Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> wrote: > Patch calculates bigjoiner pipes in mst compute. > Patch also passes bigjoiner bool to validate plane > max size. Please use the imperative mood in commit messages, e.g. "calculate" intead of "calculates". Please do not refer to "patch". We know it's a patch, until it isn't, and then it's a commit. Please explain *why* the changes are being done, not just *what* is being done. In the subject, what is "bigjoiner case for DP2.0"? DP 2.0 is a spec version, and as such irrelevant for the changes being done. > Signed-off-by: vsrini4 <vidya.srinivas@intel.com> ? > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > --- > drivers/gpu/drm/i915/display/intel_dp_mst.c | 19 ++++++++++++------- > 1 file changed, 12 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c > index 5307ddd4edcf5..fd27d9976c050 100644 > --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c > +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c > @@ -523,6 +523,7 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder, > struct drm_connector_state *conn_state) > { > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > + struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc); > struct intel_dp_mst_encoder *intel_mst = enc_to_mst(encoder); > struct intel_dp *intel_dp = &intel_mst->primary->dp; > const struct intel_connector *connector = > @@ -540,6 +541,10 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder, > if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) > return -EINVAL; > > + if (intel_dp_need_bigjoiner(intel_dp, adjusted_mode->crtc_hdisplay, > + adjusted_mode->crtc_clock)) > + pipe_config->bigjoiner_pipes = GENMASK(crtc->pipe + 1, crtc->pipe); > + > pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB; > pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; > pipe_config->has_pch_encoder = false; > @@ -1318,12 +1323,6 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, > * corresponding link capabilities of the sink) in case the > * stream is uncompressed for it by the last branch device. > */ > - if (mode_rate > max_rate || mode->clock > max_dotclk || > - drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port->full_pbn) { > - *status = MODE_CLOCK_HIGH; > - return 0; > - } > - > if (mode->clock < 10000) { > *status = MODE_CLOCK_LOW; > return 0; > @@ -1343,6 +1342,12 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, > return 0; > } > > + if (mode_rate > max_rate || mode->clock > max_dotclk || > + drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port->full_pbn) { > + *status = MODE_CLOCK_HIGH; > + return 0; > + } > + > if (DISPLAY_VER(dev_priv) >= 10 && > drm_dp_sink_supports_dsc(intel_connector->dp.dsc_dpcd)) { > /* > @@ -1385,7 +1390,7 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, > return 0; > } > > - *status = intel_mode_valid_max_plane_size(dev_priv, mode, false); > + *status = intel_mode_valid_max_plane_size(dev_priv, mode, bigjoiner); > return 0; > } -- Jani Nikula, Intel ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 2024-02-26 19:56 ` Jani Nikula @ 2024-02-27 9:04 ` Lisovskiy, Stanislav 2024-02-27 9:06 ` Srinivas, Vidya 2024-02-27 9:15 ` Jani Nikula 0 siblings, 2 replies; 34+ messages in thread From: Lisovskiy, Stanislav @ 2024-02-27 9:04 UTC (permalink / raw) To: Jani Nikula; +Cc: intel-gfx, jani.saarinen, ville.syrjala, vidya.srinivas On Mon, Feb 26, 2024 at 09:56:10PM +0200, Jani Nikula wrote: > On Wed, 21 Feb 2024, Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> wrote: > > Patch calculates bigjoiner pipes in mst compute. > > Patch also passes bigjoiner bool to validate plane > > max size. > > Please use the imperative mood in commit messages, e.g. "calculate" > intead of "calculates". > > Please do not refer to "patch". We know it's a patch, until it isn't, > and then it's a commit. > > Please explain *why* the changes are being done, not just *what* is > being done. > > In the subject, what is "bigjoiner case for DP2.0"? DP 2.0 is a spec > version, and as such irrelevant for the changes being done. > > > Signed-off-by: vsrini4 <vidya.srinivas@intel.com> > > ? Hi Jani, I just added that patch from Vidya to my series, to be honest, didn't have time at all to look much into it. Looks like its me who is going to fix that. > > > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > > --- > > drivers/gpu/drm/i915/display/intel_dp_mst.c | 19 ++++++++++++------- > > 1 file changed, 12 insertions(+), 7 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c > > index 5307ddd4edcf5..fd27d9976c050 100644 > > --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c > > +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c > > @@ -523,6 +523,7 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder, > > struct drm_connector_state *conn_state) > > { > > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > > + struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc); > > struct intel_dp_mst_encoder *intel_mst = enc_to_mst(encoder); > > struct intel_dp *intel_dp = &intel_mst->primary->dp; > > const struct intel_connector *connector = > > @@ -540,6 +541,10 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder, > > if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) > > return -EINVAL; > > > > + if (intel_dp_need_bigjoiner(intel_dp, adjusted_mode->crtc_hdisplay, > > + adjusted_mode->crtc_clock)) > > + pipe_config->bigjoiner_pipes = GENMASK(crtc->pipe + 1, crtc->pipe); > > + > > pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB; > > pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; > > pipe_config->has_pch_encoder = false; > > @@ -1318,12 +1323,6 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, > > * corresponding link capabilities of the sink) in case the > > * stream is uncompressed for it by the last branch device. > > */ > > - if (mode_rate > max_rate || mode->clock > max_dotclk || > > - drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port->full_pbn) { > > - *status = MODE_CLOCK_HIGH; > > - return 0; > > - } > > - > > if (mode->clock < 10000) { > > *status = MODE_CLOCK_LOW; > > return 0; > > @@ -1343,6 +1342,12 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, > > return 0; > > } > > > > + if (mode_rate > max_rate || mode->clock > max_dotclk || > > + drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port->full_pbn) { > > + *status = MODE_CLOCK_HIGH; > > + return 0; > > + } > > + > > if (DISPLAY_VER(dev_priv) >= 10 && > > drm_dp_sink_supports_dsc(intel_connector->dp.dsc_dpcd)) { > > /* > > @@ -1385,7 +1390,7 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, > > return 0; > > } > > > > - *status = intel_mode_valid_max_plane_size(dev_priv, mode, false); > > + *status = intel_mode_valid_max_plane_size(dev_priv, mode, bigjoiner); > > return 0; > > } > > -- > Jani Nikula, Intel ^ permalink raw reply [flat|nested] 34+ messages in thread
* RE: [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 2024-02-27 9:04 ` Lisovskiy, Stanislav @ 2024-02-27 9:06 ` Srinivas, Vidya 2024-02-27 9:14 ` Lisovskiy, Stanislav 2024-02-27 9:15 ` Jani Nikula 1 sibling, 1 reply; 34+ messages in thread From: Srinivas, Vidya @ 2024-02-27 9:06 UTC (permalink / raw) To: Lisovskiy, Stanislav, Jani Nikula Cc: intel-gfx@lists.freedesktop.org, Saarinen, Jani, ville.syrjala@linux.intel.com > -----Original Message----- > From: Lisovskiy, Stanislav <stanislav.lisovskiy@intel.com> > Sent: Tuesday, February 27, 2024 2:34 PM > To: Jani Nikula <jani.nikula@linux.intel.com> > Cc: intel-gfx@lists.freedesktop.org; Saarinen, Jani <jani.saarinen@intel.com>; > ville.syrjala@linux.intel.com; Srinivas, Vidya <vidya.srinivas@intel.com> > Subject: Re: [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 > > On Mon, Feb 26, 2024 at 09:56:10PM +0200, Jani Nikula wrote: > > On Wed, 21 Feb 2024, Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > wrote: > > > Patch calculates bigjoiner pipes in mst compute. > > > Patch also passes bigjoiner bool to validate plane max size. > > > > Please use the imperative mood in commit messages, e.g. "calculate" > > intead of "calculates". > > > > Please do not refer to "patch". We know it's a patch, until it isn't, > > and then it's a commit. > > > > Please explain *why* the changes are being done, not just *what* is > > being done. > > > > In the subject, what is "bigjoiner case for DP2.0"? DP 2.0 is a spec > > version, and as such irrelevant for the changes being done. > > > > > Signed-off-by: vsrini4 <vidya.srinivas@intel.com> > > > > ? > > Hi Jani, I just added that patch from Vidya to my series, to be honest, didn't > have time at all to look much into it. > Looks like its me who is going to fix that. Hello Stan My sincere apologies. I dint want to disturb your series, so I did not fix it. Please let me know if I should fix it. Sorry again. Thank you Jani for the comments. Regards Vidya > > > > > > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > > > --- > > > drivers/gpu/drm/i915/display/intel_dp_mst.c | 19 > > > ++++++++++++------- > > > 1 file changed, 12 insertions(+), 7 deletions(-) > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c > > > b/drivers/gpu/drm/i915/display/intel_dp_mst.c > > > index 5307ddd4edcf5..fd27d9976c050 100644 > > > --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c > > > +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c > > > @@ -523,6 +523,7 @@ static int intel_dp_mst_compute_config(struct > intel_encoder *encoder, > > > struct drm_connector_state *conn_state) > { > > > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > > > + struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc); > > > struct intel_dp_mst_encoder *intel_mst = enc_to_mst(encoder); > > > struct intel_dp *intel_dp = &intel_mst->primary->dp; > > > const struct intel_connector *connector = @@ -540,6 +541,10 @@ > > > static int intel_dp_mst_compute_config(struct intel_encoder *encoder, > > > if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) > > > return -EINVAL; > > > > > > + if (intel_dp_need_bigjoiner(intel_dp, adjusted_mode->crtc_hdisplay, > > > + adjusted_mode->crtc_clock)) > > > + pipe_config->bigjoiner_pipes = GENMASK(crtc->pipe + 1, > > > +crtc->pipe); > > > + > > > pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB; > > > pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; > > > pipe_config->has_pch_encoder = false; @@ -1318,12 +1323,6 @@ > > > intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, > > > * corresponding link capabilities of the sink) in case the > > > * stream is uncompressed for it by the last branch device. > > > */ > > > - if (mode_rate > max_rate || mode->clock > max_dotclk || > > > - drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port- > >full_pbn) { > > > - *status = MODE_CLOCK_HIGH; > > > - return 0; > > > - } > > > - > > > if (mode->clock < 10000) { > > > *status = MODE_CLOCK_LOW; > > > return 0; > > > @@ -1343,6 +1342,12 @@ intel_dp_mst_mode_valid_ctx(struct > drm_connector *connector, > > > return 0; > > > } > > > > > > + if (mode_rate > max_rate || mode->clock > max_dotclk || > > > + drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port- > >full_pbn) { > > > + *status = MODE_CLOCK_HIGH; > > > + return 0; > > > + } > > > + > > > if (DISPLAY_VER(dev_priv) >= 10 && > > > drm_dp_sink_supports_dsc(intel_connector->dp.dsc_dpcd)) { > > > /* > > > @@ -1385,7 +1390,7 @@ intel_dp_mst_mode_valid_ctx(struct > drm_connector *connector, > > > return 0; > > > } > > > > > > - *status = intel_mode_valid_max_plane_size(dev_priv, mode, false); > > > + *status = intel_mode_valid_max_plane_size(dev_priv, mode, > > > +bigjoiner); > > > return 0; > > > } > > > > -- > > Jani Nikula, Intel ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 2024-02-27 9:06 ` Srinivas, Vidya @ 2024-02-27 9:14 ` Lisovskiy, Stanislav 2024-02-27 18:51 ` Srinivas, Vidya 0 siblings, 1 reply; 34+ messages in thread From: Lisovskiy, Stanislav @ 2024-02-27 9:14 UTC (permalink / raw) To: Srinivas, Vidya Cc: Jani Nikula, intel-gfx@lists.freedesktop.org, Saarinen, Jani, ville.syrjala@linux.intel.com On Tue, Feb 27, 2024 at 11:06:16AM +0200, Srinivas, Vidya wrote: > > > > -----Original Message----- > > From: Lisovskiy, Stanislav <stanislav.lisovskiy@intel.com> > > Sent: Tuesday, February 27, 2024 2:34 PM > > To: Jani Nikula <jani.nikula@linux.intel.com> > > Cc: intel-gfx@lists.freedesktop.org; Saarinen, Jani <jani.saarinen@intel.com>; > > ville.syrjala@linux.intel.com; Srinivas, Vidya <vidya.srinivas@intel.com> > > Subject: Re: [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 > > > > On Mon, Feb 26, 2024 at 09:56:10PM +0200, Jani Nikula wrote: > > > On Wed, 21 Feb 2024, Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > > wrote: > > > > Patch calculates bigjoiner pipes in mst compute. > > > > Patch also passes bigjoiner bool to validate plane max size. > > > > > > Please use the imperative mood in commit messages, e.g. "calculate" > > > intead of "calculates". > > > > > > Please do not refer to "patch". We know it's a patch, until it isn't, > > > and then it's a commit. > > > > > > Please explain *why* the changes are being done, not just *what* is > > > being done. > > > > > > In the subject, what is "bigjoiner case for DP2.0"? DP 2.0 is a spec > > > version, and as such irrelevant for the changes being done. > > > > > > > Signed-off-by: vsrini4 <vidya.srinivas@intel.com> > > > > > > ? > > > > Hi Jani, I just added that patch from Vidya to my series, to be honest, didn't > > have time at all to look much into it. > > Looks like its me who is going to fix that. > > Hello Stan > My sincere apologies. I dint want to disturb your series, so I did not fix it. > Please let me know if I should fix it. Sorry again. > Thank you Jani for the comments. > > Regards > Vidya Hi Vidya, it is a bit unclear for me as well now, how do we proceed, since your patch is part of my series, I was explicitly asked to add it, does it mean you are fixing it now or me? Well if you address Jani's comments, I definitely dont mind :) > > > > > > > > > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > > > > --- > > > > drivers/gpu/drm/i915/display/intel_dp_mst.c | 19 > > > > ++++++++++++------- > > > > 1 file changed, 12 insertions(+), 7 deletions(-) > > > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c > > > > b/drivers/gpu/drm/i915/display/intel_dp_mst.c > > > > index 5307ddd4edcf5..fd27d9976c050 100644 > > > > --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c > > > > +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c > > > > @@ -523,6 +523,7 @@ static int intel_dp_mst_compute_config(struct > > intel_encoder *encoder, > > > > struct drm_connector_state *conn_state) > > { > > > > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > > > > + struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc); > > > > struct intel_dp_mst_encoder *intel_mst = enc_to_mst(encoder); > > > > struct intel_dp *intel_dp = &intel_mst->primary->dp; > > > > const struct intel_connector *connector = @@ -540,6 +541,10 @@ > > > > static int intel_dp_mst_compute_config(struct intel_encoder *encoder, > > > > if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) > > > > return -EINVAL; > > > > > > > > + if (intel_dp_need_bigjoiner(intel_dp, adjusted_mode->crtc_hdisplay, > > > > + adjusted_mode->crtc_clock)) > > > > + pipe_config->bigjoiner_pipes = GENMASK(crtc->pipe + 1, > > > > +crtc->pipe); > > > > + > > > > pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB; > > > > pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; > > > > pipe_config->has_pch_encoder = false; @@ -1318,12 +1323,6 @@ > > > > intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, > > > > * corresponding link capabilities of the sink) in case the > > > > * stream is uncompressed for it by the last branch device. > > > > */ > > > > - if (mode_rate > max_rate || mode->clock > max_dotclk || > > > > - drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port- > > >full_pbn) { > > > > - *status = MODE_CLOCK_HIGH; > > > > - return 0; > > > > - } > > > > - > > > > if (mode->clock < 10000) { > > > > *status = MODE_CLOCK_LOW; > > > > return 0; > > > > @@ -1343,6 +1342,12 @@ intel_dp_mst_mode_valid_ctx(struct > > drm_connector *connector, > > > > return 0; > > > > } > > > > > > > > + if (mode_rate > max_rate || mode->clock > max_dotclk || > > > > + drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port- > > >full_pbn) { > > > > + *status = MODE_CLOCK_HIGH; > > > > + return 0; > > > > + } > > > > + > > > > if (DISPLAY_VER(dev_priv) >= 10 && > > > > drm_dp_sink_supports_dsc(intel_connector->dp.dsc_dpcd)) { > > > > /* > > > > @@ -1385,7 +1390,7 @@ intel_dp_mst_mode_valid_ctx(struct > > drm_connector *connector, > > > > return 0; > > > > } > > > > > > > > - *status = intel_mode_valid_max_plane_size(dev_priv, mode, false); > > > > + *status = intel_mode_valid_max_plane_size(dev_priv, mode, > > > > +bigjoiner); > > > > return 0; > > > > } > > > > > > -- > > > Jani Nikula, Intel ^ permalink raw reply [flat|nested] 34+ messages in thread
* RE: [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 2024-02-27 9:14 ` Lisovskiy, Stanislav @ 2024-02-27 18:51 ` Srinivas, Vidya 0 siblings, 0 replies; 34+ messages in thread From: Srinivas, Vidya @ 2024-02-27 18:51 UTC (permalink / raw) To: Lisovskiy, Stanislav Cc: Jani Nikula, intel-gfx@lists.freedesktop.org, Saarinen, Jani, ville.syrjala@linux.intel.com > -----Original Message----- > From: Lisovskiy, Stanislav <stanislav.lisovskiy@intel.com> > Sent: Tuesday, February 27, 2024 2:44 PM > To: Srinivas, Vidya <vidya.srinivas@intel.com> > Cc: Jani Nikula <jani.nikula@linux.intel.com>; intel-gfx@lists.freedesktop.org; > Saarinen, Jani <jani.saarinen@intel.com>; ville.syrjala@linux.intel.com > Subject: Re: [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 > > On Tue, Feb 27, 2024 at 11:06:16AM +0200, Srinivas, Vidya wrote: > > > > > > > -----Original Message----- > > > From: Lisovskiy, Stanislav <stanislav.lisovskiy@intel.com> > > > Sent: Tuesday, February 27, 2024 2:34 PM > > > To: Jani Nikula <jani.nikula@linux.intel.com> > > > Cc: intel-gfx@lists.freedesktop.org; Saarinen, Jani > > > <jani.saarinen@intel.com>; ville.syrjala@linux.intel.com; Srinivas, > > > Vidya <vidya.srinivas@intel.com> > > > Subject: Re: [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 > > > > > > On Mon, Feb 26, 2024 at 09:56:10PM +0200, Jani Nikula wrote: > > > > On Wed, 21 Feb 2024, Stanislav Lisovskiy > > > > <stanislav.lisovskiy@intel.com> > > > wrote: > > > > > Patch calculates bigjoiner pipes in mst compute. > > > > > Patch also passes bigjoiner bool to validate plane max size. > > > > > > > > Please use the imperative mood in commit messages, e.g. "calculate" > > > > intead of "calculates". > > > > > > > > Please do not refer to "patch". We know it's a patch, until it > > > > isn't, and then it's a commit. > > > > > > > > Please explain *why* the changes are being done, not just *what* > > > > is being done. > > > > > > > > In the subject, what is "bigjoiner case for DP2.0"? DP 2.0 is a > > > > spec version, and as such irrelevant for the changes being done. > > > > > > > > > Signed-off-by: vsrini4 <vidya.srinivas@intel.com> > > > > > > > > ? > > > > > > Hi Jani, I just added that patch from Vidya to my series, to be > > > honest, didn't have time at all to look much into it. > > > Looks like its me who is going to fix that. > > > > Hello Stan > > My sincere apologies. I dint want to disturb your series, so I did not fix it. > > Please let me know if I should fix it. Sorry again. > > Thank you Jani for the comments. > > > > Regards > > Vidya > > Hi Vidya, > > it is a bit unclear for me as well now, how do we proceed, since your patch is > part of my series, I was explicitly asked to add it, does it mean you are fixing it > now or me? > Well if you address Jani's comments, I definitely dont mind :) Hello Stan Thank you so much. Just so that I don't disturb your series, I have pushed this series https://patchwork.freedesktop.org/series/130449/ After addressing comments from Jani Nikula. Many thanks Jani for the review and apologies for the commit message errors. Kindly help check if this series is okay. Thank you. Regards Vidya > > > > > > > > > > > > > Signed-off-by: Stanislav Lisovskiy > > > > > <stanislav.lisovskiy@intel.com> > > > > > --- > > > > > drivers/gpu/drm/i915/display/intel_dp_mst.c | 19 > > > > > ++++++++++++------- > > > > > 1 file changed, 12 insertions(+), 7 deletions(-) > > > > > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c > > > > > b/drivers/gpu/drm/i915/display/intel_dp_mst.c > > > > > index 5307ddd4edcf5..fd27d9976c050 100644 > > > > > --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c > > > > > +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c > > > > > @@ -523,6 +523,7 @@ static int > > > > > intel_dp_mst_compute_config(struct > > > intel_encoder *encoder, > > > > > struct drm_connector_state *conn_state) > > > { > > > > > struct drm_i915_private *dev_priv = > > > > > to_i915(encoder->base.dev); > > > > > + struct intel_crtc *crtc = > > > > > +to_intel_crtc(pipe_config->uapi.crtc); > > > > > struct intel_dp_mst_encoder *intel_mst = enc_to_mst(encoder); > > > > > struct intel_dp *intel_dp = &intel_mst->primary->dp; > > > > > const struct intel_connector *connector = @@ -540,6 +541,10 @@ > > > > > static int intel_dp_mst_compute_config(struct intel_encoder *encoder, > > > > > if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) > > > > > return -EINVAL; > > > > > > > > > > + if (intel_dp_need_bigjoiner(intel_dp, adjusted_mode- > >crtc_hdisplay, > > > > > + adjusted_mode->crtc_clock)) > > > > > + pipe_config->bigjoiner_pipes = GENMASK(crtc->pipe > + 1, > > > > > +crtc->pipe); > > > > > + > > > > > pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB; > > > > > pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; > > > > > pipe_config->has_pch_encoder = false; @@ -1318,12 +1323,6 @@ > > > > > intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, > > > > > * corresponding link capabilities of the sink) in case the > > > > > * stream is uncompressed for it by the last branch device. > > > > > */ > > > > > - if (mode_rate > max_rate || mode->clock > max_dotclk || > > > > > - drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > > port- > > > >full_pbn) { > > > > > - *status = MODE_CLOCK_HIGH; > > > > > - return 0; > > > > > - } > > > > > - > > > > > if (mode->clock < 10000) { > > > > > *status = MODE_CLOCK_LOW; > > > > > return 0; > > > > > @@ -1343,6 +1342,12 @@ intel_dp_mst_mode_valid_ctx(struct > > > drm_connector *connector, > > > > > return 0; > > > > > } > > > > > > > > > > + if (mode_rate > max_rate || mode->clock > max_dotclk || > > > > > + drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > > port- > > > >full_pbn) { > > > > > + *status = MODE_CLOCK_HIGH; > > > > > + return 0; > > > > > + } > > > > > + > > > > > if (DISPLAY_VER(dev_priv) >= 10 && > > > > > drm_dp_sink_supports_dsc(intel_connector->dp.dsc_dpcd)) { > > > > > /* > > > > > @@ -1385,7 +1390,7 @@ intel_dp_mst_mode_valid_ctx(struct > > > drm_connector *connector, > > > > > return 0; > > > > > } > > > > > > > > > > - *status = intel_mode_valid_max_plane_size(dev_priv, mode, > false); > > > > > + *status = intel_mode_valid_max_plane_size(dev_priv, mode, > > > > > +bigjoiner); > > > > > return 0; > > > > > } > > > > > > > > -- > > > > Jani Nikula, Intel ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 2024-02-27 9:04 ` Lisovskiy, Stanislav 2024-02-27 9:06 ` Srinivas, Vidya @ 2024-02-27 9:15 ` Jani Nikula 2024-02-27 18:07 ` Manasi Navare 1 sibling, 1 reply; 34+ messages in thread From: Jani Nikula @ 2024-02-27 9:15 UTC (permalink / raw) To: Lisovskiy, Stanislav Cc: intel-gfx, jani.saarinen, ville.syrjala, vidya.srinivas On Tue, 27 Feb 2024, "Lisovskiy, Stanislav" <stanislav.lisovskiy@intel.com> wrote: > On Mon, Feb 26, 2024 at 09:56:10PM +0200, Jani Nikula wrote: >> On Wed, 21 Feb 2024, Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> wrote: >> > Patch calculates bigjoiner pipes in mst compute. >> > Patch also passes bigjoiner bool to validate plane >> > max size. >> >> Please use the imperative mood in commit messages, e.g. "calculate" >> intead of "calculates". >> >> Please do not refer to "patch". We know it's a patch, until it isn't, >> and then it's a commit. >> >> Please explain *why* the changes are being done, not just *what* is >> being done. >> >> In the subject, what is "bigjoiner case for DP2.0"? DP 2.0 is a spec >> version, and as such irrelevant for the changes being done. >> >> > Signed-off-by: vsrini4 <vidya.srinivas@intel.com> >> >> ? > > Hi Jani, I just added that patch from Vidya to my series, to be honest, > didn't have time at all to look much into it. > Looks like its me who is going to fix that. Should the original authorship be preserved? If not, please add Co-developed-by. Just having the Signed-off-by is not enough. BR, Jani. > >> >> > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> >> > --- >> > drivers/gpu/drm/i915/display/intel_dp_mst.c | 19 ++++++++++++------- >> > 1 file changed, 12 insertions(+), 7 deletions(-) >> > >> > diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c >> > index 5307ddd4edcf5..fd27d9976c050 100644 >> > --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c >> > +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c >> > @@ -523,6 +523,7 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder, >> > struct drm_connector_state *conn_state) >> > { >> > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); >> > + struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc); >> > struct intel_dp_mst_encoder *intel_mst = enc_to_mst(encoder); >> > struct intel_dp *intel_dp = &intel_mst->primary->dp; >> > const struct intel_connector *connector = >> > @@ -540,6 +541,10 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder, >> > if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) >> > return -EINVAL; >> > >> > + if (intel_dp_need_bigjoiner(intel_dp, adjusted_mode->crtc_hdisplay, >> > + adjusted_mode->crtc_clock)) >> > + pipe_config->bigjoiner_pipes = GENMASK(crtc->pipe + 1, crtc->pipe); >> > + >> > pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB; >> > pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; >> > pipe_config->has_pch_encoder = false; >> > @@ -1318,12 +1323,6 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, >> > * corresponding link capabilities of the sink) in case the >> > * stream is uncompressed for it by the last branch device. >> > */ >> > - if (mode_rate > max_rate || mode->clock > max_dotclk || >> > - drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port->full_pbn) { >> > - *status = MODE_CLOCK_HIGH; >> > - return 0; >> > - } >> > - >> > if (mode->clock < 10000) { >> > *status = MODE_CLOCK_LOW; >> > return 0; >> > @@ -1343,6 +1342,12 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, >> > return 0; >> > } >> > >> > + if (mode_rate > max_rate || mode->clock > max_dotclk || >> > + drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port->full_pbn) { >> > + *status = MODE_CLOCK_HIGH; >> > + return 0; >> > + } >> > + >> > if (DISPLAY_VER(dev_priv) >= 10 && >> > drm_dp_sink_supports_dsc(intel_connector->dp.dsc_dpcd)) { >> > /* >> > @@ -1385,7 +1390,7 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, >> > return 0; >> > } >> > >> > - *status = intel_mode_valid_max_plane_size(dev_priv, mode, false); >> > + *status = intel_mode_valid_max_plane_size(dev_priv, mode, bigjoiner); >> > return 0; >> > } >> >> -- >> Jani Nikula, Intel -- Jani Nikula, Intel ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 2024-02-27 9:15 ` Jani Nikula @ 2024-02-27 18:07 ` Manasi Navare 2024-02-27 18:48 ` Srinivas, Vidya 0 siblings, 1 reply; 34+ messages in thread From: Manasi Navare @ 2024-02-27 18:07 UTC (permalink / raw) To: Jani Nikula Cc: Lisovskiy, Stanislav, intel-gfx, jani.saarinen, ville.syrjala, vidya.srinivas Thanks Jani for your review. Thanks @Lisovskiy, Stanislav and @vidya.srinivas@intel.com for taking this patch forward. @Jani Nikula , @Ville Syrjälä : MST bigjoiner as a feature needs to be enabled upstream and this patch enables that feature. If you agree that bigjoiner refactoring patches 1 and 2 have no impact on enabling bigjoiner on MST, could we decouple this patch from bigjoiner refactoring and land this separately? We need the Bigjoiner to be enabled on MST feature landed asap and bigjoiner refactoring can follow. Regards Manasi On Tue, Feb 27, 2024 at 1:15 AM Jani Nikula <jani.nikula@linux.intel.com> wrote: > > On Tue, 27 Feb 2024, "Lisovskiy, Stanislav" <stanislav.lisovskiy@intel.com> wrote: > > On Mon, Feb 26, 2024 at 09:56:10PM +0200, Jani Nikula wrote: > >> On Wed, 21 Feb 2024, Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> wrote: > >> > Patch calculates bigjoiner pipes in mst compute. > >> > Patch also passes bigjoiner bool to validate plane > >> > max size. > >> > >> Please use the imperative mood in commit messages, e.g. "calculate" > >> intead of "calculates". > >> > >> Please do not refer to "patch". We know it's a patch, until it isn't, > >> and then it's a commit. > >> > >> Please explain *why* the changes are being done, not just *what* is > >> being done. > >> > >> In the subject, what is "bigjoiner case for DP2.0"? DP 2.0 is a spec > >> version, and as such irrelevant for the changes being done. > >> > >> > Signed-off-by: vsrini4 <vidya.srinivas@intel.com> > >> > >> ? > > > > Hi Jani, I just added that patch from Vidya to my series, to be honest, > > didn't have time at all to look much into it. > > Looks like its me who is going to fix that. > > Should the original authorship be preserved? If not, please add > Co-developed-by. Just having the Signed-off-by is not enough. > > BR, > Jani. > > > > > >> > >> > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > >> > --- > >> > drivers/gpu/drm/i915/display/intel_dp_mst.c | 19 ++++++++++++------- > >> > 1 file changed, 12 insertions(+), 7 deletions(-) > >> > > >> > diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c > >> > index 5307ddd4edcf5..fd27d9976c050 100644 > >> > --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c > >> > +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c > >> > @@ -523,6 +523,7 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder, > >> > struct drm_connector_state *conn_state) > >> > { > >> > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > >> > + struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc); > >> > struct intel_dp_mst_encoder *intel_mst = enc_to_mst(encoder); > >> > struct intel_dp *intel_dp = &intel_mst->primary->dp; > >> > const struct intel_connector *connector = > >> > @@ -540,6 +541,10 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder, > >> > if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) > >> > return -EINVAL; > >> > > >> > + if (intel_dp_need_bigjoiner(intel_dp, adjusted_mode->crtc_hdisplay, > >> > + adjusted_mode->crtc_clock)) > >> > + pipe_config->bigjoiner_pipes = GENMASK(crtc->pipe + 1, crtc->pipe); > >> > + > >> > pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB; > >> > pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; > >> > pipe_config->has_pch_encoder = false; > >> > @@ -1318,12 +1323,6 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, > >> > * corresponding link capabilities of the sink) in case the > >> > * stream is uncompressed for it by the last branch device. > >> > */ > >> > - if (mode_rate > max_rate || mode->clock > max_dotclk || > >> > - drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port->full_pbn) { > >> > - *status = MODE_CLOCK_HIGH; > >> > - return 0; > >> > - } > >> > - > >> > if (mode->clock < 10000) { > >> > *status = MODE_CLOCK_LOW; > >> > return 0; > >> > @@ -1343,6 +1342,12 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, > >> > return 0; > >> > } > >> > > >> > + if (mode_rate > max_rate || mode->clock > max_dotclk || > >> > + drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port->full_pbn) { > >> > + *status = MODE_CLOCK_HIGH; > >> > + return 0; > >> > + } > >> > + > >> > if (DISPLAY_VER(dev_priv) >= 10 && > >> > drm_dp_sink_supports_dsc(intel_connector->dp.dsc_dpcd)) { > >> > /* > >> > @@ -1385,7 +1390,7 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, > >> > return 0; > >> > } > >> > > >> > - *status = intel_mode_valid_max_plane_size(dev_priv, mode, false); > >> > + *status = intel_mode_valid_max_plane_size(dev_priv, mode, bigjoiner); > >> > return 0; > >> > } > >> > >> -- > >> Jani Nikula, Intel > > -- > Jani Nikula, Intel ^ permalink raw reply [flat|nested] 34+ messages in thread
* RE: [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 2024-02-27 18:07 ` Manasi Navare @ 2024-02-27 18:48 ` Srinivas, Vidya 0 siblings, 0 replies; 34+ messages in thread From: Srinivas, Vidya @ 2024-02-27 18:48 UTC (permalink / raw) To: Manasi Navare, Jani Nikula, Lisovskiy, Stanislav Cc: intel-gfx@lists.freedesktop.org, Saarinen, Jani, ville.syrjala@linux.intel.com > -----Original Message----- > From: Manasi Navare <navaremanasi@chromium.org> > Sent: Tuesday, February 27, 2024 11:37 PM > To: Jani Nikula <jani.nikula@linux.intel.com> > Cc: Lisovskiy, Stanislav <stanislav.lisovskiy@intel.com>; intel- > gfx@lists.freedesktop.org; Saarinen, Jani <jani.saarinen@intel.com>; > ville.syrjala@linux.intel.com; Srinivas, Vidya <vidya.srinivas@intel.com> > Subject: Re: [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 > > Thanks Jani for your review. > Thanks @Lisovskiy, Stanislav and @vidya.srinivas@intel.com for taking this > patch forward. > > @Jani Nikula , @Ville Syrjälä : MST bigjoiner as a feature needs to be enabled > upstream and this patch enables that feature. > If you agree that bigjoiner refactoring patches 1 and 2 have no impact on > enabling bigjoiner on MST, could we decouple this patch from bigjoiner > refactoring and land this separately? Hello Manasi Thank you. I have submitted this series as suggested after addressing comments from Jani Nikula about the commit message errors. https://patchwork.freedesktop.org/series/130449/ Regards Vidya > > We need the Bigjoiner to be enabled on MST feature landed asap and > bigjoiner refactoring can follow. > > Regards > Manasi > > On Tue, Feb 27, 2024 at 1:15 AM Jani Nikula <jani.nikula@linux.intel.com> > wrote: > > > > On Tue, 27 Feb 2024, "Lisovskiy, Stanislav" <stanislav.lisovskiy@intel.com> > wrote: > > > On Mon, Feb 26, 2024 at 09:56:10PM +0200, Jani Nikula wrote: > > >> On Wed, 21 Feb 2024, Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > wrote: > > >> > Patch calculates bigjoiner pipes in mst compute. > > >> > Patch also passes bigjoiner bool to validate plane max size. > > >> > > >> Please use the imperative mood in commit messages, e.g. "calculate" > > >> intead of "calculates". > > >> > > >> Please do not refer to "patch". We know it's a patch, until it > > >> isn't, and then it's a commit. > > >> > > >> Please explain *why* the changes are being done, not just *what* is > > >> being done. > > >> > > >> In the subject, what is "bigjoiner case for DP2.0"? DP 2.0 is a > > >> spec version, and as such irrelevant for the changes being done. > > >> > > >> > Signed-off-by: vsrini4 <vidya.srinivas@intel.com> > > >> > > >> ? > > > > > > Hi Jani, I just added that patch from Vidya to my series, to be > > > honest, didn't have time at all to look much into it. > > > Looks like its me who is going to fix that. > > > > Should the original authorship be preserved? If not, please add > > Co-developed-by. Just having the Signed-off-by is not enough. > > > > BR, > > Jani. > > > > > > > > > >> > > >> > Signed-off-by: Stanislav Lisovskiy > > >> > <stanislav.lisovskiy@intel.com> > > >> > --- > > >> > drivers/gpu/drm/i915/display/intel_dp_mst.c | 19 > > >> > ++++++++++++------- > > >> > 1 file changed, 12 insertions(+), 7 deletions(-) > > >> > > > >> > diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c > > >> > b/drivers/gpu/drm/i915/display/intel_dp_mst.c > > >> > index 5307ddd4edcf5..fd27d9976c050 100644 > > >> > --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c > > >> > +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c > > >> > @@ -523,6 +523,7 @@ static int intel_dp_mst_compute_config(struct > intel_encoder *encoder, > > >> > struct drm_connector_state > > >> > *conn_state) { > > >> > struct drm_i915_private *dev_priv = > > >> > to_i915(encoder->base.dev); > > >> > + struct intel_crtc *crtc = > > >> > + to_intel_crtc(pipe_config->uapi.crtc); > > >> > struct intel_dp_mst_encoder *intel_mst = enc_to_mst(encoder); > > >> > struct intel_dp *intel_dp = &intel_mst->primary->dp; > > >> > const struct intel_connector *connector = @@ -540,6 +541,10 @@ > > >> > static int intel_dp_mst_compute_config(struct intel_encoder *encoder, > > >> > if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) > > >> > return -EINVAL; > > >> > > > >> > + if (intel_dp_need_bigjoiner(intel_dp, adjusted_mode->crtc_hdisplay, > > >> > + adjusted_mode->crtc_clock)) > > >> > + pipe_config->bigjoiner_pipes = GENMASK(crtc->pipe + 1, > > >> > + crtc->pipe); > > >> > + > > >> > pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB; > > >> > pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; > > >> > pipe_config->has_pch_encoder = false; @@ -1318,12 +1323,6 @@ > > >> > intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, > > >> > * corresponding link capabilities of the sink) in case the > > >> > * stream is uncompressed for it by the last branch device. > > >> > */ > > >> > - if (mode_rate > max_rate || mode->clock > max_dotclk || > > >> > - drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port- > >full_pbn) { > > >> > - *status = MODE_CLOCK_HIGH; > > >> > - return 0; > > >> > - } > > >> > - > > >> > if (mode->clock < 10000) { > > >> > *status = MODE_CLOCK_LOW; > > >> > return 0; > > >> > @@ -1343,6 +1342,12 @@ intel_dp_mst_mode_valid_ctx(struct > drm_connector *connector, > > >> > return 0; > > >> > } > > >> > > > >> > + if (mode_rate > max_rate || mode->clock > max_dotclk || > > >> > + drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port- > >full_pbn) { > > >> > + *status = MODE_CLOCK_HIGH; > > >> > + return 0; > > >> > + } > > >> > + > > >> > if (DISPLAY_VER(dev_priv) >= 10 && > > >> > drm_dp_sink_supports_dsc(intel_connector->dp.dsc_dpcd)) { > > >> > /* > > >> > @@ -1385,7 +1390,7 @@ intel_dp_mst_mode_valid_ctx(struct > drm_connector *connector, > > >> > return 0; > > >> > } > > >> > > > >> > - *status = intel_mode_valid_max_plane_size(dev_priv, mode, > > >> > false); > > >> > + *status = intel_mode_valid_max_plane_size(dev_priv, mode, > > >> > + bigjoiner); > > >> > return 0; > > >> > } > > >> > > >> -- > > >> Jani Nikula, Intel > > > > -- > > Jani Nikula, Intel ^ permalink raw reply [flat|nested] 34+ messages in thread
* ✗ Fi.CI.CHECKPATCH: warning for Bigjoiner refactoring (rev8) 2024-02-21 19:20 [PATCH 0/3] Bigjoiner refactoring Stanislav Lisovskiy ` (2 preceding siblings ...) 2024-02-21 19:20 ` [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 Stanislav Lisovskiy @ 2024-02-21 23:18 ` Patchwork 2024-02-21 23:18 ` ✗ Fi.CI.SPARSE: " Patchwork ` (2 subsequent siblings) 6 siblings, 0 replies; 34+ messages in thread From: Patchwork @ 2024-02-21 23:18 UTC (permalink / raw) To: Stanislav Lisovskiy; +Cc: intel-gfx == Series Details == Series: Bigjoiner refactoring (rev8) URL : https://patchwork.freedesktop.org/series/128311/ State : warning == Summary == Error: dim checkpatch failed 99388805e7fa drm/i915/bigjoiner: Refactor bigjoiner state readout 1b4a23d5e363 Start separating pipe vs transcoder set logic for bigjoiner during modeset -:12: WARNING:COMMIT_LOG_LONG_LINE: Prefer a maximum 75 chars per line (possible unwrapped commit description?) #12: That way we can also remove a bunch of checks like intel_crtc_is_bigjoiner_slave. -:235: WARNING:BLOCK_COMMENT_STYLE: Block comments use a trailing */ on a separate line #235: FILE: drivers/gpu/drm/i915/display/intel_display.c:1750: + * to change the workaround. */ -:361: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses #361: FILE: drivers/gpu/drm/i915/display/intel_display.h:283: +#define for_each_intel_crtc_in_pipe_mask_reverse(dev, intel_crtc, pipe_mask) \ + list_for_each_entry_reverse(intel_crtc, \ + &(dev)->mode_config.crtc_list, \ + base.head) \ + for_each_if((pipe_mask) & BIT(intel_crtc->pipe)) -:361: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'intel_crtc' - possible side-effects? #361: FILE: drivers/gpu/drm/i915/display/intel_display.h:283: +#define for_each_intel_crtc_in_pipe_mask_reverse(dev, intel_crtc, pipe_mask) \ + list_for_each_entry_reverse(intel_crtc, \ + &(dev)->mode_config.crtc_list, \ + base.head) \ + for_each_if((pipe_mask) & BIT(intel_crtc->pipe)) total: 1 errors, 2 warnings, 1 checks, 317 lines checked 0ad1c861ceb6 drm/i915: Fix bigjoiner case for DP2.0 ^ permalink raw reply [flat|nested] 34+ messages in thread
* ✗ Fi.CI.SPARSE: warning for Bigjoiner refactoring (rev8) 2024-02-21 19:20 [PATCH 0/3] Bigjoiner refactoring Stanislav Lisovskiy ` (3 preceding siblings ...) 2024-02-21 23:18 ` ✗ Fi.CI.CHECKPATCH: warning for Bigjoiner refactoring (rev8) Patchwork @ 2024-02-21 23:18 ` Patchwork 2024-02-21 23:32 ` ✓ Fi.CI.BAT: success " Patchwork 2024-02-22 6:32 ` ✗ Fi.CI.IGT: failure " Patchwork 6 siblings, 0 replies; 34+ messages in thread From: Patchwork @ 2024-02-21 23:18 UTC (permalink / raw) To: Stanislav Lisovskiy; +Cc: intel-gfx == Series Details == Series: Bigjoiner refactoring (rev8) URL : https://patchwork.freedesktop.org/series/128311/ State : warning == Summary == Error: dim sparse failed Sparse version: v0.6.2 Fast mode used, each commit won't be checked separately. +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' +./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return' ^ permalink raw reply [flat|nested] 34+ messages in thread
* ✓ Fi.CI.BAT: success for Bigjoiner refactoring (rev8) 2024-02-21 19:20 [PATCH 0/3] Bigjoiner refactoring Stanislav Lisovskiy ` (4 preceding siblings ...) 2024-02-21 23:18 ` ✗ Fi.CI.SPARSE: " Patchwork @ 2024-02-21 23:32 ` Patchwork 2024-02-22 6:32 ` ✗ Fi.CI.IGT: failure " Patchwork 6 siblings, 0 replies; 34+ messages in thread From: Patchwork @ 2024-02-21 23:32 UTC (permalink / raw) To: Stanislav Lisovskiy; +Cc: intel-gfx [-- Attachment #1: Type: text/plain, Size: 2500 bytes --] == Series Details == Series: Bigjoiner refactoring (rev8) URL : https://patchwork.freedesktop.org/series/128311/ State : success == Summary == CI Bug Log - changes from CI_DRM_14311 -> Patchwork_128311v8 ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/index.html Participating hosts (38 -> 36) ------------------------------ Missing (2): bat-arls-2 fi-snb-2520m Known issues ------------ Here are the changes found in Patchwork_128311v8 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence: - bat-dg2-11: NOTRUN -> [SKIP][1] ([i915#9197]) +1 other test skip [1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/bat-dg2-11/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html #### Possible fixes #### * igt@i915_pm_rpm@module-reload: - fi-kbl-7567u: [CRASH][2] ([i915#9947]) -> [PASS][3] [2]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/fi-kbl-7567u/igt@i915_pm_rpm@module-reload.html [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/fi-kbl-7567u/igt@i915_pm_rpm@module-reload.html * igt@i915_selftest@live@execlists: - fi-bsw-nick: [ABORT][4] ([i915#7911]) -> [PASS][5] [4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/fi-bsw-nick/igt@i915_selftest@live@execlists.html [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/fi-bsw-nick/igt@i915_selftest@live@execlists.html [i915#7911]: https://gitlab.freedesktop.org/drm/intel/issues/7911 [i915#9197]: https://gitlab.freedesktop.org/drm/intel/issues/9197 [i915#9947]: https://gitlab.freedesktop.org/drm/intel/issues/9947 Build changes ------------- * Linux: CI_DRM_14311 -> Patchwork_128311v8 CI-20190529: 20190529 CI_DRM_14311: 06b279b4fb58a00667e47fafed72bba923d032ae @ git://anongit.freedesktop.org/gfx-ci/linux IGT_7720: 7720 Patchwork_128311v8: 06b279b4fb58a00667e47fafed72bba923d032ae @ git://anongit.freedesktop.org/gfx-ci/linux ### Linux commits 00885cd760b3 drm/i915: Fix bigjoiner case for DP2.0 6701c68c1867 Start separating pipe vs transcoder set logic for bigjoiner during modeset dd42b05e3bca drm/i915/bigjoiner: Refactor bigjoiner state readout == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/index.html [-- Attachment #2: Type: text/html, Size: 3170 bytes --] ^ permalink raw reply [flat|nested] 34+ messages in thread
* ✗ Fi.CI.IGT: failure for Bigjoiner refactoring (rev8) 2024-02-21 19:20 [PATCH 0/3] Bigjoiner refactoring Stanislav Lisovskiy ` (5 preceding siblings ...) 2024-02-21 23:32 ` ✓ Fi.CI.BAT: success " Patchwork @ 2024-02-22 6:32 ` Patchwork 6 siblings, 0 replies; 34+ messages in thread From: Patchwork @ 2024-02-22 6:32 UTC (permalink / raw) To: Stanislav Lisovskiy; +Cc: intel-gfx [-- Attachment #1: Type: text/plain, Size: 81900 bytes --] == Series Details == Series: Bigjoiner refactoring (rev8) URL : https://patchwork.freedesktop.org/series/128311/ State : failure == Summary == CI Bug Log - changes from CI_DRM_14311_full -> Patchwork_128311v8_full ==================================================== Summary ------- **FAILURE** Serious unknown changes coming with Patchwork_128311v8_full absolutely need to be verified manually. If you think the reported changes have nothing to do with the changes introduced in Patchwork_128311v8_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them to document this new failure mode, which will reduce false positives in CI. Participating hosts (8 -> 8) ------------------------------ No changes in participating hosts Possible new issues ------------------- Here are the unknown changes that may have been introduced in Patchwork_128311v8_full: ### IGT changes ### #### Possible regressions #### * igt@kms_color@ctm-signed@pipe-b: - shard-mtlp: [PASS][1] -> [FAIL][2] [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-mtlp-3/igt@kms_color@ctm-signed@pipe-b.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-5/igt@kms_color@ctm-signed@pipe-b.html Known issues ------------ Here are the changes found in Patchwork_128311v8_full that come from known issues: ### CI changes ### #### Issues hit #### * boot: - shard-glk: ([PASS][3], [PASS][4], [PASS][5], [PASS][6], [PASS][7], [PASS][8], [PASS][9], [PASS][10], [PASS][11], [PASS][12], [PASS][13], [PASS][14], [PASS][15], [PASS][16], [PASS][17], [PASS][18], [PASS][19], [PASS][20], [PASS][21], [PASS][22], [PASS][23], [PASS][24], [PASS][25]) -> ([PASS][26], [PASS][27], [PASS][28], [PASS][29], [PASS][30], [PASS][31], [PASS][32], [PASS][33], [PASS][34], [PASS][35], [FAIL][36], [PASS][37], [PASS][38], [PASS][39], [PASS][40], [PASS][41], [PASS][42], [PASS][43], [PASS][44], [PASS][45], [PASS][46], [PASS][47], [PASS][48]) ([i915#8293]) [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk7/boot.html [4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk7/boot.html [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk5/boot.html [6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk5/boot.html [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk5/boot.html [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk4/boot.html [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk4/boot.html [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk4/boot.html [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk3/boot.html [12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk3/boot.html [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk3/boot.html [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk2/boot.html [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk2/boot.html [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk2/boot.html [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk1/boot.html [18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk1/boot.html [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk1/boot.html [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk9/boot.html [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk9/boot.html [22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk8/boot.html [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk8/boot.html [24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk8/boot.html [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk7/boot.html [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk9/boot.html [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk9/boot.html [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk9/boot.html [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk8/boot.html [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk8/boot.html [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk8/boot.html [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk7/boot.html [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk7/boot.html [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk7/boot.html [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk5/boot.html [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk5/boot.html [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk5/boot.html [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk4/boot.html [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk4/boot.html [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk4/boot.html [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk3/boot.html [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk3/boot.html [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk2/boot.html [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk2/boot.html [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk2/boot.html [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk1/boot.html [47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk1/boot.html [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk1/boot.html ### IGT changes ### #### Issues hit #### * igt@api_intel_bb@blit-reloc-keep-cache: - shard-mtlp: NOTRUN -> [SKIP][49] ([i915#8411]) [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-2/igt@api_intel_bb@blit-reloc-keep-cache.html * igt@api_intel_bb@object-reloc-keep-cache: - shard-dg2: NOTRUN -> [SKIP][50] ([i915#8411]) [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@api_intel_bb@object-reloc-keep-cache.html * igt@device_reset@unbind-cold-reset-rebind: - shard-dg2: NOTRUN -> [SKIP][51] ([i915#7701]) [51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-3/igt@device_reset@unbind-cold-reset-rebind.html * igt@drm_fdinfo@busy@bcs0: - shard-mtlp: NOTRUN -> [SKIP][52] ([i915#8414]) +13 other tests skip [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-2/igt@drm_fdinfo@busy@bcs0.html * igt@drm_fdinfo@idle@rcs0: - shard-rkl: [PASS][53] -> [FAIL][54] ([i915#7742]) +1 other test fail [53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-rkl-5/igt@drm_fdinfo@idle@rcs0.html [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-1/igt@drm_fdinfo@idle@rcs0.html * igt@gem_bad_reloc@negative-reloc-bltcopy: - shard-mtlp: NOTRUN -> [SKIP][55] ([i915#3281]) +7 other tests skip [55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@gem_bad_reloc@negative-reloc-bltcopy.html * igt@gem_busy@semaphore: - shard-dg2: NOTRUN -> [SKIP][56] ([i915#3936]) [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-3/igt@gem_busy@semaphore.html * igt@gem_caching@reads: - shard-mtlp: NOTRUN -> [SKIP][57] ([i915#4873]) [57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-2/igt@gem_caching@reads.html * igt@gem_ccs@block-multicopy-inplace: - shard-mtlp: NOTRUN -> [SKIP][58] ([i915#3555] / [i915#9323]) [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@gem_ccs@block-multicopy-inplace.html * igt@gem_ccs@ctrl-surf-copy-new-ctx: - shard-tglu: NOTRUN -> [SKIP][59] ([i915#9323]) [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@gem_ccs@ctrl-surf-copy-new-ctx.html * igt@gem_ccs@suspend-resume: - shard-rkl: NOTRUN -> [SKIP][60] ([i915#9323]) [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@gem_ccs@suspend-resume.html - shard-mtlp: NOTRUN -> [SKIP][61] ([i915#9323]) [61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@gem_ccs@suspend-resume.html * igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-lmem0-lmem0: - shard-dg2: NOTRUN -> [INCOMPLETE][62] ([i915#10137] / [i915#7297]) [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-2/igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-lmem0-lmem0.html * igt@gem_close_race@multigpu-basic-threads: - shard-mtlp: NOTRUN -> [SKIP][63] ([i915#7697]) [63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-2/igt@gem_close_race@multigpu-basic-threads.html * igt@gem_ctx_exec@basic-nohangcheck: - shard-tglu: [PASS][64] -> [FAIL][65] ([i915#6268]) [64]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-tglu-5/igt@gem_ctx_exec@basic-nohangcheck.html [65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-2/igt@gem_ctx_exec@basic-nohangcheck.html * igt@gem_ctx_param@set-priority-not-supported: - shard-mtlp: NOTRUN -> [SKIP][66] ([fdo#109314]) [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@gem_ctx_param@set-priority-not-supported.html * igt@gem_ctx_persistence@heartbeat-stop: - shard-mtlp: NOTRUN -> [SKIP][67] ([i915#8555]) [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@gem_ctx_persistence@heartbeat-stop.html * igt@gem_ctx_sseu@engines: - shard-mtlp: NOTRUN -> [SKIP][68] ([i915#280]) [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-1/igt@gem_ctx_sseu@engines.html * igt@gem_eio@reset-stress: - shard-dg1: [PASS][69] -> [FAIL][70] ([i915#5784]) [69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-dg1-12/igt@gem_eio@reset-stress.html [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg1-19/igt@gem_eio@reset-stress.html * igt@gem_exec_balancer@bonded-false-hang: - shard-dg2: NOTRUN -> [SKIP][71] ([i915#4812]) +1 other test skip [71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@gem_exec_balancer@bonded-false-hang.html * igt@gem_exec_balancer@bonded-semaphore: - shard-mtlp: NOTRUN -> [SKIP][72] ([i915#4812]) [72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-2/igt@gem_exec_balancer@bonded-semaphore.html * igt@gem_exec_balancer@bonded-sync: - shard-dg2: NOTRUN -> [SKIP][73] ([i915#4771]) [73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-2/igt@gem_exec_balancer@bonded-sync.html - shard-mtlp: NOTRUN -> [SKIP][74] ([i915#4771]) [74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@gem_exec_balancer@bonded-sync.html * igt@gem_exec_balancer@invalid-bonds: - shard-dg2: NOTRUN -> [SKIP][75] ([i915#4036]) [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-3/igt@gem_exec_balancer@invalid-bonds.html * igt@gem_exec_balancer@parallel-contexts: - shard-rkl: NOTRUN -> [SKIP][76] ([i915#4525]) [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@gem_exec_balancer@parallel-contexts.html * igt@gem_exec_capture@capture-invisible@smem0: - shard-tglu: NOTRUN -> [SKIP][77] ([i915#6334]) [77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@gem_exec_capture@capture-invisible@smem0.html * igt@gem_exec_capture@many-4k-incremental: - shard-mtlp: NOTRUN -> [FAIL][78] ([i915#9606]) +1 other test fail [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-1/igt@gem_exec_capture@many-4k-incremental.html * igt@gem_exec_fair@basic-none-vip: - shard-mtlp: NOTRUN -> [SKIP][79] ([i915#4473] / [i915#4771]) [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@gem_exec_fair@basic-none-vip.html - shard-dg2: NOTRUN -> [SKIP][80] ([i915#3539] / [i915#4852]) +2 other tests skip [80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-2/igt@gem_exec_fair@basic-none-vip.html * igt@gem_exec_fair@basic-none-vip@rcs0: - shard-rkl: NOTRUN -> [FAIL][81] ([i915#2842]) [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@gem_exec_fair@basic-none-vip@rcs0.html * igt@gem_exec_fair@basic-pace: - shard-dg2: NOTRUN -> [SKIP][82] ([i915#3539]) [82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-3/igt@gem_exec_fair@basic-pace.html * igt@gem_exec_fair@basic-pace-solo@rcs0: - shard-tglu: [PASS][83] -> [FAIL][84] ([i915#2842]) [83]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-tglu-9/igt@gem_exec_fair@basic-pace-solo@rcs0.html [84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-3/igt@gem_exec_fair@basic-pace-solo@rcs0.html * igt@gem_exec_params@rsvd2-dirt: - shard-mtlp: NOTRUN -> [SKIP][85] ([i915#5107]) [85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-2/igt@gem_exec_params@rsvd2-dirt.html * igt@gem_exec_params@secure-non-root: - shard-tglu: NOTRUN -> [SKIP][86] ([fdo#112283]) [86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@gem_exec_params@secure-non-root.html * igt@gem_exec_reloc@basic-gtt-read: - shard-dg2: NOTRUN -> [SKIP][87] ([i915#3281]) +7 other tests skip [87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-3/igt@gem_exec_reloc@basic-gtt-read.html * igt@gem_exec_reloc@basic-write-read-noreloc: - shard-rkl: NOTRUN -> [SKIP][88] ([i915#3281]) [88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@gem_exec_reloc@basic-write-read-noreloc.html * igt@gem_exec_schedule@preempt-queue-contexts-chain: - shard-mtlp: NOTRUN -> [SKIP][89] ([i915#4537] / [i915#4812]) [89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@gem_exec_schedule@preempt-queue-contexts-chain.html - shard-dg2: NOTRUN -> [SKIP][90] ([i915#4537] / [i915#4812]) +1 other test skip [90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-2/igt@gem_exec_schedule@preempt-queue-contexts-chain.html * igt@gem_fence_thrash@bo-write-verify-y: - shard-dg2: NOTRUN -> [SKIP][91] ([i915#4860]) [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-2/igt@gem_fence_thrash@bo-write-verify-y.html * igt@gem_fenced_exec_thrash@no-spare-fences-interruptible: - shard-mtlp: NOTRUN -> [SKIP][92] ([i915#4860]) +3 other tests skip [92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@gem_fenced_exec_thrash@no-spare-fences-interruptible.html * igt@gem_lmem_swapping@heavy-verify-multi: - shard-mtlp: NOTRUN -> [SKIP][93] ([i915#4613]) +2 other tests skip [93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-1/igt@gem_lmem_swapping@heavy-verify-multi.html * igt@gem_lmem_swapping@heavy-verify-random-ccs: - shard-glk: NOTRUN -> [SKIP][94] ([fdo#109271] / [i915#4613]) +1 other test skip [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk2/igt@gem_lmem_swapping@heavy-verify-random-ccs.html * igt@gem_lmem_swapping@parallel-random-engines: - shard-rkl: NOTRUN -> [SKIP][95] ([i915#4613]) [95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@gem_lmem_swapping@parallel-random-engines.html * igt@gem_lmem_swapping@smem-oom@lmem0: - shard-dg2: [PASS][96] -> [TIMEOUT][97] ([i915#5493]) [96]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-dg2-5/igt@gem_lmem_swapping@smem-oom@lmem0.html [97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-1/igt@gem_lmem_swapping@smem-oom@lmem0.html - shard-dg1: [PASS][98] -> [TIMEOUT][99] ([i915#5493]) [98]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-dg1-15/igt@gem_lmem_swapping@smem-oom@lmem0.html [99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg1-18/igt@gem_lmem_swapping@smem-oom@lmem0.html * igt@gem_lmem_swapping@verify-ccs: - shard-tglu: NOTRUN -> [SKIP][100] ([i915#4613]) +1 other test skip [100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@gem_lmem_swapping@verify-ccs.html * igt@gem_media_fill@media-fill: - shard-mtlp: NOTRUN -> [SKIP][101] ([i915#8289]) [101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@gem_media_fill@media-fill.html * igt@gem_mmap@bad-size: - shard-dg2: NOTRUN -> [SKIP][102] ([i915#4083]) +3 other tests skip [102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@gem_mmap@bad-size.html * igt@gem_mmap_gtt@coherency: - shard-tglu: NOTRUN -> [SKIP][103] ([fdo#111656]) [103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-4/igt@gem_mmap_gtt@coherency.html * igt@gem_mmap_wc@coherency: - shard-mtlp: NOTRUN -> [SKIP][104] ([i915#4083]) +7 other tests skip [104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-1/igt@gem_mmap_wc@coherency.html * igt@gem_partial_pwrite_pread@reads: - shard-dg2: NOTRUN -> [SKIP][105] ([i915#3282]) +3 other tests skip [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@gem_partial_pwrite_pread@reads.html * igt@gem_pwrite@basic-exhaustion: - shard-rkl: NOTRUN -> [SKIP][106] ([i915#3282]) +3 other tests skip [106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@gem_pwrite@basic-exhaustion.html * igt@gem_pxp@display-protected-crc: - shard-tglu: NOTRUN -> [SKIP][107] ([i915#4270]) [107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@gem_pxp@display-protected-crc.html * igt@gem_pxp@protected-raw-src-copy-not-readible: - shard-rkl: NOTRUN -> [SKIP][108] ([i915#4270]) [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@gem_pxp@protected-raw-src-copy-not-readible.html * igt@gem_pxp@reject-modify-context-protection-off-3: - shard-dg2: NOTRUN -> [SKIP][109] ([i915#4270]) [109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@gem_pxp@reject-modify-context-protection-off-3.html * igt@gem_pxp@verify-pxp-stale-buf-execution: - shard-mtlp: NOTRUN -> [SKIP][110] ([i915#4270]) +3 other tests skip [110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@gem_pxp@verify-pxp-stale-buf-execution.html * igt@gem_readwrite@new-obj: - shard-mtlp: NOTRUN -> [SKIP][111] ([i915#3282]) +6 other tests skip [111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@gem_readwrite@new-obj.html * igt@gem_render_copy@y-tiled-to-vebox-y-tiled: - shard-mtlp: NOTRUN -> [SKIP][112] ([i915#8428]) +5 other tests skip [112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@gem_render_copy@y-tiled-to-vebox-y-tiled.html * igt@gem_render_tiled_blits@basic: - shard-dg2: NOTRUN -> [SKIP][113] ([i915#4079]) [113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-2/igt@gem_render_tiled_blits@basic.html * igt@gem_softpin@evict-snoop-interruptible: - shard-dg2: NOTRUN -> [SKIP][114] ([i915#4885]) +1 other test skip [114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@gem_softpin@evict-snoop-interruptible.html * igt@gem_tiled_partial_pwrite_pread@writes: - shard-dg2: NOTRUN -> [SKIP][115] ([i915#4077]) +12 other tests skip [115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@gem_tiled_partial_pwrite_pread@writes.html * igt@gem_tiled_pread_basic: - shard-mtlp: NOTRUN -> [SKIP][116] ([i915#4079]) +2 other tests skip [116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@gem_tiled_pread_basic.html * igt@gem_tiling_max_stride: - shard-mtlp: NOTRUN -> [SKIP][117] ([i915#4077]) +10 other tests skip [117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@gem_tiling_max_stride.html * igt@gem_userptr_blits@access-control: - shard-mtlp: NOTRUN -> [SKIP][118] ([i915#3297]) +5 other tests skip [118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@gem_userptr_blits@access-control.html - shard-dg2: NOTRUN -> [SKIP][119] ([i915#3297]) [119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-2/igt@gem_userptr_blits@access-control.html - shard-rkl: NOTRUN -> [SKIP][120] ([i915#3297]) [120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@gem_userptr_blits@access-control.html * igt@gen7_exec_parse@chained-batch: - shard-mtlp: NOTRUN -> [SKIP][121] ([fdo#109289]) +2 other tests skip [121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-1/igt@gen7_exec_parse@chained-batch.html * igt@gen9_exec_parse@allowed-all: - shard-mtlp: NOTRUN -> [SKIP][122] ([i915#2856]) +2 other tests skip [122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@gen9_exec_parse@allowed-all.html * igt@gen9_exec_parse@allowed-single: - shard-dg2: NOTRUN -> [SKIP][123] ([i915#2856]) +1 other test skip [123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-2/igt@gen9_exec_parse@allowed-single.html - shard-rkl: NOTRUN -> [SKIP][124] ([i915#2527]) [124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@gen9_exec_parse@allowed-single.html * igt@gen9_exec_parse@bb-chained: - shard-tglu: NOTRUN -> [SKIP][125] ([i915#2527] / [i915#2856]) +1 other test skip [125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@gen9_exec_parse@bb-chained.html * igt@i915_module_load@load: - shard-mtlp: NOTRUN -> [SKIP][126] ([i915#6227]) [126]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@i915_module_load@load.html * igt@i915_module_load@reload-with-fault-injection: - shard-rkl: [PASS][127] -> [INCOMPLETE][128] ([i915#10137] / [i915#9849]) [127]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-rkl-7/igt@i915_module_load@reload-with-fault-injection.html [128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@i915_module_load@reload-with-fault-injection.html - shard-tglu: [PASS][129] -> [INCOMPLETE][130] ([i915#10137] / [i915#9200]) [129]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-tglu-4/igt@i915_module_load@reload-with-fault-injection.html [130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-3/igt@i915_module_load@reload-with-fault-injection.html - shard-dg2: [PASS][131] -> [INCOMPLETE][132] ([i915#10137] / [i915#9820] / [i915#9849]) [131]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-dg2-10/igt@i915_module_load@reload-with-fault-injection.html [132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-6/igt@i915_module_load@reload-with-fault-injection.html * igt@i915_pm_freq_mult@media-freq@gt0: - shard-rkl: NOTRUN -> [SKIP][133] ([i915#6590]) [133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@i915_pm_freq_mult@media-freq@gt0.html * igt@i915_pm_freq_mult@media-freq@gt1: - shard-mtlp: NOTRUN -> [SKIP][134] ([i915#6590]) +1 other test skip [134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@i915_pm_freq_mult@media-freq@gt1.html * igt@i915_pm_rps@min-max-config-loaded: - shard-mtlp: NOTRUN -> [SKIP][135] ([i915#6621]) [135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-2/igt@i915_pm_rps@min-max-config-loaded.html * igt@i915_pm_rps@reset: - shard-snb: [PASS][136] -> [INCOMPLETE][137] ([i915#10137] / [i915#7790]) [136]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-snb5/igt@i915_pm_rps@reset.html [137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-snb6/igt@i915_pm_rps@reset.html * igt@i915_query@query-topology-known-pci-ids: - shard-mtlp: NOTRUN -> [SKIP][138] ([fdo#109303]) [138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-1/igt@i915_query@query-topology-known-pci-ids.html * igt@i915_suspend@basic-s3-without-i915: - shard-mtlp: NOTRUN -> [SKIP][139] ([i915#6645]) [139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-1/igt@i915_suspend@basic-s3-without-i915.html * igt@intel_hwmon@hwmon-read: - shard-tglu: NOTRUN -> [SKIP][140] ([i915#7707]) [140]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@intel_hwmon@hwmon-read.html * igt@kms_addfb_basic@addfb25-x-tiled-mismatch-legacy: - shard-mtlp: NOTRUN -> [SKIP][141] ([i915#4212]) +1 other test skip [141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@kms_addfb_basic@addfb25-x-tiled-mismatch-legacy.html * igt@kms_addfb_basic@basic-x-tiled-legacy: - shard-dg2: NOTRUN -> [SKIP][142] ([i915#4212]) +2 other tests skip [142]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-3/igt@kms_addfb_basic@basic-x-tiled-legacy.html * igt@kms_async_flips@invalid-async-flip: - shard-mtlp: NOTRUN -> [SKIP][143] ([i915#6228]) [143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-2/igt@kms_async_flips@invalid-async-flip.html * igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels: - shard-glk: NOTRUN -> [SKIP][144] ([fdo#109271] / [i915#1769]) [144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk2/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html * igt@kms_big_fb@4-tiled-8bpp-rotate-0: - shard-rkl: NOTRUN -> [SKIP][145] ([i915#5286]) +1 other test skip [145]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@kms_big_fb@4-tiled-8bpp-rotate-0.html * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0: - shard-tglu: NOTRUN -> [SKIP][146] ([fdo#111615] / [i915#5286]) [146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0.html * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip: - shard-mtlp: [PASS][147] -> [FAIL][148] ([i915#5138]) [147]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-mtlp-5/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html [148]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-6/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html * igt@kms_big_fb@linear-32bpp-rotate-270: - shard-tglu: NOTRUN -> [SKIP][149] ([fdo#111614]) +1 other test skip [149]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-4/igt@kms_big_fb@linear-32bpp-rotate-270.html * igt@kms_big_fb@x-tiled-16bpp-rotate-270: - shard-dg2: NOTRUN -> [SKIP][150] ([fdo#111614]) [150]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@kms_big_fb@x-tiled-16bpp-rotate-270.html * igt@kms_big_fb@x-tiled-64bpp-rotate-90: - shard-mtlp: NOTRUN -> [SKIP][151] ([fdo#111614]) +2 other tests skip [151]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-1/igt@kms_big_fb@x-tiled-64bpp-rotate-90.html * igt@kms_big_fb@y-tiled-32bpp-rotate-180: - shard-mtlp: NOTRUN -> [SKIP][152] ([fdo#111615]) +9 other tests skip [152]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@kms_big_fb@y-tiled-32bpp-rotate-180.html * igt@kms_big_fb@y-tiled-8bpp-rotate-180: - shard-dg2: NOTRUN -> [SKIP][153] ([i915#4538] / [i915#5190]) +5 other tests skip [153]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-2/igt@kms_big_fb@y-tiled-8bpp-rotate-180.html * igt@kms_big_fb@y-tiled-addfb-size-offset-overflow: - shard-dg2: NOTRUN -> [SKIP][154] ([i915#5190]) +4 other tests skip [154]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@kms_big_fb@y-tiled-addfb-size-offset-overflow.html * igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip: - shard-tglu: [PASS][155] -> [FAIL][156] ([i915#3743]) +1 other test fail [155]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-tglu-5/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip.html [156]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-6/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip.html * igt@kms_big_fb@yf-tiled-64bpp-rotate-0: - shard-tglu: NOTRUN -> [SKIP][157] ([fdo#111615]) +2 other tests skip [157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-4/igt@kms_big_fb@yf-tiled-64bpp-rotate-0.html * igt@kms_big_fb@yf-tiled-8bpp-rotate-90: - shard-rkl: NOTRUN -> [SKIP][158] ([fdo#110723]) +1 other test skip [158]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@kms_big_fb@yf-tiled-8bpp-rotate-90.html * igt@kms_big_fb@yf-tiled-addfb: - shard-mtlp: NOTRUN -> [SKIP][159] ([i915#6187]) +1 other test skip [159]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-2/igt@kms_big_fb@yf-tiled-addfb.html * igt@kms_ccs@pipe-b-crc-primary-rotation-180-4-tiled-dg2-mc-ccs: - shard-rkl: NOTRUN -> [SKIP][160] ([i915#5354] / [i915#6095]) +5 other tests skip [160]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@kms_ccs@pipe-b-crc-primary-rotation-180-4-tiled-dg2-mc-ccs.html * igt@kms_ccs@pipe-b-random-ccs-data-y-tiled-gen12-rc-ccs-cc: - shard-mtlp: NOTRUN -> [SKIP][161] ([i915#5354] / [i915#6095]) +41 other tests skip [161]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-2/igt@kms_ccs@pipe-b-random-ccs-data-y-tiled-gen12-rc-ccs-cc.html * igt@kms_ccs@pipe-c-crc-primary-rotation-180-4-tiled-mtl-mc-ccs: - shard-glk: NOTRUN -> [SKIP][162] ([fdo#109271]) +123 other tests skip [162]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk1/igt@kms_ccs@pipe-c-crc-primary-rotation-180-4-tiled-mtl-mc-ccs.html * igt@kms_ccs@pipe-d-bad-rotation-90-y-tiled-ccs: - shard-tglu: NOTRUN -> [SKIP][163] ([i915#5354] / [i915#6095]) +24 other tests skip [163]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@kms_ccs@pipe-d-bad-rotation-90-y-tiled-ccs.html * igt@kms_ccs@pipe-d-random-ccs-data-y-tiled-gen12-rc-ccs-cc: - shard-rkl: NOTRUN -> [SKIP][164] ([i915#5354]) +6 other tests skip [164]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@kms_ccs@pipe-d-random-ccs-data-y-tiled-gen12-rc-ccs-cc.html * igt@kms_cdclk@mode-transition-all-outputs: - shard-tglu: NOTRUN -> [SKIP][165] ([i915#3742]) [165]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@kms_cdclk@mode-transition-all-outputs.html * igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-1: - shard-dg2: NOTRUN -> [SKIP][166] ([i915#7213]) +3 other tests skip [166]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-1.html * igt@kms_chamelium_color@ctm-0-25: - shard-tglu: NOTRUN -> [SKIP][167] ([fdo#111827]) +1 other test skip [167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-4/igt@kms_chamelium_color@ctm-0-25.html * igt@kms_chamelium_color@gamma: - shard-mtlp: NOTRUN -> [SKIP][168] ([fdo#111827]) +2 other tests skip [168]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@kms_chamelium_color@gamma.html * igt@kms_chamelium_edid@dp-edid-stress-resolution-non-4k: - shard-dg2: NOTRUN -> [SKIP][169] ([i915#7828]) +5 other tests skip [169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-2/igt@kms_chamelium_edid@dp-edid-stress-resolution-non-4k.html - shard-rkl: NOTRUN -> [SKIP][170] ([i915#7828]) +1 other test skip [170]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@kms_chamelium_edid@dp-edid-stress-resolution-non-4k.html * igt@kms_chamelium_hpd@dp-hpd-for-each-pipe: - shard-mtlp: NOTRUN -> [SKIP][171] ([i915#7828]) +5 other tests skip [171]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@kms_chamelium_hpd@dp-hpd-for-each-pipe.html * igt@kms_chamelium_hpd@vga-hpd-with-enabled-mode: - shard-tglu: NOTRUN -> [SKIP][172] ([i915#7828]) +3 other tests skip [172]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@kms_chamelium_hpd@vga-hpd-with-enabled-mode.html * igt@kms_content_protection@atomic: - shard-mtlp: NOTRUN -> [SKIP][173] ([i915#6944] / [i915#9424]) [173]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-2/igt@kms_content_protection@atomic.html * igt@kms_content_protection@content-type-change: - shard-tglu: NOTRUN -> [SKIP][174] ([i915#6944] / [i915#9424]) [174]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-4/igt@kms_content_protection@content-type-change.html * igt@kms_cursor_crc@cursor-offscreen-128x42: - shard-mtlp: NOTRUN -> [SKIP][175] ([i915#8814]) +2 other tests skip [175]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-1/igt@kms_cursor_crc@cursor-offscreen-128x42.html * igt@kms_cursor_crc@cursor-offscreen-512x170: - shard-mtlp: NOTRUN -> [SKIP][176] ([i915#3359]) +1 other test skip [176]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@kms_cursor_crc@cursor-offscreen-512x170.html - shard-rkl: NOTRUN -> [SKIP][177] ([fdo#109279] / [i915#3359]) [177]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@kms_cursor_crc@cursor-offscreen-512x170.html * igt@kms_cursor_crc@cursor-random-32x10: - shard-mtlp: NOTRUN -> [SKIP][178] ([i915#3555] / [i915#8814]) +1 other test skip [178]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@kms_cursor_crc@cursor-random-32x10.html * igt@kms_cursor_crc@cursor-random-512x512: - shard-tglu: NOTRUN -> [SKIP][179] ([i915#3359]) [179]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@kms_cursor_crc@cursor-random-512x512.html * igt@kms_cursor_crc@cursor-rapid-movement-32x32: - shard-rkl: NOTRUN -> [SKIP][180] ([i915#3555]) +4 other tests skip [180]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@kms_cursor_crc@cursor-rapid-movement-32x32.html * igt@kms_cursor_crc@cursor-sliding-32x32: - shard-tglu: NOTRUN -> [SKIP][181] ([i915#3555]) +3 other tests skip [181]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@kms_cursor_crc@cursor-sliding-32x32.html * igt@kms_cursor_crc@cursor-sliding-512x512: - shard-dg2: NOTRUN -> [SKIP][182] ([i915#3359]) [182]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-3/igt@kms_cursor_crc@cursor-sliding-512x512.html * igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic: - shard-mtlp: NOTRUN -> [SKIP][183] ([i915#9809]) +3 other tests skip [183]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-1/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic.html * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic: - shard-mtlp: NOTRUN -> [SKIP][184] ([i915#4213]) [184]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-2/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html * igt@kms_cursor_legacy@cursorb-vs-flipa-legacy: - shard-rkl: NOTRUN -> [SKIP][185] ([fdo#111825]) +2 other tests skip [185]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@kms_cursor_legacy@cursorb-vs-flipa-legacy.html * igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size: - shard-dg2: NOTRUN -> [SKIP][186] ([fdo#109274] / [i915#5354]) +2 other tests skip [186]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size.html * igt@kms_cursor_legacy@cursorb-vs-flipb-legacy: - shard-tglu: NOTRUN -> [SKIP][187] ([fdo#109274]) [187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@kms_cursor_legacy@cursorb-vs-flipb-legacy.html * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size: - shard-glk: NOTRUN -> [FAIL][188] ([i915#2346]) [188]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk2/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html * igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle: - shard-dg2: NOTRUN -> [SKIP][189] ([i915#4103] / [i915#4213]) [189]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html * igt@kms_dirtyfb@drrs-dirtyfb-ioctl: - shard-tglu: NOTRUN -> [SKIP][190] ([i915#9723]) [190]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@kms_dirtyfb@drrs-dirtyfb-ioctl.html * igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-hdmi-a-2: - shard-rkl: NOTRUN -> [SKIP][191] ([fdo#110189] / [i915#9723]) [191]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-1/igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-hdmi-a-2.html * igt@kms_dither@fb-8bpc-vs-panel-8bpc: - shard-dg2: NOTRUN -> [SKIP][192] ([i915#3555]) +7 other tests skip [192]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@kms_dither@fb-8bpc-vs-panel-8bpc.html * igt@kms_dsc@dsc-with-output-formats: - shard-mtlp: NOTRUN -> [SKIP][193] ([i915#3555] / [i915#3840]) [193]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@kms_dsc@dsc-with-output-formats.html * igt@kms_fbcon_fbt@psr-suspend: - shard-rkl: NOTRUN -> [SKIP][194] ([i915#3955]) [194]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@kms_fbcon_fbt@psr-suspend.html - shard-dg2: NOTRUN -> [SKIP][195] ([i915#3469]) [195]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-2/igt@kms_fbcon_fbt@psr-suspend.html * igt@kms_feature_discovery@chamelium: - shard-tglu: NOTRUN -> [SKIP][196] ([i915#2065] / [i915#4854]) [196]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@kms_feature_discovery@chamelium.html * igt@kms_feature_discovery@display-2x: - shard-mtlp: NOTRUN -> [SKIP][197] ([i915#1839]) +1 other test skip [197]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-1/igt@kms_feature_discovery@display-2x.html * igt@kms_fence_pin_leak: - shard-dg2: NOTRUN -> [SKIP][198] ([i915#4881]) [198]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-3/igt@kms_fence_pin_leak.html * igt@kms_flip@2x-flip-vs-blocking-wf-vblank: - shard-tglu: NOTRUN -> [SKIP][199] ([fdo#109274] / [fdo#111767] / [i915#3637]) [199]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-4/igt@kms_flip@2x-flip-vs-blocking-wf-vblank.html * igt@kms_flip@2x-flip-vs-modeset-vs-hang: - shard-dg2: NOTRUN -> [SKIP][200] ([fdo#109274]) +3 other tests skip [200]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-3/igt@kms_flip@2x-flip-vs-modeset-vs-hang.html * igt@kms_flip@2x-flip-vs-suspend: - shard-mtlp: NOTRUN -> [SKIP][201] ([i915#3637]) +7 other tests skip [201]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@kms_flip@2x-flip-vs-suspend.html * igt@kms_flip@2x-plain-flip: - shard-tglu: NOTRUN -> [SKIP][202] ([fdo#109274] / [i915#3637]) +3 other tests skip [202]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-4/igt@kms_flip@2x-plain-flip.html * igt@kms_flip@flip-vs-fences: - shard-dg2: NOTRUN -> [SKIP][203] ([i915#8381]) +1 other test skip [203]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-3/igt@kms_flip@flip-vs-fences.html * igt@kms_flip@flip-vs-suspend@a-hdmi-a3: - shard-dg2: NOTRUN -> [INCOMPLETE][204] ([i915#4839]) [204]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-5/igt@kms_flip@flip-vs-suspend@a-hdmi-a3.html * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling@pipe-a-valid-mode: - shard-dg2: NOTRUN -> [SKIP][205] ([i915#2672]) +3 other tests skip [205]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-3/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling@pipe-a-valid-mode.html * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-upscaling@pipe-a-valid-mode: - shard-tglu: NOTRUN -> [SKIP][206] ([i915#2587] / [i915#2672]) +1 other test skip [206]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-4/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-upscaling@pipe-a-valid-mode.html * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling@pipe-a-default-mode: - shard-mtlp: NOTRUN -> [SKIP][207] ([i915#2672]) +3 other tests skip [207]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling@pipe-a-default-mode.html * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling@pipe-a-valid-mode: - shard-rkl: NOTRUN -> [SKIP][208] ([i915#2672]) +1 other test skip [208]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling@pipe-a-valid-mode.html * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode: - shard-dg2: NOTRUN -> [SKIP][209] ([i915#2672] / [i915#3555]) [209]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode.html * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling@pipe-a-default-mode: - shard-mtlp: NOTRUN -> [SKIP][210] ([i915#2672] / [i915#3555]) +1 other test skip [210]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-1/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling@pipe-a-default-mode.html * igt@kms_force_connector_basic@force-load-detect: - shard-mtlp: NOTRUN -> [SKIP][211] ([fdo#109285]) [211]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-1/igt@kms_force_connector_basic@force-load-detect.html * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-plflip-blt: - shard-dg2: [PASS][212] -> [FAIL][213] ([i915#6880]) [212]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-dg2-5/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-plflip-blt.html [213]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-plflip-blt.html * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-move: - shard-mtlp: NOTRUN -> [SKIP][214] ([i915#1825]) +31 other tests skip [214]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-move.html * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-cpu: - shard-snb: [PASS][215] -> [SKIP][216] ([fdo#109271]) +7 other tests skip [215]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-snb7/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-cpu.html [216]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-snb5/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-cpu.html * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-gtt: - shard-mtlp: NOTRUN -> [SKIP][217] ([i915#8708]) +12 other tests skip [217]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-gtt.html * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-pwrite: - shard-dg2: NOTRUN -> [SKIP][218] ([i915#5354]) +41 other tests skip [218]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-pwrite.html * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-render: - shard-tglu: NOTRUN -> [SKIP][219] ([fdo#109280]) +16 other tests skip [219]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-render.html * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-draw-render: - shard-dg2: NOTRUN -> [SKIP][220] ([i915#3458]) +10 other tests skip [220]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-draw-render.html * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-mmap-gtt: - shard-dg2: NOTRUN -> [SKIP][221] ([i915#8708]) +8 other tests skip [221]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-mmap-gtt.html * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-mmap-wc: - shard-mtlp: NOTRUN -> [SKIP][222] ([fdo#111767] / [i915#1825]) +1 other test skip [222]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-mmap-wc.html * igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-pwrite: - shard-rkl: NOTRUN -> [SKIP][223] ([i915#3023]) +5 other tests skip [223]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-pwrite.html * igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-pwrite: - shard-tglu: NOTRUN -> [SKIP][224] ([fdo#110189]) +6 other tests skip [224]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-pwrite.html * igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-draw-blt: - shard-rkl: NOTRUN -> [SKIP][225] ([fdo#111825] / [i915#1825]) +6 other tests skip [225]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-draw-blt.html * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-onoff: - shard-dg2: NOTRUN -> [SKIP][226] ([fdo#111767] / [i915#5354]) +3 other tests skip [226]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-2/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-onoff.html - shard-rkl: NOTRUN -> [SKIP][227] ([fdo#111767] / [fdo#111825] / [i915#1825]) +1 other test skip [227]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-onoff.html * igt@kms_hdr@bpc-switch: - shard-rkl: NOTRUN -> [SKIP][228] ([i915#3555] / [i915#8228]) [228]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@kms_hdr@bpc-switch.html * igt@kms_hdr@invalid-metadata-sizes: - shard-dg2: NOTRUN -> [SKIP][229] ([i915#3555] / [i915#8228]) +2 other tests skip [229]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@kms_hdr@invalid-metadata-sizes.html * igt@kms_hdr@static-toggle-dpms: - shard-tglu: NOTRUN -> [SKIP][230] ([i915#3555] / [i915#8228]) [230]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@kms_hdr@static-toggle-dpms.html * igt@kms_multipipe_modeset@basic-max-pipe-crc-check: - shard-tglu: NOTRUN -> [SKIP][231] ([i915#1839]) [231]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-4/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html * igt@kms_pipe_b_c_ivb@from-pipe-c-to-b-with-3-lanes: - shard-tglu: NOTRUN -> [SKIP][232] ([fdo#109289]) +1 other test skip [232]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-4/igt@kms_pipe_b_c_ivb@from-pipe-c-to-b-with-3-lanes.html * igt@kms_plane_lowres@tiling-x@pipe-a-edp-1: - shard-mtlp: NOTRUN -> [SKIP][233] ([i915#3582]) +7 other tests skip [233]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-2/igt@kms_plane_lowres@tiling-x@pipe-a-edp-1.html * igt@kms_plane_multiple@tiling-y: - shard-mtlp: NOTRUN -> [SKIP][234] ([i915#3555] / [i915#8806]) [234]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-1/igt@kms_plane_multiple@tiling-y.html * igt@kms_plane_scaling@plane-downscale-factor-0-25-with-modifiers@pipe-a-hdmi-a-2: - shard-dg2: NOTRUN -> [SKIP][235] ([i915#9423]) +3 other tests skip [235]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-3/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-modifiers@pipe-a-hdmi-a-2.html * igt@kms_plane_scaling@plane-downscale-factor-0-75-with-rotation@pipe-c-hdmi-a-4: - shard-dg1: NOTRUN -> [SKIP][236] ([i915#9423]) +19 other tests skip [236]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg1-19/igt@kms_plane_scaling@plane-downscale-factor-0-75-with-rotation@pipe-c-hdmi-a-4.html * igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b-hdmi-a-1: - shard-rkl: NOTRUN -> [SKIP][237] ([i915#9423]) +9 other tests skip [237]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-5/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b-hdmi-a-1.html * igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation@pipe-a-hdmi-a-3: - shard-dg1: NOTRUN -> [SKIP][238] ([i915#5176] / [i915#9423]) +3 other tests skip [238]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg1-13/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation@pipe-a-hdmi-a-3.html * igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation@pipe-b-hdmi-a-2: - shard-rkl: NOTRUN -> [SKIP][239] ([i915#5176] / [i915#9423]) +1 other test skip [239]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-1/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation@pipe-b-hdmi-a-2.html * igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-d-hdmi-a-1: - shard-tglu: NOTRUN -> [SKIP][240] ([i915#9423]) +3 other tests skip [240]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-d-hdmi-a-1.html * igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-b-hdmi-a-3: - shard-dg2: NOTRUN -> [SKIP][241] ([i915#5235] / [i915#9423]) +7 other tests skip [241]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-5/igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-b-hdmi-a-3.html * igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-b-hdmi-a-2: - shard-rkl: NOTRUN -> [SKIP][242] ([i915#5235]) +5 other tests skip [242]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-1/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-b-hdmi-a-2.html * igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-c-hdmi-a-1: - shard-tglu: NOTRUN -> [SKIP][243] ([i915#5235]) +3 other tests skip [243]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-4/igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-c-hdmi-a-1.html * igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-5@pipe-d-edp-1: - shard-mtlp: NOTRUN -> [SKIP][244] ([i915#5235]) +13 other tests skip [244]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-5@pipe-d-edp-1.html * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-a-hdmi-a-2: - shard-dg2: NOTRUN -> [SKIP][245] ([i915#5235] / [i915#9423] / [i915#9728]) +3 other tests skip [245]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-3/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-a-hdmi-a-2.html * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-c-hdmi-a-3: - shard-dg1: NOTRUN -> [SKIP][246] ([i915#5235]) +11 other tests skip [246]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg1-12/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-c-hdmi-a-3.html * igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-75@pipe-d-edp-1: - shard-mtlp: NOTRUN -> [SKIP][247] ([i915#3555] / [i915#5235]) +1 other test skip [247]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-1/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-75@pipe-d-edp-1.html * igt@kms_pm_dc@dc3co-vpb-simulation: - shard-tglu: NOTRUN -> [SKIP][248] ([i915#9685]) [248]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-4/igt@kms_pm_dc@dc3co-vpb-simulation.html * igt@kms_pm_rpm@modeset-lpsp-stress-no-wait: - shard-rkl: [PASS][249] -> [SKIP][250] ([i915#9519]) +1 other test skip [249]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-rkl-4/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html [250]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-1/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html * igt@kms_pm_rpm@modeset-pc8-residency-stress: - shard-dg2: NOTRUN -> [SKIP][251] ([fdo#109293] / [fdo#109506]) [251]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@kms_pm_rpm@modeset-pc8-residency-stress.html * igt@kms_prime@d3hot: - shard-tglu: NOTRUN -> [SKIP][252] ([i915#6524]) [252]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-4/igt@kms_prime@d3hot.html * igt@kms_psr2_sf@cursor-plane-update-sf: - shard-tglu: NOTRUN -> [SKIP][253] ([fdo#111068] / [i915#9683]) [253]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@kms_psr2_sf@cursor-plane-update-sf.html * igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area: - shard-dg2: NOTRUN -> [SKIP][254] ([i915#9683]) +1 other test skip [254]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area.html * igt@kms_psr2_su@frontbuffer-xrgb8888: - shard-mtlp: NOTRUN -> [SKIP][255] ([i915#4348]) [255]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-2/igt@kms_psr2_su@frontbuffer-xrgb8888.html * igt@kms_rotation_crc@bad-tiling: - shard-mtlp: NOTRUN -> [SKIP][256] ([i915#4235]) +2 other tests skip [256]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@kms_rotation_crc@bad-tiling.html * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180: - shard-mtlp: NOTRUN -> [SKIP][257] ([i915#5289]) [257]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html * igt@kms_setmode@invalid-clone-single-crtc: - shard-mtlp: NOTRUN -> [SKIP][258] ([i915#3555] / [i915#8809]) +1 other test skip [258]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@kms_setmode@invalid-clone-single-crtc.html * igt@kms_tv_load_detect@load-detect: - shard-dg2: NOTRUN -> [SKIP][259] ([fdo#109309]) [259]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@kms_tv_load_detect@load-detect.html * igt@kms_vrr@flip-suspend: - shard-mtlp: NOTRUN -> [SKIP][260] ([i915#3555] / [i915#8808]) [260]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@kms_vrr@flip-suspend.html * igt@kms_writeback@writeback-check-output-xrgb2101010: - shard-dg2: NOTRUN -> [SKIP][261] ([i915#2437] / [i915#9412]) [261]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@kms_writeback@writeback-check-output-xrgb2101010.html * igt@kms_writeback@writeback-fb-id: - shard-tglu: NOTRUN -> [SKIP][262] ([i915#2437]) [262]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@kms_writeback@writeback-fb-id.html * igt@perf@global-sseu-config: - shard-mtlp: NOTRUN -> [SKIP][263] ([i915#7387]) [263]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-1/igt@perf@global-sseu-config.html * igt@perf@per-context-mode-unprivileged: - shard-dg2: NOTRUN -> [SKIP][264] ([fdo#109289]) +1 other test skip [264]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-3/igt@perf@per-context-mode-unprivileged.html * igt@perf_pmu@cpu-hotplug: - shard-mtlp: NOTRUN -> [SKIP][265] ([i915#8850]) [265]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@perf_pmu@cpu-hotplug.html - shard-rkl: NOTRUN -> [SKIP][266] ([i915#8850]) [266]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@perf_pmu@cpu-hotplug.html * igt@perf_pmu@event-wait@rcs0: - shard-dg2: NOTRUN -> [SKIP][267] ([fdo#112283]) [267]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@perf_pmu@event-wait@rcs0.html * igt@prime_vgem@basic-gtt: - shard-mtlp: NOTRUN -> [SKIP][268] ([i915#3708] / [i915#4077]) [268]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@prime_vgem@basic-gtt.html * igt@prime_vgem@coherency-gtt: - shard-tglu: NOTRUN -> [SKIP][269] ([fdo#109295] / [fdo#111656]) [269]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-4/igt@prime_vgem@coherency-gtt.html * igt@syncobj_timeline@invalid-wait-zero-handles: - shard-mtlp: NOTRUN -> [FAIL][270] ([i915#9781]) [270]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-1/igt@syncobj_timeline@invalid-wait-zero-handles.html * igt@syncobj_wait@invalid-wait-zero-handles: - shard-tglu: NOTRUN -> [FAIL][271] ([i915#9779]) [271]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-4/igt@syncobj_wait@invalid-wait-zero-handles.html * igt@v3d/v3d_get_param@base-params: - shard-mtlp: NOTRUN -> [SKIP][272] ([i915#2575]) +10 other tests skip [272]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-1/igt@v3d/v3d_get_param@base-params.html * igt@v3d/v3d_submit_cl@bad-flag: - shard-tglu: NOTRUN -> [SKIP][273] ([fdo#109315] / [i915#2575]) +5 other tests skip [273]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-5/igt@v3d/v3d_submit_cl@bad-flag.html * igt@v3d/v3d_submit_cl@bad-multisync-out-sync: - shard-dg2: NOTRUN -> [SKIP][274] ([i915#2575]) +5 other tests skip [274]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@v3d/v3d_submit_cl@bad-multisync-out-sync.html * igt@v3d/v3d_wait_bo@unused-bo-0ns: - shard-rkl: NOTRUN -> [SKIP][275] ([fdo#109315]) +2 other tests skip [275]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@v3d/v3d_wait_bo@unused-bo-0ns.html * igt@vc4/vc4_label_bo@set-label: - shard-rkl: NOTRUN -> [SKIP][276] ([i915#7711]) +1 other test skip [276]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-7/igt@vc4/vc4_label_bo@set-label.html * igt@vc4/vc4_purgeable_bo@access-purgeable-bo-mem: - shard-tglu: NOTRUN -> [SKIP][277] ([i915#2575]) +3 other tests skip [277]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-4/igt@vc4/vc4_purgeable_bo@access-purgeable-bo-mem.html * igt@vc4/vc4_purgeable_bo@mark-unpurgeable-check-retained: - shard-dg2: NOTRUN -> [SKIP][278] ([i915#7711]) +5 other tests skip [278]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-2/igt@vc4/vc4_purgeable_bo@mark-unpurgeable-check-retained.html * igt@vc4/vc4_wait_bo@used-bo-0ns: - shard-mtlp: NOTRUN -> [SKIP][279] ([i915#7711]) +5 other tests skip [279]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-8/igt@vc4/vc4_wait_bo@used-bo-0ns.html #### Possible fixes #### * igt@drm_fdinfo@virtual-idle: - shard-rkl: [FAIL][280] ([i915#7742]) -> [PASS][281] [280]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-rkl-1/igt@drm_fdinfo@virtual-idle.html [281]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-5/igt@drm_fdinfo@virtual-idle.html * igt@gem_eio@hibernate: - shard-tglu: [ABORT][282] ([i915#10030] / [i915#7975] / [i915#8213]) -> [PASS][283] [282]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-tglu-10/igt@gem_eio@hibernate.html [283]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-4/igt@gem_eio@hibernate.html * igt@gem_exec_suspend@basic-s0@smem: - shard-dg2: [INCOMPLETE][284] ([i915#9275]) -> [PASS][285] [284]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-dg2-6/igt@gem_exec_suspend@basic-s0@smem.html [285]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-3/igt@gem_exec_suspend@basic-s0@smem.html * igt@gen9_exec_parse@allowed-single: - shard-glk: [ABORT][286] ([i915#5566]) -> [PASS][287] [286]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-glk1/igt@gen9_exec_parse@allowed-single.html [287]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-glk3/igt@gen9_exec_parse@allowed-single.html * igt@i915_module_load@reload-with-fault-injection: - shard-mtlp: [ABORT][288] ([i915#10131] / [i915#9820]) -> [PASS][289] [288]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-mtlp-8/igt@i915_module_load@reload-with-fault-injection.html [289]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-2/igt@i915_module_load@reload-with-fault-injection.html * igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip: - shard-tglu: [FAIL][290] ([i915#3743]) -> [PASS][291] [290]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-tglu-9/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html [291]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-4/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-blt: - shard-snb: [SKIP][292] ([fdo#109271] / [fdo#111767]) -> [PASS][293] [292]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-snb2/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-blt.html [293]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-snb7/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-blt.html * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff: - shard-snb: [SKIP][294] ([fdo#109271]) -> [PASS][295] +7 other tests pass [294]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-snb2/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff.html [295]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-snb7/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff.html * igt@kms_pm_dc@dc6-dpms: - shard-tglu: [FAIL][296] ([i915#9295]) -> [PASS][297] [296]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-tglu-7/igt@kms_pm_dc@dc6-dpms.html [297]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-6/igt@kms_pm_dc@dc6-dpms.html * igt@kms_pm_rpm@modeset-lpsp: - shard-dg2: [SKIP][298] ([i915#9519]) -> [PASS][299] +1 other test pass [298]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-dg2-1/igt@kms_pm_rpm@modeset-lpsp.html [299]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg2-10/igt@kms_pm_rpm@modeset-lpsp.html - shard-rkl: [SKIP][300] ([i915#9519]) -> [PASS][301] [300]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-rkl-1/igt@kms_pm_rpm@modeset-lpsp.html [301]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-2/igt@kms_pm_rpm@modeset-lpsp.html * igt@kms_universal_plane@cursor-fb-leak@pipe-b-edp-1: - shard-mtlp: [FAIL][302] ([i915#9196]) -> [PASS][303] [302]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-mtlp-5/igt@kms_universal_plane@cursor-fb-leak@pipe-b-edp-1.html [303]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-mtlp-6/igt@kms_universal_plane@cursor-fb-leak@pipe-b-edp-1.html * igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1: - shard-tglu: [FAIL][304] ([i915#9196]) -> [PASS][305] [304]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-tglu-2/igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1.html [305]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-tglu-10/igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1.html #### Warnings #### * igt@device_reset@unbind-reset-rebind: - shard-dg1: [INCOMPLETE][306] ([i915#10137] / [i915#9408] / [i915#9618]) -> [ABORT][307] ([i915#9618]) [306]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-dg1-18/igt@device_reset@unbind-reset-rebind.html [307]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg1-13/igt@device_reset@unbind-reset-rebind.html * igt@i915_module_load@reload-with-fault-injection: - shard-dg1: [ABORT][308] ([i915#9820]) -> [INCOMPLETE][309] ([i915#10137] / [i915#9849]) [308]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-dg1-13/igt@i915_module_load@reload-with-fault-injection.html [309]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg1-19/igt@i915_module_load@reload-with-fault-injection.html * igt@kms_content_protection@mei-interface: - shard-dg1: [SKIP][310] ([i915#9433]) -> [SKIP][311] ([i915#9424]) [310]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-dg1-13/igt@kms_content_protection@mei-interface.html [311]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-dg1-17/igt@kms_content_protection@mei-interface.html * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-draw-render: - shard-snb: [SKIP][312] ([fdo#109271] / [fdo#111767]) -> [SKIP][313] ([fdo#109271]) [312]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-snb2/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-draw-render.html [313]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-snb7/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-draw-render.html * igt@kms_pm_dc@dc9-dpms: - shard-rkl: [SKIP][314] ([i915#3361]) -> [SKIP][315] ([i915#4281]) [314]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14311/shard-rkl-1/igt@kms_pm_dc@dc9-dpms.html [315]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_128311v8/shard-rkl-5/igt@kms_pm_dc@dc9-dpms.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271 [fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274 [fdo#109279]: https://bugs.freedesktop.org/show_bug.cgi?id=109279 [fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280 [fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285 [fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289 [fdo#109293]: https://bugs.freedesktop.org/show_bug.cgi?id=109293 [fdo#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295 [fdo#109303]: https://bugs.freedesktop.org/show_bug.cgi?id=109303 [fdo#109309]: https://bugs.freedesktop.org/show_bug.cgi?id=109309 [fdo#109314]: https://bugs.freedesktop.org/show_bug.cgi?id=109314 [fdo#109315]: https://bugs.freedesktop.org/show_bug.cgi?id=109315 [fdo#109506]: https://bugs.freedesktop.org/show_bug.cgi?id=109506 [fdo#110189]: https://bugs.freedesktop.org/show_bug.cgi?id=110189 [fdo#110723]: https://bugs.freedesktop.org/show_bug.cgi?id=110723 [fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068 [fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614 [fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615 [fdo#111656]: https://bugs.freedesktop.org/show_bug.cgi?id=111656 [fdo#111767]: https://bugs.freedesktop.org/show_bug.cgi?id=111767 [fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825 [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827 [fdo#112283]: https://bugs.freedesktop.org/show_bug.cgi?id=112283 [i915#10030]: https://gitlab.freedesktop.org/drm/intel/issues/10030 [i915#10131]: https://gitlab.freedesktop.org/drm/intel/issues/10131 [i915#10137]: https://gitlab.freedesktop.org/drm/intel/issues/10137 [i915#10278]: https://gitlab.freedesktop.org/drm/intel/issues/10278 [i915#10282]: https://gitlab.freedesktop.org/drm/intel/issues/10282 [i915#1769]: https://gitlab.freedesktop.org/drm/intel/issues/1769 [i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825 [i915#1839]: https://gitlab.freedesktop.org/drm/intel/issues/1839 [i915#2065]: https://gitlab.freedesktop.org/drm/intel/issues/2065 [i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346 [i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437 [i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527 [i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575 [i915#2587]: https://gitlab.freedesktop.org/drm/intel/issues/2587 [i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672 [i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280 [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842 [i915#2856]: https://gitlab.freedesktop.org/drm/intel/issues/2856 [i915#3023]: https://gitlab.freedesktop.org/drm/intel/issues/3023 [i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281 [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282 [i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297 [i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359 [i915#3361]: https://gitlab.freedesktop.org/drm/intel/issues/3361 [i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458 [i915#3469]: https://gitlab.freedesktop.org/drm/intel/issues/3469 [i915#3539]: https://gitlab.freedesktop.org/drm/intel/issues/3539 [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555 [i915#3582]: https://gitlab.freedesktop.org/drm/intel/issues/3582 [i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637 [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708 [i915#3742]: https://gitlab.freedesktop.org/drm/intel/issues/3742 [i915#3743]: https://gitlab.freedesktop.org/drm/intel/issues/3743 [i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840 [i915#3936]: https://gitlab.freedesktop.org/drm/intel/issues/3936 [i915#3955]: https://gitlab.freedesktop.org/drm/intel/issues/3955 [i915#4036]: https://gitlab.freedesktop.org/drm/intel/issues/4036 [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077 [i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079 [i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083 [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103 [i915#4212]: https://gitlab.freedesktop.org/drm/intel/issues/4212 [i915#4213]: https://gitlab.freedesktop.org/drm/intel/issues/4213 [i915#4235]: https://gitlab.freedesktop.org/drm/intel/issues/4235 [i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270 [i915#4281]: https://gitlab.freedesktop.org/drm/intel/issues/4281 [i915#4348]: https://gitlab.freedesktop.org/drm/intel/issues/4348 [i915#4473]: https://gitlab.freedesktop.org/drm/intel/issues/4473 [i915#4525]: https://gitlab.freedesktop.org/drm/intel/issues/4525 [i915#4537]: https://gitlab.freedesktop.org/drm/intel/issues/4537 [i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538 [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613 [i915#4771]: https://gitlab.freedesktop.org/drm/intel/issues/4771 [i915#4812]: https://gitlab.freedesktop.org/drm/intel/issues/4812 [i915#4839]: https://gitlab.freedesktop.org/drm/intel/issues/4839 [i915#4852]: https://gitlab.freedesktop.org/drm/intel/issues/4852 [i915#4854]: https://gitlab.freedesktop.org/drm/intel/issues/4854 [i915#4860]: https://gitlab.freedesktop.org/drm/intel/issues/4860 [i915#4873]: https://gitlab.freedesktop.org/drm/intel/issues/4873 [i915#4881]: https://gitlab.freedesktop.org/drm/intel/issues/4881 [i915#4885]: https://gitlab.freedesktop.org/drm/intel/issues/4885 [i915#5107]: https://gitlab.freedesktop.org/drm/intel/issues/5107 [i915#5138]: https://gitlab.freedesktop.org/drm/intel/issues/5138 [i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176 [i915#5190]: https://gitlab.freedesktop.org/drm/intel/issues/5190 [i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235 [i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286 [i915#5289]: https://gitlab.freedesktop.org/drm/intel/issues/5289 [i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354 [i915#5493]: https://gitlab.freedesktop.org/drm/intel/issues/5493 [i915#5566]: https://gitlab.freedesktop.org/drm/intel/issues/5566 [i915#5784]: https://gitlab.freedesktop.org/drm/intel/issues/5784 [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095 [i915#6187]: https://gitlab.freedesktop.org/drm/intel/issues/6187 [i915#6227]: https://gitlab.freedesktop.org/drm/intel/issues/6227 [i915#6228]: https://gitlab.freedesktop.org/drm/intel/issues/6228 [i915#6268]: https://gitlab.freedesktop.org/drm/intel/issues/6268 [i915#6334]: https://gitlab.freedesktop.org/drm/intel/issues/6334 [i915#6524]: https://gitlab.freedesktop.org/drm/intel/issues/6524 [i915#6590]: https://gitlab.freedesktop.org/drm/intel/issues/6590 [i915#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621 [i915#6645]: https://gitlab.freedesktop.org/drm/intel/issues/6645 [i915#6880]: https://gitlab.freedesktop.org/drm/intel/issues/6880 [i915#6944]: https://gitlab.freedesktop.org/drm/intel/issues/6944 [i915#7213]: https://gitlab.freedesktop.org/drm/intel/issues/7213 [i915#7297]: https://gitlab.freedesktop.org/drm/intel/issues/7297 [i915#7387]: https://gitlab.freedesktop.org/drm/intel/issues/7387 [i915#7697]: https://gitlab.freedesktop.org/drm/intel/issues/7697 [i915#7701]: https://gitlab.freedesktop.org/drm/intel/issues/7701 [i915#7707]: https://gitlab.freedesktop.org/drm/intel/issues/7707 [i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711 [i915#7742]: https://gitlab.freedesktop.org/drm/intel/issues/7742 [i915#7790]: https://gitlab.freedesktop.org/drm/intel/issues/7790 [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828 [i915#7975]: https://gitlab.freedesktop.org/drm/intel/issues/7975 [i915#8213]: https://gitlab.freedesktop.org/drm/intel/issues/8213 [i915#8228]: https://gitlab.freedesktop.org/drm/intel/issues/8228 [i915#8289]: https://gitlab.freedesktop.org/drm/intel/issues/8289 [i915#8293]: https://gitlab.freedesktop.org/drm/intel/issues/8293 [i915#8381]: https://gitlab.freedesktop.org/drm/intel/issues/8381 [i915#8411]: https://gitlab.freedesktop.org/drm/intel/issues/8411 [i915#8414]: https://gitlab.freedesktop.org/drm/intel/issues/8414 [i915#8428]: https://gitlab.freedesktop.org/drm/intel/issues/8428 [i915#8555]: https://gitlab.freedesktop.org/drm/intel/issues/8555 [i915#8708]: https://gitlab.freedesktop.org/drm/intel/issues/8708 [i915#8806]: https://gitlab.freedesktop.org/drm/intel/issues/8806 [i915#8808]: https://gitlab.freedesktop.org/drm/intel/issues/8808 [i915#8809]: https://gitlab.freedesktop.org/drm/intel/issues/8809 [i915#8814]: https://gitlab.freedesktop.org/drm/intel/issues/8814 [i915#8850]: https://gitlab.freedesktop.org/drm/intel/issues/8850 [i915#9196]: https://gitlab.freedesktop.org/drm/intel/issues/9196 [i915#9200]: https://gitlab.freedesktop.org/drm/intel/issues/9200 [i915#9275]: https://gitlab.freedesktop.org/drm/intel/issues/9275 [i915#9295]: https://gitlab.freedesktop.org/drm/intel/issues/9295 [i915#9323]: https://gitlab.freedesktop.org/drm/intel/issues/9323 [i915#9408]: https://gitlab.freedesktop.org/drm/intel/issues/9408 [i915#9412]: https://gitlab.freedesktop.org/drm/intel/issues/9412 [i915#9423]: https://gitlab.freedesktop.org/drm/intel/issues/9423 [i915#9424]: https://gitlab.freedesktop.org/drm/intel/issues/9424 [i915#9433]: https://gitlab.freedesktop.org/drm/intel/issues/9433 [i915#9519]: https://gitlab.freedesktop.org/drm/intel/issues/9519 [i915#9606]: https://gitlab.freedesktop.org/drm/intel/issues/9606 [i915#9618]: https://gitlab.freedesktop.org/drm/intel/issues/9618 [i915#9683]: https://gitlab.freedesktop.org/drm/intel/issues/9683 [i915#9685]: https://gitlab.freedesktop.org/drm/intel/issues/9685 [i915#9688]: https://gitlab.freedesktop.org/drm/intel/issues/9688 [i915#9723]: https://gitlab.freedesktop.org/drm/intel/issues/9723 [i915#9728]: https://gitlab.freedesktop.org/drm/intel/issues/9728 [i915#9732]: https://gitlab.freedesktop.org/drm/intel/issues/9732 [i915#9779]: https://gitlab.freedesktop.org/drm/intel/issues/9779 [i915#9781]: https://gitlab.freedesktop.org/drm/intel/issues/9781 [i915#9808]: https://gitlab.freedesktop.org/drm/intel/issues/9808 [i915#9809]: https://gitlab.freedesktop.org/drm/intel/issues/9809 [i915#9820]: https://gitlab.freedesktop.org/drm/intel/issues/9820 [i915#9849]: https://gitlab.freedesktop.org/drm/intel/issues/9849 [i915#9906]: https://gitlab.freedesktop.org/drm/intel/issues/9906 Build changes ------------- * Linux: CI_DRM_14311 -> Patchwork_128311v8 CI-20190529: 20190529 CI_DRM_14311: 06b279b4fb58a00667e47fafed72bba923d032ae @ git://anongit.freedesktop.org/gfx-ci/linux IGT_7720: 7720 Patchwork_128311v8: 06b279b4fb58a00667e47fafed72bba923d032ae @ 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_128311v8/index.html [-- Attachment #2: Type: text/html, Size: 98821 bytes --] ^ permalink raw reply [flat|nested] 34+ messages in thread
* [PATCH 0/3] Bigjoiner refactoring
@ 2024-02-20 22:09 Stanislav Lisovskiy
2024-02-20 22:09 ` [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 Stanislav Lisovskiy
0 siblings, 1 reply; 34+ messages in thread
From: Stanislav Lisovskiy @ 2024-02-20 22:09 UTC (permalink / raw)
To: intel-gfx
Cc: jani.saarinen, Stanislav.Lisovskiy, ville.syrjala, vidya.srinivas
There are few things we need to do for bigjoiner, in order
to improve code maintenance and also make testing for Bigjoiner
easier.
Those series contain addition of bigjoiner force debugfs option,
in order to be able to force bigjoiner even if there is no display
support, also we refactor pipe vs transcoder logic, as currently
it is a bit scattered between *_commit_modeset_enables/disables
and *_crtc_enable/disable functions. Same applies to encoders.
We made a decision to handle all the slaves in correspondent master
hook, so slaves and slave checks no longer would be in modesetting
level logic.
Stanislav Lisovskiy (3):
drm/i915/bigjoiner: Refactor bigjoiner state readout
Start separating pipe vs transcoder set logic for bigjoiner during
modeset
drm/i915: Fix bigjoiner case for DP2.0
drivers/gpu/drm/i915/display/intel_ddi.c | 3 +-
drivers/gpu/drm/i915/display/intel_display.c | 205 +++++++++++--------
drivers/gpu/drm/i915/display/intel_display.h | 6 +
drivers/gpu/drm/i915/display/intel_dp_mst.c | 19 +-
4 files changed, 144 insertions(+), 89 deletions(-)
--
2.37.3
^ permalink raw reply [flat|nested] 34+ messages in thread* [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 2024-02-20 22:09 [PATCH 0/3] Bigjoiner refactoring Stanislav Lisovskiy @ 2024-02-20 22:09 ` Stanislav Lisovskiy 2024-02-21 3:33 ` Almahallawy, Khaled 0 siblings, 1 reply; 34+ messages in thread From: Stanislav Lisovskiy @ 2024-02-20 22:09 UTC (permalink / raw) To: intel-gfx Cc: jani.saarinen, Stanislav.Lisovskiy, ville.syrjala, vidya.srinivas Patch calculates bigjoiner pipes in mst compute. Patch also passes bigjoiner bool to validate plane max size. Signed-off-by: vsrini4 <vidya.srinivas@intel.com> Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> --- drivers/gpu/drm/i915/display/intel_dp_mst.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c index 5307ddd4edcf5..fd27d9976c050 100644 --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c @@ -523,6 +523,7 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder, struct drm_connector_state *conn_state) { struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); + struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc); struct intel_dp_mst_encoder *intel_mst = enc_to_mst(encoder); struct intel_dp *intel_dp = &intel_mst->primary->dp; const struct intel_connector *connector = @@ -540,6 +541,10 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder, if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) return -EINVAL; + if (intel_dp_need_bigjoiner(intel_dp, adjusted_mode->crtc_hdisplay, + adjusted_mode->crtc_clock)) + pipe_config->bigjoiner_pipes = GENMASK(crtc->pipe + 1, crtc->pipe); + pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB; pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; pipe_config->has_pch_encoder = false; @@ -1318,12 +1323,6 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, * corresponding link capabilities of the sink) in case the * stream is uncompressed for it by the last branch device. */ - if (mode_rate > max_rate || mode->clock > max_dotclk || - drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port->full_pbn) { - *status = MODE_CLOCK_HIGH; - return 0; - } - if (mode->clock < 10000) { *status = MODE_CLOCK_LOW; return 0; @@ -1343,6 +1342,12 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, return 0; } + if (mode_rate > max_rate || mode->clock > max_dotclk || + drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port->full_pbn) { + *status = MODE_CLOCK_HIGH; + return 0; + } + if (DISPLAY_VER(dev_priv) >= 10 && drm_dp_sink_supports_dsc(intel_connector->dp.dsc_dpcd)) { /* @@ -1385,7 +1390,7 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, return 0; } - *status = intel_mode_valid_max_plane_size(dev_priv, mode, false); + *status = intel_mode_valid_max_plane_size(dev_priv, mode, bigjoiner); return 0; } -- 2.37.3 ^ permalink raw reply related [flat|nested] 34+ messages in thread
* Re: [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 2024-02-20 22:09 ` [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 Stanislav Lisovskiy @ 2024-02-21 3:33 ` Almahallawy, Khaled 0 siblings, 0 replies; 34+ messages in thread From: Almahallawy, Khaled @ 2024-02-21 3:33 UTC (permalink / raw) To: Lisovskiy, Stanislav, intel-gfx@lists.freedesktop.org Cc: Saarinen, Jani, ville.syrjala@linux.intel.com, Lee, Shawn C, Srinivas, Vidya, navaremanasi@chromium.org Thank You for the patch. Do you think we need to revert: 9c058492b16f ("drm/i915/mst: Reject modes that require the bigjoiner") On Wed, 2024-02-21 at 00:09 +0200, Stanislav Lisovskiy wrote: > Patch calculates bigjoiner pipes in mst compute. > Patch also passes bigjoiner bool to validate plane > max size. > > Signed-off-by: vsrini4 <vidya.srinivas@intel.com> > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> > --- > drivers/gpu/drm/i915/display/intel_dp_mst.c | 19 ++++++++++++------- > 1 file changed, 12 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c > b/drivers/gpu/drm/i915/display/intel_dp_mst.c > index 5307ddd4edcf5..fd27d9976c050 100644 > --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c > +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c > @@ -523,6 +523,7 @@ static int intel_dp_mst_compute_config(struct > intel_encoder *encoder, > struct drm_connector_state > *conn_state) > { > struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > + struct intel_crtc *crtc = to_intel_crtc(pipe_config- > >uapi.crtc); > struct intel_dp_mst_encoder *intel_mst = enc_to_mst(encoder); > struct intel_dp *intel_dp = &intel_mst->primary->dp; > const struct intel_connector *connector = > @@ -540,6 +541,10 @@ static int intel_dp_mst_compute_config(struct > intel_encoder *encoder, > if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) > return -EINVAL; > > + if (intel_dp_need_bigjoiner(intel_dp, adjusted_mode- > >crtc_hdisplay, > + adjusted_mode->crtc_clock)) > + pipe_config->bigjoiner_pipes = GENMASK(crtc->pipe + 1, > crtc->pipe); > + > pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB; > pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; > pipe_config->has_pch_encoder = false; > @@ -1318,12 +1323,6 @@ intel_dp_mst_mode_valid_ctx(struct > drm_connector *connector, > * corresponding link capabilities of the sink) in case the > * stream is uncompressed for it by the last branch device. > */ > - if (mode_rate > max_rate || mode->clock > max_dotclk || > - drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port- > >full_pbn) { > - *status = MODE_CLOCK_HIGH; > - return 0; > - } > - > if (mode->clock < 10000) { > *status = MODE_CLOCK_LOW; > return 0; > @@ -1343,6 +1342,12 @@ intel_dp_mst_mode_valid_ctx(struct > drm_connector *connector, > return 0; > } > > + if (mode_rate > max_rate || mode->clock > max_dotclk || > + drm_dp_calc_pbn_mode(mode->clock, min_bpp << 4) > port- > >full_pbn) { > + *status = MODE_CLOCK_HIGH; > + return 0; > + } > + > if (DISPLAY_VER(dev_priv) >= 10 && > drm_dp_sink_supports_dsc(intel_connector->dp.dsc_dpcd)) { > /* > @@ -1385,7 +1390,7 @@ intel_dp_mst_mode_valid_ctx(struct > drm_connector *connector, > return 0; > } > > - *status = intel_mode_valid_max_plane_size(dev_priv, mode, > false); > + *status = intel_mode_valid_max_plane_size(dev_priv, mode, > bigjoiner); > return 0; > } > ^ permalink raw reply [flat|nested] 34+ messages in thread
end of thread, other threads:[~2024-03-01 15:58 UTC | newest] Thread overview: 34+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-02-21 19:20 [PATCH 0/3] Bigjoiner refactoring Stanislav Lisovskiy 2024-02-21 19:20 ` [PATCH 1/3] drm/i915/bigjoiner: Refactor bigjoiner state readout Stanislav Lisovskiy 2024-03-01 10:10 ` Ville Syrjälä 2024-03-01 10:22 ` Lisovskiy, Stanislav 2024-02-21 19:20 ` [PATCH 2/3] Start separating pipe vs transcoder set logic for bigjoiner during modeset Stanislav Lisovskiy 2024-02-27 4:40 ` Srinivas, Vidya 2024-02-27 4:52 ` Srinivas, Vidya 2024-02-27 9:11 ` Lisovskiy, Stanislav 2024-02-27 16:16 ` Srinivas, Vidya 2024-03-01 10:10 ` Ville Syrjälä 2024-03-01 10:27 ` Lisovskiy, Stanislav 2024-03-01 10:43 ` Ville Syrjälä 2024-03-01 12:29 ` Lisovskiy, Stanislav 2024-03-01 14:40 ` Ville Syrjälä 2024-03-01 15:17 ` Lisovskiy, Stanislav 2024-03-01 15:26 ` Ville Syrjälä 2024-03-01 15:42 ` Lisovskiy, Stanislav 2024-03-01 15:58 ` Ville Syrjälä 2024-02-21 19:20 ` [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 Stanislav Lisovskiy 2024-02-21 22:35 ` Manasi Navare 2024-02-26 19:56 ` Jani Nikula 2024-02-27 9:04 ` Lisovskiy, Stanislav 2024-02-27 9:06 ` Srinivas, Vidya 2024-02-27 9:14 ` Lisovskiy, Stanislav 2024-02-27 18:51 ` Srinivas, Vidya 2024-02-27 9:15 ` Jani Nikula 2024-02-27 18:07 ` Manasi Navare 2024-02-27 18:48 ` Srinivas, Vidya 2024-02-21 23:18 ` ✗ Fi.CI.CHECKPATCH: warning for Bigjoiner refactoring (rev8) Patchwork 2024-02-21 23:18 ` ✗ Fi.CI.SPARSE: " Patchwork 2024-02-21 23:32 ` ✓ Fi.CI.BAT: success " Patchwork 2024-02-22 6:32 ` ✗ Fi.CI.IGT: failure " Patchwork -- strict thread matches above, loose matches on Subject: below -- 2024-02-20 22:09 [PATCH 0/3] Bigjoiner refactoring Stanislav Lisovskiy 2024-02-20 22:09 ` [PATCH 3/3] drm/i915: Fix bigjoiner case for DP2.0 Stanislav Lisovskiy 2024-02-21 3:33 ` Almahallawy, Khaled
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox