From: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: Matt Roper <matthew.d.roper@intel.com>
Cc: <intel-xe@lists.freedesktop.org>
Subject: Re: [PATCH v2 31/43] drm/xe/oa: Convert register access to use xe_mmio
Date: Tue, 10 Sep 2024 14:34:26 -0400 [thread overview]
Message-ID: <ZuCRMun7Thr4UxWr@intel.com> (raw)
In-Reply-To: <20240907000748.2614020-76-matthew.d.roper@intel.com>
On Fri, Sep 06, 2024 at 05:08:20PM -0700, Matt Roper wrote:
> Stop using GT pointers for register access.
>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
> ---
> drivers/gpu/drm/xe/xe_oa.c | 48 +++++++++++++++++++++-----------------
> 1 file changed, 27 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
> index 63286ed8457f..75c3b587954f 100644
> --- a/drivers/gpu/drm/xe/xe_oa.c
> +++ b/drivers/gpu/drm/xe/xe_oa.c
> @@ -176,7 +176,7 @@ static const struct xe_oa_regs *__oa_regs(struct xe_oa_stream *stream)
>
> static u32 xe_oa_hw_tail_read(struct xe_oa_stream *stream)
> {
> - return xe_mmio_read32(stream->gt, __oa_regs(stream)->oa_tail_ptr) &
> + return xe_mmio_read32(&stream->gt->mmio, __oa_regs(stream)->oa_tail_ptr) &
> OAG_OATAILPTR_MASK;
> }
>
> @@ -366,7 +366,7 @@ static int xe_oa_append_reports(struct xe_oa_stream *stream, char __user *buf,
> struct xe_reg oaheadptr = __oa_regs(stream)->oa_head_ptr;
>
> spin_lock_irqsave(&stream->oa_buffer.ptr_lock, flags);
> - xe_mmio_write32(stream->gt, oaheadptr,
> + xe_mmio_write32(&stream->gt->mmio, oaheadptr,
> (head + gtt_offset) & OAG_OAHEADPTR_MASK);
> stream->oa_buffer.head = head;
> spin_unlock_irqrestore(&stream->oa_buffer.ptr_lock, flags);
> @@ -377,22 +377,23 @@ static int xe_oa_append_reports(struct xe_oa_stream *stream, char __user *buf,
>
> static void xe_oa_init_oa_buffer(struct xe_oa_stream *stream)
> {
> + struct xe_mmio *mmio = &stream->gt->mmio;
> u32 gtt_offset = xe_bo_ggtt_addr(stream->oa_buffer.bo);
> u32 oa_buf = gtt_offset | OABUFFER_SIZE_16M | OAG_OABUFFER_MEMORY_SELECT;
> unsigned long flags;
>
> spin_lock_irqsave(&stream->oa_buffer.ptr_lock, flags);
>
> - xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_status, 0);
> - xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_head_ptr,
> + xe_mmio_write32(mmio, __oa_regs(stream)->oa_status, 0);
> + xe_mmio_write32(mmio, __oa_regs(stream)->oa_head_ptr,
> gtt_offset & OAG_OAHEADPTR_MASK);
> stream->oa_buffer.head = 0;
> /*
> * PRM says: "This MMIO must be set before the OATAILPTR register and after the
> * OAHEADPTR register. This is to enable proper functionality of the overflow bit".
> */
> - xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_buffer, oa_buf);
> - xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_tail_ptr,
> + xe_mmio_write32(mmio, __oa_regs(stream)->oa_buffer, oa_buf);
> + xe_mmio_write32(mmio, __oa_regs(stream)->oa_tail_ptr,
> gtt_offset & OAG_OATAILPTR_MASK);
>
> /* Mark that we need updated tail pointer to read from */
> @@ -440,21 +441,23 @@ static void xe_oa_enable(struct xe_oa_stream *stream)
> val = __format_to_oactrl(format, regs->oa_ctrl_counter_select_mask) |
> __oa_ccs_select(stream) | OAG_OACONTROL_OA_COUNTER_ENABLE;
>
> - xe_mmio_write32(stream->gt, regs->oa_ctrl, val);
> + xe_mmio_write32(&stream->gt->mmio, regs->oa_ctrl, val);
> }
>
> static void xe_oa_disable(struct xe_oa_stream *stream)
> {
> - xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_ctrl, 0);
> - if (xe_mmio_wait32(stream->gt, __oa_regs(stream)->oa_ctrl,
> + struct xe_mmio *mmio = &stream->gt->mmio;
> +
> + xe_mmio_write32(mmio, __oa_regs(stream)->oa_ctrl, 0);
> + if (xe_mmio_wait32(mmio, __oa_regs(stream)->oa_ctrl,
> OAG_OACONTROL_OA_COUNTER_ENABLE, 0, 50000, NULL, false))
> drm_err(&stream->oa->xe->drm,
> "wait for OA to be disabled timed out\n");
>
> if (GRAPHICS_VERx100(stream->oa->xe) <= 1270 && GRAPHICS_VERx100(stream->oa->xe) != 1260) {
> /* <= XE_METEORLAKE except XE_PVC */
> - xe_mmio_write32(stream->gt, OA_TLB_INV_CR, 1);
> - if (xe_mmio_wait32(stream->gt, OA_TLB_INV_CR, 1, 0, 50000, NULL, false))
> + xe_mmio_write32(mmio, OA_TLB_INV_CR, 1);
> + if (xe_mmio_wait32(mmio, OA_TLB_INV_CR, 1, 0, 50000, NULL, false))
> drm_err(&stream->oa->xe->drm,
> "wait for OA tlb invalidate timed out\n");
> }
> @@ -477,7 +480,7 @@ static int __xe_oa_read(struct xe_oa_stream *stream, char __user *buf,
> size_t count, size_t *offset)
> {
> /* Only clear our bits to avoid side-effects */
> - stream->oa_status = xe_mmio_rmw32(stream->gt, __oa_regs(stream)->oa_status,
> + stream->oa_status = xe_mmio_rmw32(&stream->gt->mmio, __oa_regs(stream)->oa_status,
> OASTATUS_RELEVANT_BITS, 0);
> /*
> * Signal to userspace that there is non-zero OA status to read via
> @@ -748,7 +751,8 @@ static int xe_oa_configure_oac_context(struct xe_oa_stream *stream, bool enable)
> int err;
>
> /* Set ccs select to enable programming of OAC_OACONTROL */
> - xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_ctrl, __oa_ccs_select(stream));
> + xe_mmio_write32(&stream->gt->mmio, __oa_regs(stream)->oa_ctrl,
> + __oa_ccs_select(stream));
>
> /* Modify stream hwe context image with regs_context */
> err = xe_oa_modify_ctx_image(stream, stream->exec_q->lrc[0],
> @@ -784,6 +788,7 @@ static u32 oag_configure_mmio_trigger(const struct xe_oa_stream *stream, bool en
>
> static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
> {
> + struct xe_mmio *mmio = &stream->gt->mmio;
> u32 sqcnt1;
>
> /*
> @@ -797,7 +802,7 @@ static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
> _MASKED_BIT_DISABLE(DISABLE_DOP_GATING));
> }
>
> - xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_debug,
> + xe_mmio_write32(mmio, __oa_regs(stream)->oa_debug,
> oag_configure_mmio_trigger(stream, false));
>
> /* disable the context save/restore or OAR counters */
> @@ -805,13 +810,13 @@ static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
> xe_oa_configure_oa_context(stream, false);
>
> /* Make sure we disable noa to save power. */
> - xe_mmio_rmw32(stream->gt, RPM_CONFIG1, GT_NOA_ENABLE, 0);
> + xe_mmio_rmw32(mmio, RPM_CONFIG1, GT_NOA_ENABLE, 0);
>
> sqcnt1 = SQCNT1_PMON_ENABLE |
> (HAS_OA_BPC_REPORTING(stream->oa->xe) ? SQCNT1_OABPC : 0);
>
> /* Reset PMON Enable to save power. */
> - xe_mmio_rmw32(stream->gt, XELPMP_SQCNT1, sqcnt1, 0);
> + xe_mmio_rmw32(mmio, XELPMP_SQCNT1, sqcnt1, 0);
> }
>
> static void xe_oa_stream_destroy(struct xe_oa_stream *stream)
> @@ -939,6 +944,7 @@ static u32 oag_report_ctx_switches(const struct xe_oa_stream *stream)
>
> static int xe_oa_enable_metric_set(struct xe_oa_stream *stream)
> {
> + struct xe_mmio *mmio = &stream->gt->mmio;
> u32 oa_debug, sqcnt1;
> int ret;
>
> @@ -965,12 +971,12 @@ static int xe_oa_enable_metric_set(struct xe_oa_stream *stream)
> OAG_OA_DEBUG_DISABLE_START_TRG_2_COUNT_QUAL |
> OAG_OA_DEBUG_DISABLE_START_TRG_1_COUNT_QUAL;
>
> - xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_debug,
> + xe_mmio_write32(mmio, __oa_regs(stream)->oa_debug,
> _MASKED_BIT_ENABLE(oa_debug) |
> oag_report_ctx_switches(stream) |
> oag_configure_mmio_trigger(stream, true));
>
> - xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_ctx_ctrl, stream->periodic ?
> + xe_mmio_write32(mmio, __oa_regs(stream)->oa_ctx_ctrl, stream->periodic ?
> (OAG_OAGLBCTXCTRL_COUNTER_RESUME |
> OAG_OAGLBCTXCTRL_TIMER_ENABLE |
> REG_FIELD_PREP(OAG_OAGLBCTXCTRL_TIMER_PERIOD_MASK,
> @@ -984,7 +990,7 @@ static int xe_oa_enable_metric_set(struct xe_oa_stream *stream)
> sqcnt1 = SQCNT1_PMON_ENABLE |
> (HAS_OA_BPC_REPORTING(stream->oa->xe) ? SQCNT1_OABPC : 0);
>
> - xe_mmio_rmw32(stream->gt, XELPMP_SQCNT1, 0, sqcnt1);
> + xe_mmio_rmw32(mmio, XELPMP_SQCNT1, 0, sqcnt1);
>
> /* Configure OAR/OAC */
> if (stream->exec_q) {
> @@ -1533,7 +1539,7 @@ u32 xe_oa_timestamp_frequency(struct xe_gt *gt)
> case XE_PVC:
> case XE_METEORLAKE:
> xe_pm_runtime_get(gt_to_xe(gt));
> - reg = xe_mmio_read32(gt, RPM_CONFIG0);
> + reg = xe_mmio_read32(>->mmio, RPM_CONFIG0);
> xe_pm_runtime_put(gt_to_xe(gt));
>
> shift = REG_FIELD_GET(RPM_CONFIG0_CTC_SHIFT_PARAMETER_MASK, reg);
> @@ -2349,7 +2355,7 @@ static void __xe_oa_init_oa_units(struct xe_gt *gt)
> }
>
> /* Ensure MMIO trigger remains disabled till there is a stream */
> - xe_mmio_write32(gt, u->regs.oa_debug,
> + xe_mmio_write32(>->mmio, u->regs.oa_debug,
> oag_configure_mmio_trigger(NULL, false));
>
> /* Set oa_unit_ids now to ensure ids remain contiguous */
> --
> 2.45.2
>
next prev parent reply other threads:[~2024-09-10 18:34 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-07 0:07 [PATCH v2 00/43] Stop using xe_gt as a register MMIO target Matt Roper
2024-09-07 0:07 ` [PATCH v2 01/43] drm/xe: Move forcewake to 'gt.pm' substructure Matt Roper
2024-09-07 0:07 ` [PATCH v2 02/43] drm/xe: Create dedicated xe_mmio structure Matt Roper
2024-09-07 0:07 ` [PATCH v2 03/43] drm/xe: Clarify size of MMIO region Matt Roper
2024-09-07 0:07 ` [PATCH v2 04/43] drm/xe: Move GSI offset adjustment fields into 'struct xe_mmio' Matt Roper
2024-09-10 18:02 ` Rodrigo Vivi
2024-09-12 13:30 ` Jani Nikula
2024-09-07 0:07 ` [PATCH v2 05/43] drm/xe: Populate GT's mmio iomap from tile during init Matt Roper
2024-09-07 0:07 ` [PATCH v2 06/43] drm/xe: Switch mmio_ext to use 'struct xe_mmio' Matt Roper
2024-09-07 0:07 ` [PATCH v2 07/43] drm/xe: Add xe_tile backpointer to xe_mmio Matt Roper
2024-09-07 0:07 ` [PATCH v2 08/43] drm/xe: Adjust mmio code to pass VF substructure to SRIOV code Matt Roper
2024-09-07 0:07 ` [PATCH v2 09/43] drm/xe: Switch MMIO interface to take xe_mmio instead of xe_gt Matt Roper
2024-09-07 0:07 ` [PATCH v2 10/43] drm/xe/irq: Convert register access to use xe_mmio Matt Roper
2024-09-07 0:08 ` [PATCH v2 11/43] drm/xe/pcode: " Matt Roper
2024-09-07 0:08 ` [PATCH v2 12/43] drm/xe/hwmon: " Matt Roper
2024-09-07 0:08 ` [PATCH v2 13/43] drm/xe/vram: " Matt Roper
2024-09-07 0:08 ` [PATCH v2 14/43] drm/xe/compat-i915: " Matt Roper
2024-09-10 18:15 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 15/43] drm/xe/lmtt: " Matt Roper
2024-09-07 0:08 ` [PATCH v2 16/43] drm/xe/stolen: " Matt Roper
2024-09-07 0:08 ` [PATCH v2 17/43] drm/xe/device: " Matt Roper
2024-09-10 18:05 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 18/43] drm/xe/pci: " Matt Roper
2024-09-10 18:40 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 19/43] drm/xe/wa: " Matt Roper
2024-09-10 18:07 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 20/43] drm/xe/uc: " Matt Roper
2024-09-10 18:42 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 21/43] drm/xe/guc: " Matt Roper
2024-09-10 18:48 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 22/43] drm/xe/huc: " Matt Roper
2024-09-10 18:44 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 23/43] drm/xe/gsc: " Matt Roper
2024-09-10 18:08 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 24/43] drm/xe/query: " Matt Roper
2024-09-10 18:44 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 25/43] drm/xe/mcr: " Matt Roper
2024-09-10 18:11 ` Rodrigo Vivi
2024-09-10 18:49 ` Matt Roper
2024-09-07 0:08 ` [PATCH v2 26/43] drm/xe/mocs: " Matt Roper
2024-09-10 18:41 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 27/43] drm/xe/hw_engine: " Matt Roper
2024-09-10 18:42 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 28/43] drm/xe/gt_throttle: " Matt Roper
2024-09-10 18:07 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 29/43] drm/xe/pat: " Matt Roper
2024-09-10 18:12 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 30/43] drm/xe/wopcm: " Matt Roper
2024-09-10 18:12 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 31/43] drm/xe/oa: " Matt Roper
2024-09-10 18:34 ` Rodrigo Vivi [this message]
2024-09-07 0:08 ` [PATCH v2 32/43] drm/xe/topology: " Matt Roper
2024-09-10 18:11 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 33/43] drm/xe/execlist: " Matt Roper
2024-09-10 18:13 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 34/43] drm/xe/gt_clock: " Matt Roper
2024-09-10 18:44 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 35/43] drm/xe/reg_sr: " Matt Roper
2024-09-10 18:15 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 36/43] drm/xe/gt: " Matt Roper
2024-09-10 18:11 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 37/43] drm/xe/sriov: " Matt Roper
2024-09-10 18:47 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 38/43] drm/xe/tlb: " Matt Roper
2024-09-10 18:45 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 39/43] drm/xe/gt_idle: " Matt Roper
2024-09-10 18:12 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 40/43] drm/xe/forcewake: " Matt Roper
2024-09-10 18:42 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 41/43] drm/xe/ggtt: " Matt Roper
2024-09-10 18:09 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 42/43] drm/xe/ccs_mode: " Matt Roper
2024-09-10 18:46 ` Rodrigo Vivi
2024-09-07 0:08 ` [PATCH v2 43/43] drm/xe/mmio: Drop compatibility macros Matt Roper
2024-09-07 3:10 ` ✓ CI.Patch_applied: success for Stop using xe_gt as a register MMIO target (rev2) Patchwork
2024-09-07 3:11 ` ✗ CI.checkpatch: warning " Patchwork
2024-09-07 3:12 ` ✓ CI.KUnit: success " Patchwork
2024-09-07 3:26 ` ✓ CI.Build: " Patchwork
2024-09-07 3:31 ` ✗ CI.Hooks: failure " Patchwork
2024-09-07 3:34 ` ✓ CI.checksparse: success " Patchwork
2024-09-07 4:22 ` ✗ CI.BAT: failure " Patchwork
2024-09-09 17:04 ` Matt Roper
2024-09-09 16:59 ` ✓ CI.FULL: success " Patchwork
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=ZuCRMun7Thr4UxWr@intel.com \
--to=rodrigo.vivi@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=matthew.d.roper@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.