<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Nov 1, 2017 at 6:14 PM, Ilia Mirkin <span dir="ltr"><<a href="mailto:imirkin@alum.mit.edu" target="_blank">imirkin@alum.mit.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Wed, Nov 1, 2017 at 12:51 PM, Karol Herbst <<a href="mailto:kherbst@redhat.com">kherbst@redhat.com</a>> wrote:<br>
> fixes compilation issues with recent envytools, because movw was removed<br>
> from fuc5, because it doesn't exist there anymore. The current code is<br>
> most likely broken for fuc5 hardware as well and might have triggered all<br>
> kinds of random memory reclocking fails.<br>
><br>
> Changes in fuc3 binaries are tue do opcode optimizations using shorter<br>
> opcodes when possible.<br>
<br>
Might I suggest the following wording for the commit:<br>
<br>
---------------8<-------------<wbr>---<br>
Fixes failure to compile with recent envyas as a result of the 'movw'<br>
alias being removed for v5.<br>
<br>
A bit of history:<br>
<br>
v3 only has a 16-bit sign-extended immediate mov op. In order to set<br>
the high bits, there's a separate 'sethi' op. envyas validates that<br>
the value passed to mov(imm) is between -0x8000 and 0x7fff. In order<br>
to simplify macros that load both the low and high word, a 'movw'<br>
alias was added which takes an unsigned 16-bit immediate. However the<br>
actual hardware op still sign extends.<br>
<br>
v5 has a full 32-bit immediate mov op. The v3 16-bit immediate mov op<br>
is gone (loads 0 into the dst reg). However due to a bug in envyas,<br>
the movw alias still existed, and selected the no-longer-present v3<br>
16-bit immediate mov op. As a result usage of movw on v5 is the same<br>
as mov with a 0x0 argument.<br>
<br>
The proper fix throughout is to only ever use the 'movw' alias in<br>
combination with 'sethi'. Anything else should get the sign-extended<br>
validation to ensure that the intended value ends up in the<br>
destination register.<br>
<br>
Changes in fuc3 binaries is the result of a different encoding being<br>
selected for a mov with an 8-bit value.<br>
---------------8<-------------<wbr>---<br></blockquote><div><br></div><div>yeah, that sounds perfect. Thanks!</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
><br>
> Signed-off-by: Karol Herbst <<a href="mailto:kherbst@redhat.com">kherbst@redhat.com</a>><br>
> ---<br>
>  drm/nouveau/nvkm/subdev/pmu/<wbr>fuc/gf100.fuc3.h |  746 +++++++++----------<br>
>  drm/nouveau/nvkm/subdev/pmu/<wbr>fuc/gk208.fuc5.h |  802 ++++++++++----------<br>
>  drm/nouveau/nvkm/subdev/pmu/<wbr>fuc/gt215.fuc3.h | 1006 +++++++++++++-------------<br>
>  drm/nouveau/nvkm/subdev/pmu/<wbr>fuc/memx.fuc     |   30 +-<br>
>  4 files changed, 1292 insertions(+), 1292 deletions(-)<br>
><br>
<br>
[...]<br>
<br>
> diff --git a/drm/nouveau/nvkm/subdev/pmu/<wbr>fuc/memx.fuc b/drm/nouveau/nvkm/subdev/pmu/<wbr>fuc/memx.fuc<br>
> index ec03f9a4..1663bf94 100644<br>
> --- a/drm/nouveau/nvkm/subdev/pmu/<wbr>fuc/memx.fuc<br>
> +++ b/drm/nouveau/nvkm/subdev/pmu/<wbr>fuc/memx.fuc<br>
> @@ -82,15 +82,15 @@ memx_train_tail:<br>
>  // $r0  - zero<br>
>  memx_func_enter:<br>
>  #if NVKM_PPWR_CHIPSET == GT215<br>
> -       movw $r8 0x1610<br>
> +       mov $r8 0x1610<br>
>         nv_rd32($r7, $r8)<br>
>         imm32($r6, 0xfffffffc)<br>
>         and $r7 $r6<br>
> -       movw $r6 0x2<br>
> +       mov $r6 0x2<br>
>         or $r7 $r6<br>
>         nv_wr32($r8, $r7)<br>
>  #else<br>
> -       movw $r6 0x001620<br>
> +       mov $r6 0x001620<br>
>         imm32($r7, ~0x00000aa2);<br>
>         nv_rd32($r8, $r6)<br>
>         and $r8 $r7<br>
> @@ -101,7 +101,7 @@ memx_func_enter:<br>
>         and $r8 $r7<br>
>         nv_wr32($r6, $r8)<br>
><br>
> -       movw $r6 0x0026f0<br>
> +       mov $r6 0x0026f0<br>
>         nv_rd32($r8, $r6)<br>
>         and $r8 $r7<br>
>         nv_wr32($r6, $r8)<br>
> @@ -136,19 +136,19 @@ memx_func_leave:<br>
>                 bra nz #memx_func_leave_wait<br>
><br>
>  #if NVKM_PPWR_CHIPSET == GT215<br>
> -       movw $r8 0x1610<br>
> +       mov $r8 0x1610<br>
>         nv_rd32($r7, $r8)<br>
>         imm32($r6, 0xffffffcc)<br>
>         and $r7 $r6<br>
>         nv_wr32($r8, $r7)<br>
>  #else<br>
> -       movw $r6 0x0026f0<br>
> +       mov $r6 0x0026f0<br>
>         imm32($r7, 0x00000001)<br>
>         nv_rd32($r8, $r6)<br>
>         or $r8 $r7<br>
>         nv_wr32($r6, $r8)<br>
><br>
> -       movw $r6 0x001620<br>
> +       mov $r6 0x001620<br>
>         nv_rd32($r8, $r6)<br>
>         or $r8 $r7<br>
>         nv_wr32($r6, $r8)<br>
> @@ -177,11 +177,11 @@ memx_func_wait_vblank:<br>
>         bra #memx_func_wait_vblank_fini<br>
><br>
>         memx_func_wait_vblank_head1:<br>
> -       movw $r7 0x20<br>
> +       mov $r7 0x20<br>
>         bra #memx_func_wait_vblank_0<br>
><br>
>         memx_func_wait_vblank_head0:<br>
> -       movw $r7 0x8<br>
> +       mov $r7 0x8<br>
><br>
>         memx_func_wait_vblank_0:<br>
>                 nv_iord($r6, NV_PPWR_INPUT)<br>
> @@ -273,13 +273,13 @@ memx_func_train:<br>
>  // $r5 - outer loop counter<br>
>  // $r6 - inner loop counter<br>
>  // $r7 - entry counter (#memx_train_head + $r7)<br>
> -       movw $r5 0x3<br>
> -       movw $r7 0x0<br>
> +       mov $r5 0x3<br>
> +       mov $r7 0x0<br>
><br>
>  // Read random memory to wake up... things<br>
>         imm32($r9, 0x700000)<br>
>         nv_rd32($r8,$r9)<br>
> -       movw $r14 0x2710<br>
> +       mov $r14 0x2710<br>
>         call(nsec)<br>
><br>
>         memx_func_train_loop_outer:<br>
> @@ -289,9 +289,9 @@ memx_func_train:<br>
>                 nv_wr32($r9, $r8)<br>
>                 push $r5<br>
><br>
> -               movw $r6 0x0<br>
> +               mov $r6 0x0<br>
>                 memx_func_train_loop_inner:<br>
> -                       movw $r8 0x1111<br>
> +                       mov $r8 0x1111<br>
>                         mulu $r9 $r6 $r8<br>
>                         shl b32 $r8 $r9 0x10<br>
>                         or $r8 $r9<br>
> @@ -315,7 +315,7 @@ memx_func_train:<br>
><br>
>                         // $r5 - inner inner loop counter<br>
>                         // $r9 - result<br>
> -                       movw $r5 0<br>
> +                       mov $r5 0<br>
>                         imm32($r9, 0x8300ffff)<br>
>                         memx_func_train_loop_4x:<br>
>                                 imm32($r10, 0x100080)<br>
> --<br>
> 2.14.2<br>
><br>
> ______________________________<wbr>_________________<br>
> Nouveau mailing list<br>
> <a href="mailto:Nouveau@lists.freedesktop.org">Nouveau@lists.freedesktop.org</a><br>
> <a href="https://lists.freedesktop.org/mailman/listinfo/nouveau" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/nouveau</a><br>
______________________________<wbr>_________________<br>
Nouveau mailing list<br>
<a href="mailto:Nouveau@lists.freedesktop.org">Nouveau@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/nouveau" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/nouveau</a><br>
</blockquote></div><br></div></div>