<div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Apr 24, 2017 at 9:15 PM, Ben Widawsky <span dir="ltr"><<a href="mailto:ben@bwidawsk.net" target="_blank">ben@bwidawsk.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 17-04-18 18:18:39, Francisco Jerez wrote:<br>
<br>
Most, if not all of the unrelated changes that snuck in were due to rebase.<br>
Anuj, would you mind fixing those? I tried my best to address the rest, but I'm<br>
admittedly stumbling my way through some of the l3 programming.</blockquote><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">​Yes, unrelated changes are due to bad rebase. I'll fix them in V2.​</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Anuj Phogat <<a href="mailto:anuj.phogat@gmail.com" target="_blank">anuj.phogat@gmail.com</a>> writes:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
From: Ben Widawsky <<a href="mailto:benjamin.widawsky@intel.com" target="_blank">benjamin.widawsky@intel.com</a>><br>
<br>
V2: Squash the changes in one patch and rebased on master (Anuj).<br>
<br>
Signed-off-by: Ben Widawsky <<a href="mailto:ben@bwidawsk.net" target="_blank">ben@bwidawsk.net</a>><br>
Signed-off-by: Anuj Phogat <<a href="mailto:anuj.phogat@gmail.com" target="_blank">anuj.phogat@gmail.com</a>><br>
---<br>
 src/intel/common/gen_l3_confi<wbr>g.c | 43 ++++++++++++++++++++++++++++++<wbr>++++------<br>
 1 file changed, 37 insertions(+), 6 deletions(-)<br>
<br>
diff --git a/src/intel/common/gen_l3_conf<wbr>ig.c b/src/intel/common/gen_l3_conf<wbr>ig.c<br>
index 4fe3503..f3e8793 100644<br>
--- a/src/intel/common/gen_l3_conf<wbr>ig.c<br>
+++ b/src/intel/common/gen_l3_conf<wbr>ig.c<br>
@@ -102,6 +102,26 @@ static const struct gen_l3_config chv_l3_configs[] = {<br>
 };<br>
<br>
 /**<br>
+ * On CNL, RO clients are merged and shared with read/write space. As a result<br>
+ * we have fewer allocation parameters.<br>
</blockquote>
<br>
The two sentences above make it sound like RO clients haven't been part<br>
of the same partition until CNL.  They have.  I'd drop this.<br>
<br>
</blockquote>
<br></span>
So the difference I was trying to spell out is that the previous "IS" "C" and<br>
"T" fields do not exist in a programmable way.<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Also, programming does not require any<br>
+ * back scaling. Programming simply works in 2k increments and is scaled by the<br>
+ * hardware.<br>
</blockquote>
<br>
That's basically the case (up to the specific scale factor) on all<br>
hardware, I'd drop this too.<br>
<br>
</blockquote>
<br></span>
I personally think the existing code isn't as self-documenting to me as it is to<br>
you, and so I was trying to spell it out. I was trying to document, not show<br>
differentiation. In either event, I don't care if we keep this or leave it.<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+ */<br>
+static const struct gen_l3_config cnl_l3_configs[] = {<br>
+   /* SLM URB Rest  DC  RO */<br>
</blockquote>
<br>
s/Rest/ALL/ (these are L3 partition enum labels), and align to the<br>
column boundaries below.<br>
<br>
</blockquote>
<br></span>
Sure.<div><div class="h5"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+   {{  0, 64, 64,  0,  0 }},<br>
+   {{  0, 64,  0, 16, 48 }},<br>
+   {{  0, 48,  0, 16, 64 }},<br>
+   {{  0, 32,  0,  0, 96 }},<br>
+   {{  0, 32, 96,  0,  0 }},<br>
+   {{  0, 32,  0, 16, 80 }},<br>
+   {{ 32, 16, 80,  0,  0 }},<br>
+   {{ 32, 16,  0, 64, 16 }},<br>
+   {{ 32,  0, 96,  0,  0 }},<br>
+   {{ 0 }}<br>
+};<br>
+<br>
+/**<br>
  * Return a zero-terminated array of validated L3 configurations for the<br>
  * specified device.<br>
  */<br>
@@ -116,9 +136,11 @@ get_l3_configs(const struct gen_device_info *devinfo)<br>
       return (devinfo->is_cherryview ? chv_l3_configs : bdw_l3_configs);<br>
<br>
    case 9:<br>
-   case 10:<br>
       return chv_l3_configs;<br>
<br>
+   case 10:<br>
+      return cnl_l3_configs;<br>
+<br>
    default:<br>
       unreachable("Not implemented");<br>
    }<br>
@@ -258,13 +280,19 @@ get_l3_way_size(const struct gen_device_info *devinfo)<br>
    if (devinfo->is_baytrail)<br>
       return 2;<br>
<br>
-   else if (devinfo->gt == 1 ||<br>
-            devinfo->is_cherryview ||<br>
-            devinfo->is_broxton)<br>
</blockquote>
<br>
Unrelated change sneaked in.<br>
<br>
</blockquote>
<br></div></div>
See above reply (not sure how this got in other than rebase).<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+   /* Way size is actually 6 * num_slices, because it's 2k per bank, and<br>
+    * normally 3 banks per slice. However, on CNL+ this information isn't<br>
+    * needed to setup the URB/l3 configuration. We fudge the answer here<br>
+    * and then use the scaling to fix it up later.<br>
+    */<br>
</blockquote>
<br>
The comment makes it sound like you're lying to the caller and returning<br>
a bogus way size you're going to fix up later.  That's not the case<br>
though, the value you're returning below is accurate for all CNL<br>
configs.  6 * num_slices OTOH *would* be inaccurate.  I'd drop the<br>
comment.<br>
<br>
</blockquote>
<br></span>
Anuj, would you mind doing what Curro asks?</blockquote><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">​I'll drop the comment.​</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+   if (devinfo->gen >= 10)<br>
+      return 2 * devinfo->l3_banks;<br>
+<br>
</blockquote>
<br>
It would be nice if we could use the 'l3_banks' devinfo field you just<br>
added on previous gens too in order to simplify things.  I'm okay if you<br>
don't feel like doing the clean up right away but maybe add a short<br>
FINISHME comment next to its definition in gen_device_info.h so we don't<br>
forget about this (hopefully temporary) inconsistency.<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+   /* XXX: Cherryview and Broxton are always gt1 */<br>
+   if (devinfo->gt == 1)<br>
</blockquote>
<br>
Unrelated change.<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
       return 4;<br>
<br>
-   else<br>
-      return 8 * devinfo->num_slices;<br>
+   return 8 * devinfo->num_slices;<br>
</blockquote>
<br>
Unrelated change.<br>
<br>
</blockquote>
<br></span>
I think here too it must have been a rebase change.<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
 }<br>
<br>
 /**<br>
@@ -274,6 +302,9 @@ get_l3_way_size(const struct gen_device_info *devinfo)<br>
 static unsigned<br>
 get_urb_size_scale(const struct gen_device_info *devinfo)<br>
 {<br>
+   if (devinfo->gen == 10)<br>
+      return devinfo->l3_banks;<br>
+<br>
</blockquote>
<br>
This seems bogus, AFAICT URB programming is done in size per slice units<br>
(just like it was the case on previous gens), not in size per L3 bank<br>
units.<br>
<br>
</blockquote>
<br></span>
We have parts which have different l3 banks per slice, and those seemed to need<br>
to be programmed differently which is how I got to this. Tell us what you'd<br>
recommend instead, and Anuj can try to run with that.<br>
<br>
Thanks.<div class="HOEnZb"><div class="h5"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
    return (devinfo->gen >= 8 ? devinfo->num_slices : 1);<br>
 }<br>
<br>
--<br>
2.9.3<br>
<br>
</blockquote></blockquote>
</div></div></blockquote></div><br></div></div>