diff options
author | Karol Herbst <nouveau@karolherbst.de> | 2015-09-15 12:47:12 -0400 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2016-01-10 20:30:22 -0500 |
commit | c6e2f9bc0367c0e5c734bf8b3ab1ee097977f1e2 (patch) | |
tree | 8a79e7bf6457431b306f9a14deae46261138e75b | |
parent | 3aba825ffa6615971bb5feae57806288c14d4096 (diff) |
drm/nouveau/bios/perf: parse the pci speed from the bios for tesla and newer cards
Signed-off-by: Karol Herbst <nouveau@karolherbst.de>
-rw-r--r-- | drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/perf.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/subdev/bios/perf.c | 16 |
2 files changed, 18 insertions, 0 deletions
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/perf.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/perf.h index 7cc2becabc69..d3bd250103d5 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/perf.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/perf.h | |||
@@ -13,6 +13,8 @@ struct nvbios_perfE { | |||
13 | u32 vdec; | 13 | u32 vdec; |
14 | u32 disp; | 14 | u32 disp; |
15 | u32 script; | 15 | u32 script; |
16 | u8 pcie_speed; | ||
17 | u8 pcie_width; | ||
16 | }; | 18 | }; |
17 | 19 | ||
18 | u16 nvbios_perf_entry(struct nvkm_bios *, int idx, | 20 | u16 nvbios_perf_entry(struct nvkm_bios *, int idx, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/perf.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/perf.c index aa7e33b42b30..636bfb665bb9 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/perf.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/perf.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <subdev/bios.h> | 24 | #include <subdev/bios.h> |
25 | #include <subdev/bios/bit.h> | 25 | #include <subdev/bios/bit.h> |
26 | #include <subdev/bios/perf.h> | 26 | #include <subdev/bios/perf.h> |
27 | #include <subdev/pci.h> | ||
27 | 28 | ||
28 | u16 | 29 | u16 |
29 | nvbios_perf_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, | 30 | nvbios_perf_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, |
@@ -145,6 +146,21 @@ nvbios_perfEp(struct nvkm_bios *bios, int idx, | |||
145 | break; | 146 | break; |
146 | case 0x40: | 147 | case 0x40: |
147 | info->voltage = nvbios_rd08(bios, perf + 0x02); | 148 | info->voltage = nvbios_rd08(bios, perf + 0x02); |
149 | switch (nvbios_rd08(bios, perf + 0xb) & 0x3) { | ||
150 | case 0: | ||
151 | info->pcie_speed = NVKM_PCIE_SPEED_5_0; | ||
152 | break; | ||
153 | case 3: | ||
154 | case 1: | ||
155 | info->pcie_speed = NVKM_PCIE_SPEED_2_5; | ||
156 | break; | ||
157 | case 2: | ||
158 | info->pcie_speed = NVKM_PCIE_SPEED_8_0; | ||
159 | break; | ||
160 | default: | ||
161 | break; | ||
162 | } | ||
163 | info->pcie_width = 0xff; | ||
148 | break; | 164 | break; |
149 | default: | 165 | default: |
150 | return 0x0000; | 166 | return 0x0000; |