<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Aptos;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:12.0pt;
        font-family:"Aptos",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        font-size:10.0pt;
        font-family:"Courier New";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        font-size:12.0pt;
        font-family:"Aptos",sans-serif;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;}
span.ui-provider
        {mso-style-name:ui-provider;}
span.EmailStyle22
        {mso-style-type:personal-reply;
        font-family:"Aptos",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        mso-ligatures:none;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:496775216;
        mso-list-type:hybrid;
        mso-list-template-ids:566929988 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt">Hello,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">To answer your questions:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<ol style="margin-top:0in" start="1" type="1">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l0 level1 lfo1">Should it be FUSE4 instead of FUSE3?<br>
<br>
I think my use of FUSE3 here was an artifact from when I was applying a different workaround to the same location that applied the same change.  I’d have to get external confirmation about that, though, and see which of the two would be more appropriate to
 use here.<br>
<br>
<br>
<span style="font-size:11.0pt"><o:p></o:p></span></li><li style="mso-list:l0 level1 lfo1">Was there any particular reason for just adding an if(wa) and not using an if(wa)/else condition similar to i915 implementation?<br>
<br>
The else condition was already covered during variable initialization.  Breaking the initialization stage into declaration and conditional initialization seemed unnecessary given such.<br>
<br>
<o:p></o:p></li></ol>
<p>I hope this helps<o:p></o:p></p>
<p>-Jonathan Cavitt<o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> Pottumuttu, Sai Teja <sai.teja.pottumuttu@intel.com>
<br>
<b>Sent:</b> Monday, September 2, 2024 4:16 AM<br>
<b>To:</b> Cavitt, Jonathan <jonathan.cavitt@intel.com>; intel-xe@lists.freedesktop.org<br>
<b>Cc:</b> Gupta, saurabhg <saurabhg.gupta@intel.com>; Zuo, Alex <alex.zuo@intel.com>; Roper, Matthew D <matthew.d.roper@intel.com>; jani.nikula@linux.intel.com; Chauhan, Shekhar <shekhar.chauhan@intel.com><br>
<b>Subject:</b> Re: [PATCH v2] drm/xe: Apply workaround 14016747170<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p><o:p> </o:p></p>
<div>
<p class="MsoNormal">On 30-08-2024 21:41, Jonathan-Cavitt wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre>Some revisions of MTL do not properly report the correct value from the<o:p></o:p></pre>
<pre>FUSE3_MBC_MEDIA register.  This results in the wrong value being<o:p></o:p></pre>
<pre>reported for the l3 mask.<o:p></o:p></pre>
</blockquote>
<p class="MsoNormal">Should it be FUSE4 instead of FUSE3?<br>
<br>
<o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre><o:p> </o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Use the recommended replacement register in this case.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Signed-off-by: Jonathan-Cavitt <a href="mailto:jonathan.cavitt@intel.com"><jonathan.cavitt@intel.com></a><o:p></o:p></pre>
<pre>CC: Matt Roper <a href="mailto:matthew.d.roper@intel.com"><matthew.d.roper@intel.com></a><o:p></o:p></pre>
<pre>CC: Jani Nikula <a href="mailto:jani.nikula@linux.intel.com"><jani.nikula@linux.intel.com></a><o:p></o:p></pre>
<pre>---<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>v2: Update includes ordering (Jani)<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre> drivers/gpu/drm/xe/regs/xe_gt_regs.h | 3 +++<o:p></o:p></pre>
<pre> drivers/gpu/drm/xe/xe_gt_mcr.c       | 8 ++++++++<o:p></o:p></pre>
<pre> drivers/gpu/drm/xe/xe_gt_topology.c  | 9 +++++++++<o:p></o:p></pre>
<pre> drivers/gpu/drm/xe/xe_wa_oob.rules   | 1 +<o:p></o:p></pre>
<pre> 4 files changed, 21 insertions(+)<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>diff --git a/drivers/gpu/drm/xe/regs/xe_gt_regs.h b/drivers/gpu/drm/xe/regs/xe_gt_regs.h<o:p></o:p></pre>
<pre>index 0d1a4a9f4e119..e0d735a5a7fa1 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/xe/regs/xe_gt_regs.h<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/xe/regs/xe_gt_regs.h<o:p></o:p></pre>
<pre>@@ -522,6 +522,9 @@<o:p></o:p></pre>
<pre> #define   FORCEWAKE_MT(bit)                   BIT(bit)<o:p></o:p></pre>
<pre> #define   FORCEWAKE_MT_MASK(bit)              BIT((bit) + 16)<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>+#define MTL_GT_ACTIVITY_FACTOR           XE_REG(0x138010)<o:p></o:p></pre>
<pre>+#define   MTL_GT_L3_EXC_MASK             REG_GENMASK(5, 3)<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre> #define MTL_MEDIA_PERF_LIMIT_REASONS     XE_REG(0x138030)<o:p></o:p></pre>
<pre> #define MTL_MEDIA_MC6                    XE_REG(0x138048)<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>diff --git a/drivers/gpu/drm/xe/xe_gt_mcr.c b/drivers/gpu/drm/xe/xe_gt_mcr.c<o:p></o:p></pre>
<pre>index 7d7bd0be6233e..3253eaefb18b3 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/xe/xe_gt_mcr.c<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/xe/xe_gt_mcr.c<o:p></o:p></pre>
<pre>@@ -5,6 +5,8 @@<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre> #include "xe_gt_mcr.h"<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>+#include <generated/xe_wa_oob.h><o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre> #include "regs/xe_gt_regs.h"<o:p></o:p></pre>
<pre> #include "xe_assert.h"<o:p></o:p></pre>
<pre> #include "xe_gt.h"<o:p></o:p></pre>
<pre>@@ -14,6 +16,7 @@<o:p></o:p></pre>
<pre> #include "xe_guc_hwconfig.h"<o:p></o:p></pre>
<pre> #include "xe_mmio.h"<o:p></o:p></pre>
<pre> #include "xe_sriov.h"<o:p></o:p></pre>
<pre>+#include "xe_wa.h"<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre> /**<o:p></o:p></pre>
<pre>  * DOC: GT Multicast/Replicated (MCR) Register Support<o:p></o:p></pre>
<pre>@@ -245,6 +248,11 @@ static void init_steering_l3bank(struct xe_gt *gt)<o:p></o:p></pre>
<pre>         u32 bank_mask = REG_FIELD_GET(GT_L3_EXC_MASK,<o:p></o:p></pre>
<pre>                                      xe_mmio_read32(gt, XEHP_FUSE4));<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>+        /* Wa_14016747170 */<o:p></o:p></pre>
<pre>+        if (XE_WA(gt, 14016747170))<o:p></o:p></pre>
<pre>+                bank_mask = REG_FIELD_GET(MTL_GT_L3_EXC_MASK,<o:p></o:p></pre>
<pre>+                                         xe_mmio_read32(gt, MTL_GT_ACTIVITY_FACTOR));<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
</blockquote>
<p>Was there any particular reason for just adding an if(wa) and not using an if(wa)/else condition similar to i915 implementation?<o:p></o:p></p>
<p><span class="ui-provider">CC: Shekhar Chauhan <a href="mailto:shekhar.chauhan@intel.com">
<shekhar.chauhan@intel.com></a></span> <o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre><o:p> </o:p></pre>
<pre>         /*<o:p></o:p></pre>
<pre>          * Group selects mslice, instance selects bank within mslice.<o:p></o:p></pre>
<pre>          * Bank 0 is always valid _except_ when the bank mask is 010b.<o:p></o:p></pre>
<pre>diff --git a/drivers/gpu/drm/xe/xe_gt_topology.c b/drivers/gpu/drm/xe/xe_gt_topology.c<o:p></o:p></pre>
<pre>index 0662f71c6ede7..f1946ce0d937b 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/xe/xe_gt_topology.c<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/xe/xe_gt_topology.c<o:p></o:p></pre>
<pre>@@ -8,10 +8,13 @@<o:p></o:p></pre>
<pre> #include <linux/bitmap.h><o:p></o:p></pre>
<pre> #include <linux/compiler.h><o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>+#include <generated/xe_wa_oob.h><o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre> #include "regs/xe_gt_regs.h"<o:p></o:p></pre>
<pre> #include "xe_assert.h"<o:p></o:p></pre>
<pre> #include "xe_gt.h"<o:p></o:p></pre>
<pre> #include "xe_mmio.h"<o:p></o:p></pre>
<pre>+#include "xe_wa.h"<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre> static void<o:p></o:p></pre>
<pre> load_dss_mask(struct xe_gt *gt, xe_dss_mask_t mask, int numregs, ...)<o:p></o:p></pre>
<pre>@@ -144,6 +147,12 @@ load_l3_bank_mask(struct xe_gt *gt, xe_l3_bank_mask_t l3_bank_mask)<o:p></o:p></pre>
<pre>         u32 fuse4 = xe_mmio_read32(gt, XEHP_FUSE4);<o:p></o:p></pre>
<pre>         u32 bank_val = REG_FIELD_GET(GT_L3_EXC_MASK, fuse4);<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>+        /* Wa_14016747170 */<o:p></o:p></pre>
<pre>+        if (XE_WA(gt, 14016747170)) {<o:p></o:p></pre>
<pre>+                fuse4 = xe_mmio_read32(gt, MTL_GT_ACTIVITY_FACTOR);<o:p></o:p></pre>
<pre>+                bank_val = REG_FIELD_GET(MTL_GT_L3_EXC_MASK, fuse4);<o:p></o:p></pre>
<pre>+        }<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>         bitmap_set_value8(per_mask_bit, 0x3, 0);<o:p></o:p></pre>
<pre>         gen_l3_mask_from_pattern(xe, per_node, per_mask_bit, 2, bank_val);<o:p></o:p></pre>
<pre>         gen_l3_mask_from_pattern(xe, l3_bank_mask, per_node, 4,<o:p></o:p></pre>
<pre>diff --git a/drivers/gpu/drm/xe/xe_wa_oob.rules b/drivers/gpu/drm/xe/xe_wa_oob.rules<o:p></o:p></pre>
<pre>index 920ca50601466..5bac4123b5db1 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/xe/xe_wa_oob.rules<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/xe/xe_wa_oob.rules<o:p></o:p></pre>
<pre>@@ -37,3 +37,4 @@<o:p></o:p></pre>
<pre> 16023588340     GRAPHICS_VERSION(2001)<o:p></o:p></pre>
<pre> 14019789679     GRAPHICS_VERSION(1255)<o:p></o:p></pre>
<pre>         GRAPHICS_VERSION_RANGE(1270, 2004)<o:p></o:p></pre>
<pre>+14016747170     GRAPHICS_VERSION_RANGE(1270, 1271), GRAPHICS_STEP(A0, B0)<o:p></o:p></pre>
</blockquote>
</div>
</body>
</html>