summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarol Herbst <nouveau@karolherbst.de>2015-09-15 18:47:12 +0200
committerBen Skeggs <bskeggs@redhat.com>2016-01-11 11:15:11 +1000
commit4c5f6082f29c20924e2c687e4c3ee1f6df721a44 (patch)
tree18f8e074977494c684a2a07b1c9158ec9579f524
parent3dae70d730c972a77bb367967b9d507805bf0ede (diff)
downloadnouveau-4c5f6082f29c20924e2c687e4c3ee1f6df721a44.tar.gz
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--drm/nouveau/include/nvkm/subdev/bios/perf.h2
-rw-r--r--drm/nouveau/nvkm/subdev/bios/perf.c16
2 files changed, 18 insertions, 0 deletions
diff --git a/drm/nouveau/include/nvkm/subdev/bios/perf.h b/drm/nouveau/include/nvkm/subdev/bios/perf.h
index 7cc2becab..d3bd25010 100644
--- a/drm/nouveau/include/nvkm/subdev/bios/perf.h
+++ b/drm/nouveau/include/nvkm/subdev/bios/perf.h
@@ -13,6 +13,8 @@ struct nvbios_perfE {
u32 vdec;
u32 disp;
u32 script;
+ u8 pcie_speed;
+ u8 pcie_width;
};
u16 nvbios_perf_entry(struct nvkm_bios *, int idx,
diff --git a/drm/nouveau/nvkm/subdev/bios/perf.c b/drm/nouveau/nvkm/subdev/bios/perf.c
index aa7e33b42..636bfb665 100644
--- a/drm/nouveau/nvkm/subdev/bios/perf.c
+++ b/drm/nouveau/nvkm/subdev/bios/perf.c
@@ -24,6 +24,7 @@
#include <subdev/bios.h>
#include <subdev/bios/bit.h>
#include <subdev/bios/perf.h>
+#include <subdev/pci.h>
u16
nvbios_perf_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr,
@@ -145,6 +146,21 @@ nvbios_perfEp(struct nvkm_bios *bios, int idx,
break;
case 0x40:
info->voltage = nvbios_rd08(bios, perf + 0x02);
+ switch (nvbios_rd08(bios, perf + 0xb) & 0x3) {
+ case 0:
+ info->pcie_speed = NVKM_PCIE_SPEED_5_0;
+ break;
+ case 3:
+ case 1:
+ info->pcie_speed = NVKM_PCIE_SPEED_2_5;
+ break;
+ case 2:
+ info->pcie_speed = NVKM_PCIE_SPEED_8_0;
+ break;
+ default:
+ break;
+ }
+ info->pcie_width = 0xff;
break;
default:
return 0x0000;