- transition from "ioctl" interface Signed-off-by: Ben Skeggs <bskeggs@xxxxxxxxxx> --- .../gpu/drm/nouveau/include/nvif/driverif.h | 9 ++++ drivers/gpu/drm/nouveau/include/nvif/if0001.h | 15 ------ drivers/gpu/drm/nouveau/nouveau_debugfs.c | 10 ++-- drivers/gpu/drm/nouveau/nvkm/device/ctrl.c | 51 ++++--------------- 4 files changed, 24 insertions(+), 61 deletions(-) delete mode 100644 drivers/gpu/drm/nouveau/include/nvif/if0001.h diff --git a/drivers/gpu/drm/nouveau/include/nvif/driverif.h b/drivers/gpu/drm/nouveau/include/nvif/driverif.h index bfa22c977323..e22e0347f623 100644 --- a/drivers/gpu/drm/nouveau/include/nvif/driverif.h +++ b/drivers/gpu/drm/nouveau/include/nvif/driverif.h @@ -23,6 +23,14 @@ struct nvif_mapinfo { u64 length; }; +struct nvif_control_pstate_user { + u8 version; +#define NVIF_CONTROL_PSTATE_USER_STATE_UNKNOWN (-1) +#define NVIF_CONTROL_PSTATE_USER_STATE_PERFMON (-2) + s8 ustate; /* in: pstate identifier */ + s8 pwrsrc; /* in: target power source */ +}; + struct nvif_control_pstate_attr { u8 version; #define NVIF_CONTROL_PSTATE_ATTR_STATE_CURRENT (-1) @@ -57,6 +65,7 @@ struct nvif_control_impl { struct { void (*info)(struct nvif_control_priv *, struct nvif_control_pstate_info *); int (*attr)(struct nvif_control_priv *, struct nvif_control_pstate_attr *); + int (*user)(struct nvif_control_priv *, struct nvif_control_pstate_user *); } pstate; }; diff --git a/drivers/gpu/drm/nouveau/include/nvif/if0001.h b/drivers/gpu/drm/nouveau/include/nvif/if0001.h deleted file mode 100644 index b84da0b7d079..000000000000 --- a/drivers/gpu/drm/nouveau/include/nvif/if0001.h +++ /dev/null @@ -1,15 +0,0 @@ -/* SPDX-License-Identifier: MIT */ -#ifndef __NVIF_IF0001_H__ -#define __NVIF_IF0001_H__ - -#define NVIF_CONTROL_PSTATE_USER 0x02 - -struct nvif_control_pstate_user_v0 { - __u8 version; -#define NVIF_CONTROL_PSTATE_USER_V0_STATE_UNKNOWN (-1) -#define NVIF_CONTROL_PSTATE_USER_V0_STATE_PERFMON (-2) - __s8 ustate; /* in: pstate identifier */ - __s8 pwrsrc; /* in: target power source */ - __u8 pad03[5]; -}; -#endif diff --git a/drivers/gpu/drm/nouveau/nouveau_debugfs.c b/drivers/gpu/drm/nouveau/nouveau_debugfs.c index 33a64f95f64f..837653ca1753 100644 --- a/drivers/gpu/drm/nouveau/nouveau_debugfs.c +++ b/drivers/gpu/drm/nouveau/nouveau_debugfs.c @@ -29,7 +29,6 @@ */ #include <linux/debugfs.h> -#include <nvif/if0001.h> #include "nouveau_debugfs.h" #include "nouveau_drv.h" @@ -138,7 +137,7 @@ nouveau_debugfs_pstate_set(struct file *file, const char __user *ubuf, struct seq_file *m = file->private_data; struct drm_device *drm = m->private; struct nouveau_debugfs *debugfs = nouveau_debugfs(drm); - struct nvif_control_pstate_user_v0 args = { .pwrsrc = -EINVAL }; + struct nvif_control_pstate_user args = { .pwrsrc = -EINVAL }; char buf[32] = {}, *tmp, *cur = buf; long value, ret; @@ -164,10 +163,10 @@ nouveau_debugfs_pstate_set(struct file *file, const char __user *ubuf, } if (!strcasecmp(cur, "none")) - args.ustate = NVIF_CONTROL_PSTATE_USER_V0_STATE_UNKNOWN; + args.ustate = NVIF_CONTROL_PSTATE_USER_STATE_UNKNOWN; else if (!strcasecmp(cur, "auto")) - args.ustate = NVIF_CONTROL_PSTATE_USER_V0_STATE_PERFMON; + args.ustate = NVIF_CONTROL_PSTATE_USER_STATE_PERFMON; else { ret = kstrtol(cur, 16, &value); if (ret) @@ -181,8 +180,7 @@ nouveau_debugfs_pstate_set(struct file *file, const char __user *ubuf, return ret; } - ret = nvif_mthd(&debugfs->ctrl, NVIF_CONTROL_PSTATE_USER, - &args, sizeof(args)); + ret = debugfs->impl->pstate.user(debugfs->priv, &args); pm_runtime_put_autosuspend(drm->dev); if (ret < 0) return ret; diff --git a/drivers/gpu/drm/nouveau/nvkm/device/ctrl.c b/drivers/gpu/drm/nouveau/nvkm/device/ctrl.c index 8c279cb797e9..4ba1d5934a87 100644 --- a/drivers/gpu/drm/nouveau/nvkm/device/ctrl.c +++ b/drivers/gpu/drm/nouveau/nvkm/device/ctrl.c @@ -26,12 +26,6 @@ #include <core/client.h> #include <subdev/clk.h> -#include <nvif/if0001.h> -#include <nvif/ioctl.h> -#include <nvif/unpack.h> - -#define nvkm_control nvif_control_priv - struct nvif_control_priv { struct nvkm_object object; struct nvkm_device *device; @@ -121,50 +115,26 @@ nvkm_control_pstate_attr(struct nvif_control_priv *ctrl, struct nvif_control_pst } static int -nvkm_control_mthd_pstate_user(struct nvkm_control *ctrl, void *data, u32 size) +nvkm_control_pstate_user(struct nvif_control_priv *ctrl, struct nvif_control_pstate_user *user) { - union { - struct nvif_control_pstate_user_v0 v0; - } *args = data; struct nvkm_clk *clk = ctrl->device->clk; - int ret = -ENOSYS; - - nvif_ioctl(&ctrl->object, "control pstate user size %d\n", size); - if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { - nvif_ioctl(&ctrl->object, - "control pstate user vers %d ustate %d pwrsrc %d\n", - args->v0.version, args->v0.ustate, args->v0.pwrsrc); - if (!clk) - return -ENODEV; - } else - return ret; - - if (args->v0.pwrsrc >= 0) { - ret |= nvkm_clk_ustate(clk, args->v0.ustate, args->v0.pwrsrc); + int ret = 0; + + if (!clk) + return -ENODEV; + + if (user->pwrsrc >= 0) { + ret |= nvkm_clk_ustate(clk, user->ustate, user->pwrsrc); } else { - ret |= nvkm_clk_ustate(clk, args->v0.ustate, 0); - ret |= nvkm_clk_ustate(clk, args->v0.ustate, 1); + ret |= nvkm_clk_ustate(clk, user->ustate, 0); + ret |= nvkm_clk_ustate(clk, user->ustate, 1); } return ret; } -static int -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_USER: - return nvkm_control_mthd_pstate_user(ctrl, data, size); - default: - break; - } - return -EINVAL; -} - static const struct nvkm_object_func nvkm_control = { - .mthd = nvkm_control_mthd, }; static void @@ -180,6 +150,7 @@ nvkm_control_impl = { .del = nvkm_control_del, .pstate.info = nvkm_control_pstate_info, .pstate.attr = nvkm_control_pstate_attr, + .pstate.user = nvkm_control_pstate_user, }; int -- 2.41.0