From: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: Ashutosh Dixit <ashutosh.dixit@intel.com>
Cc: <intel-xe@lists.freedesktop.org>,
Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Subject: Re: [PATCH 1/3] drm/xe/oa/uapi: Expose MERT OA unit
Date: Mon, 8 Dec 2025 07:48:13 -0500 [thread overview]
Message-ID: <aTbJDZhEMqU8Rg62@intel.com> (raw)
In-Reply-To: <20251205212613.826224-2-ashutosh.dixit@intel.com>
On Fri, Dec 05, 2025 at 01:26:11PM -0800, Ashutosh Dixit wrote:
> A MERT OA unit is available in the SoC on some platforms. Add support
> for this OA unit and expose it to userspace. The MERT OA unit does not
> have any HW engines attached, but is otherwise similar to an OAM unit.
>
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
> Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
> ---
> drivers/gpu/drm/xe/regs/xe_oa_regs.h | 9 +++++++
> drivers/gpu/drm/xe/xe_oa.c | 37 +++++++++++++++++++++++++---
> include/uapi/drm/xe_drm.h | 3 +++
> 3 files changed, 46 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/regs/xe_oa_regs.h b/drivers/gpu/drm/xe/regs/xe_oa_regs.h
> index 638ab3b99eb0b..04a729e610aa9 100644
> --- a/drivers/gpu/drm/xe/regs/xe_oa_regs.h
> +++ b/drivers/gpu/drm/xe/regs/xe_oa_regs.h
> @@ -108,4 +108,13 @@
> #define XE_OAM_SCMI_0_BASE_ADJ (MEDIA_GT_GSI_OFFSET + XE_OAM_SCMI_0_BASE)
> #define XE_OAM_SCMI_1_BASE_ADJ (MEDIA_GT_GSI_OFFSET + XE_OAM_SCMI_1_BASE)
>
> +#define OAMERT_CONTROL XE_REG(0x1453a0)
> +#define OAMERT_DEBUG XE_REG(0x1453a4)
> +#define OAMERT_STATUS XE_REG(0x1453a8)
> +#define OAMERT_HEAD_POINTER XE_REG(0x1453ac)
> +#define OAMERT_TAIL_POINTER XE_REG(0x1453b0)
> +#define OAMERT_BUFFER XE_REG(0x1453b4)
> +#define OAMERT_CONTEXT_CONTROL XE_REG(0x1453c8)
> +#define OAMERT_MMIO_TRG XE_REG(0x1453cc)
> +
> #endif
> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
> index cc48663c2b48f..7846dbc32542e 100644
> --- a/drivers/gpu/drm/xe/xe_oa.c
> +++ b/drivers/gpu/drm/xe/xe_oa.c
> @@ -1937,6 +1937,7 @@ static bool oa_unit_supports_oa_format(struct xe_oa_open_param *param, int type)
> type == DRM_XE_OA_FMT_TYPE_OAC || type == DRM_XE_OA_FMT_TYPE_PEC;
> case DRM_XE_OA_UNIT_TYPE_OAM:
> case DRM_XE_OA_UNIT_TYPE_OAM_SAG:
> + case DRM_XE_OA_UNIT_TYPE_MERT:
> return type == DRM_XE_OA_FMT_TYPE_OAM || type == DRM_XE_OA_FMT_TYPE_OAM_MPEC;
> default:
> return false;
> @@ -2224,6 +2225,8 @@ static const struct xe_mmio_range xe2_oa_mux_regs[] = {
> { .start = 0xE18C, .end = 0xE18C }, /* SAMPLER_MODE */
> { .start = 0xE590, .end = 0xE590 }, /* TDL_LSC_LAT_MEASURE_TDL_GFX */
> { .start = 0x13000, .end = 0x137FC }, /* PES_0_PESL0 - PES_63_UPPER_PESL3 */
> + { .start = 0x145194, .end = 0x145194 }, /* SYS_MEM_LAT_MEASURE */
> + { .start = 0x145340, .end = 0x14537C }, /* MERTSS_PES_0 - MERTSS_PES_7 */
> {},
> };
>
> @@ -2515,7 +2518,12 @@ int xe_oa_register(struct xe_device *xe)
> static u32 num_oa_units_per_gt(struct xe_gt *gt)
> {
> if (xe_gt_is_main_type(gt) || GRAPHICS_VER(gt_to_xe(gt)) < 20)
> - return 1;
> + /*
> + * Mert OA unit belongs to the SoC, not a gt, so should be accessed using
> + * xe_root_tile_mmio(). However, for all known platforms this is the same as
> + * accessing via xe_root_mmio_gt()->mmio.
> + */
> + return xe_device_has_mert(gt_to_xe(gt)) ? 2 : 1;
> else if (!IS_DGFX(gt_to_xe(gt)))
> return XE_OAM_UNIT_SCMI_0 + 1; /* SAG + SCMI_0 */
> else
> @@ -2599,6 +2607,22 @@ static struct xe_oa_regs __oag_regs(void)
> };
> }
>
> +static struct xe_oa_regs __oamert_regs(void)
> +{
> + return (struct xe_oa_regs) {
> + .base = 0,
> + .oa_head_ptr = OAMERT_HEAD_POINTER,
> + .oa_tail_ptr = OAMERT_TAIL_POINTER,
> + .oa_buffer = OAMERT_BUFFER,
> + .oa_ctx_ctrl = OAMERT_CONTEXT_CONTROL,
> + .oa_ctrl = OAMERT_CONTROL,
> + .oa_debug = OAMERT_DEBUG,
> + .oa_status = OAMERT_STATUS,
> + .oa_mmio_trg = OAMERT_MMIO_TRG,
> + .oa_ctrl_counter_select_mask = OAM_CONTROL_COUNTER_SEL_MASK,
> + };
> +}
> +
> static void __xe_oa_init_oa_units(struct xe_gt *gt)
> {
> const u32 oam_base_addr[] = {
> @@ -2612,8 +2636,15 @@ static void __xe_oa_init_oa_units(struct xe_gt *gt)
> struct xe_oa_unit *u = >->oa.oa_unit[i];
>
> if (xe_gt_is_main_type(gt)) {
> - u->regs = __oag_regs();
> - u->type = DRM_XE_OA_UNIT_TYPE_OAG;
> + if (!i) {
> + u->regs = __oag_regs();
> + u->type = DRM_XE_OA_UNIT_TYPE_OAG;
> + } else {
> + xe_gt_assert(gt, xe_device_has_mert(gt_to_xe(gt)));
> + xe_gt_assert(gt, gt == xe_root_mmio_gt(gt_to_xe(gt)));
> + u->regs = __oamert_regs();
> + u->type = DRM_XE_OA_UNIT_TYPE_MERT;
> + }
> } else {
> xe_gt_assert(gt, GRAPHICS_VERx100(gt_to_xe(gt)) >= 1270);
> u->regs = __oam_regs(oam_base_addr[i]);
> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index 876a076fa6c0c..f520462c28643 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/xe_drm.h
> @@ -1675,6 +1675,9 @@ enum drm_xe_oa_unit_type {
>
> /** @DRM_XE_OA_UNIT_TYPE_OAM_SAG: OAM_SAG OA unit */
> DRM_XE_OA_UNIT_TYPE_OAM_SAG,
> +
> + /** @DRM_XE_OA_UNIT_TYPE_MERT: MERT OA unit */
> + DRM_XE_OA_UNIT_TYPE_MERT,
And who&where is the usage here?
> };
>
> /**
> --
> 2.48.1
>
next prev parent reply other threads:[~2025-12-08 12:48 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-05 21:26 [PATCH 0/3] drm/xe/oa: Expose MERT OA unit Ashutosh Dixit
2025-12-05 21:26 ` [PATCH 1/3] drm/xe/oa/uapi: " Ashutosh Dixit
2025-12-08 12:48 ` Rodrigo Vivi [this message]
2025-12-08 19:10 ` Dixit, Ashutosh
2025-12-08 19:53 ` Rodrigo Vivi
2025-12-15 19:34 ` Dixit, Ashutosh
2025-12-17 1:12 ` Dixit, Ashutosh
2025-12-17 22:36 ` Rodrigo Vivi
2025-12-05 21:26 ` [PATCH 2/3] drm/xe/rtp: Whitelist OAMERT MMIO trigger registers Ashutosh Dixit
2025-12-05 23:34 ` Umesh Nerlige Ramappa
2025-12-05 21:26 ` [PATCH 3/3] drm/xe/oa: Always set OAG_OAGLBCTXCTRL_COUNTER_RESUME Ashutosh Dixit
2025-12-05 23:36 ` Umesh Nerlige Ramappa
2025-12-05 23:15 ` ✓ CI.KUnit: success for drm/xe/oa: Expose MERT OA unit Patchwork
2025-12-06 0:27 ` ✓ Xe.CI.BAT: " Patchwork
2025-12-06 12:07 ` ✗ Xe.CI.Full: failure " Patchwork
2025-12-15 19:37 ` [PATCH 0/3] " 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=aTbJDZhEMqU8Rg62@intel.com \
--to=rodrigo.vivi@intel.com \
--cc=ashutosh.dixit@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=umesh.nerlige.ramappa@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox