brintos

brintos / linux-shallow public Read only

0
0
Text · 3.4 KiB · bd04f49 Raw
120 lines · c
1/* SPDX-License-Identifier: MIT */2#ifndef __NVKM_THERM_H__3#define __NVKM_THERM_H__4#include <core/subdev.h>5 6#include <subdev/bios.h>7#include <subdev/bios/therm.h>8#include <subdev/timer.h>9 10enum nvkm_therm_thrs_direction {11	NVKM_THERM_THRS_FALLING = 0,12	NVKM_THERM_THRS_RISING = 113};14 15enum nvkm_therm_thrs_state {16	NVKM_THERM_THRS_LOWER = 0,17	NVKM_THERM_THRS_HIGHER = 118};19 20enum nvkm_therm_thrs {21	NVKM_THERM_THRS_FANBOOST = 0,22	NVKM_THERM_THRS_DOWNCLOCK = 1,23	NVKM_THERM_THRS_CRITICAL = 2,24	NVKM_THERM_THRS_SHUTDOWN = 3,25	NVKM_THERM_THRS_NR26};27 28enum nvkm_therm_fan_mode {29	NVKM_THERM_CTRL_NONE = 0,30	NVKM_THERM_CTRL_MANUAL = 1,31	NVKM_THERM_CTRL_AUTO = 2,32};33 34enum nvkm_therm_attr_type {35	NVKM_THERM_ATTR_FAN_MIN_DUTY = 0,36	NVKM_THERM_ATTR_FAN_MAX_DUTY = 1,37	NVKM_THERM_ATTR_FAN_MODE = 2,38 39	NVKM_THERM_ATTR_THRS_FAN_BOOST = 10,40	NVKM_THERM_ATTR_THRS_FAN_BOOST_HYST = 11,41	NVKM_THERM_ATTR_THRS_DOWN_CLK = 12,42	NVKM_THERM_ATTR_THRS_DOWN_CLK_HYST = 13,43	NVKM_THERM_ATTR_THRS_CRITICAL = 14,44	NVKM_THERM_ATTR_THRS_CRITICAL_HYST = 15,45	NVKM_THERM_ATTR_THRS_SHUTDOWN = 16,46	NVKM_THERM_ATTR_THRS_SHUTDOWN_HYST = 17,47};48 49struct nvkm_therm_clkgate_init {50	u32 addr;51	u8  count;52	u32 data;53};54 55struct nvkm_therm_clkgate_pack {56	const struct nvkm_therm_clkgate_init *init;57};58 59struct nvkm_therm {60	const struct nvkm_therm_func *func;61	struct nvkm_subdev subdev;62 63	/* automatic thermal management */64	struct nvkm_alarm alarm;65	spinlock_t lock;66	struct nvbios_therm_trip_point *last_trip;67	int mode;68	int cstate;69	int suspend;70 71	/* bios */72	struct nvbios_therm_sensor bios_sensor;73 74	/* fan priv */75	struct nvkm_fan *fan;76 77	/* alarms priv */78	struct {79		spinlock_t alarm_program_lock;80		struct nvkm_alarm therm_poll_alarm;81		enum nvkm_therm_thrs_state alarm_state[NVKM_THERM_THRS_NR];82	} sensor;83 84	/* what should be done if the card overheats */85	struct {86		void (*downclock)(struct nvkm_therm *, bool active);87		void (*pause)(struct nvkm_therm *, bool active);88	} emergency;89 90	/* ic */91	struct i2c_client *ic;92 93	int (*fan_get)(struct nvkm_therm *);94	int (*fan_set)(struct nvkm_therm *, int);95 96	int (*attr_get)(struct nvkm_therm *, enum nvkm_therm_attr_type);97	int (*attr_set)(struct nvkm_therm *, enum nvkm_therm_attr_type, int);98 99	bool clkgating_enabled;100};101 102int nvkm_therm_temp_get(struct nvkm_therm *);103int nvkm_therm_fan_sense(struct nvkm_therm *);104int nvkm_therm_cstate(struct nvkm_therm *, int, int);105void nvkm_therm_clkgate_init(struct nvkm_therm *,106			     const struct nvkm_therm_clkgate_pack *);107void nvkm_therm_clkgate_enable(struct nvkm_therm *);108void nvkm_therm_clkgate_fini(struct nvkm_therm *, bool);109 110int nv40_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **);111int nv50_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **);112int g84_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **);113int gt215_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **);114int gf119_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **);115int gk104_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **);116int gm107_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **);117int gm200_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **);118int gp100_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **);119#endif120