Skip to content
  • Marek Vasut's avatar
    drm/nouveau/fifo: Reinstate the correct engine bit programming · d1d94b01
    Marek Vasut authored
    Commit 64f7c698 ("drm/nouveau/fifo: add engine_id hook") replaced
    fifo/chang84.c g84_fifo_chan_engine() call with an indirect call of
    fifo/g84.c g84_fifo_engine_id(). The G84_FIFO_ENGN_* values returned
    from the later g84_fifo_engine_id() are incremented by 1 compared to
    the previous g84_fifo_chan_engine() return values.
    
    This is fine either way for most of the code, except this one line
    where an engine bit programmed into the hardware is derived from the
    return value. Decrement the return value accordingly, otherwise the
    wrong engine bit is programmed into the hardware and that leads to
    the following failure:
    nouveau 0000:01:00.0: gr: 00000030 [ILLEGAL_MTHD ILLEGAL_CLASS] ch 1 [003fbce000 DRM] subc 3 class 0000 mthd 085c data 00000420
    
    On the following hardware:
    lspci -s 01:00.0
    01:00.0 VGA compatible controller: NVIDIA Corporation GT216GLM [Quadro FX 880M] (rev a2)
    lspci -ns 01:00.0
    01:00.0 0300: 10de:0a3c (rev a2)
    
    Fixes: 64f7c698
    
     ("drm/nouveau/fifo: add engine_id hook")
    Signed-off-by: default avatarMarek Vasut <marex@denx.de>
    Cc: <stable@vger.kernel.org> # 5.12+
    Cc: Ben Skeggs <bskeggs@redhat.com>
    Cc: Karol Herbst <kherbst@redhat.com>
    Cc: Lyude Paul <lyude@redhat.com>
    Reviewed-by: default avatarKarol Herbst <kherbst@redhat.com>
    Reviewed-by: default avatarBen Skeggs <bskeggs@redhat.com>
    Signed-off-by: default avatarKarol Herbst <kherbst@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20211007214117.231472-1-marex@denx.de
    
    
    Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
    d1d94b01