[igt-dev] [PATCH i-g-t v2 4/4] i915_pm_rpm: rpm resume by user forcewake
Gupta, Anshuman
anshuman.gupta at intel.com
Wed May 18 06:28:02 UTC 2022
> -----Original Message-----
> From: Dixit, Ashutosh <ashutosh.dixit at intel.com>
> Sent: Tuesday, May 17, 2022 10:35 PM
> To: Gupta, Anshuman <anshuman.gupta at intel.com>
> Cc: igt-dev at lists.freedesktop.org; Nilawar, Badal <badal.nilawar at intel.com>;
> Ewins, Jon <jon.ewins at intel.com>; Latvala, Petri <petri.latvala at intel.com>;
> Tangudu, Tilak <tilak.tangudu at intel.com>; Wilson, Chris P
> <chris.p.wilson at intel.com>
> Subject: Re: [PATCH i-g-t v2 4/4] i915_pm_rpm: rpm resume by user forcewake
>
> On Wed, 11 May 2022 04:37:34 -0700, Anshuman Gupta wrote:
> >
> > Few gem rpm tests relies on enabling kms crtc in order to trigger rpm
> > resume but on headless platforms these tests skip. Let it trigger the
> > rpm resume by taking user forcewake.
> >
> > v2:
> > - removed has_runtime_pm cond from
> > enable_one_screen_or_forcewake_and_wait(). [Ashutosh]
> > - removed if (ms_data.res) cond from basic_subtest(). [Ashutosh]
> > - clear forcewake in both only for headless. [Ashutosh]
> >
> > Cc: Chris Wilson <chris.p.wilson at intel.com>
> > Signed-off-by: Anshuman Gupta <anshuman.gupta at intel.com>
> > ---
> > tests/i915/i915_pm_rpm.c | 80
> > ++++++++++++++++++++++++++++++----------
> > 1 file changed, 61 insertions(+), 19 deletions(-)
> >
> > diff --git a/tests/i915/i915_pm_rpm.c b/tests/i915/i915_pm_rpm.c index
> > a6035e60b..de71dd41c 100644
> > --- a/tests/i915/i915_pm_rpm.c
> > +++ b/tests/i915/i915_pm_rpm.c
> > @@ -99,6 +99,7 @@ struct mode_set_data {
> > igt_display_t display;
> >
> > uint32_t devid;
> > + int fw_fd;
> > };
> >
> > /* Stuff we query at different times so we can compare. */ @@ -369,6
> >+370,44 @@ static void enable_one_screen(struct mode_set_data *data)
> > igt_assert(wait_for_active()); \
> > } while (0)
> >
> > +static void
> > +enable_one_screen_or_forcewake_and_wait(struct mode_set_data *data) {
> > + bool headless;
> > +
> > + /* Try to resume by enabling any type of display */
> > + headless = !enable_one_screen_with_type(data, SCREEN_TYPE_ANY);
> > +
> > + /*
> > + * Get User Forcewake to trigger rpm resume in case of headless
> > + * as well as no display being connected.
> > + */
> > + if (headless) {
> > + data->fw_fd = igt_open_forcewake_handle(drm_fd);
> > + igt_require(data->fw_fd > 0);
> > + }
> > + igt_assert(wait_for_active());
> > +}
> > +
> > +static void clear_forcewake(struct mode_set_data *data) {
> > + if (data->fw_fd <= 0)
> > + return;
> > +
> > + data->fw_fd = close(data->fw_fd);
> > + igt_assert_eq(data->fw_fd, 0);
> > +}
> > +
> > +static void
> > +disable_all_screens_or_clr_forcewake_and_wait(struct mode_set_data
> > +*data) {
> > + if (!default_mode_params)
>
> Why introduce this new unrelated check here? Now someone needs to check if
> this check is valid for headless. If we are introducing this here can we also
> introduce it in enable_one_screen_or_forcewake_and_wait()?
This check is already present in enable_one_screen_with_type() in switch case.
Just introduced this to make both enable_one_screen_or_forcewake_and_wait() /disable_all_screens_or_clr_forcewake_and_wait()
symmetric to address the comment.
>
> Can we not just do:
>
> if (data->fw_fd)
> clear_forcewake(data);
>
> as I was suggesting, or even unconditional is ok since clear_forcewake() already
> has the check. Let's just drop the if () here then as you previously had?
Sure I will drop this check as it is not needed.
Thanks,
Anshuman Gupta.
>
> Also I have another comment. The kernel increments/decrements a reference
> count when "i915_forcewake_user" debugfs is open/closed. So closing the file
> doesn't necessary clear forcewake if a previous fd is open. How about changing
> function names with get/put to make this clear. E.g.
>
> * enable_one_screen_or_forcewake_get_and_wait
> * forcewake_put instead of clear_forcewake
> * disable_all_screens_or_forcewake_put_and_wait
>
> But not strictly needed, you decide, just a suggestion.
>
> Rest everything looks good.
>
> With the if () dropped this is:
>
> Reviewed-by: Ashutosh Dixit <ashutosh.dixit at intel.com>
More information about the igt-dev
mailing list