| /* SPDX-License-Identifier: GPL-2.0 */ | |
| #ifndef __NVKM_VOLT_H__ | |
| #define __NVKM_VOLT_H__ | |
| #include <core/subdev.h> | |
| struct nvkm_volt { | |
| const struct nvkm_volt_func *func; | |
| struct nvkm_subdev subdev; | |
| u8 vid_mask; | |
| u8 vid_nr; | |
| struct { | |
| u32 uv; | |
| u8 vid; | |
| } vid[256]; | |
| u32 max_uv; | |
| u32 min_uv; | |
| /* | |
| * These are fully functional map entries creating a sw ceiling for | |
| * the voltage. These all can describe different kind of curves, so | |
| * that for any given temperature a different one can return the lowest | |
| * value of all three. | |
| */ | |
| u8 max0_id; | |
| u8 max1_id; | |
| u8 max2_id; | |
| int speedo; | |
| }; | |
| int nvkm_volt_map(struct nvkm_volt *volt, u8 id, u8 temperature); | |
| int nvkm_volt_map_min(struct nvkm_volt *volt, u8 id); | |
| int nvkm_volt_get(struct nvkm_volt *); | |
| int nvkm_volt_set_id(struct nvkm_volt *, u8 id, u8 min_id, u8 temp, | |
| int condition); | |
| int nv40_volt_new(struct nvkm_device *, int, struct nvkm_volt **); | |
| int gf100_volt_new(struct nvkm_device *, int, struct nvkm_volt **); | |
| int gk104_volt_new(struct nvkm_device *, int, struct nvkm_volt **); | |
| int gk20a_volt_new(struct nvkm_device *, int, struct nvkm_volt **); | |
| int gm20b_volt_new(struct nvkm_device *, int, struct nvkm_volt **); | |
| #endif |