On Mon, 2024-10-21 at 19:27 -0300, Gustavo Sousa wrote: > Some display MMIO transactions for offsets in the range that requires > the DMC wakelock happen in atomic context (this has been confirmed > during tests on PTL). That means that we need to use a non-sleeping > variant of MMIO waiting function. > > Implement __intel_de_wait_for_register_atomic_nowl() and use it when > waiting for acknowledgment of acquire/release. > > Signed-off-by: Gustavo Sousa <gustavo.sousa@xxxxxxxxx> > --- > drivers/gpu/drm/i915/display/intel_de.h | 11 +++++++++++ > drivers/gpu/drm/i915/display/intel_dmc_wl.c | 20 ++++++++++++-------- > 2 files changed, 23 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_de.h b/drivers/gpu/drm/i915/display/intel_de.h > index e017cd4a8168..4116783a62dd 100644 > --- a/drivers/gpu/drm/i915/display/intel_de.h > +++ b/drivers/gpu/drm/i915/display/intel_de.h > @@ -121,6 +121,17 @@ ____intel_de_wait_for_register_nowl(struct intel_display *display, > } > #define __intel_de_wait_for_register_nowl(p,...) ____intel_de_wait_for_register_nowl(__to_intel_display(p), __VA_ARGS__) > > +static inline int > +____intel_de_wait_for_register_atomic_nowl(struct intel_display *display, > + i915_reg_t reg, > + u32 mask, u32 value, > + unsigned int fast_timeout_us) > +{ > + return __intel_wait_for_register(__to_uncore(display), reg, mask, > + value, fast_timeout_us, 0, NULL); > +} > +#define __intel_de_wait_for_register_atomic_nowl(p,...) ____intel_de_wait_for_register_atomic_nowl(__to_intel_display(p), __VA_ARGS__) > + > static inline int > __intel_de_wait(struct intel_display *display, i915_reg_t reg, > u32 mask, u32 value, unsigned int timeout) > diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c > index 5634ff07269d..8056a3c8666c 100644 > --- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c > +++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c > @@ -39,7 +39,7 @@ > * potential future use. > */ > > -#define DMC_WAKELOCK_CTL_TIMEOUT 5 > +#define DMC_WAKELOCK_CTL_TIMEOUT_US 5000 Maybe this deserves a small explanation in the commit message saying that you need to use the microsecond variant (fast_timeout_us) because that makes it atomic further down the call chain? -- Cheers, Luca.