Re: [Intel-gfx] [PATCH] drm/i915/rps: split out display rps parts to a separate file
On Thu, 02 Mar 2023, Ville Syrjälä wrote: > On Thu, Mar 02, 2023 at 06:49:36PM +0200, Jani Nikula wrote: >> Split out the RPS parts so they can be conditionally compiled out later. >> >> Signed-off-by: Jani Nikula > > Reviewed-by: Ville Syrjälä Thanks, pushed to din. BR, Jani. > >> --- >> drivers/gpu/drm/i915/Makefile | 1 + >> .../gpu/drm/i915/display/intel_atomic_plane.c | 79 ++ >> .../gpu/drm/i915/display/intel_display_rps.c | 81 +++ >> .../gpu/drm/i915/display/intel_display_rps.h | 22 + >> 4 files changed, 111 insertions(+), 72 deletions(-) >> create mode 100644 drivers/gpu/drm/i915/display/intel_display_rps.c >> create mode 100644 drivers/gpu/drm/i915/display/intel_display_rps.h >> >> diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile >> index b2f91a1f8268..8e46f57e4569 100644 >> --- a/drivers/gpu/drm/i915/Makefile >> +++ b/drivers/gpu/drm/i915/Makefile >> @@ -239,6 +239,7 @@ i915-y += \ >> display/intel_display_power.o \ >> display/intel_display_power_map.o \ >> display/intel_display_power_well.o \ >> +display/intel_display_rps.o \ >> display/intel_dmc.o \ >> display/intel_dpio_phy.o \ >> display/intel_dpll.o \ >> diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c >> b/drivers/gpu/drm/i915/display/intel_atomic_plane.c >> index 3bd8f7eb75a6..719a60e278f3 100644 >> --- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c >> +++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c >> @@ -34,11 +34,10 @@ >> #include >> #include >> >> -#include "gt/intel_rps.h" >> - >> #include "i915_config.h" >> #include "intel_atomic_plane.h" >> #include "intel_cdclk.h" >> +#include "intel_display_rps.h" >> #include "intel_display_trace.h" >> #include "intel_display_types.h" >> #include "intel_fb.h" >> @@ -941,64 +940,6 @@ int intel_atomic_plane_check_clipping(struct >> intel_plane_state *plane_state, >> return 0; >> } >> >> -struct wait_rps_boost { >> -struct wait_queue_entry wait; >> - >> -struct drm_crtc *crtc; >> -struct i915_request *request; >> -}; >> - >> -static int do_rps_boost(struct wait_queue_entry *_wait, >> -unsigned mode, int sync, void *key) >> -{ >> -struct wait_rps_boost *wait = container_of(_wait, typeof(*wait), wait); >> -struct i915_request *rq = wait->request; >> - >> -/* >> - * If we missed the vblank, but the request is already running it >> - * is reasonable to assume that it will complete before the next >> - * vblank without our intervention, so leave RPS alone. >> - */ >> -if (!i915_request_started(rq)) >> -intel_rps_boost(rq); >> -i915_request_put(rq); >> - >> -drm_crtc_vblank_put(wait->crtc); >> - >> -list_del(>wait.entry); >> -kfree(wait); >> -return 1; >> -} >> - >> -static void add_rps_boost_after_vblank(struct drm_crtc *crtc, >> - struct dma_fence *fence) >> -{ >> -struct wait_rps_boost *wait; >> - >> -if (!dma_fence_is_i915(fence)) >> -return; >> - >> -if (DISPLAY_VER(to_i915(crtc->dev)) < 6) >> -return; >> - >> -if (drm_crtc_vblank_get(crtc)) >> -return; >> - >> -wait = kmalloc(sizeof(*wait), GFP_KERNEL); >> -if (!wait) { >> -drm_crtc_vblank_put(crtc); >> -return; >> -} >> - >> -wait->request = to_request(dma_fence_get(fence)); >> -wait->crtc = crtc; >> - >> -wait->wait.func = do_rps_boost; >> -wait->wait.flags = 0; >> - >> -add_wait_queue(drm_crtc_vblank_waitqueue(crtc), >wait); >> -} >> - >> /** >> * intel_prepare_plane_fb - Prepare fb for usage on plane >> * @_plane: drm plane to prepare for >> @@ -1089,13 +1030,13 @@ intel_prepare_plane_fb(struct drm_plane *_plane, >> dma_resv_iter_begin(, obj->base.resv, >> DMA_RESV_USAGE_WRITE); >> dma_resv_for_each_fence_unlocked(, fence) { >> -add_rps_boost_after_vblank(new_plane_state->hw.crtc, >> - fence); >> + >> intel_display_rps_boost_after_vblank(new_plane_state->hw.crtc, >> + fence); >> } >> dma_resv_iter_end(); >> } else { >> -add_rps_boost_after_vblank(new_plane_state->hw.crtc, >> - new_plane_state->uapi.fence); >> +intel_display_rps_boost_after_vblank(new_plane_state->hw.crtc, >> + >> new_plane_state->uapi.fence); >> } >> >> /* >> @@ -1106,10 +1047,7 @@ intel_prepare_plane_fb(struct drm_plane *_plane, >> * that are not quite steady state without resorting to forcing >> * maximum clocks following a vblank miss (see do_rps_boost()). >> */ >> -if (!state->rps_interactive)
Re: [Intel-gfx] [PATCH] drm/i915/rps: split out display rps parts to a separate file
On Thu, Mar 02, 2023 at 06:49:36PM +0200, Jani Nikula wrote: > Split out the RPS parts so they can be conditionally compiled out later. > > Signed-off-by: Jani Nikula Reviewed-by: Ville Syrjälä > --- > drivers/gpu/drm/i915/Makefile | 1 + > .../gpu/drm/i915/display/intel_atomic_plane.c | 79 ++ > .../gpu/drm/i915/display/intel_display_rps.c | 81 +++ > .../gpu/drm/i915/display/intel_display_rps.h | 22 + > 4 files changed, 111 insertions(+), 72 deletions(-) > create mode 100644 drivers/gpu/drm/i915/display/intel_display_rps.c > create mode 100644 drivers/gpu/drm/i915/display/intel_display_rps.h > > diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile > index b2f91a1f8268..8e46f57e4569 100644 > --- a/drivers/gpu/drm/i915/Makefile > +++ b/drivers/gpu/drm/i915/Makefile > @@ -239,6 +239,7 @@ i915-y += \ > display/intel_display_power.o \ > display/intel_display_power_map.o \ > display/intel_display_power_well.o \ > + display/intel_display_rps.o \ > display/intel_dmc.o \ > display/intel_dpio_phy.o \ > display/intel_dpll.o \ > diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c > b/drivers/gpu/drm/i915/display/intel_atomic_plane.c > index 3bd8f7eb75a6..719a60e278f3 100644 > --- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c > +++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c > @@ -34,11 +34,10 @@ > #include > #include > > -#include "gt/intel_rps.h" > - > #include "i915_config.h" > #include "intel_atomic_plane.h" > #include "intel_cdclk.h" > +#include "intel_display_rps.h" > #include "intel_display_trace.h" > #include "intel_display_types.h" > #include "intel_fb.h" > @@ -941,64 +940,6 @@ int intel_atomic_plane_check_clipping(struct > intel_plane_state *plane_state, > return 0; > } > > -struct wait_rps_boost { > - struct wait_queue_entry wait; > - > - struct drm_crtc *crtc; > - struct i915_request *request; > -}; > - > -static int do_rps_boost(struct wait_queue_entry *_wait, > - unsigned mode, int sync, void *key) > -{ > - struct wait_rps_boost *wait = container_of(_wait, typeof(*wait), wait); > - struct i915_request *rq = wait->request; > - > - /* > - * If we missed the vblank, but the request is already running it > - * is reasonable to assume that it will complete before the next > - * vblank without our intervention, so leave RPS alone. > - */ > - if (!i915_request_started(rq)) > - intel_rps_boost(rq); > - i915_request_put(rq); > - > - drm_crtc_vblank_put(wait->crtc); > - > - list_del(>wait.entry); > - kfree(wait); > - return 1; > -} > - > -static void add_rps_boost_after_vblank(struct drm_crtc *crtc, > -struct dma_fence *fence) > -{ > - struct wait_rps_boost *wait; > - > - if (!dma_fence_is_i915(fence)) > - return; > - > - if (DISPLAY_VER(to_i915(crtc->dev)) < 6) > - return; > - > - if (drm_crtc_vblank_get(crtc)) > - return; > - > - wait = kmalloc(sizeof(*wait), GFP_KERNEL); > - if (!wait) { > - drm_crtc_vblank_put(crtc); > - return; > - } > - > - wait->request = to_request(dma_fence_get(fence)); > - wait->crtc = crtc; > - > - wait->wait.func = do_rps_boost; > - wait->wait.flags = 0; > - > - add_wait_queue(drm_crtc_vblank_waitqueue(crtc), >wait); > -} > - > /** > * intel_prepare_plane_fb - Prepare fb for usage on plane > * @_plane: drm plane to prepare for > @@ -1089,13 +1030,13 @@ intel_prepare_plane_fb(struct drm_plane *_plane, > dma_resv_iter_begin(, obj->base.resv, > DMA_RESV_USAGE_WRITE); > dma_resv_for_each_fence_unlocked(, fence) { > - add_rps_boost_after_vblank(new_plane_state->hw.crtc, > -fence); > + > intel_display_rps_boost_after_vblank(new_plane_state->hw.crtc, > + fence); > } > dma_resv_iter_end(); > } else { > - add_rps_boost_after_vblank(new_plane_state->hw.crtc, > -new_plane_state->uapi.fence); > + intel_display_rps_boost_after_vblank(new_plane_state->hw.crtc, > + > new_plane_state->uapi.fence); > } > > /* > @@ -1106,10 +1047,7 @@ intel_prepare_plane_fb(struct drm_plane *_plane, >* that are not quite steady state without resorting to forcing >* maximum clocks following a vblank miss (see do_rps_boost()). >*/ > - if (!state->rps_interactive) { > - intel_rps_mark_interactive(_gt(dev_priv)->rps, true); > - state->rps_interactive = true; > - } > +
[Intel-gfx] [PATCH] drm/i915/rps: split out display rps parts to a separate file
Split out the RPS parts so they can be conditionally compiled out later. Signed-off-by: Jani Nikula --- drivers/gpu/drm/i915/Makefile | 1 + .../gpu/drm/i915/display/intel_atomic_plane.c | 79 ++ .../gpu/drm/i915/display/intel_display_rps.c | 81 +++ .../gpu/drm/i915/display/intel_display_rps.h | 22 + 4 files changed, 111 insertions(+), 72 deletions(-) create mode 100644 drivers/gpu/drm/i915/display/intel_display_rps.c create mode 100644 drivers/gpu/drm/i915/display/intel_display_rps.h diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile index b2f91a1f8268..8e46f57e4569 100644 --- a/drivers/gpu/drm/i915/Makefile +++ b/drivers/gpu/drm/i915/Makefile @@ -239,6 +239,7 @@ i915-y += \ display/intel_display_power.o \ display/intel_display_power_map.o \ display/intel_display_power_well.o \ + display/intel_display_rps.o \ display/intel_dmc.o \ display/intel_dpio_phy.o \ display/intel_dpll.o \ diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c b/drivers/gpu/drm/i915/display/intel_atomic_plane.c index 3bd8f7eb75a6..719a60e278f3 100644 --- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c +++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c @@ -34,11 +34,10 @@ #include #include -#include "gt/intel_rps.h" - #include "i915_config.h" #include "intel_atomic_plane.h" #include "intel_cdclk.h" +#include "intel_display_rps.h" #include "intel_display_trace.h" #include "intel_display_types.h" #include "intel_fb.h" @@ -941,64 +940,6 @@ int intel_atomic_plane_check_clipping(struct intel_plane_state *plane_state, return 0; } -struct wait_rps_boost { - struct wait_queue_entry wait; - - struct drm_crtc *crtc; - struct i915_request *request; -}; - -static int do_rps_boost(struct wait_queue_entry *_wait, - unsigned mode, int sync, void *key) -{ - struct wait_rps_boost *wait = container_of(_wait, typeof(*wait), wait); - struct i915_request *rq = wait->request; - - /* -* If we missed the vblank, but the request is already running it -* is reasonable to assume that it will complete before the next -* vblank without our intervention, so leave RPS alone. -*/ - if (!i915_request_started(rq)) - intel_rps_boost(rq); - i915_request_put(rq); - - drm_crtc_vblank_put(wait->crtc); - - list_del(>wait.entry); - kfree(wait); - return 1; -} - -static void add_rps_boost_after_vblank(struct drm_crtc *crtc, - struct dma_fence *fence) -{ - struct wait_rps_boost *wait; - - if (!dma_fence_is_i915(fence)) - return; - - if (DISPLAY_VER(to_i915(crtc->dev)) < 6) - return; - - if (drm_crtc_vblank_get(crtc)) - return; - - wait = kmalloc(sizeof(*wait), GFP_KERNEL); - if (!wait) { - drm_crtc_vblank_put(crtc); - return; - } - - wait->request = to_request(dma_fence_get(fence)); - wait->crtc = crtc; - - wait->wait.func = do_rps_boost; - wait->wait.flags = 0; - - add_wait_queue(drm_crtc_vblank_waitqueue(crtc), >wait); -} - /** * intel_prepare_plane_fb - Prepare fb for usage on plane * @_plane: drm plane to prepare for @@ -1089,13 +1030,13 @@ intel_prepare_plane_fb(struct drm_plane *_plane, dma_resv_iter_begin(, obj->base.resv, DMA_RESV_USAGE_WRITE); dma_resv_for_each_fence_unlocked(, fence) { - add_rps_boost_after_vblank(new_plane_state->hw.crtc, - fence); + intel_display_rps_boost_after_vblank(new_plane_state->hw.crtc, +fence); } dma_resv_iter_end(); } else { - add_rps_boost_after_vblank(new_plane_state->hw.crtc, - new_plane_state->uapi.fence); + intel_display_rps_boost_after_vblank(new_plane_state->hw.crtc, + new_plane_state->uapi.fence); } /* @@ -1106,10 +1047,7 @@ intel_prepare_plane_fb(struct drm_plane *_plane, * that are not quite steady state without resorting to forcing * maximum clocks following a vblank miss (see do_rps_boost()). */ - if (!state->rps_interactive) { - intel_rps_mark_interactive(_gt(dev_priv)->rps, true); - state->rps_interactive = true; - } + intel_display_rps_mark_interactive(dev_priv, state, true); return 0; @@ -1140,10 +1078,7 @@ intel_cleanup_plane_fb(struct drm_plane *plane, if (!obj) return; - if (state->rps_interactive) { -