From 56c36f590a551eaf49bfffbba8702cffeaaa8280 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Wed, 26 Feb 2025 07:49:00 +1000 Subject: [PATCH] drm/nouveau/gsp: add hal for fifo.chan.doorbell_handle The doorbell register on GB20x GPUs has additional fields. Signed-off-by: Ben Skeggs Reviewed-by: Dave Airlie Reviewed-by: Timur Tabi Tested-by: Timur Tabi Signed-off-by: Dave Airlie --- drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h | 2 ++ drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c | 2 +- drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/ad10x.c | 3 +++ drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/ga100.c | 3 +++ drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/ga1xx.c | 3 +++ drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/gb10x.c | 3 +++ drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/gh100.c | 3 +++ drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/gpu.h | 1 + drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fifo.c | 4 +++- drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/tu1xx.c | 3 +++ 10 files changed, 25 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h index a0f3277605a5..9ebb35c31db0 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h @@ -6,6 +6,7 @@ #include struct nvkm_cctx; struct nvkm_cgrp; +struct nvkm_chan; struct nvkm_engn; struct nvkm_memory; struct nvkm_runl; @@ -195,6 +196,7 @@ extern const struct nvkm_chan_func_ramfc gv100_chan_ramfc; void tu102_fifo_intr_ctxsw_timeout_info(struct nvkm_engn *, u32 info); extern const struct nvkm_fifo_func_mmu_fault tu102_fifo_mmu_fault; +u32 tu102_chan_doorbell_handle(struct nvkm_chan *); int ga100_fifo_runl_ctor(struct nvkm_fifo *); int ga100_fifo_nonstall_ctor(struct nvkm_fifo *); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c index 1d39a6840a40..c5a03298e88c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c @@ -31,7 +31,7 @@ #include -static u32 +u32 tu102_chan_doorbell_handle(struct nvkm_chan *chan) { return (chan->cgrp->runl->id << 16) | chan->id; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/ad10x.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/ad10x.c index d699c386adec..e1ce6355c35f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/ad10x.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/ad10x.c @@ -4,6 +4,8 @@ */ #include "gpu.h" +#include + #include const struct nvkm_rm_gpu @@ -21,6 +23,7 @@ ad10x_gpu = { .fifo.chan = { .class = AMPERE_CHANNEL_GPFIFO_A, + .doorbell_handle = tu102_chan_doorbell_handle, }, .ce.class = AMPERE_DMA_COPY_B, diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/ga100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/ga100.c index 5e7f18dbf18b..a48c6134075d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/ga100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/ga100.c @@ -4,6 +4,8 @@ */ #include "gpu.h" +#include + #include const struct nvkm_rm_gpu @@ -12,6 +14,7 @@ ga100_gpu = { .fifo.chan = { .class = AMPERE_CHANNEL_GPFIFO_A, + .doorbell_handle = tu102_chan_doorbell_handle, }, .ce.class = AMPERE_DMA_COPY_A, diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/ga1xx.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/ga1xx.c index 61525d23aaa0..50536ad7f85d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/ga1xx.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/ga1xx.c @@ -4,6 +4,8 @@ */ #include "gpu.h" +#include + #include const struct nvkm_rm_gpu @@ -21,6 +23,7 @@ ga1xx_gpu = { .fifo.chan = { .class = AMPERE_CHANNEL_GPFIFO_A, + .doorbell_handle = tu102_chan_doorbell_handle, }, .ce.class = AMPERE_DMA_COPY_B, diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/gb10x.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/gb10x.c index 3a296d8fd2e0..2f517dcd721a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/gb10x.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/gb10x.c @@ -4,6 +4,8 @@ */ #include "gpu.h" +#include + #include const struct nvkm_rm_gpu @@ -12,6 +14,7 @@ gb10x_gpu = { .fifo.chan = { .class = BLACKWELL_CHANNEL_GPFIFO_A, + .doorbell_handle = tu102_chan_doorbell_handle, }, .ce.class = BLACKWELL_DMA_COPY_A, diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/gh100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/gh100.c index 088250559e12..49e2c54e1aa8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/gh100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/gh100.c @@ -4,6 +4,8 @@ */ #include "gpu.h" +#include + #include const struct nvkm_rm_gpu @@ -12,6 +14,7 @@ gh100_gpu = { .fifo.chan = { .class = HOPPER_CHANNEL_GPFIFO_A, + .doorbell_handle = tu102_chan_doorbell_handle, }, .ce.class = HOPPER_DMA_COPY_A, diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/gpu.h b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/gpu.h index e84376c85e99..77aa7b13a3af 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/gpu.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/gpu.h @@ -25,6 +25,7 @@ struct nvkm_rm_gpu { struct { struct { u32 class; + u32 (*doorbell_handle)(struct nvkm_chan *); } chan; } fifo; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fifo.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fifo.c index 4238362ec073..eaba4d50860d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fifo.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fifo.c @@ -41,7 +41,9 @@ static u32 r535_chan_doorbell_handle(struct nvkm_chan *chan) { - return (chan->cgrp->runl->id << 16) | chan->id; + struct nvkm_gsp *gsp = chan->rm.object.client->gsp; + + return gsp->rm->gpu->fifo.chan.doorbell_handle(chan); } static void diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/tu1xx.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/tu1xx.c index 883b9eddbfe6..423502f870db 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/tu1xx.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/tu1xx.c @@ -4,6 +4,8 @@ */ #include "gpu.h" +#include + #include const struct nvkm_rm_gpu @@ -21,6 +23,7 @@ tu1xx_gpu = { .fifo.chan = { .class = TURING_CHANNEL_GPFIFO_A, + .doorbell_handle = tu102_chan_doorbell_handle, }, .ce.class = TURING_DMA_COPY_A, -- 2.25.1