[PATCH v3 5/5] drm/i915/display: split part of intel_display_reset_finish() to a new function
Luca Coelho <[email protected]>
| Newsgroups | org.freedesktop.lists.intel-gfx,org.freedesktop.lists.intel-xe |
|---|---|
| Message-ID | <[email protected]> |
In the intel_display_reset_finish() function, we are currently calling the non-display function intel_clock_gating_init(), creating an unnecessary dependency. In order to avoid this, split out the function calls that happen before the call to intel_clock_gating_init() to a new function that can be directly called by intel_gt_reset_global(), which then calls intel_clock_gating_init() itself, if needed. Signed-off-by: Luca Coelho <[email protected]> --- .../drm/i915/display/intel_display_reset.c | 19 +++++++++++++------ .../drm/i915/display/intel_display_reset.h | 1 + drivers/gpu/drm/i915/gt/intel_reset.c | 5 +++++ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_display_reset.c b/drivers/gpu/drm/i915/display/intel_display_reset.c index 504ec7043cd9..529dd1c1fa5d 100644 --- a/drivers/gpu/drm/i915/display/intel_display_reset.c +++ b/drivers/gpu/drm/i915/display/intel_display_reset.c @@ -8,7 +8,6 @@ #include <drm/drm_atomic_helper.h> #include <drm/drm_print.h> -#include "intel_clock_gating.h" #include "intel_cx0_phy.h" #include "intel_display_core.h" #include "intel_display_driver.h" @@ -73,6 +72,17 @@ void intel_display_reset_prepare(struct intel_display *display) state->acquire_ctx = ctx; } +bool intel_display_reset_reinit(struct intel_display *display) +{ + if (!display->restore.modeset_state) + return false; + + intel_pps_unlock_regs_wa(display); + intel_display_driver_init_hw(display); + + return true; +} + void intel_display_reset_finish(struct intel_display *display, bool test_only) { struct drm_modeset_acquire_ctx *ctx = &display->restore.reset_ctx; @@ -94,12 +104,9 @@ void intel_display_reset_finish(struct intel_display *display, bool test_only) } } else { /* - * The display has been reset as well, - * so need a full re-initialization. + * The display has been reset as well, so complete the + * re-initialization started by intel_display_reset_reinit(). */ - intel_pps_unlock_regs_wa(display); - intel_display_driver_init_hw(display); - intel_clock_gating_init(display->drm); intel_cx0_pll_power_save_wa(display); intel_hpd_init(display); diff --git a/drivers/gpu/drm/i915/display/intel_display_reset.h b/drivers/gpu/drm/i915/display/intel_display_reset.h index b88c330a3441..e741e969d877 100644 --- a/drivers/gpu/drm/i915/display/intel_display_reset.h +++ b/drivers/gpu/drm/i915/display/intel_display_reset.h @@ -13,6 +13,7 @@ struct intel_display; bool intel_display_reset_supported(struct intel_display *display); bool intel_display_reset_test(struct intel_display *display); void intel_display_reset_prepare(struct intel_display *display); +bool intel_display_reset_reinit(struct intel_display *display); void intel_display_reset_finish(struct intel_display *display, bool test_only); void intel_display_reset_debugfs_register(struct intel_display *display); diff --git a/drivers/gpu/drm/i915/gt/intel_reset.c b/drivers/gpu/drm/i915/gt/intel_reset.c index 6053f3e8aa27..be282cfbe615 100644 --- a/drivers/gpu/drm/i915/gt/intel_reset.c +++ b/drivers/gpu/drm/i915/gt/intel_reset.c @@ -24,6 +24,7 @@ #include "i915_reg.h" #include "i915_wait_util.h" #include "intel_breadcrumbs.h" +#include "intel_clock_gating.h" #include "intel_engine_pm.h" #include "intel_engine_regs.h" #include "intel_gt.h" @@ -1445,6 +1446,10 @@ static void intel_gt_reset_global(struct intel_gt *gt, intel_gt_reset(gt, engine_mask, reason); + if (need_display_reset && + intel_display_reset_reinit(display)) + intel_clock_gating_init(&i915->drm); + if (reset_display) intel_display_reset_finish(display, !need_display_reset); } -- 2.53.0