mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-09 04:21:03 -04:00
drm/nouveau/gsp: add hal for fifo.rc_triggered()
565.57.01 has incompatible changes to rpc_rc_triggered_v17_02. Signed-off-by: Ben Skeggs <bskeggs@nvidia.com> Reviewed-by: Dave Airlie <airlied@redhat.com> Reviewed-by: Timur Tabi <ttabi@nvidia.com> Tested-by: Timur Tabi <ttabi@nvidia.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -339,6 +339,39 @@ r535_runl = {
|
||||
.allow = r535_runl_allow,
|
||||
};
|
||||
|
||||
static void
|
||||
r535_fifo_rc_chid(struct nvkm_fifo *fifo, int chid)
|
||||
{
|
||||
struct nvkm_chan *chan;
|
||||
unsigned long flags;
|
||||
|
||||
chan = nvkm_chan_get_chid(&fifo->engine, chid, &flags);
|
||||
if (!chan) {
|
||||
nvkm_error(&fifo->engine.subdev, "rc: chid %d not found!\n", chid);
|
||||
return;
|
||||
}
|
||||
|
||||
nvkm_chan_error(chan, false);
|
||||
nvkm_chan_put(&chan, flags);
|
||||
}
|
||||
|
||||
static int
|
||||
r535_fifo_rc_triggered(void *priv, u32 fn, void *repv, u32 repc)
|
||||
{
|
||||
rpc_rc_triggered_v17_02 *msg = repv;
|
||||
struct nvkm_gsp *gsp = priv;
|
||||
|
||||
if (WARN_ON(repc < sizeof(*msg)))
|
||||
return -EINVAL;
|
||||
|
||||
nvkm_error(&gsp->subdev, "rc: engn:%08x chid:%d type:%d scope:%d part:%d\n",
|
||||
msg->nv2080EngineType, msg->chid, msg->exceptType, msg->scope,
|
||||
msg->partitionAttributionId);
|
||||
|
||||
r535_fifo_rc_chid(gsp->subdev.device->fifo, msg->chid);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
r535_fifo_xlat_rm_engine_type(u32 rm, enum nvkm_subdev_type *ptype, int *p2080)
|
||||
{
|
||||
@@ -558,6 +591,7 @@ const struct nvkm_rm_api_fifo
|
||||
r535_fifo = {
|
||||
.xlat_rm_engine_type = r535_fifo_xlat_rm_engine_type,
|
||||
.ectx_size = r535_fifo_ectx_size,
|
||||
.rc_triggered = r535_fifo_rc_triggered,
|
||||
.chan = {
|
||||
.alloc = r535_chan_alloc,
|
||||
},
|
||||
|
||||
@@ -926,33 +926,6 @@ r535_gsp_msg_os_error_log(void *priv, u32 fn, void *repv, u32 repc)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
r535_gsp_msg_rc_triggered(void *priv, u32 fn, void *repv, u32 repc)
|
||||
{
|
||||
rpc_rc_triggered_v17_02 *msg = repv;
|
||||
struct nvkm_gsp *gsp = priv;
|
||||
struct nvkm_subdev *subdev = &gsp->subdev;
|
||||
struct nvkm_chan *chan;
|
||||
unsigned long flags;
|
||||
|
||||
if (WARN_ON(repc < sizeof(*msg)))
|
||||
return -EINVAL;
|
||||
|
||||
nvkm_error(subdev, "rc engn:%08x chid:%d type:%d scope:%d part:%d\n",
|
||||
msg->nv2080EngineType, msg->chid, msg->exceptType, msg->scope,
|
||||
msg->partitionAttributionId);
|
||||
|
||||
chan = nvkm_chan_get_chid(&subdev->device->fifo->engine, msg->chid, &flags);
|
||||
if (!chan) {
|
||||
nvkm_error(subdev, "rc chid:%d not found!\n", msg->chid);
|
||||
return 0;
|
||||
}
|
||||
|
||||
nvkm_chan_error(chan, false);
|
||||
nvkm_chan_put(&chan, flags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
r535_gsp_msg_mmu_fault_queued(void *priv, u32 fn, void *repv, u32 repc)
|
||||
{
|
||||
@@ -2154,8 +2127,7 @@ r535_gsp_oneinit(struct nvkm_gsp *gsp)
|
||||
r535_gsp_msg_ntfy_add(gsp, NV_VGPU_MSG_EVENT_GSP_RUN_CPU_SEQUENCER,
|
||||
r535_gsp_msg_run_cpu_sequencer, gsp);
|
||||
r535_gsp_msg_ntfy_add(gsp, NV_VGPU_MSG_EVENT_POST_EVENT, r535_gsp_msg_post_event, gsp);
|
||||
r535_gsp_msg_ntfy_add(gsp, NV_VGPU_MSG_EVENT_RC_TRIGGERED,
|
||||
r535_gsp_msg_rc_triggered, gsp);
|
||||
r535_gsp_msg_ntfy_add(gsp, NV_VGPU_MSG_EVENT_RC_TRIGGERED, rmapi->fifo->rc_triggered, gsp);
|
||||
r535_gsp_msg_ntfy_add(gsp, NV_VGPU_MSG_EVENT_MMU_FAULT_QUEUED,
|
||||
r535_gsp_msg_mmu_fault_queued, gsp);
|
||||
r535_gsp_msg_ntfy_add(gsp, NV_VGPU_MSG_EVENT_OS_ERROR_LOG, r535_gsp_msg_os_error_log, gsp);
|
||||
|
||||
@@ -102,6 +102,7 @@ struct nvkm_rm_api {
|
||||
enum nvkm_subdev_type *, int *nv2080_type);
|
||||
int (*ectx_size)(struct nvkm_fifo *);
|
||||
unsigned rsvd_chids;
|
||||
int (*rc_triggered)(void *priv, u32 fn, void *repv, u32 repc);
|
||||
struct {
|
||||
int (*alloc)(struct nvkm_gsp_device *, u32 handle,
|
||||
u32 nv2080_engine_type, u8 runq, bool priv, int chid,
|
||||
|
||||
Reference in New Issue
Block a user