mirror of https://gitee.com/openkylin/linux.git
drm/nouveau/therm: don't attempt fan control where PMU is already managing it
There's already a condition in place which attempts to detect this, but since we've begun to require a PMU subdev even on boards where we don't load a custom FW, it's become inaccurate. This will prevent unnecessarily running a periodic fan update thread on GP100 and newer, where we don't yet override the default PMU FW. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
f0790cda65
commit
69cbbb7b04
|
@ -30,6 +30,7 @@ struct nvkm_pmu {
|
|||
int nvkm_pmu_send(struct nvkm_pmu *, u32 reply[2], u32 process,
|
||||
u32 message, u32 data0, u32 data1);
|
||||
void nvkm_pmu_pgob(struct nvkm_pmu *, bool enable);
|
||||
bool nvkm_pmu_fan_controlled(struct nvkm_device *);
|
||||
|
||||
int gt215_pmu_new(struct nvkm_device *, int, struct nvkm_pmu **);
|
||||
int gf100_pmu_new(struct nvkm_device *, int, struct nvkm_pmu **);
|
||||
|
|
|
@ -26,6 +26,24 @@
|
|||
#include <core/msgqueue.h>
|
||||
#include <subdev/timer.h>
|
||||
|
||||
bool
|
||||
nvkm_pmu_fan_controlled(struct nvkm_device *device)
|
||||
{
|
||||
struct nvkm_pmu *pmu = device->pmu;
|
||||
|
||||
/* Internal PMU FW does not currently control fans in any way,
|
||||
* allow SW control of fans instead.
|
||||
*/
|
||||
if (pmu && pmu->func->code.size)
|
||||
return false;
|
||||
|
||||
/* Default (board-loaded, or VBIOS PMU/PREOS) PMU FW on Fermi
|
||||
* and newer automatically control the fan speed, which would
|
||||
* interfere with SW control.
|
||||
*/
|
||||
return (device->chipset >= 0xc0);
|
||||
}
|
||||
|
||||
void
|
||||
nvkm_pmu_pgob(struct nvkm_pmu *pmu, bool enable)
|
||||
{
|
||||
|
|
|
@ -21,9 +21,11 @@
|
|||
*
|
||||
* Authors: Martin Peres
|
||||
*/
|
||||
#include <nvkm/core/option.h>
|
||||
#include "priv.h"
|
||||
|
||||
#include <core/option.h>
|
||||
#include <subdev/pmu.h>
|
||||
|
||||
int
|
||||
nvkm_therm_temp_get(struct nvkm_therm *therm)
|
||||
{
|
||||
|
@ -192,8 +194,7 @@ nvkm_therm_fan_mode(struct nvkm_therm *therm, int mode)
|
|||
|
||||
/* The default PPWR ucode on fermi interferes with fan management */
|
||||
if ((mode >= ARRAY_SIZE(name)) ||
|
||||
(mode != NVKM_THERM_CTRL_NONE && device->card_type >= NV_C0 &&
|
||||
!device->pmu))
|
||||
(mode != NVKM_THERM_CTRL_NONE && nvkm_pmu_fan_controlled(device)))
|
||||
return -EINVAL;
|
||||
|
||||
/* do not allow automatic fan management if the thermal sensor is
|
||||
|
|
Loading…
Reference in New Issue