- transition from "ioctl" interface Signed-off-by: Ben Skeggs <bskeggs@xxxxxxxxxx> --- .../gpu/drm/nouveau/include/nvif/driverif.h | 17 ++++++++ drivers/gpu/drm/nouveau/include/nvif/if0001.h | 15 ------- drivers/gpu/drm/nouveau/nouveau_debugfs.c | 6 +-- drivers/gpu/drm/nouveau/nvkm/device/ctrl.c | 40 ++++++------------- 4 files changed, 32 insertions(+), 46 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvif/driverif.h b/drivers/gpu/drm/nouveau/include/nvif/driverif.h index aa1061266557..ba8b5ff9fcd6 100644 --- a/drivers/gpu/drm/nouveau/include/nvif/driverif.h +++ b/drivers/gpu/drm/nouveau/include/nvif/driverif.h @@ -23,8 +23,25 @@ struct nvif_mapinfo { u64 length; }; +struct nvif_control_pstate_info { + u8 version; + u8 count; /* out: number of power states */ +#define NVIF_CONTROL_PSTATE_INFO_USTATE_DISABLE (-1) +#define NVIF_CONTROL_PSTATE_INFO_USTATE_PERFMON (-2) + s8 ustate_ac; /* out: target pstate index */ + s8 ustate_dc; /* out: target pstate index */ + s8 pwrsrc; /* out: current power source */ +#define NVIF_CONTROL_PSTATE_INFO_PSTATE_UNKNOWN (-1) +#define NVIF_CONTROL_PSTATE_INFO_PSTATE_PERFMON (-2) + s8 pstate; /* out: current pstate index */ +}; + struct nvif_control_impl { void (*del)(struct nvif_control_priv *); + + struct { + void (*info)(struct nvif_control_priv *, struct nvif_control_pstate_info *); + } pstate; }; struct nvif_device_impl { diff --git a/drivers/gpu/drm/nouveau/include/nvif/if0001.h b/drivers/gpu/drm/nouveau/include/nvif/if0001.h index 4ced50e98ced..9bb955500934 100644 --- a/drivers/gpu/drm/nouveau/include/nvif/if0001.h +++ b/drivers/gpu/drm/nouveau/include/nvif/if0001.h @@ -2,24 +2,9 @@ #ifndef __NVIF_IF0001_H__ #define __NVIF_IF0001_H__ -#define NVIF_CONTROL_PSTATE_INFO 0x00 #define NVIF_CONTROL_PSTATE_ATTR 0x01 #define NVIF_CONTROL_PSTATE_USER 0x02 -struct nvif_control_pstate_info_v0 { - __u8 version; - __u8 count; /* out: number of power states */ -#define NVIF_CONTROL_PSTATE_INFO_V0_USTATE_DISABLE (-1) -#define NVIF_CONTROL_PSTATE_INFO_V0_USTATE_PERFMON (-2) - __s8 ustate_ac; /* out: target pstate index */ - __s8 ustate_dc; /* out: target pstate index */ - __s8 pwrsrc; /* out: current power source */ -#define NVIF_CONTROL_PSTATE_INFO_V0_PSTATE_UNKNOWN (-1) -#define NVIF_CONTROL_PSTATE_INFO_V0_PSTATE_PERFMON (-2) - __s8 pstate; /* out: current pstate index */ - __u8 pad06[2]; -}; - struct nvif_control_pstate_attr_v0 { __u8 version; #define NVIF_CONTROL_PSTATE_ATTR_V0_STATE_CURRENT (-1) diff --git a/drivers/gpu/drm/nouveau/nouveau_debugfs.c b/drivers/gpu/drm/nouveau/nouveau_debugfs.c index e061ef7a1707..caccf99f1d8a 100644 --- a/drivers/gpu/drm/nouveau/nouveau_debugfs.c +++ b/drivers/gpu/drm/nouveau/nouveau_debugfs.c @@ -73,16 +73,14 @@ nouveau_debugfs_pstate_get(struct seq_file *m, void *data) struct drm_device *drm = m->private; struct nouveau_debugfs *debugfs = nouveau_debugfs(drm); struct nvif_object *ctrl; - struct nvif_control_pstate_info_v0 info = {}; + struct nvif_control_pstate_info info = {}; int ret, i; if (!debugfs) return -ENODEV; ctrl = &debugfs->ctrl; - ret = nvif_mthd(ctrl, NVIF_CONTROL_PSTATE_INFO, &info, sizeof(info)); - if (ret) - return ret; + debugfs->impl->pstate.info(debugfs->priv, &info); for (i = 0; i < info.count + 1; i++) { const s32 state = i < info.count ? i : diff --git a/drivers/gpu/drm/nouveau/nvkm/device/ctrl.c b/drivers/gpu/drm/nouveau/nvkm/device/ctrl.c index 5caa93665cc9..ea38592f5557 100644 --- a/drivers/gpu/drm/nouveau/nvkm/device/ctrl.c +++ b/drivers/gpu/drm/nouveau/nvkm/device/ctrl.c @@ -37,37 +37,24 @@ struct nvif_control_priv { struct nvkm_device *device; }; -static int -nvkm_control_mthd_pstate_info(struct nvkm_control *ctrl, void *data, u32 size) +static void +nvkm_control_pstate_info(struct nvif_control_priv *ctrl, struct nvif_control_pstate_info *info) { - union { - struct nvif_control_pstate_info_v0 v0; - } *args = data; struct nvkm_clk *clk = ctrl->device->clk; - int ret = -ENOSYS; - - nvif_ioctl(&ctrl->object, "control pstate info size %d\n", size); - if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { - nvif_ioctl(&ctrl->object, "control pstate info vers %d\n", - args->v0.version); - } else - return ret; if (clk) { - args->v0.count = clk->state_nr; - args->v0.ustate_ac = clk->ustate_ac; - args->v0.ustate_dc = clk->ustate_dc; - args->v0.pwrsrc = clk->pwrsrc; - args->v0.pstate = clk->pstate; + info->count = clk->state_nr; + info->ustate_ac = clk->ustate_ac; + info->ustate_dc = clk->ustate_dc; + info->pwrsrc = clk->pwrsrc; + info->pstate = clk->pstate; } else { - args->v0.count = 0; - args->v0.ustate_ac = NVIF_CONTROL_PSTATE_INFO_V0_USTATE_DISABLE; - args->v0.ustate_dc = NVIF_CONTROL_PSTATE_INFO_V0_USTATE_DISABLE; - args->v0.pwrsrc = -ENODEV; - args->v0.pstate = NVIF_CONTROL_PSTATE_INFO_V0_PSTATE_UNKNOWN; + info->count = 0; + info->ustate_ac = NVIF_CONTROL_PSTATE_INFO_USTATE_DISABLE; + info->ustate_dc = NVIF_CONTROL_PSTATE_INFO_USTATE_DISABLE; + info->pwrsrc = -ENODEV; + info->pstate = NVIF_CONTROL_PSTATE_INFO_PSTATE_UNKNOWN; } - - return 0; } static int @@ -177,8 +164,6 @@ nvkm_control_mthd(struct nvkm_object *object, u32 mthd, void *data, u32 size) { struct nvif_control_priv *ctrl = container_of(object, typeof(*ctrl), object); switch (mthd) { - case NVIF_CONTROL_PSTATE_INFO: - return nvkm_control_mthd_pstate_info(ctrl, data, size); case NVIF_CONTROL_PSTATE_ATTR: return nvkm_control_mthd_pstate_attr(ctrl, data, size); case NVIF_CONTROL_PSTATE_USER: @@ -205,6 +190,7 @@ nvkm_control_del(struct nvif_control_priv *ctrl) static const struct nvif_control_impl nvkm_control_impl = { .del = nvkm_control_del, + .pstate.info = nvkm_control_pstate_info, }; int -- 2.41.0