aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarol Herbst <nouveau@karolherbst.de>2015-09-15 12:47:12 -0400
committerBen Skeggs <bskeggs@redhat.com>2016-01-10 20:30:22 -0500
commitc6e2f9bc0367c0e5c734bf8b3ab1ee097977f1e2 (patch)
tree8a79e7bf6457431b306f9a14deae46261138e75b
parent3aba825ffa6615971bb5feae57806288c14d4096 (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.h2
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/bios/perf.c16
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
18u16 nvbios_perf_entry(struct nvkm_bios *, int idx, 20u16 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
28u16 29u16
29nvbios_perf_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, 30nvbios_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;