Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 77e7da68 authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/pm: add hooks to get/set *all* clocks at once



This is probably better than having to tell the common code about all the
clocks that exist on every chipset.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 3b0582d3
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -498,6 +498,11 @@ struct nouveau_pm_engine {
	void *(*clock_pre)(struct drm_device *, struct nouveau_pm_level *,
			   u32 id, int khz);
	void (*clock_set)(struct drm_device *, void *);

	int  (*clocks_get)(struct drm_device *, struct nouveau_pm_level *);
	void *(*clocks_pre)(struct drm_device *, struct nouveau_pm_level *);
	void (*clocks_set)(struct drm_device *, void *);

	int (*voltage_get)(struct drm_device *);
	int (*voltage_set)(struct drm_device *, int voltage);
	int (*fanspeed_get)(struct drm_device *);
+11 −0
Original line number Diff line number Diff line
@@ -72,6 +72,12 @@ nouveau_pm_perflvl_set(struct drm_device *dev, struct nouveau_pm_level *perflvl)
		}
	}

	if (pm->clocks_pre) {
		void *state = pm->clocks_pre(dev, perflvl);
		if (IS_ERR(state))
			return PTR_ERR(state);
		pm->clocks_set(dev, state);
	} else
	if (pm->clock_set) {
		nouveau_pm_clock_set(dev, perflvl, PLL_CORE, perflvl->core);
		nouveau_pm_clock_set(dev, perflvl, PLL_SHADER, perflvl->shader);
@@ -124,6 +130,11 @@ nouveau_pm_perflvl_get(struct drm_device *dev, struct nouveau_pm_level *perflvl)

	memset(perflvl, 0, sizeof(*perflvl));

	if (pm->clocks_get) {
		ret = pm->clocks_get(dev, perflvl);
		if (ret)
			return ret;
	} else
	if (pm->clock_get) {
		ret = pm->clock_get(dev, PLL_CORE);
		if (ret > 0)