Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aa4d7a4d authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/perfmon: initial infrastructure to expose performance counters



Internal use only at this point.  Userspace later.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 2984506f
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -246,6 +246,15 @@ nouveau-y += core/engine/mpeg/nv40.o
nouveau-y += core/engine/mpeg/nv44.o
nouveau-y += core/engine/mpeg/nv50.o
nouveau-y += core/engine/mpeg/nv84.o
nouveau-y += core/engine/perfmon/base.o
nouveau-y += core/engine/perfmon/daemon.o
nouveau-y += core/engine/perfmon/nv40.o
nouveau-y += core/engine/perfmon/nv50.o
nouveau-y += core/engine/perfmon/nv84.o
nouveau-y += core/engine/perfmon/nva3.o
nouveau-y += core/engine/perfmon/nvc0.o
nouveau-y += core/engine/perfmon/nve0.o
nouveau-y += core/engine/perfmon/nvf0.o
nouveau-y += core/engine/ppp/nv98.o
nouveau-y += core/engine/ppp/nvc0.o
nouveau-y += core/engine/software/nv04.o
+3 −1
Original line number Diff line number Diff line
@@ -77,6 +77,7 @@ static const u64 disable_map[] = {
	[NVDEV_SUBDEV_THERM]	= NV_DEVICE_DISABLE_CORE,
	[NVDEV_SUBDEV_PWR]	= NV_DEVICE_DISABLE_CORE,
	[NVDEV_ENGINE_DMAOBJ]	= NV_DEVICE_DISABLE_CORE,
	[NVDEV_ENGINE_PERFMON]  = NV_DEVICE_DISABLE_CORE,
	[NVDEV_ENGINE_FIFO]	= NV_DEVICE_DISABLE_FIFO,
	[NVDEV_ENGINE_SW]	= NV_DEVICE_DISABLE_FIFO,
	[NVDEV_ENGINE_GR]	= NV_DEVICE_DISABLE_GRAPH,
@@ -123,7 +124,8 @@ nouveau_devobj_ctor(struct nouveau_object *parent,
	ret = nouveau_parent_create(parent, nv_object(device), oclass, 0, NULL,
				    (1ULL << NVDEV_ENGINE_DMAOBJ) |
				    (1ULL << NVDEV_ENGINE_FIFO) |
				    (1ULL << NVDEV_ENGINE_DISP), &devobj);
				    (1ULL << NVDEV_ENGINE_DISP) |
				    (1ULL << NVDEV_ENGINE_PERFMON), &devobj);
	*pobject = nv_object(devobj);
	if (ret)
		return ret;
+17 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@
#include <engine/graph.h>
#include <engine/mpeg.h>
#include <engine/disp.h>
#include <engine/perfmon.h>

int
nv40_identify(struct nouveau_device *device)
@@ -68,6 +69,7 @@ nv40_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_GR     ] = &nv40_graph_oclass;
		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv40_mpeg_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv04_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv40_perfmon_oclass;
		break;
	case 0x41:
		device->cname = "NV41";
@@ -89,6 +91,7 @@ nv40_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_GR     ] = &nv40_graph_oclass;
		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv40_mpeg_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv04_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv40_perfmon_oclass;
		break;
	case 0x42:
		device->cname = "NV42";
@@ -110,6 +113,7 @@ nv40_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_GR     ] = &nv40_graph_oclass;
		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv40_mpeg_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv04_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv40_perfmon_oclass;
		break;
	case 0x43:
		device->cname = "NV43";
@@ -131,6 +135,7 @@ nv40_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_GR     ] = &nv40_graph_oclass;
		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv40_mpeg_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv04_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv40_perfmon_oclass;
		break;
	case 0x45:
		device->cname = "NV45";
@@ -152,6 +157,7 @@ nv40_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_GR     ] = &nv40_graph_oclass;
		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv44_mpeg_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv04_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv40_perfmon_oclass;
		break;
	case 0x47:
		device->cname = "G70";
@@ -173,6 +179,7 @@ nv40_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_GR     ] = &nv40_graph_oclass;
		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv44_mpeg_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv04_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv40_perfmon_oclass;
		break;
	case 0x49:
		device->cname = "G71";
@@ -194,6 +201,7 @@ nv40_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_GR     ] = &nv40_graph_oclass;
		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv44_mpeg_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv04_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv40_perfmon_oclass;
		break;
	case 0x4b:
		device->cname = "G73";
@@ -215,6 +223,7 @@ nv40_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_GR     ] = &nv40_graph_oclass;
		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv44_mpeg_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv04_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv40_perfmon_oclass;
		break;
	case 0x44:
		device->cname = "NV44";
@@ -236,6 +245,7 @@ nv40_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_GR     ] = &nv40_graph_oclass;
		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv44_mpeg_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv04_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv40_perfmon_oclass;
		break;
	case 0x46:
		device->cname = "G72";
@@ -257,6 +267,7 @@ nv40_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_GR     ] = &nv40_graph_oclass;
		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv44_mpeg_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv04_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv40_perfmon_oclass;
		break;
	case 0x4a:
		device->cname = "NV44A";
@@ -278,6 +289,7 @@ nv40_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_GR     ] = &nv40_graph_oclass;
		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv44_mpeg_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv04_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv40_perfmon_oclass;
		break;
	case 0x4c:
		device->cname = "C61";
@@ -299,6 +311,7 @@ nv40_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_GR     ] = &nv40_graph_oclass;
		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv44_mpeg_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv04_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv40_perfmon_oclass;
		break;
	case 0x4e:
		device->cname = "C51";
@@ -320,6 +333,7 @@ nv40_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_GR     ] = &nv40_graph_oclass;
		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv44_mpeg_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv04_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv40_perfmon_oclass;
		break;
	case 0x63:
		device->cname = "C73";
@@ -341,6 +355,7 @@ nv40_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_GR     ] = &nv40_graph_oclass;
		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv44_mpeg_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv04_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv40_perfmon_oclass;
		break;
	case 0x67:
		device->cname = "C67";
@@ -362,6 +377,7 @@ nv40_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_GR     ] = &nv40_graph_oclass;
		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv44_mpeg_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv04_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv40_perfmon_oclass;
		break;
	case 0x68:
		device->cname = "C68";
@@ -383,6 +399,7 @@ nv40_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_GR     ] = &nv40_graph_oclass;
		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv44_mpeg_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv04_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv40_perfmon_oclass;
		break;
	default:
		nv_fatal(device, "unknown Curie chipset\n");
+15 −0
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@
#include <engine/ppp.h>
#include <engine/copy.h>
#include <engine/disp.h>
#include <engine/perfmon.h>

int
nv50_identify(struct nouveau_device *device)
@@ -77,6 +78,7 @@ nv50_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_GR     ] = &nv50_graph_oclass;
		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv50_mpeg_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv50_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv50_perfmon_oclass;
		break;
	case 0x84:
		device->cname = "G84";
@@ -103,6 +105,7 @@ nv50_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_CRYPT  ] = &nv84_crypt_oclass;
		device->oclass[NVDEV_ENGINE_BSP    ] = &nv84_bsp_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv84_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv84_perfmon_oclass;
		break;
	case 0x86:
		device->cname = "G86";
@@ -129,6 +132,7 @@ nv50_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_CRYPT  ] = &nv84_crypt_oclass;
		device->oclass[NVDEV_ENGINE_BSP    ] = &nv84_bsp_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv84_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv84_perfmon_oclass;
		break;
	case 0x92:
		device->cname = "G92";
@@ -155,6 +159,7 @@ nv50_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_CRYPT  ] = &nv84_crypt_oclass;
		device->oclass[NVDEV_ENGINE_BSP    ] = &nv84_bsp_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv84_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv84_perfmon_oclass;
		break;
	case 0x94:
		device->cname = "G94";
@@ -181,6 +186,7 @@ nv50_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_CRYPT  ] = &nv84_crypt_oclass;
		device->oclass[NVDEV_ENGINE_BSP    ] = &nv84_bsp_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv94_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv84_perfmon_oclass;
		break;
	case 0x96:
		device->cname = "G96";
@@ -207,6 +213,7 @@ nv50_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_CRYPT  ] = &nv84_crypt_oclass;
		device->oclass[NVDEV_ENGINE_BSP    ] = &nv84_bsp_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv94_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv84_perfmon_oclass;
		break;
	case 0x98:
		device->cname = "G98";
@@ -233,6 +240,7 @@ nv50_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_BSP    ] = &nv98_bsp_oclass;
		device->oclass[NVDEV_ENGINE_PPP    ] = &nv98_ppp_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv94_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv84_perfmon_oclass;
		break;
	case 0xa0:
		device->cname = "G200";
@@ -259,6 +267,7 @@ nv50_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_CRYPT  ] = &nv84_crypt_oclass;
		device->oclass[NVDEV_ENGINE_BSP    ] = &nv84_bsp_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nva0_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv84_perfmon_oclass;
		break;
	case 0xaa:
		device->cname = "MCP77/MCP78";
@@ -285,6 +294,7 @@ nv50_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_BSP    ] = &nv98_bsp_oclass;
		device->oclass[NVDEV_ENGINE_PPP    ] = &nv98_ppp_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv94_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv84_perfmon_oclass;
		break;
	case 0xac:
		device->cname = "MCP79/MCP7A";
@@ -311,6 +321,7 @@ nv50_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_BSP    ] = &nv98_bsp_oclass;
		device->oclass[NVDEV_ENGINE_PPP    ] = &nv98_ppp_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nv94_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nv84_perfmon_oclass;
		break;
	case 0xa3:
		device->cname = "GT215";
@@ -339,6 +350,7 @@ nv50_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_PPP    ] = &nv98_ppp_oclass;
		device->oclass[NVDEV_ENGINE_COPY0  ] = &nva3_copy_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nva3_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nva3_perfmon_oclass;
		break;
	case 0xa5:
		device->cname = "GT216";
@@ -366,6 +378,7 @@ nv50_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_PPP    ] = &nv98_ppp_oclass;
		device->oclass[NVDEV_ENGINE_COPY0  ] = &nva3_copy_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nva3_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nva3_perfmon_oclass;
		break;
	case 0xa8:
		device->cname = "GT218";
@@ -393,6 +406,7 @@ nv50_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_PPP    ] = &nv98_ppp_oclass;
		device->oclass[NVDEV_ENGINE_COPY0  ] = &nva3_copy_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nva3_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nva3_perfmon_oclass;
		break;
	case 0xaf:
		device->cname = "MCP89";
@@ -420,6 +434,7 @@ nv50_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_PPP    ] = &nv98_ppp_oclass;
		device->oclass[NVDEV_ENGINE_COPY0  ] = &nva3_copy_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nva3_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] =  nva3_perfmon_oclass;
		break;
	default:
		nv_fatal(device, "unknown Tesla chipset\n");
+10 −0
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@
#include <engine/ppp.h>
#include <engine/copy.h>
#include <engine/disp.h>
#include <engine/perfmon.h>

int
nvc0_identify(struct nouveau_device *device)
@@ -84,6 +85,7 @@ nvc0_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_COPY0  ] = &nvc0_copy0_oclass;
		device->oclass[NVDEV_ENGINE_COPY1  ] = &nvc0_copy1_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nva3_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] = &nvc0_perfmon_oclass;
		break;
	case 0xc4:
		device->cname = "GF104";
@@ -114,6 +116,7 @@ nvc0_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_COPY0  ] = &nvc0_copy0_oclass;
		device->oclass[NVDEV_ENGINE_COPY1  ] = &nvc0_copy1_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nva3_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] = &nvc0_perfmon_oclass;
		break;
	case 0xc3:
		device->cname = "GF106";
@@ -143,6 +146,7 @@ nvc0_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_PPP    ] = &nvc0_ppp_oclass;
		device->oclass[NVDEV_ENGINE_COPY0  ] = &nvc0_copy0_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nva3_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] = &nvc0_perfmon_oclass;
		break;
	case 0xce:
		device->cname = "GF114";
@@ -173,6 +177,7 @@ nvc0_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_COPY0  ] = &nvc0_copy0_oclass;
		device->oclass[NVDEV_ENGINE_COPY1  ] = &nvc0_copy1_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nva3_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] = &nvc0_perfmon_oclass;
		break;
	case 0xcf:
		device->cname = "GF116";
@@ -203,6 +208,7 @@ nvc0_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_COPY0  ] = &nvc0_copy0_oclass;
		device->oclass[NVDEV_ENGINE_COPY1  ] = &nvc0_copy1_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nva3_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] = &nvc0_perfmon_oclass;
		break;
	case 0xc1:
		device->cname = "GF108";
@@ -232,6 +238,7 @@ nvc0_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_PPP    ] = &nvc0_ppp_oclass;
		device->oclass[NVDEV_ENGINE_COPY0  ] = &nvc0_copy0_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nva3_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] = &nvc0_perfmon_oclass;
		break;
	case 0xc8:
		device->cname = "GF110";
@@ -262,6 +269,7 @@ nvc0_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_COPY0  ] = &nvc0_copy0_oclass;
		device->oclass[NVDEV_ENGINE_COPY1  ] = &nvc0_copy1_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nva3_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] = &nvc0_perfmon_oclass;
		break;
	case 0xd9:
		device->cname = "GF119";
@@ -291,6 +299,7 @@ nvc0_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_PPP    ] = &nvc0_ppp_oclass;
		device->oclass[NVDEV_ENGINE_COPY0  ] = &nvc0_copy0_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nvd0_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] = &nvc0_perfmon_oclass;
		break;
	case 0xd7:
		device->cname = "GF117";
@@ -319,6 +328,7 @@ nvc0_identify(struct nouveau_device *device)
		device->oclass[NVDEV_ENGINE_PPP    ] = &nvc0_ppp_oclass;
		device->oclass[NVDEV_ENGINE_COPY0  ] = &nvc0_copy0_oclass;
		device->oclass[NVDEV_ENGINE_DISP   ] = &nvd0_disp_oclass;
		device->oclass[NVDEV_ENGINE_PERFMON] = &nvc0_perfmon_oclass;
		break;
	default:
		nv_fatal(device, "unknown Fermi chipset\n");
Loading