Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Matt Roper <matthew.d.roper@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>,
	intel-xe@lists.freedesktop.org,
	Shekhar Chauhan <shekhar.chauhan@intel.com>,
	Balasubramani Vivekanandan <balasubramani.vivekanandan@intel.com>,
	Tejas Upadhyay <tejas.upadhyay@intel.com>
Subject: Re: [PATCH v3 23/24] drm/xe/xe3p_xpc: Setup PAT table
Date: Fri, 17 Oct 2025 21:09:34 +0300	[thread overview]
Message-ID: <aPKGXgfglFFi6uog@intel.com> (raw)
In-Reply-To: <20251017171811.GV5409@mdroper-desk1.amr.corp.intel.com>

On Fri, Oct 17, 2025 at 10:18:11AM -0700, Matt Roper wrote:
> On Fri, Oct 17, 2025 at 02:05:53PM +0300, Ville Syrjälä wrote:
> > On Thu, Oct 16, 2025 at 07:26:42PM -0700, Lucas De Marchi wrote:
> > > From: Matt Roper <matthew.d.roper@intel.com>
> > > 
> > > Xe3p_XPC IP requires a new PAT table; note that this table has one fewer
> > > column than the Xe2/Xe3 tables since compression is not supported.
> > > There's also no "WT" entry (which we wouldn't have used on a platform
> > > without display anyway).
> > > 
> > > Bspec: 71582
> > > 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_pat.c | 96 ++++++++++++++++++++++++++++++++++++++++++++-
> > >  1 file changed, 95 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/drivers/gpu/drm/xe/xe_pat.c b/drivers/gpu/drm/xe/xe_pat.c
> > > index 6e48ff84ad0a0..7649b554942aa 100644
> > > --- a/drivers/gpu/drm/xe/xe_pat.c
> > > +++ b/drivers/gpu/drm/xe/xe_pat.c
> > > @@ -154,6 +154,41 @@ static const struct xe_pat_table_entry xe2_pat_table[] = {
> > >  static const struct xe_pat_table_entry xe2_pat_ats = XE2_PAT( 0, 0, 0, 0, 3, 3 );
> > >  static const struct xe_pat_table_entry xe2_pat_pta = XE2_PAT( 0, 0, 0, 0, 3, 0 );
> > >  
> > > +/*
> > > + * Xe3p_XPC PAT table uses the same layout as Xe2/Xe3, except that there's no
> > > + * option for compression.  Also note that the "L3" and "L4" register fields
> > > + * actually control L2 and L3 cache respectively on this platform.
> > > + */
> > > +#define XE3P_XPC_PAT(no_promote, l3clos, l3_policy, l4_policy, __coh_mode) \
> > > +	XE2_PAT(no_promote, 0, l3clos, l3_policy, l4_policy, __coh_mode)
> > > +
> > > +static const struct xe_pat_table_entry xe3p_xpc_pat_ats = XE3P_XPC_PAT( 0, 0, 0, 0, 3 );
> > > +static const struct xe_pat_table_entry xe3p_xpc_pat_pta = XE3P_XPC_PAT( 0, 0, 0, 0, 0 );
> > > +
> > > +static const struct xe_pat_table_entry xe3p_xpc_pat_table[] = {
> > > +	[ 0] = XE3P_XPC_PAT( 0, 0, 0, 0, 0 ),
> > > +	[ 1] = XE3P_XPC_PAT( 0, 0, 0, 0, 2 ),
> > > +	[ 2] = XE3P_XPC_PAT( 0, 0, 0, 0, 3 ),
> > > +	[ 3] = XE3P_XPC_PAT( 0, 0, 3, 3, 0 ),
> > > +	[ 4] = XE3P_XPC_PAT( 0, 0, 3, 3, 2 ),
> > > +	[ 5] = XE3P_XPC_PAT( 0, 0, 3, 0, 0 ),
> > > +	[ 6] = XE3P_XPC_PAT( 0, 0, 3, 0, 2 ),
> > > +	[ 7] = XE3P_XPC_PAT( 0, 0, 3, 0, 3 ),
> > > +	[ 8] = XE3P_XPC_PAT( 0, 0, 0, 3, 0 ),
> > > +	[ 9] = XE3P_XPC_PAT( 0, 0, 0, 3, 2 ),
> > > +	[10] = XE3P_XPC_PAT( 0, 0, 0, 3, 3 ),
> > > +	/* 11..22 are reserved; leave set to all 0's */
> > > +	[23] = XE3P_XPC_PAT( 0, 1, 0, 0, 0 ),
> > > +	[24] = XE3P_XPC_PAT( 0, 1, 0, 0, 2 ),
> > > +	[25] = XE3P_XPC_PAT( 0, 1, 0, 0, 3 ),
> > > +	[26] = XE3P_XPC_PAT( 0, 2, 0, 0, 0 ),
> > > +	[27] = XE3P_XPC_PAT( 0, 2, 0, 0, 2 ),
> > > +	[28] = XE3P_XPC_PAT( 0, 2, 0, 0, 3 ),
> > > +	[29] = XE3P_XPC_PAT( 0, 3, 0, 0, 0 ),
> > > +	[30] = XE3P_XPC_PAT( 0, 3, 0, 0, 2 ),
> > > +	[31] = XE3P_XPC_PAT( 0, 3, 0, 0, 3 ),
> > 
> > Why did we go from human readable names to raw magic numbers?
> > This is now completely illegible.
> 
> For Xe2/Xe3 I think it's actually a lot easier to read since we have a
> kerneldoc right above the tables explaining exactly what each column
> represents:
> 
>  """
>  * The Xe2 table is getting large/complicated so it's easier to review if
>  * provided in a form that exactly matches the bspec's formatting.  The meaning
>  * of the fields here are:
>  *   - no_promote:  0=promotable, 1=no promote
>  *   - comp_en:     0=disable, 1=enable
>  *   - l3clos:      L3 class of service (0-3)
>  *   - l3_policy:   0=WB, 1=XD ("WB - Transient Display"), 3=UC
>  *   - l4_policy:   0=WB, 1=WT, 3=UC
>  *   - coh_mode:    0=no snoop, 2=1-way coherent, 3=2-way coherent
>  """

I don't like counting colums by hand. I would just like to look
at a row and understand what it means. With this thing that is
not possible without taking notes.

> 
> Trying to write out symbolic names like we did on i915 became pretty
> illegible due to the long/wrapping lines since we have so many fields
> now.

If wrapping is making a mess then don't wrap. I think people have big
enough screens that we can tolerate longs lines for something like this.

> It also became a nightmare to maintain since it was easy to make
> mistakes (and also easy to overlook them in code review).  This approach
> gives us something that exactly matches the presentation of the table in
> the bspec (so easier to add/modify without making mistakes, easier to
> review for correctness),

Except when the tables in the bspec are wrong you have to actually
debug this, like I did recently wrt. the CCS AUX screwups. 

Though even i915 wasn't fully using human reaadable names (eg.
some 0 values were basically just omitted). I have patch to 
also give those proper names, which I should probably clean
up and send out.

> and a key in the comments that makes it really
> easy to quickly understand the specific characteristics that relate to
> each row.
> 
> For Xe3p_XPC, we should probably duplicate that comment block (minus the
> "comp_en" field that's not relevant here) since we lost a field compared
> to the Xe2/Xe3 tables.

I think the only way the comment would actually help if it would
be directly above the table, and the comments would line up
properly with the colums of the table. Now the comment is too
far away (it's documenting the macro, not the table). And the
comment is using rows rather than the columns the actual table
is using, so there is a 90 degree rotation you have to perform
in your head all the time which is a pain.

Though even with the comments lining up with the colums you'd still
have to jump through extra hoops to figure out what eg. a magic '3'
means in a specific column. So still not the best solution IMO.

-- 
Ville Syrjälä
Intel

  reply	other threads:[~2025-10-18  2:46 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-17  2:26 [PATCH v3 00/24] drm/xe: Add Xe3p support Lucas De Marchi
2025-10-17  2:26 ` [PATCH v3 01/24] drm/xe/xe3: Add support for graphics IP versions 30.04 & 30.05 Lucas De Marchi
2025-10-17  2:26 ` [PATCH v3 02/24] drm/xe/xe3p: Add support for media IP versions 35.00 & 35.03 Lucas De Marchi
2025-10-17  2:26 ` [PATCH v3 03/24] drm/xe: Drop CTC_MODE register read Lucas De Marchi
2025-10-17  2:26 ` [PATCH v3 04/24] drm/xe: Add GT_VER() to check version specific to gt type Lucas De Marchi
2025-10-17  2:26 ` [PATCH v3 05/24] drm/xe/xe3p_lpm: Skip disabling NOA on unsupported IPs Lucas De Marchi
2025-10-17  2:26 ` [PATCH v3 06/24] drm/xe/xe3p_lpm: Handle MCR steering Lucas De Marchi
2025-10-17  2:26 ` [PATCH v3 07/24] drm/xe/xe3p: Stop programming RCU_MODE's fixed slice mode setting Lucas De Marchi
2025-10-17  2:26 ` [PATCH v3 08/24] drm/xe/xe3p: Determine service copy availability from fuse Lucas De Marchi
2025-10-17  2:26 ` [PATCH v3 09/24] drm/xe: Dump CURRENT_LRCA register Lucas De Marchi
2025-10-17  2:26 ` [PATCH v3 10/24] drm/xe/xe3p: Dump CSMQDEBUG register Lucas De Marchi
2025-10-17 15:55   ` Matt Roper
2025-10-21 16:02   ` Summers, Stuart
2025-10-17  2:26 ` [PATCH v3 11/24] drm/xe/nvl: Define NVL-S platform Lucas De Marchi
2025-10-17 13:05   ` Gustavo Sousa
2025-10-17  2:26 ` [PATCH v3 12/24] drm/xe/nvls: Define GuC firmware for NVL-S Lucas De Marchi
2025-10-17  2:26 ` [PATCH v3 13/24] drm/xe/nvls: Attach MOCS table " Lucas De Marchi
2025-10-17  2:26 ` [PATCH v3 14/24] drm/xe/xe3p_xpc: Add Xe3p_XPC IP definition Lucas De Marchi
2025-10-17  2:26 ` [PATCH v3 15/24] drm/xe/xe3p_xpc: Add L3 bank mask Lucas De Marchi
2025-10-17 17:51   ` Matt Roper
2025-10-18  3:18     ` Lucas De Marchi
2025-10-17  2:26 ` [PATCH v3 16/24] drm/xe/xe3p_xpc: Add MCR steering Lucas De Marchi
2025-10-17  2:26 ` [PATCH v3 17/24] drm/xe/irq: Rename fuse mask variables Lucas De Marchi
2025-10-17  2:26 ` [PATCH v3 18/24] drm/xe/irq: Split irq mask per engine class Lucas De Marchi
2025-10-17 16:03   ` Matt Roper
2025-10-17  2:26 ` [PATCH v3 19/24] drm/xe/irq: Rename bits used with all engines Lucas De Marchi
2025-10-17 16:05   ` Matt Roper
2025-10-17  2:26 ` [PATCH v3 20/24] drm/xe/irq: Check fuse mask for media engines Lucas De Marchi
2025-10-17 16:07   ` Matt Roper
2025-10-17  2:26 ` [PATCH v3 21/24] drm/xe/xe3p_xpc: Add support for compute walker for non-MSIx Lucas De Marchi
2025-10-17 17:04   ` Matt Roper
2025-10-17  2:26 ` [PATCH v3 22/24] drm/xe/xe3p_xpc: Skip compression tuning on platforms without flatccs Lucas De Marchi
2025-10-17  2:26 ` [PATCH v3 23/24] drm/xe/xe3p_xpc: Setup PAT table Lucas De Marchi
2025-10-17 11:05   ` Ville Syrjälä
2025-10-17 17:18     ` Matt Roper
2025-10-17 18:09       ` Ville Syrjälä [this message]
2025-10-17 20:33         ` Matt Roper
2025-10-17  2:26 ` [PATCH v3 24/24] drm/xe/xe3p: Add xe3p EU stall data format Lucas De Marchi
2025-10-17  2:35 ` ✗ CI.checkpatch: warning for drm/xe: Add Xe3p support (rev3) Patchwork
2025-10-17  2:36 ` ✓ CI.KUnit: success " Patchwork
2025-10-17  3:23 ` ✓ Xe.CI.BAT: " Patchwork
2025-10-18  1:56 ` ✗ Xe.CI.Full: failure " Patchwork
2025-10-19  2:55 ` [PATCH v3 00/24] drm/xe: Add Xe3p support Lucas De Marchi

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=aPKGXgfglFFi6uog@intel.com \
    --to=ville.syrjala@linux.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