| /* 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 |