1#ifndef __NVBIOS_PLL_H__
2#define __NVBIOS_PLL_H__
3
4struct nvkm_pll_vals {
5 union {
6 struct {
7#ifdef __BIG_ENDIAN
8 uint8_t N1, M1, N2, M2;
9#else
10 uint8_t M1, N1, M2, N2;
11#endif
12 };
13 struct {
14 uint16_t NM1, NM2;
15 } __attribute__((packed));
16 };
17 int log2P;
18
19 int refclk;
20};
21
22
23
24
25
26
27enum nvbios_pll_type {
28 PLL_CORE = 0x01,
29 PLL_SHADER = 0x02,
30 PLL_UNK03 = 0x03,
31 PLL_MEMORY = 0x04,
32 PLL_VDEC = 0x05,
33 PLL_UNK40 = 0x40,
34 PLL_UNK41 = 0x41,
35 PLL_UNK42 = 0x42,
36 PLL_VPLL0 = 0x80,
37 PLL_VPLL1 = 0x81,
38 PLL_VPLL2 = 0x82,
39 PLL_VPLL3 = 0x83,
40 PLL_MAX = 0xff
41};
42
43struct nvbios_pll {
44 enum nvbios_pll_type type;
45 u32 reg;
46 u32 refclk;
47
48 u8 min_p;
49 u8 max_p;
50 u8 bias_p;
51
52
53
54
55
56
57
58
59
60 u8 max_p_usable;
61
62 struct {
63 u32 min_freq;
64 u32 max_freq;
65 u32 min_inputfreq;
66 u32 max_inputfreq;
67 u8 min_m;
68 u8 max_m;
69 u8 min_n;
70 u8 max_n;
71 } vco1, vco2;
72};
73
74int nvbios_pll_parse(struct nvkm_bios *, u32 type, struct nvbios_pll *);
75#endif
76