Loading drivers/gpu/drm/nouveau/nouveau_drv.c +3 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ #include "nouveau_hw.h" #include "nouveau_fb.h" #include "nouveau_fbcon.h" #include "nouveau_pm.h" #include "nv50_display.h" #include "drm_pciids.h" Loading Loading @@ -279,6 +280,8 @@ nouveau_pci_resume(struct pci_dev *pdev) if (ret) return ret; nouveau_pm_resume(dev); if (dev_priv->gart_info.type == NOUVEAU_GART_AGP) { ret = nouveau_mem_init_agp(dev); if (ret) { Loading drivers/gpu/drm/nouveau/nouveau_pm.c +45 −19 Original line number Diff line number Diff line Loading @@ -46,13 +46,39 @@ nouveau_pm_clock_set(struct drm_device *dev, u8 id, u32 khz) return 0; } static int nouveau_pm_perflvl_set(struct drm_device *dev, struct nouveau_pm_level *perflvl) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_pm_engine *pm = &dev_priv->engine.pm; int ret; if (perflvl == pm->cur) return 0; if (pm->voltage.supported && pm->voltage_set && perflvl->voltage) { ret = pm->voltage_set(dev, perflvl->voltage); if (ret) { NV_ERROR(dev, "voltage_set %d failed: %d\n", perflvl->voltage, ret); } } nouveau_pm_clock_set(dev, PLL_CORE, perflvl->core); nouveau_pm_clock_set(dev, PLL_SHADER, perflvl->shader); nouveau_pm_clock_set(dev, PLL_MEMORY, perflvl->memory); nouveau_pm_clock_set(dev, PLL_UNK05, perflvl->unk05); pm->cur = perflvl; return 0; } static int nouveau_pm_profile_set(struct drm_device *dev, const char *profile) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_pm_engine *pm = &dev_priv->engine.pm; struct nouveau_pm_level *perflvl = NULL; int ret; /* safety precaution, for now */ if (nouveau_perflvl_wr != 7777) Loading @@ -78,25 +104,8 @@ nouveau_pm_profile_set(struct drm_device *dev, const char *profile) return -EINVAL; } if (perflvl == pm->cur) return 0; NV_INFO(dev, "setting performance level: %s\n", profile); if (pm->voltage.supported && pm->voltage_set && perflvl->voltage) { ret = pm->voltage_set(dev, perflvl->voltage); if (ret) { NV_ERROR(dev, "voltage_set %d failed: %d\n", perflvl->voltage, ret); } } nouveau_pm_clock_set(dev, PLL_CORE, perflvl->core); nouveau_pm_clock_set(dev, PLL_SHADER, perflvl->shader); nouveau_pm_clock_set(dev, PLL_MEMORY, perflvl->memory); nouveau_pm_clock_set(dev, PLL_UNK05, perflvl->unk05); pm->cur = perflvl; return 0; return nouveau_pm_perflvl_set(dev, perflvl); } static int Loading Loading @@ -285,6 +294,9 @@ nouveau_pm_fini(struct drm_device *dev) struct device *d = &dev->pdev->dev; int i; if (pm->cur != &pm->boot) nouveau_pm_perflvl_set(dev, &pm->boot); device_remove_file(d, &dev_attr_performance_level); for (i = 0; i < pm->nr_perflvl; i++) { struct nouveau_pm_level *pl = &pm->perflvl[i]; Loading @@ -299,3 +311,17 @@ nouveau_pm_fini(struct drm_device *dev) nouveau_volt_fini(dev); } void nouveau_pm_resume(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_pm_engine *pm = &dev_priv->engine.pm; struct nouveau_pm_level *perflvl; if (pm->cur == &pm->boot) return; perflvl = pm->cur; pm->cur = &pm->boot; nouveau_pm_perflvl_set(dev, perflvl); } drivers/gpu/drm/nouveau/nouveau_pm.h +1 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ /* nouveau_pm.c */ int nouveau_pm_init(struct drm_device *dev); void nouveau_pm_fini(struct drm_device *dev); void nouveau_pm_resume(struct drm_device *dev); /* nouveau_volt.c */ void nouveau_volt_init(struct drm_device *); Loading Loading
drivers/gpu/drm/nouveau/nouveau_drv.c +3 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ #include "nouveau_hw.h" #include "nouveau_fb.h" #include "nouveau_fbcon.h" #include "nouveau_pm.h" #include "nv50_display.h" #include "drm_pciids.h" Loading Loading @@ -279,6 +280,8 @@ nouveau_pci_resume(struct pci_dev *pdev) if (ret) return ret; nouveau_pm_resume(dev); if (dev_priv->gart_info.type == NOUVEAU_GART_AGP) { ret = nouveau_mem_init_agp(dev); if (ret) { Loading
drivers/gpu/drm/nouveau/nouveau_pm.c +45 −19 Original line number Diff line number Diff line Loading @@ -46,13 +46,39 @@ nouveau_pm_clock_set(struct drm_device *dev, u8 id, u32 khz) return 0; } static int nouveau_pm_perflvl_set(struct drm_device *dev, struct nouveau_pm_level *perflvl) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_pm_engine *pm = &dev_priv->engine.pm; int ret; if (perflvl == pm->cur) return 0; if (pm->voltage.supported && pm->voltage_set && perflvl->voltage) { ret = pm->voltage_set(dev, perflvl->voltage); if (ret) { NV_ERROR(dev, "voltage_set %d failed: %d\n", perflvl->voltage, ret); } } nouveau_pm_clock_set(dev, PLL_CORE, perflvl->core); nouveau_pm_clock_set(dev, PLL_SHADER, perflvl->shader); nouveau_pm_clock_set(dev, PLL_MEMORY, perflvl->memory); nouveau_pm_clock_set(dev, PLL_UNK05, perflvl->unk05); pm->cur = perflvl; return 0; } static int nouveau_pm_profile_set(struct drm_device *dev, const char *profile) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_pm_engine *pm = &dev_priv->engine.pm; struct nouveau_pm_level *perflvl = NULL; int ret; /* safety precaution, for now */ if (nouveau_perflvl_wr != 7777) Loading @@ -78,25 +104,8 @@ nouveau_pm_profile_set(struct drm_device *dev, const char *profile) return -EINVAL; } if (perflvl == pm->cur) return 0; NV_INFO(dev, "setting performance level: %s\n", profile); if (pm->voltage.supported && pm->voltage_set && perflvl->voltage) { ret = pm->voltage_set(dev, perflvl->voltage); if (ret) { NV_ERROR(dev, "voltage_set %d failed: %d\n", perflvl->voltage, ret); } } nouveau_pm_clock_set(dev, PLL_CORE, perflvl->core); nouveau_pm_clock_set(dev, PLL_SHADER, perflvl->shader); nouveau_pm_clock_set(dev, PLL_MEMORY, perflvl->memory); nouveau_pm_clock_set(dev, PLL_UNK05, perflvl->unk05); pm->cur = perflvl; return 0; return nouveau_pm_perflvl_set(dev, perflvl); } static int Loading Loading @@ -285,6 +294,9 @@ nouveau_pm_fini(struct drm_device *dev) struct device *d = &dev->pdev->dev; int i; if (pm->cur != &pm->boot) nouveau_pm_perflvl_set(dev, &pm->boot); device_remove_file(d, &dev_attr_performance_level); for (i = 0; i < pm->nr_perflvl; i++) { struct nouveau_pm_level *pl = &pm->perflvl[i]; Loading @@ -299,3 +311,17 @@ nouveau_pm_fini(struct drm_device *dev) nouveau_volt_fini(dev); } void nouveau_pm_resume(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_pm_engine *pm = &dev_priv->engine.pm; struct nouveau_pm_level *perflvl; if (pm->cur == &pm->boot) return; perflvl = pm->cur; pm->cur = &pm->boot; nouveau_pm_perflvl_set(dev, perflvl); }
drivers/gpu/drm/nouveau/nouveau_pm.h +1 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ /* nouveau_pm.c */ int nouveau_pm_init(struct drm_device *dev); void nouveau_pm_fini(struct drm_device *dev); void nouveau_pm_resume(struct drm_device *dev); /* nouveau_volt.c */ void nouveau_volt_init(struct drm_device *); Loading