]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/pll.h
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
[mirror_ubuntu-bionic-kernel.git] / drivers / gpu / drm / nouveau / include / nvkm / subdev / bios / pll.h
CommitLineData
b2441318 1/* SPDX-License-Identifier: GPL-2.0 */
70790f4f
BS
2#ifndef __NVBIOS_PLL_H__
3#define __NVBIOS_PLL_H__
70790f4f 4/*XXX: kill me */
d390b480 5struct nvkm_pll_vals {
70790f4f
BS
6 union {
7 struct {
8#ifdef __BIG_ENDIAN
9 uint8_t N1, M1, N2, M2;
10#else
11 uint8_t M1, N1, M2, N2;
12#endif
13 };
14 struct {
15 uint16_t NM1, NM2;
16 } __attribute__((packed));
17 };
18 int log2P;
19
20 int refclk;
21};
22
70790f4f 23/* these match types in pll limits table version 0x40,
d390b480 24 * nvkm uses them on all chipsets internally where a
70790f4f
BS
25 * specific pll needs to be referenced, but the exact
26 * register isn't known.
27 */
28enum nvbios_pll_type {
29 PLL_CORE = 0x01,
30 PLL_SHADER = 0x02,
31 PLL_UNK03 = 0x03,
32 PLL_MEMORY = 0x04,
33 PLL_VDEC = 0x05,
34 PLL_UNK40 = 0x40,
35 PLL_UNK41 = 0x41,
36 PLL_UNK42 = 0x42,
37 PLL_VPLL0 = 0x80,
38 PLL_VPLL1 = 0x81,
d19528a9
AT
39 PLL_VPLL2 = 0x82,
40 PLL_VPLL3 = 0x83,
70790f4f
BS
41 PLL_MAX = 0xff
42};
43
44struct nvbios_pll {
45 enum nvbios_pll_type type;
46 u32 reg;
47 u32 refclk;
48
49 u8 min_p;
50 u8 max_p;
51 u8 bias_p;
52
53 /*
54 * for most pre nv50 cards setting a log2P of 7 (the common max_log2p
55 * value) is no different to 6 (at least for vplls) so allowing the MNP
56 * calc to use 7 causes the generated clock to be out by a factor of 2.
57 * however, max_log2p cannot be fixed-up during parsing as the
58 * unmodified max_log2p value is still needed for setting mplls, hence
59 * an additional max_usable_log2p member
60 */
61 u8 max_p_usable;
62
63 struct {
64 u32 min_freq;
65 u32 max_freq;
66 u32 min_inputfreq;
67 u32 max_inputfreq;
68 u8 min_m;
69 u8 max_m;
70 u8 min_n;
71 u8 max_n;
72 } vco1, vco2;
73};
74
d390b480 75int nvbios_pll_parse(struct nvkm_bios *, u32 type, struct nvbios_pll *);
70790f4f 76#endif