lkml.org 
[lkml]   [2021]   [Jan]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 38/86] drm/nouveau/privring: ack interrupts the same way as RM
    Date
    From: Ben Skeggs <bskeggs@redhat.com>

    [ Upstream commit e05e06cd34f5311f677294a08b609acfbc315236 ]

    Whatever it is that we were doing before doesn't work on Ampere.

    Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf100.c | 10 +++++++---
    drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk104.c | 10 +++++++---
    2 files changed, 14 insertions(+), 6 deletions(-)

    diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf100.c
    index d80dbc8f09b20..55a4ea4393c62 100644
    --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf100.c
    +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf100.c
    @@ -22,6 +22,7 @@
    * Authors: Ben Skeggs
    */
    #include "priv.h"
    +#include <subdev/timer.h>

    static void
    gf100_ibus_intr_hub(struct nvkm_subdev *ibus, int i)
    @@ -31,7 +32,6 @@ gf100_ibus_intr_hub(struct nvkm_subdev *ibus, int i)
    u32 data = nvkm_rd32(device, 0x122124 + (i * 0x0400));
    u32 stat = nvkm_rd32(device, 0x122128 + (i * 0x0400));
    nvkm_debug(ibus, "HUB%d: %06x %08x (%08x)\n", i, addr, data, stat);
    - nvkm_mask(device, 0x122128 + (i * 0x0400), 0x00000200, 0x00000000);
    }

    static void
    @@ -42,7 +42,6 @@ gf100_ibus_intr_rop(struct nvkm_subdev *ibus, int i)
    u32 data = nvkm_rd32(device, 0x124124 + (i * 0x0400));
    u32 stat = nvkm_rd32(device, 0x124128 + (i * 0x0400));
    nvkm_debug(ibus, "ROP%d: %06x %08x (%08x)\n", i, addr, data, stat);
    - nvkm_mask(device, 0x124128 + (i * 0x0400), 0x00000200, 0x00000000);
    }

    static void
    @@ -53,7 +52,6 @@ gf100_ibus_intr_gpc(struct nvkm_subdev *ibus, int i)
    u32 data = nvkm_rd32(device, 0x128124 + (i * 0x0400));
    u32 stat = nvkm_rd32(device, 0x128128 + (i * 0x0400));
    nvkm_debug(ibus, "GPC%d: %06x %08x (%08x)\n", i, addr, data, stat);
    - nvkm_mask(device, 0x128128 + (i * 0x0400), 0x00000200, 0x00000000);
    }

    void
    @@ -90,6 +88,12 @@ gf100_ibus_intr(struct nvkm_subdev *ibus)
    intr1 &= ~stat;
    }
    }
    +
    + nvkm_mask(device, 0x121c4c, 0x0000003f, 0x00000002);
    + nvkm_msec(device, 2000,
    + if (!(nvkm_rd32(device, 0x121c4c) & 0x0000003f))
    + break;
    + );
    }

    static int
    diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk104.c
    index 9025ed1bd2a99..4caf3ef087e1d 100644
    --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk104.c
    +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk104.c
    @@ -22,6 +22,7 @@
    * Authors: Ben Skeggs
    */
    #include "priv.h"
    +#include <subdev/timer.h>

    static void
    gk104_ibus_intr_hub(struct nvkm_subdev *ibus, int i)
    @@ -31,7 +32,6 @@ gk104_ibus_intr_hub(struct nvkm_subdev *ibus, int i)
    u32 data = nvkm_rd32(device, 0x122124 + (i * 0x0800));
    u32 stat = nvkm_rd32(device, 0x122128 + (i * 0x0800));
    nvkm_debug(ibus, "HUB%d: %06x %08x (%08x)\n", i, addr, data, stat);
    - nvkm_mask(device, 0x122128 + (i * 0x0800), 0x00000200, 0x00000000);
    }

    static void
    @@ -42,7 +42,6 @@ gk104_ibus_intr_rop(struct nvkm_subdev *ibus, int i)
    u32 data = nvkm_rd32(device, 0x124124 + (i * 0x0800));
    u32 stat = nvkm_rd32(device, 0x124128 + (i * 0x0800));
    nvkm_debug(ibus, "ROP%d: %06x %08x (%08x)\n", i, addr, data, stat);
    - nvkm_mask(device, 0x124128 + (i * 0x0800), 0x00000200, 0x00000000);
    }

    static void
    @@ -53,7 +52,6 @@ gk104_ibus_intr_gpc(struct nvkm_subdev *ibus, int i)
    u32 data = nvkm_rd32(device, 0x128124 + (i * 0x0800));
    u32 stat = nvkm_rd32(device, 0x128128 + (i * 0x0800));
    nvkm_debug(ibus, "GPC%d: %06x %08x (%08x)\n", i, addr, data, stat);
    - nvkm_mask(device, 0x128128 + (i * 0x0800), 0x00000200, 0x00000000);
    }

    void
    @@ -90,6 +88,12 @@ gk104_ibus_intr(struct nvkm_subdev *ibus)
    intr1 &= ~stat;
    }
    }
    +
    + nvkm_mask(device, 0x12004c, 0x0000003f, 0x00000002);
    + nvkm_msec(device, 2000,
    + if (!(nvkm_rd32(device, 0x12004c) & 0x0000003f))
    + break;
    + );
    }

    static int
    --
    2.27.0


    \
     
     \ /
      Last update: 2021-01-25 19:58    [W:4.080 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site