From 0196cc65f91710e30d45cea78d75fd616d705002 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Wed, 1 Jun 2022 20:46:03 +1000 Subject: [PATCH] drm/nouveau/device: remove pwrsrc notify in favour of a direct call to clk Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul Reviewed-by: Dave Airlie Signed-off-by: Dave Airlie --- drivers/gpu/drm/nouveau/include/nvkm/core/device.h | 3 --- drivers/gpu/drm/nouveau/include/nvkm/subdev/clk.h | 3 +-- .../gpu/drm/nouveau/include/nvkm/subdev/fault.h | 1 + drivers/gpu/drm/nouveau/nvkm/core/ioctl.c | 1 + drivers/gpu/drm/nouveau/nvkm/engine/device/acpi.c | 6 +++--- drivers/gpu/drm/nouveau/nvkm/engine/device/base.c | 25 ---------------------- drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c | 20 +++++------------ 7 files changed, 11 insertions(+), 48 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index a18b6cf..efede1f 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -2,7 +2,6 @@ #ifndef __NVKM_DEVICE_H__ #define __NVKM_DEVICE_H__ #include -#include enum nvkm_subdev_type; enum nvkm_device_type { @@ -28,8 +27,6 @@ struct nvkm_device { void __iomem *pri; - struct nvkm_event event; - u32 debug; const struct nvkm_device_chip *chip; diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/clk.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/clk.h index 05b99c9..d5d88770 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/clk.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/clk.h @@ -2,7 +2,6 @@ #ifndef __NVKM_CLK_H__ #define __NVKM_CLK_H__ #include -#include #include struct nvbios_pll; struct nvkm_pll_vals; @@ -94,7 +93,6 @@ struct nvkm_clk { wait_queue_head_t wait; atomic_t waiting; - struct nvkm_notify pwrsrc_ntfy; int pwrsrc; int pstate; /* current */ int ustate_ac; /* user-requested (-1 disabled, -2 perfmon) */ @@ -124,6 +122,7 @@ int nvkm_clk_ustate(struct nvkm_clk *, int req, int pwr); int nvkm_clk_astate(struct nvkm_clk *, int req, int rel, bool wait); int nvkm_clk_dstate(struct nvkm_clk *, int req, int rel); int nvkm_clk_tstate(struct nvkm_clk *, u8 temperature); +int nvkm_clk_pwrsrc(struct nvkm_device *); int nv04_clk_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_clk **); int nv40_clk_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_clk **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/fault.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/fault.h index 581458a..9c78f07 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/fault.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/fault.h @@ -1,6 +1,7 @@ #ifndef __NVKM_FAULT_H__ #define __NVKM_FAULT_H__ #include +#include #include struct nvkm_fault { diff --git a/drivers/gpu/drm/nouveau/nvkm/core/ioctl.c b/drivers/gpu/drm/nouveau/nvkm/core/ioctl.c index 06b2f67..45f920d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/ioctl.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/ioctl.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/acpi.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/acpi.c index fdca90b..c948a0d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/acpi.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/acpi.c @@ -24,17 +24,17 @@ #include "acpi.h" #include +#include #ifdef CONFIG_ACPI static int nvkm_acpi_ntfy(struct notifier_block *nb, unsigned long val, void *data) { - struct nvkm_device *device = - container_of(nb, typeof(*device), acpi.nb); + struct nvkm_device *device = container_of(nb, typeof(*device), acpi.nb); struct acpi_bus_event *info = data; if (!strcmp(info->device_class, "ac_adapter")) - nvkm_event_send(&device->event, 1, 0, NULL, 0); + nvkm_clk_pwrsrc(device); return NOTIFY_DONE; } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 62efbd0..568182e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -24,7 +24,6 @@ #include "priv.h" #include "acpi.h" -#include #include #include @@ -2668,24 +2667,6 @@ nv177_chipset = { .fifo = { 0x00000001, ga102_fifo_new }, }; -static int -nvkm_device_event_ctor(struct nvkm_object *object, void *data, u32 size, - struct nvkm_notify *notify) -{ - if (!WARN_ON(size != 0)) { - notify->size = 0; - notify->types = 1; - notify->index = 0; - return 0; - } - return -EINVAL; -} - -static const struct nvkm_event_func -nvkm_device_event_func = { - .ctor = nvkm_device_event_ctor, -}; - struct nvkm_subdev * nvkm_device_subdev(struct nvkm_device *device, int type, int inst) { @@ -2838,8 +2819,6 @@ nvkm_device_del(struct nvkm_device **pdevice) list_for_each_entry_safe_reverse(subdev, subtmp, &device->subdev, head) nvkm_subdev_del(&subdev); - nvkm_event_fini(&device->event); - if (device->pri) iounmap(device->pri); list_del(&device->head); @@ -2914,10 +2893,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, device->debug = nvkm_dbgopt(device->dbgopt, "device"); INIT_LIST_HEAD(&device->subdev); - ret = nvkm_event_init(&nvkm_device_event_func, 1, 1, &device->event); - if (ret) - goto done; - mmio_base = device->func->resource_addr(device, 0); mmio_size = device->func->resource_size(device, 0); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c index c2b5cc5..da07a2f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c @@ -330,7 +330,6 @@ nvkm_pstate_work(struct work_struct *work) } wake_up_all(&clk->wait); - nvkm_notify_get(&clk->pwrsrc_ntfy); } static int @@ -559,13 +558,12 @@ nvkm_clk_dstate(struct nvkm_clk *clk, int req, int rel) return nvkm_pstate_calc(clk, true); } -static int -nvkm_clk_pwrsrc(struct nvkm_notify *notify) +int +nvkm_clk_pwrsrc(struct nvkm_device *device) { - struct nvkm_clk *clk = - container_of(notify, typeof(*clk), pwrsrc_ntfy); - nvkm_pstate_calc(clk, false); - return NVKM_NOTIFY_DROP; + if (device->clk) + return nvkm_pstate_calc(device->clk, false); + return 0; } /****************************************************************************** @@ -582,7 +580,6 @@ static int nvkm_clk_fini(struct nvkm_subdev *subdev, bool suspend) { struct nvkm_clk *clk = nvkm_clk(subdev); - nvkm_notify_put(&clk->pwrsrc_ntfy); flush_work(&clk->work); if (clk->func->fini) clk->func->fini(clk); @@ -629,8 +626,6 @@ nvkm_clk_dtor(struct nvkm_subdev *subdev) struct nvkm_clk *clk = nvkm_clk(subdev); struct nvkm_pstate *pstate, *temp; - nvkm_notify_fini(&clk->pwrsrc_ntfy); - /* Early return if the pstates have been provided statically */ if (clk->func->pstates) return clk; @@ -692,11 +687,6 @@ nvkm_clk_ctor(const struct nvkm_clk_func *func, struct nvkm_device *device, clk->state_nr = func->nr_pstates; } - ret = nvkm_notify_init(NULL, &device->event, nvkm_clk_pwrsrc, true, - NULL, 0, 0, &clk->pwrsrc_ntfy); - if (ret) - return ret; - mode = nvkm_stropt(device->cfgopt, "NvClkMode", &arglen); if (mode) { clk->ustate_ac = nvkm_clk_nstate(clk, mode, arglen); -- 2.7.4