All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Dixit, Ashutosh" <ashutosh.dixit@intel.com>
To: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: <intel-xe@lists.freedesktop.org>
Subject: Re: [PATCH 15/17] drm/xe/oa: Override GuC RC with OA on PVC
Date: Tue, 11 Jun 2024 19:04:09 -0700	[thread overview]
Message-ID: <87v82ezzl2.wl-ashutosh.dixit@intel.com> (raw)
In-Reply-To: <3facdf80-ca8a-41ee-9f5c-59b9c1e41beb@intel.com>

On Sat, 08 Jun 2024 04:45:15 -0700, Michal Wajdeczko wrote:
>

Hi Michal,

> On 07.06.2024 22:43, Ashutosh Dixit wrote:
> > On PVC, a w/a resets RCS/CCS before it goes into RC6. This breaks OA since
> > OA does not expect engine resets during its use. Fix it by disabling RC6.
> >
> > Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
> > Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
> > ---
> >  drivers/gpu/drm/xe/xe_guc_pc.c   | 57 ++++++++++++++++++++++++++++++++
> >  drivers/gpu/drm/xe/xe_guc_pc.h   |  3 ++
> >  drivers/gpu/drm/xe/xe_oa.c       | 23 +++++++++++++
> >  drivers/gpu/drm/xe/xe_oa_types.h |  3 ++
> >  4 files changed, 86 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/xe_guc_pc.c
> > index 508f0d39b4ad..9f9a4132c399 100644
> > --- a/drivers/gpu/drm/xe/xe_guc_pc.c
> > +++ b/drivers/gpu/drm/xe/xe_guc_pc.c
> > @@ -24,6 +24,7 @@
> >  #include "xe_map.h"
> >  #include "xe_mmio.h"
> >  #include "xe_pcode.h"
> > +#include "xe_pm.h"
> >
> >  #define MCHBAR_MIRROR_BASE_SNB	0x140000
> >
> > @@ -191,6 +192,27 @@ static int pc_action_set_param(struct xe_guc_pc *pc, u8 id, u32 value)
> >	return ret;
> >  }
> >
> > +static int pc_action_unset_param(struct xe_guc_pc *pc, u8 id)
> > +{
> > +	struct xe_guc_ct *ct = &pc_to_guc(pc)->ct;
> > +	int ret;
>
> Xe driver BKM is to keep var declarations in reversed xmas tree order

Fixed.

>
> > +	u32 action[] = {
> > +		GUC_ACTION_HOST2GUC_PC_SLPC_REQUEST,
> > +		SLPC_EVENT(SLPC_EVENT_PARAMETER_UNSET, 1),
> > +		id,
> > +	};
> > +
> > +	if (wait_for_pc_state(pc, SLPC_GLOBAL_STATE_RUNNING))
> > +		return -EAGAIN;
> > +
> > +	ret = xe_guc_ct_send(ct, action, ARRAY_SIZE(action), 0, 0);
> > +	if (ret)
> > +		drm_err(&pc_to_xe(pc)->drm, "GuC PC unset param failed: %pe",
> > +			ERR_PTR(ret));
>
> please use xe_gt_err(gt, ...)

Done.

>
> hmm, but I can see right now that this is a common mistake in this file,
> likely we need to fix that first

Looks like you already fixed that :)

>
> > +
> > +	return ret;
> > +}
> > +
> >  static int pc_action_setup_gucrc(struct xe_guc_pc *pc, u32 mode)
> >  {
> >	struct xe_guc_ct *ct = &pc_to_guc(pc)->ct;
> > @@ -773,6 +795,41 @@ int xe_guc_pc_gucrc_disable(struct xe_guc_pc *pc)
> >	return 0;
> >  }
> >
> > +/**
> > + * xe_guc_pc_override_gucrc_mode - override GUCRC mode
> > + * @pc: Xe_GuC_PC instance
> > + * @mode: new value of the mode.
> > + *
> > + * Return: 0 on success, negative error code on error
> > + */
> > +int xe_guc_pc_override_gucrc_mode(struct xe_guc_pc *pc, enum slpc_gucrc_mode mode)
> > +{
> > +	int ret;
> > +
> > +	xe_pm_runtime_get(pc_to_xe(pc));
> > +	ret = pc_action_set_param(pc, SLPC_PARAM_PWRGATE_RC_MODE, mode);
> > +	xe_pm_runtime_put(pc_to_xe(pc));
> > +
> > +	return ret;
> > +}
> > +
> > +/**
> > + * xe_guc_pc_unset_gucrc_mode - unset GUCRC mode override
> > + * @pc: Xe_GuC_PC instance
> > + *
> > + * Return: 0 on success, negative error code on error
> > + */
> > +int xe_guc_pc_unset_gucrc_mode(struct xe_guc_pc *pc)
> > +{
> > +	int ret;
> > +
> > +	xe_pm_runtime_get(pc_to_xe(pc));
> > +	ret = pc_action_unset_param(pc, SLPC_PARAM_PWRGATE_RC_MODE);
> > +	xe_pm_runtime_put(pc_to_xe(pc));
> > +
> > +	return ret;
> > +}
> > +
> >  static void pc_init_pcode_freq(struct xe_guc_pc *pc)
> >  {
> >	u32 min = DIV_ROUND_CLOSEST(pc->rpn_freq, GT_FREQUENCY_MULTIPLIER);
> > diff --git a/drivers/gpu/drm/xe/xe_guc_pc.h b/drivers/gpu/drm/xe/xe_guc_pc.h
> > index 532cac985a6d..eb5bba9f0736 100644
> > --- a/drivers/gpu/drm/xe/xe_guc_pc.h
> > +++ b/drivers/gpu/drm/xe/xe_guc_pc.h
> > @@ -9,11 +9,14 @@
> >  #include <linux/types.h>
> >
> >  struct xe_guc_pc;
> > +#include "abi/guc_actions_slpc_abi.h"
>
> bad order (all #includes shall be before forward decls) but...
>
> that's unfortunate that you need ABI definitions here at all (as slpc
> gucrc modes were defined as enum not plain values) but maybe it would be
> sufficient to just use forward declaration of that enum:
>
>	enum slpc_gucrc_mode;

Done.

>
> >
> >  int xe_guc_pc_init(struct xe_guc_pc *pc);
> >  int xe_guc_pc_start(struct xe_guc_pc *pc);
> >  int xe_guc_pc_stop(struct xe_guc_pc *pc);
> >  int xe_guc_pc_gucrc_disable(struct xe_guc_pc *pc);
> > +int xe_guc_pc_override_gucrc_mode(struct xe_guc_pc *pc, enum slpc_gucrc_mode mode);
> > +int xe_guc_pc_unset_gucrc_mode(struct xe_guc_pc *pc);
> >
> >  u32 xe_guc_pc_get_act_freq(struct xe_guc_pc *pc);
> >  int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc, u32 *freq);
> > diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
> > index 5cb0cbb58a1d..c89b11f5e01e 100644
> > --- a/drivers/gpu/drm/xe/xe_oa.c
> > +++ b/drivers/gpu/drm/xe/xe_oa.c
> > @@ -24,6 +24,7 @@
> >  #include "xe_force_wake.h"
> >  #include "xe_gt.h"
> >  #include "xe_gt_mcr.h"
> > +#include "xe_guc_pc.h"
> >  #include "xe_lrc.h"
> >  #include "xe_macros.h"
> >  #include "xe_mmio.h"
> > @@ -815,6 +816,10 @@ static void xe_oa_stream_destroy(struct xe_oa_stream *stream)
> >	XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
> >	xe_pm_runtime_put(stream->oa->xe);
> >
> > +	/* Wa_1509372804:pvc: Unset the override of GUCRC mode to enable rc6 */
> > +	if (stream->override_gucrc)
> > +		XE_WARN_ON(xe_guc_pc_unset_gucrc_mode(&gt->uc.guc.pc));
>
> that doesn't look like a good pattern, more clear way would be:
>
>	if (...) {
>		err = xe_guc_pc_unset_gucrc_mode(&gt->uc.guc.pc);
>		xe_gt_WARN(gt, err, "explain what just happen");
>	}

Changed to xe_gt_WARN_ON, that should be sufficient.

>
> > +
> >	xe_oa_free_configs(stream);
> >  }
> >
> > @@ -1303,6 +1308,21 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
> >		goto exit;
> >	}
> >
> > +	/*
> > +	 * Wa_1509372804:pvc
> > +	 *
> > +	 * GuC reset of engines causes OA to lose configuration
> > +	 * state. Prevent this by overriding GUCRC mode.
> > +	 */
> > +	if (stream->oa->xe->info.platform == XE_PVC) {
> > +		ret = xe_guc_pc_override_gucrc_mode(&gt->uc.guc.pc,
> > +						    SLPC_GUCRC_MODE_GUCRC_NO_RC6);
> > +		if (ret)
> > +			goto err_free_configs;
> > +
> > +		stream->override_gucrc = true;
> > +	}
> > +
> >	/* Take runtime pm ref and forcewake to disable RC6 */
> >	xe_pm_runtime_get(stream->oa->xe);
> >	XE_WARN_ON(xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL));
> > @@ -1349,6 +1369,9 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
> >  err_fw_put:
> >	XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
> >	xe_pm_runtime_put(stream->oa->xe);
> > +	if (stream->override_gucrc)
> > +		XE_WARN_ON(xe_guc_pc_unset_gucrc_mode(&gt->uc.guc.pc));
>
> ditto

Changed to xe_gt_WARN_ON.

>
> > +err_free_configs:
> >	xe_oa_free_configs(stream);
> >  exit:
> >	return ret;
> > diff --git a/drivers/gpu/drm/xe/xe_oa_types.h b/drivers/gpu/drm/xe/xe_oa_types.h
> > index 7f7c84e4b3a6..7775fe91616f 100644
> > --- a/drivers/gpu/drm/xe/xe_oa_types.h
> > +++ b/drivers/gpu/drm/xe/xe_oa_types.h
> > @@ -220,6 +220,9 @@ struct xe_oa_stream {
> >	/** @poll_period_ns: hrtimer period for checking OA buffer for available data */
> >	u64 poll_period_ns;
> >
> > +	/** @override_gucrc: GuC RC has been overridden for the OA stream */
> > +	bool override_gucrc;
> > +
> >	/** @oa_status: temporary storage for oa_status register value */
> >	u32 oa_status;
> >  };

Thanks.
--
Ashutosh

  reply	other threads:[~2024-06-12  2:10 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-07 20:43 [PATCH v16 00/17] Add OA functionality to Xe Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 01/17] drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream types Ashutosh Dixit
2024-06-08 10:44   ` Michal Wajdeczko
2024-06-12  2:03     ` Dixit, Ashutosh
2024-06-07 20:43 ` [PATCH 02/17] drm/xe/perf/uapi: Add perf_stream_paranoid sysctl Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 03/17] drm/xe/oa/uapi: Add OA data formats Ashutosh Dixit
2024-06-08 10:54   ` Michal Wajdeczko
2024-06-12  2:03     ` Dixit, Ashutosh
2024-06-13 15:39       ` Michal Wajdeczko
2024-06-17 19:32         ` Rodrigo Vivi
2024-06-07 20:43 ` [PATCH 04/17] drm/xe/oa/uapi: Initialize OA units Ashutosh Dixit
2024-06-08 11:09   ` Michal Wajdeczko
2024-06-12  2:03     ` Dixit, Ashutosh
2024-06-07 20:43 ` [PATCH 05/17] drm/xe/oa/uapi: Add/remove OA config perf ops Ashutosh Dixit
2024-06-08 11:15   ` Michal Wajdeczko
2024-06-12  2:03     ` Dixit, Ashutosh
2024-06-07 20:43 ` [PATCH 06/17] drm/xe/oa/uapi: Define and parse OA stream properties Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 07/17] drm/xe/oa: OA stream initialization (OAG) Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 08/17] drm/xe/oa/uapi: Expose OA stream fd Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 09/17] drm/xe/oa/uapi: Read file_operation Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 10/17] drm/xe/oa: Add OAR support Ashutosh Dixit
2024-06-08 11:30   ` Michal Wajdeczko
2024-06-12  2:04     ` Dixit, Ashutosh
2024-06-07 20:43 ` [PATCH 11/17] drm/xe/oa: Add OAC support Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 12/17] drm/xe/oa/uapi: Query OA unit properties Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 13/17] drm/xe/oa/uapi: OA buffer mmap Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 14/17] drm/xe/oa: Add MMIO trigger support Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 15/17] drm/xe/oa: Override GuC RC with OA on PVC Ashutosh Dixit
2024-06-08 11:45   ` Michal Wajdeczko
2024-06-12  2:04     ` Dixit, Ashutosh [this message]
2024-06-07 20:43 ` [PATCH 16/17] drm/xe/oa: Changes to OA_TAKEN Ashutosh Dixit
2024-06-07 20:43 ` [PATCH 17/17] drm/xe/oa: Enable Xe2+ overrun mode Ashutosh Dixit
2024-06-07 21:37 ` ✓ CI.Patch_applied: success for Add OA functionality to Xe (rev16) Patchwork
2024-06-07 21:38 ` ✗ CI.checkpatch: warning " Patchwork
2024-06-07 21:39 ` ✓ CI.KUnit: success " Patchwork
2024-06-07 21:50 ` ✓ CI.Build: " Patchwork
2024-06-07 21:52 ` ✓ CI.Hooks: " Patchwork
2024-06-07 21:54 ` ✓ CI.checksparse: " Patchwork
2024-06-07 22:54 ` ✓ CI.BAT: " Patchwork
2024-06-08 13:22 ` ✓ CI.FULL: " Patchwork
  -- strict thread matches above, loose matches on Subject: below --
2024-06-18  1:45 [PATCH v19 00/17] Add OA functionality to Xe Ashutosh Dixit
2024-06-18  1:46 ` [PATCH 15/17] drm/xe/oa: Override GuC RC with OA on PVC Ashutosh Dixit
2024-06-17 22:36 [PATCH v18 00/17] Add OA functionality to Xe Ashutosh Dixit
2024-06-17 22:36 ` [PATCH 15/17] drm/xe/oa: Override GuC RC with OA on PVC Ashutosh Dixit
2024-06-12  2:05 [PATCH v17 00/17] Add OA functionality to Xe Ashutosh Dixit
2024-06-12  2:05 ` [PATCH 15/17] drm/xe/oa: Override GuC RC with OA on PVC Ashutosh Dixit
2024-05-27  1:43 [PATCH v15 00/17] Add OA functionality to Xe Ashutosh Dixit
2024-05-27  1:43 ` [PATCH 15/17] drm/xe/oa: Override GuC RC with OA on PVC Ashutosh Dixit
2024-05-24 19:01 [PATCH v14 00/17] Add OA functionality to Xe Ashutosh Dixit
2024-05-24 19:01 ` [PATCH 15/17] drm/xe/oa: Override GuC RC with OA on PVC Ashutosh Dixit
2024-03-15  1:35 [PATCH 00/17] Add OA functionality to Xe Ashutosh Dixit
2024-03-15  1:35 ` [PATCH 15/17] drm/xe/oa: Override GuC RC with OA on PVC Ashutosh Dixit
2024-03-12  3:38 [PATCH v12 00/17] Add OA functionality to Xe Ashutosh Dixit
2024-03-12  3:39 ` [PATCH 15/17] drm/xe/oa: Override GuC RC with OA on PVC Ashutosh Dixit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87v82ezzl2.wl-ashutosh.dixit@intel.com \
    --to=ashutosh.dixit@intel.com \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=michal.wajdeczko@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.