From: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
To: Ashutosh Dixit <ashutosh.dixit@intel.com>
Cc: intel-xe@lists.freedesktop.org
Subject: Re: [Intel-xe] [PATCH 11/21] drm/xe/oa: Override GuC RC with OA on PVC
Date: Mon, 16 Oct 2023 10:43:13 -0700 [thread overview]
Message-ID: <ZS12MUHgYriRokD9@unerlige-ril> (raw)
In-Reply-To: <20230919161049.2307855-12-ashutosh.dixit@intel.com>
On Tue, Sep 19, 2023 at 09:10:39AM -0700, 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.
>
>Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
lgtm
Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
>---
> drivers/gpu/drm/xe/xe_guc_pc.c | 60 ++++++++++++++++++++++++++++++++
> drivers/gpu/drm/xe/xe_guc_pc.h | 3 ++
> drivers/gpu/drm/xe/xe_oa.c | 26 +++++++++++++-
> drivers/gpu/drm/xe/xe_oa_types.h | 6 ++++
> 4 files changed, 94 insertions(+), 1 deletion(-)
>
>diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/xe_guc_pc.c
>index 8a4d299d6cb02..a91de057f6246 100644
>--- a/drivers/gpu/drm/xe/xe_guc_pc.c
>+++ b/drivers/gpu/drm/xe/xe_guc_pc.c
>@@ -225,6 +225,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;
>+ 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));
>+
>+ 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;
>@@ -768,6 +789,45 @@ int xe_guc_pc_gucrc_disable(struct xe_guc_pc *pc)
> return ret;
> }
>
>+/**
>+ * xe_guc_pc_override_gucrc_mode() - override GUCRC mode
>+ * @pc: Xe_GuC_PC instance
>+ * @mode: new value of the mode.
>+ *
>+ * Override the GUCRC 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_device_mem_access_get(pc_to_xe(pc));
>+ ret = pc_action_set_param(pc, SLPC_PARAM_PWRGATE_RC_MODE, mode);
>+ xe_device_mem_access_put(pc_to_xe(pc));
>+
>+ return ret;
>+}
>+
>+/**
>+ * xe_guc_pc_override_gucrc_mode() - override GUCRC mode
>+ * @pc: Xe_GuC_PC instance
>+ *
>+ * Unset the GUCRC mode override
>+ *
>+ * Return: 0 on success, negative error code on error.
>+ */
>+int xe_guc_pc_unset_gucrc_mode(struct xe_guc_pc *pc)
>+{
>+ int ret;
>+
>+ xe_device_mem_access_get(pc_to_xe(pc));
>+ ret = pc_action_unset_param(pc, SLPC_PARAM_PWRGATE_RC_MODE);
>+ xe_device_mem_access_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 43ea582545b57..0a2c7b9a4dc97 100644
>--- a/drivers/gpu/drm/xe/xe_guc_pc.h
>+++ b/drivers/gpu/drm/xe/xe_guc_pc.h
>@@ -7,12 +7,15 @@
> #define _XE_GUC_PC_H_
>
> #include "xe_guc_pc_types.h"
>+#include "abi/guc_actions_slpc_abi.h"
>
> int xe_guc_pc_init(struct xe_guc_pc *pc);
> void xe_guc_pc_fini(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);
>
> enum xe_gt_idle_state xe_guc_pc_c_status(struct xe_guc_pc *pc);
> u64 xe_guc_pc_rc6_residency(struct xe_guc_pc *pc);
>diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
>index fc0159543dc74..506dd056805b2 100644
>--- a/drivers/gpu/drm/xe/xe_oa.c
>+++ b/drivers/gpu/drm/xe/xe_oa.c
>@@ -23,6 +23,7 @@
> #include "xe_exec_queue.h"
> #include "xe_gt.h"
> #include "xe_gt_mcr.h"
>+#include "xe_guc_pc.h"
> #include "xe_lrc.h"
> #include "xe_migrate.h"
> #include "xe_mmio.h"
>@@ -909,6 +910,10 @@ static void xe_oa_stream_destroy(struct xe_oa_stream *stream)
> xe_device_mem_access_put(stream->oa->xe);
>
> xe_oa_free_oa_buffer(stream);
>+ /* 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(>->uc.guc.pc));
>+
> xe_oa_free_configs(stream);
> }
>
>@@ -1344,9 +1349,25 @@ 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 (gt->tile->xe->info.platform == XE_PVC) {
>+ ret = xe_guc_pc_override_gucrc_mode(>->uc.guc.pc,
>+ SLPC_GUCRC_MODE_GUCRC_NO_RC6);
>+ if (ret)
>+ goto err_free_configs;
>+
>+ stream->override_gucrc = true;
>+ }
>+
> ret = xe_oa_alloc_oa_buffer(stream);
> if (ret)
>- goto err_free_configs;
>+ goto err_unset_gucrc;
>
> /* Take runtime pm ref and forcewake to disable RC6 */
> xe_device_mem_access_get(stream->oa->xe);
>@@ -1377,6 +1398,9 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
> XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
> xe_device_mem_access_put(stream->oa->xe);
> xe_oa_free_oa_buffer(stream);
>+err_unset_gucrc:
>+ if (stream->override_gucrc)
>+ XE_WARN_ON(xe_guc_pc_unset_gucrc_mode(>->uc.guc.pc));
> err_free_configs:
> xe_oa_free_configs(stream);
> exit:
>diff --git a/drivers/gpu/drm/xe/xe_oa_types.h b/drivers/gpu/drm/xe/xe_oa_types.h
>index 4063c81e353ff..126692718c888 100644
>--- a/drivers/gpu/drm/xe/xe_oa_types.h
>+++ b/drivers/gpu/drm/xe/xe_oa_types.h
>@@ -291,5 +291,11 @@ struct xe_oa_stream {
> * buffer should be checked for available data.
> */
> u64 poll_oa_period;
>+
>+ /**
>+ * @override_gucrc: GuC RC has been overridden for the perf stream,
>+ * and we need to restore the default configuration on release.
>+ */
>+ bool override_gucrc;
> };
> #endif
>--
>2.41.0
>
next prev parent reply other threads:[~2023-10-16 17:43 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-19 16:10 [Intel-xe] [PATCH 00/21] Add OA functionality to Xe Ashutosh Dixit
2023-09-19 16:10 ` [Intel-xe] [PATCH 01/21] drm/xe/uapi: Introduce OA (observability architecture) uapi Ashutosh Dixit
2023-10-04 0:26 ` Umesh Nerlige Ramappa
2023-10-04 0:36 ` Dixit, Ashutosh
2023-11-04 1:23 ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 02/21] drm/xe/oa: Add OA types Ashutosh Dixit
2023-10-13 17:05 ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 03/21] drm/xe/oa: Add registers and GPU commands used by OA Ashutosh Dixit
2023-10-13 17:06 ` Umesh Nerlige Ramappa
2023-11-17 22:52 ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 04/21] drm/xe/oa: Module init/exit and probe/remove Ashutosh Dixit
2023-10-13 17:50 ` Umesh Nerlige Ramappa
2023-10-20 7:08 ` [Intel-xe] [04/21] " Lionel Landwerlin
2023-10-27 20:28 ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 05/21] drm/xe/oa: Add/remove config ioctl's Ashutosh Dixit
2023-10-13 17:59 ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 06/21] drm/xe/oa: Start implementing OA stream open ioctl Ashutosh Dixit
2023-10-13 18:09 ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 07/21] drm/xe/oa: OA stream initialization Ashutosh Dixit
2023-10-04 15:22 ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 08/21] drm/xe/oa: Expose OA stream fd Ashutosh Dixit
2023-10-13 18:17 ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 09/21] drm/xe/oa: Read file_operation Ashutosh Dixit
2023-10-14 0:56 ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 10/21] drm/xe/oa: Implement queries Ashutosh Dixit
2023-10-14 0:58 ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 11/21] drm/xe/oa: Override GuC RC with OA on PVC Ashutosh Dixit
2023-10-16 17:43 ` Umesh Nerlige Ramappa [this message]
2023-09-19 16:10 ` [Intel-xe] [PATCH 12/21] drm/xe/uapi: "Perf" layer to support multiple perf counter stream types Ashutosh Dixit
2023-10-04 2:13 ` Umesh Nerlige Ramappa
2023-10-05 4:33 ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 13/21] drm/xe/uapi: Multiplex PERF ops through a single PERF ioctl Ashutosh Dixit
2023-10-04 2:23 ` Umesh Nerlige Ramappa
2023-10-05 5:27 ` Dixit, Ashutosh
2023-10-05 15:22 ` Dixit, Ashutosh
2023-10-05 18:27 ` Umesh Nerlige Ramappa
2023-10-05 23:18 ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 14/21] drm/xe/uapi: Simplify OA configs in uapi Ashutosh Dixit
2023-10-04 2:26 ` Umesh Nerlige Ramappa
2023-10-04 15:44 ` Dixit, Ashutosh
2023-10-04 16:13 ` Rodrigo Vivi
2023-09-19 16:10 ` [Intel-xe] [PATCH 15/21] drm/xe/uapi: Remove OA format names from OA uapi Ashutosh Dixit
2023-10-04 2:33 ` Umesh Nerlige Ramappa
2023-10-05 6:13 ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 16/21] drm/xe/oa: Make xe_oa_timestamp_frequency per gt Ashutosh Dixit
2023-09-21 20:45 ` Rodrigo Vivi
2023-09-21 21:58 ` Dixit, Ashutosh
2023-09-22 19:10 ` Rodrigo Vivi
2023-09-19 16:10 ` [Intel-xe] [PATCH 17/21] drm/xe/oa: Remove filtering reports on context id Ashutosh Dixit
2023-10-14 1:01 ` Umesh Nerlige Ramappa
2023-10-20 7:30 ` [Intel-xe] [17/21] " Lionel Landwerlin
2023-10-20 17:00 ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 18/21] drm/xe/uapi: More OA uapi fixes/additions Ashutosh Dixit
2023-10-04 0:23 ` Dixit, Ashutosh
2023-10-05 22:33 ` Dixit, Ashutosh
2023-10-12 3:14 ` Umesh Nerlige Ramappa
2023-10-20 7:28 ` [Intel-xe] [18/21] " Lionel Landwerlin
2023-10-27 20:28 ` Dixit, Ashutosh
2023-10-30 10:06 ` Lionel Landwerlin
2023-10-31 2:08 ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 19/21] drm/xe/uapi: Drop OA_IOCTL_VERSION Ashutosh Dixit
2023-09-19 17:02 ` Dixit, Ashutosh
2023-10-04 2:37 ` Umesh Nerlige Ramappa
2023-10-05 3:28 ` Dixit, Ashutosh
2023-10-05 19:35 ` Umesh Nerlige Ramappa
2023-10-20 7:36 ` [Intel-xe] [19/21] " Lionel Landwerlin
2023-10-23 23:02 ` Umesh Nerlige Ramappa
2023-10-24 4:08 ` Dixit, Ashutosh
2023-10-24 15:54 ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 20/21] drm/xe/uapi: Use OA unit id to identify OA unit Ashutosh Dixit
2023-10-04 22:37 ` Umesh Nerlige Ramappa
2023-10-05 3:04 ` Dixit, Ashutosh
2023-10-05 3:09 ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 21/21] drm/xe/uapi: Convert OA property key/value pairs to a struct Ashutosh Dixit
2023-09-21 23:53 ` Dixit, Ashutosh
2023-10-05 5:37 ` Dixit, Ashutosh
2023-10-05 19:26 ` Umesh Nerlige Ramappa
2023-09-19 16:19 ` [Intel-xe] ✓ CI.Patch_applied: success for Add OA functionality to Xe (rev6) Patchwork
2023-09-19 16:19 ` [Intel-xe] ✗ CI.checkpatch: warning " Patchwork
2023-09-19 16:21 ` [Intel-xe] ✓ CI.KUnit: success " Patchwork
2023-09-19 16:28 ` [Intel-xe] ✓ CI.Build: " Patchwork
2023-09-19 16:28 ` [Intel-xe] ✗ CI.Hooks: failure " Patchwork
2023-09-19 16:29 ` [Intel-xe] ✓ CI.checksparse: success " Patchwork
2023-09-19 17:04 ` [Intel-xe] ✗ CI.BAT: failure " Patchwork
2023-10-14 1:05 ` [Intel-xe] [PATCH 00/21] Add OA functionality to Xe Umesh Nerlige Ramappa
2023-10-20 7:44 ` Lionel Landwerlin
2023-10-20 7:52 ` Lionel Landwerlin
2023-10-31 6:51 ` Dixit, Ashutosh
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=ZS12MUHgYriRokD9@unerlige-ril \
--to=umesh.nerlige.ramappa@intel.com \
--cc=ashutosh.dixit@intel.com \
--cc=intel-xe@lists.freedesktop.org \
/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.