From: Gustavo Sousa <gustavo.sousa@intel.com>
To: Lucas De Marchi <lucas.demarchi@intel.com>,
<intel-xe@lists.freedesktop.org>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>,
Shekhar Chauhan <shekhar.chauhan@intel.com>,
Balasubramani Vivekanandan <balasubramani.vivekanandan@intel.com>,
Matt Roper <matthew.d.roper@intel.com>,
Tejas Upadhyay <tejas.upadhyay@intel.com>
Subject: Re: [PATCH v2 16/22] drm/xe/xe3p_xpc: Add MCR steering
Date: Thu, 16 Oct 2025 08:44:34 -0300 [thread overview]
Message-ID: <176061507440.3168.6260974313214537346@intel.com> (raw)
In-Reply-To: <20251015-xe3p-v2-16-b9189b3056a2@intel.com>
Quoting Lucas De Marchi (2025-10-15 19:06:31-03:00)
>From: Matt Roper <matthew.d.roper@intel.com>
>
>Xe3p_XPC's steering has a few changes from Xe3. Aside from
>minor changes to the XeCore (the new name for what used to be "DSS") and
>INSTANCE0 tables, different rules apply to different subranges of type
>"GAM." Certain GAM subranges require steering to grp/instance (0,0)
>(and thus use the INSTANCE0 table), while others require special
>steering to (1,0) instead. Similarly, there are multiple classes of
>"PSMI" steering, with some requiring steering to (0,0) while others
>require (19,0).
>
>FIXME: There's an "L3BANK" range listed in the bspec that needs
>clarification.
I think we also have a NODE range that is also missing termination
details. I think a TODO/FIXME in the code for those two types of range
would help reminind ourselves about the need to complete the tables.
For the ranges added in this patch, I checked and they match the Bspec,
so:
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com>
>
>Bspec: 74418
>Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
>Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>---
> drivers/gpu/drm/xe/xe_gt_mcr.c | 56 ++++++++++++++++++++++++++++++++++++++--
> drivers/gpu/drm/xe/xe_gt_types.h | 15 +++++++++++
> 2 files changed, 69 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/gpu/drm/xe/xe_gt_mcr.c b/drivers/gpu/drm/xe/xe_gt_mcr.c
>index e1a2b38fc2a86..e5506ec28e147 100644
>--- a/drivers/gpu/drm/xe/xe_gt_mcr.c
>+++ b/drivers/gpu/drm/xe/xe_gt_mcr.c
>@@ -169,6 +169,15 @@ static const struct xe_mmio_range xelpg_dss_steering_table[] = {
> {},
> };
>
>+static const struct xe_mmio_range xe3p_xpc_xecore_steering_table[] = {
>+ { 0x008140, 0x00817F }, /* SLICE, XeCore, SLICE */
>+ { 0x009480, 0x00955F }, /* SLICE, XeCore */
>+ { 0x00D800, 0x00D87F }, /* SLICE */
>+ { 0x00DC00, 0x00E9FF }, /* SLICE, rsvd, XeCore, rsvd, XeCore, rsvd, XeCore */
>+ { 0x013000, 0x0135FF }, /* XeCore, SLICE */
>+ {},
>+};
>+
> static const struct xe_mmio_range xelpmp_oaddrm_steering_table[] = {
> { 0x393200, 0x39323F },
> { 0x393400, 0x3934FF },
>@@ -247,6 +256,30 @@ static const struct xe_mmio_range xe3lpm_instance0_steering_table[] = {
> {},
> };
>
>+/*
>+ * Different "GAM" ranges have different rules; GAMWKRS, STLB, and GAMREQSTRM
>+ * range subtypes need to be steered to (1,0), while all other GAM subtypes
>+ * are steered to (0,0) and are included in the "INSTANCE0" table farther
>+ * down.
>+ */
>+static const struct xe_mmio_range xe3p_xpc_gam_grp1_steering_table[] = {
>+ { 0x004000, 0x004AFF }, /* GAMREQSTRM, rsvd, STLB, GAMWKRS, GAMREQSTRM */
>+ { 0x00F100, 0x00FFFF }, /* GAMWKRS */
>+ {},
>+};
>+
>+static const struct xe_mmio_range xe3p_xpc_psmi_grp19_steering_table[] = {
>+ { 0x00B500, 0x00B5FF },
>+ {},
>+};
>+
>+static const struct xe_mmio_range xe3p_xpc_instance0_steering_table[] = {
>+ { 0x00B600, 0x00B6FF }, /* PSMI0 */
>+ { 0x00C800, 0x00CFFF }, /* GAMCTRL */
>+ { 0x00F000, 0x00F0FF }, /* GAMCTRL */
>+ {},
>+};
>+
> static void init_steering_l3bank(struct xe_gt *gt)
> {
> struct xe_mmio *mmio = >->mmio;
>@@ -419,6 +452,18 @@ static void init_steering_sqidi_psmi(struct xe_gt *gt)
> gt->steering[SQIDI_PSMI].instance_target = select & 0x1;
> }
>
>+static void init_steering_psmi(struct xe_gt *gt)
>+{
>+ gt->steering[PSMI19].group_target = 19;
>+ gt->steering[PSMI19].instance_target = 0;
>+}
>+
>+static void init_steering_gam1(struct xe_gt *gt)
>+{
>+ gt->steering[GAM1].group_target = 1;
>+ gt->steering[GAM1].instance_target = 0;
>+}
>+
> static const struct {
> const char *name;
> void (*init)(struct xe_gt *gt);
>@@ -426,9 +471,11 @@ static const struct {
> [L3BANK] = { "L3BANK", init_steering_l3bank },
> [MSLICE] = { "MSLICE", init_steering_mslice },
> [LNCF] = { "LNCF", NULL }, /* initialized by mslice init */
>- [DSS] = { "DSS", init_steering_dss },
>+ [DSS] = { "DSS / XeCore", init_steering_dss },
> [OADDRM] = { "OADDRM / GPMXMT", init_steering_oaddrm },
> [SQIDI_PSMI] = { "SQIDI_PSMI", init_steering_sqidi_psmi },
>+ [PSMI19] = { "PSMI[19]", init_steering_psmi },
>+ [GAM1] = { "GAMWKRS / STLB / GAMREQSTRM", init_steering_gam1 },
> [INSTANCE0] = { "INSTANCE 0", NULL },
> [IMPLICIT_STEERING] = { "IMPLICIT", NULL },
> };
>@@ -467,7 +514,12 @@ void xe_gt_mcr_init_early(struct xe_gt *gt)
> gt->steering[OADDRM].ranges = xelpmp_oaddrm_steering_table;
> }
> } else {
>- if (GRAPHICS_VER(xe) >= 20) {
>+ if (GRAPHICS_VERx100(xe) == 3511) {
>+ gt->steering[DSS].ranges = xe3p_xpc_xecore_steering_table;
>+ gt->steering[GAM1].ranges = xe3p_xpc_gam_grp1_steering_table;
>+ gt->steering[INSTANCE0].ranges = xe3p_xpc_instance0_steering_table;
>+ gt->steering[PSMI19].ranges = xe3p_xpc_psmi_grp19_steering_table;
>+ } else if (GRAPHICS_VER(xe) >= 20) {
> gt->steering[DSS].ranges = xe2lpg_dss_steering_table;
> gt->steering[SQIDI_PSMI].ranges = xe2lpg_sqidi_psmi_steering_table;
> gt->steering[INSTANCE0].ranges = xe2lpg_instance0_steering_table;
>diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
>index 8b5f604d7883a..d93faa1eedef8 100644
>--- a/drivers/gpu/drm/xe/xe_gt_types.h
>+++ b/drivers/gpu/drm/xe/xe_gt_types.h
>@@ -72,6 +72,21 @@ enum xe_steering_type {
> OADDRM,
> SQIDI_PSMI,
>
>+ /*
>+ * The bspec lists multiple ranges as "PSMI," but the different
>+ * ranges with that label have different grpid steering values so we
>+ * treat them independently in code. Note that the ranges with grpid=0
>+ * are included in the INSTANCE0 group above.
>+ */
>+ PSMI19,
>+
>+ /*
>+ * Although most GAM ranges must be steered to (0,0) and thus use the
>+ * INSTANCE0 type farther down, some platforms have special rules
>+ * for specific subtypes that require steering to (1,0) instead.
>+ */
>+ GAM1,
>+
> /*
> * On some platforms there are multiple types of MCR registers that
> * will always return a non-terminated value at instance (0, 0). We'll
>
>--
>2.51.0
>
next prev parent reply other threads:[~2025-10-16 11:44 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-15 22:06 [PATCH v2 00/22] drm/xe: Add Xe3p support Lucas De Marchi
2025-10-15 22:06 ` [PATCH v2 01/22] drm/xe/xe3: Add support for graphics IP versions 30.04 & 30.05 Lucas De Marchi
2025-10-15 22:06 ` [PATCH v2 02/22] drm/xe/xe3p_lpm: Add support for media IP versions 35.00 & 35.03 Lucas De Marchi
2025-10-16 16:12 ` Gustavo Sousa
2025-10-16 16:46 ` Lucas De Marchi
2025-10-15 22:06 ` [PATCH v2 03/22] drm/xe: Drop CTC_MODE register read Lucas De Marchi
2025-10-15 23:26 ` Matt Roper
2025-10-15 22:06 ` [PATCH v2 04/22] drm/xe: Add GT_VER() to check version specific to gt type Lucas De Marchi
2025-10-15 23:34 ` Matt Roper
2025-10-15 22:06 ` [PATCH v2 05/22] drm/xe/xe3p_lpm: Skip disabling NOA on unsupported IPs Lucas De Marchi
2025-10-15 22:06 ` [PATCH v2 06/22] drm/xe/xe3p_lpm: Handle MCR steering Lucas De Marchi
2025-10-15 22:06 ` [PATCH v2 07/22] drm/xe/xe3p: Stop programming RCU_MODE's fixed slice mode setting Lucas De Marchi
2025-10-15 22:06 ` [PATCH v2 08/22] drm/xe/xe3p: Determine service copy availability from fuse Lucas De Marchi
2025-10-15 22:06 ` [PATCH v2 09/22] drm/xe: Dump CURRENT_LRCA register Lucas De Marchi
2025-10-15 23:28 ` Matt Roper
2025-10-15 22:06 ` [PATCH v2 10/22] drm/xe/xe3p: Dump CSMQDEBUG register Lucas De Marchi
2025-10-15 23:33 ` Matt Roper
2025-10-15 22:06 ` [PATCH v2 11/22] drm/xe/nvl: Define NVL-S platform Lucas De Marchi
2025-10-16 16:41 ` Gustavo Sousa
2025-10-15 22:06 ` [PATCH v2 12/22] drm/xe/nvls: Define GuC firmware for NVL-S Lucas De Marchi
2025-10-15 22:06 ` [PATCH v2 13/22] drm/xe/nvls: Attach MOCS table " Lucas De Marchi
2025-10-15 22:06 ` [PATCH v2 14/22] drm/xe/xe3p_xpc: Add Xe3p_XPC IP definition Lucas De Marchi
2025-10-15 22:06 ` [PATCH v2 15/22] drm/xe/xe3p_xpc: Add L3 bank mask Lucas De Marchi
2025-10-15 23:29 ` Matt Roper
2025-10-15 22:06 ` [PATCH v2 16/22] drm/xe/xe3p_xpc: Add MCR steering Lucas De Marchi
2025-10-16 11:44 ` Gustavo Sousa [this message]
2025-10-16 19:48 ` Lucas De Marchi
2025-10-16 20:16 ` Gustavo Sousa
2025-10-15 22:06 ` [PATCH v2 17/22] drm/xe/irq: Rename fuse mask variables Lucas De Marchi
2025-10-15 23:39 ` Matt Roper
2025-10-15 22:06 ` [PATCH v2 18/22] drm/xe/irq: Split irq mask per engine class Lucas De Marchi
2025-10-15 23:52 ` Matt Roper
2025-10-16 4:38 ` Lucas De Marchi
2025-10-15 22:06 ` [PATCH v2 19/22] drm/xe/xe3p_xpc: Add support for compute walker for non-MSIx Lucas De Marchi
2025-10-16 0:07 ` Matt Roper
2025-10-16 5:33 ` Lucas De Marchi
2025-10-16 6:52 ` Muqthyar Ahmed, Syed Abdul
2025-10-16 13:59 ` Lucas De Marchi
2025-10-17 6:52 ` Joonas Lahtinen
2025-10-15 22:06 ` [PATCH v2 20/22] drm/xe/xe3p_xpc: Skip compression tuning on platforms without flatccs Lucas De Marchi
2025-10-16 12:30 ` Gustavo Sousa
2025-10-16 16:54 ` Matt Roper
2025-10-15 22:06 ` [PATCH v2 21/22] drm/xe/xe3p_xpc: Setup PAT table Lucas De Marchi
2025-10-16 14:30 ` Vivekanandan, Balasubramani
2025-10-16 20:22 ` Lucas De Marchi
2025-10-15 22:06 ` [PATCH v2 22/22] drm/xe/xe3p: Add xe3p EU stall data format Lucas De Marchi
2025-10-15 23:58 ` Dixit, Ashutosh
2025-10-16 3:25 ` Lucas De Marchi
2025-10-16 5:11 ` ✗ CI.checkpatch: warning for drm/xe: Add Xe3p support (rev2) Patchwork
2025-10-16 5:13 ` ✓ CI.KUnit: success " Patchwork
2025-10-16 5:55 ` ✗ Xe.CI.BAT: failure " Patchwork
2025-10-16 23:29 ` ✗ Xe.CI.Full: " 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=176061507440.3168.6260974313214537346@intel.com \
--to=gustavo.sousa@intel.com \
--cc=balasubramani.vivekanandan@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=lucas.demarchi@intel.com \
--cc=matthew.d.roper@intel.com \
--cc=shekhar.chauhan@intel.com \
--cc=tejas.upadhyay@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