this series makes use of the load counters we can use to get information about the current load of the gpu. This series includes the needed pmu bits and a debugfs interface to read them out. Currently the values are between 0 and 255, because it is much easier to implement it this way on the pmu. Karol Herbst (4): subdev/pmu/fuc: add gk104 pmu/fuc: add macros for pdaemon pwr counters subdev/pmu/fuc: implement perf nouveau/debugfs: add interface for current load drm/nouveau/include/nvif/device.h | 1 + drm/nouveau/include/nvkm/subdev/pmu.h | 10 + drm/nouveau/nouveau_debugfs.c | 23 + drm/nouveau/nvkm/subdev/pmu/base.c | 18 + drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h | 788 ++++++----- drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h | 740 +++++----- drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4 | 70 + drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h | 1869 ++++++++++++++++++++++++++ drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h | 710 ++++++---- drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h | 755 ++++++----- drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc | 24 + drm/nouveau/nvkm/subdev/pmu/fuc/os.h | 4 + drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc | 148 ++ drm/nouveau/nvkm/subdev/pmu/gk104.c | 4 +- drm/nouveau/nvkm/subdev/pmu/gk110.c | 6 +- 15 files changed, 3879 insertions(+), 1291 deletions(-) create mode 100644 drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4 create mode 100644 drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h -- 2.6.2
From: Karol Herbst <git at karolherbst.de>
we need this, because since kepler there is PCOPY2 and this is needed for the
counters later in this series
---
drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4 | 70 +
drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h | 1795 ++++++++++++++++++++++++++
drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc | 1 +
drm/nouveau/nvkm/subdev/pmu/gk104.c | 4 +-
drm/nouveau/nvkm/subdev/pmu/gk110.c | 6 +-
5 files changed, 1870 insertions(+), 6 deletions(-)
create mode 100644 drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4
create mode 100644 drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h
diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4
b/drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4
new file mode 100644
index 0000000..01e37ce
--- /dev/null
+++ b/drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2013 Red Hat Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
"Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: Ben Skeggs
+ */
+
+#define NVKM_PPWR_CHIPSET GK104
+#define HW_TICKS_PER_US 324
+
+//#define NVKM_FALCON_PC24
+#define NVKM_FALCON_UNSHIFTED_IO
+//#define NVKM_FALCON_MMIO_UAS
+//#define NVKM_FALCON_MMIO_TRAP
+
+#include "macros.fuc"
+
+.section #gk104_pmu_data
+#define INCLUDE_PROC
+#include "kernel.fuc"
+#include "arith.fuc"
+#include "host.fuc"
+#include "memx.fuc"
+#include "perf.fuc"
+#include "i2c_.fuc"
+#include "test.fuc"
+#include "idle.fuc"
+#undef INCLUDE_PROC
+
+#define INCLUDE_DATA
+#include "kernel.fuc"
+#include "arith.fuc"
+#include "host.fuc"
+#include "memx.fuc"
+#include "perf.fuc"
+#include "i2c_.fuc"
+#include "test.fuc"
+#include "idle.fuc"
+#undef INCLUDE_DATA
+.align 256
+
+.section #gk104_pmu_code
+#define INCLUDE_CODE
+#include "kernel.fuc"
+#include "arith.fuc"
+#include "host.fuc"
+#include "memx.fuc"
+#include "perf.fuc"
+#include "i2c_.fuc"
+#include "test.fuc"
+#include "idle.fuc"
+#undef INCLUDE_CODE
+.align 256
diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h
b/drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h
new file mode 100644
index 0000000..ca7f2b8
--- /dev/null
+++ b/drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h
@@ -0,0 +1,1795 @@
+uint32_t gk104_pmu_data[] = {
+/* 0x0000: proc_kern */
+ 0x52544e49,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+/* 0x0058: proc_list_head */
+ 0x54534f48,
+ 0x0000049d,
+ 0x00000446,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x584d454d,
+ 0x0000068b,
+ 0x0000067d,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x46524550,
+ 0x0000068f,
+ 0x0000068d,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x5f433249,
+ 0x00000aaa,
+ 0x0000094d,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x54534554,
+ 0x00000acd,
+ 0x00000aac,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x454c4449,
+ 0x00000ad9,
+ 0x00000ad7,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+/* 0x0268: proc_list_tail */
+/* 0x0268: time_prev */
+ 0x00000000,
+/* 0x026c: time_next */
+ 0x00000000,
+/* 0x0270: fifo_queue */
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+/* 0x02f0: rfifo_queue */
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+/* 0x0370: memx_func_head */
+ 0x00000001,
+ 0x00000000,
+ 0x000004d3,
+/* 0x037c: memx_func_next */
+ 0x00000002,
+ 0x00000000,
+ 0x00000554,
+ 0x00000003,
+ 0x00000002,
+ 0x000005d8,
+ 0x00040004,
+ 0x00000000,
+ 0x000005f4,
+ 0x00010005,
+ 0x00000000,
+ 0x0000060e,
+ 0x00010006,
+ 0x00000000,
+ 0x000005d3,
+ 0x00000007,
+ 0x00000000,
+ 0x00000619,
+/* 0x03c4: memx_func_tail */
+/* 0x03c4: memx_ts_start */
+ 0x00000000,
+/* 0x03c8: memx_ts_end */
+ 0x00000000,
+/* 0x03cc: memx_data_head */
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+/* 0x0bcc: memx_data_tail */
+/* 0x0bcc: memx_train_head */
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+/* 0x0ccc: memx_train_tail */
+/* 0x0ccc: i2c_scl_map */
+ 0x00000400,
+ 0x00000800,
+ 0x00001000,
+ 0x00002000,
+ 0x00004000,
+ 0x00008000,
+ 0x00010000,
+ 0x00020000,
+ 0x00040000,
+ 0x00080000,
+/* 0x0cf4: i2c_sda_map */
+ 0x00100000,
+ 0x00200000,
+ 0x00400000,
+ 0x00800000,
+ 0x01000000,
+ 0x02000000,
+ 0x04000000,
+ 0x08000000,
+ 0x10000000,
+ 0x20000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+};
+
+uint32_t gk104_pmu_code[] = {
+ 0x034d0ef5,
+/* 0x0004: rd32 */
+ 0x07a007f1,
+ 0xbd000ed0,
+ 0x01d7f004,
+ 0xf101d3f0,
+ 0xd007ac07,
+ 0x04bd000d,
+/* 0x001c: rd32_wait */
+ 0x07acd7f1,
+ 0xf100ddcf,
+ 0xf47000d4,
+ 0xd7f1f51b,
+ 0xddcf07a4,
+/* 0x0033: wr32 */
+ 0xf100f800,
+ 0xd007a007,
+ 0x04bd000e,
+ 0x07a407f1,
+ 0xbd000dd0,
+ 0x02d7f004,
+ 0xf0f0d5f0,
+ 0x07f101d3,
+ 0x0dd007ac,
+/* 0x0057: wr32_wait */
+ 0xf104bd00,
+ 0xcf07acd7,
+ 0xd4f100dd,
+ 0x1bf47000,
+/* 0x0067: nsec */
+ 0xf900f8f5,
+ 0xf080f990,
+ 0x88cf2c87,
+/* 0x0071: nsec_loop */
+ 0x2c97f000,
+ 0xbb0099cf,
+ 0x9eb80298,
+ 0xf41ef406,
+ 0x90fc80fc,
+/* 0x0086: wait */
+ 0x90f900f8,
+ 0x87f080f9,
+ 0x0088cf2c,
+/* 0x0090: wait_loop */
+ 0xf402eeb9,
+ 0xdab90421,
+ 0x04adfd02,
+ 0xf406acb8,
+ 0x97f0120b,
+ 0x0099cf2c,
+ 0xb80298bb,
+ 0x1ef4069b,
+/* 0x00b1: wait_done */
+ 0xfc80fce2,
+/* 0x00b7: intr_watchdog */
+ 0x9800f890,
+ 0x96b003e9,
+ 0x2a0bf400,
+ 0xbb9a0a98,
+ 0x1cf4029a,
+ 0x01d7f00f,
+ 0x028c21f5,
+ 0x0ef494bd,
+/* 0x00d5: intr_watchdog_next_time */
+ 0x9b0a9815,
+ 0xf400a6b0,
+ 0x9ab8090b,
+ 0x061cf406,
+/* 0x00e4: intr_watchdog_next_time_set */
+/* 0x00e7: intr_watchdog_next_proc */
+ 0x809b0980,
+ 0xe0b603e9,
+ 0x68e6b158,
+ 0xc61bf402,
+/* 0x00f6: intr */
+ 0x00f900f8,
+ 0x80f904bd,
+ 0xa0f990f9,
+ 0xc0f9b0f9,
+ 0xe0f9d0f9,
+ 0xf7f0f0f9,
+ 0x0188fe00,
+ 0x87f180f9,
+ 0x88cf05d0,
+ 0x0180b600,
+ 0x05d007f1,
+ 0xbd0008d0,
+ 0x0887f004,
+ 0xc40088cf,
+ 0x0bf40289,
+ 0x9b008020,
+ 0xf458e7f0,
+ 0x0998b721,
+ 0x0096b09b,
+ 0xf00e0bf4,
+ 0x09d03407,
+ 0x8004bd00,
+/* 0x014e: intr_skip_watchdog */
+ 0x89e49a09,
+ 0x0bf40800,
+ 0x8897f13c,
+ 0x0099cf06,
+ 0xf4029ac4,
+ 0xc7f1260b,
+ 0xcccf04c0,
+ 0xf1c0f900,
+ 0xf14f48e7,
+ 0xf05453e3,
+ 0x21f500d7,
+ 0xc0fc02f1,
+ 0x04c007f1,
+ 0xbd000cd0,
+/* 0x0185: intr_subintr_skip_fifo */
+ 0x8807f104,
+ 0x0009d006,
+/* 0x018e: intr_skip_subintr */
+ 0x89c404bd,
+ 0x070bf420,
+ 0xffbfa4f1,
+/* 0x0198: intr_skip_pause */
+ 0xf44089c4,
+ 0xa4f1070b,
+/* 0x01a2: intr_skip_user0 */
+ 0x07f0ffbf,
+ 0x0008d004,
+ 0x80fc04bd,
+ 0xfc0088fe,
+ 0xfce0fcf0,
+ 0xfcc0fcd0,
+ 0xfca0fcb0,
+ 0xfc80fc90,
+ 0x0032f400,
+/* 0x01c6: ticks_from_ns */
+ 0xc0f901f8,
+ 0xd7f1b0f9,
+ 0xd3f00144,
+ 0xb321f500,
+ 0xe8ccec03,
+ 0x00b4b003,
+ 0xec120bf4,
+ 0xf103e8ee,
+ 0xf00144d7,
+ 0x21f500d3,
+/* 0x01ee: ticks_from_ns_quit */
+ 0xceb903b3,
+ 0xfcb0fc02,
+/* 0x01f7: ticks_from_us */
+ 0xf900f8c0,
+ 0xf1b0f9c0,
+ 0xf00144d7,
+ 0x21f500d3,
+ 0xceb903b3,
+ 0x00b4b002,
+ 0xbd050bf4,
+/* 0x0211: ticks_from_us_quit */
+ 0xfcb0fce4,
+/* 0x0217: ticks_to_us */
+ 0xf100f8c0,
+ 0xf00144d7,
+ 0xedff00d3,
+/* 0x0223: timer */
+ 0xf900f8ec,
+ 0xf480f990,
+ 0xf8981032,
+ 0x0086b003,
+ 0xbd531cf4,
+ 0x3807f084,
+ 0xbd0008d0,
+ 0x3487f004,
+ 0x980088cf,
+ 0x98bb9a09,
+ 0x00e9bb02,
+ 0xf003fe80,
+ 0x88cf0887,
+ 0x0284f000,
+ 0xf0201bf4,
+ 0x88cf3487,
+ 0x06e0b800,
+ 0xb8090bf4,
+ 0x1cf406e8,
+/* 0x026d: timer_reset */
+ 0x3407f00e,
+ 0xbd000ed0,
+ 0x9a0e8004,
+/* 0x0278: timer_enable */
+ 0xf00187f0,
+ 0x08d03807,
+/* 0x0283: timer_done */
+ 0xf404bd00,
+ 0x80fc1031,
+ 0x00f890fc,
+/* 0x028c: send_proc */
+ 0x90f980f9,
+ 0x9805e898,
+ 0x86f004e9,
+ 0x0689b804,
+ 0xc42a0bf4,
+ 0x88940398,
+ 0x1880b604,
+ 0x98008ebb,
+ 0x8a8000fa,
+ 0x018d8000,
+ 0x80028c80,
+ 0x90b6038b,
+ 0x0794f001,
+ 0xf404e980,
+/* 0x02c6: send_done */
+ 0x90fc0231,
+ 0x00f880fc,
+/* 0x02cc: find */
+ 0x87f080f9,
+ 0x0131f458,
+/* 0x02d4: find_loop */
+ 0xb8008a98,
+ 0x0bf406ae,
+ 0x5880b610,
+ 0x026886b1,
+ 0xf4f01bf4,
+/* 0x02ea: find_done */
+ 0x8eb90132,
+ 0xf880fc02,
+/* 0x02f1: send */
+ 0xcc21f500,
+ 0x9701f402,
+/* 0x02fa: recv */
+ 0x90f900f8,
+ 0xe89880f9,
+ 0x04e99805,
+ 0xb80132f4,
+ 0x0bf40689,
+ 0x0389c43d,
+ 0xf00180b6,
+ 0xe8800784,
+ 0x02ea9805,
+ 0x8ffef0f9,
+ 0xb9f0f901,
+ 0x999402ef,
+ 0x00e9bb04,
+ 0x9818e0b6,
+ 0xec9803eb,
+ 0x01ed9802,
+ 0xf900ee98,
+ 0xfef0fca5,
+ 0x31f400f8,
+/* 0x0347: recv_done */
+ 0xfcf0fc01,
+ 0xf890fc80,
+/* 0x034d: init */
+ 0x0817f100,
+ 0x0011cf01,
+ 0x010911e7,
+ 0xfe0814b6,
+ 0x17f10014,
+ 0x13f000e0,
+ 0x1c07f000,
+ 0xbd0001d0,
+ 0xff17f004,
+ 0xd01407f0,
+ 0x04bd0001,
+ 0xf10217f0,
+ 0xf0080015,
+ 0x01d01007,
+ 0xf104bd00,
+ 0xf000f617,
+ 0x10fe0013,
+ 0x1031f400,
+ 0xf00117f0,
+ 0x01d03807,
+ 0xf004bd00,
+/* 0x03a2: init_proc */
+ 0xf19858f7,
+ 0x0016b001,
+ 0xf9fa0bf4,
+ 0x58f0b615,
+/* 0x03b3: mulu32_32_64 */
+ 0xf9f20ef4,
+ 0xf920f910,
+ 0x9540f930,
+ 0xd29510e1,
+ 0xbdc4bd10,
+ 0xc0edffb4,
+ 0xb9301dff,
+ 0x34f10234,
+ 0x34b6ffff,
+ 0x1045b610,
+ 0xbb00c3bb,
+ 0xe2ff01b4,
+ 0x0234b930,
+ 0xffff34f1,
+ 0xb61034b6,
+ 0xc3bb1045,
+ 0x01b4bb00,
+ 0xbb3012ff,
+ 0x40fc00b3,
+ 0x20fc30fc,
+ 0x00f810fc,
+/* 0x0404: host_send */
+ 0x04b017f1,
+ 0xf10011cf,
+ 0xcf04a027,
+ 0x12b80022,
+ 0x2f0bf406,
+ 0x94071ec4,
+ 0xe0b704ee,
+ 0xeb980270,
+ 0x02ec9803,
+ 0x9801ed98,
+ 0x21f500ee,
+ 0x10b602f1,
+ 0x0f1ec401,
+ 0x04b007f1,
+ 0xbd000ed0,
+ 0xc30ef404,
+/* 0x0444: host_send_done */
+/* 0x0446: host_recv */
+ 0x17f100f8,
+ 0x13f14e49,
+ 0xe1b85254,
+ 0xb30bf406,
+/* 0x0454: host_recv_wait */
+ 0x04cc17f1,
+ 0xf10011cf,
+ 0xcf04c827,
+ 0x16f00022,
+ 0x0612b808,
+ 0xc4ec0bf4,
+ 0x34b60723,
+ 0xf030b704,
+ 0x033b8002,
+ 0x80023c80,
+ 0x3e80013d,
+ 0x0120b600,
+ 0xf10f24f0,
+ 0xd004c807,
+ 0x04bd0002,
+ 0xf04027f0,
+ 0x02d00007,
+ 0xf804bd00,
+/* 0x049d: host_init */
+ 0x8017f100,
+ 0x1014b600,
+ 0x027015f1,
+ 0x04d007f1,
+ 0xbd0001d0,
+ 0x8017f104,
+ 0x1014b600,
+ 0x02f015f1,
+ 0x04dc07f1,
+ 0xbd0001d0,
+ 0x0117f004,
+ 0x04c407f1,
+ 0xbd0001d0,
+/* 0x04d3: memx_func_enter */
+ 0xf100f804,
+ 0xf1162067,
+ 0xf1f55d77,
+ 0xb9ffff73,
+ 0x21f4026e,
+ 0x02d8b904,
+ 0xf90487fd,
+ 0xfc80f960,
+ 0xf4e0fcd0,
+ 0x77f13321,
+ 0x73f1fffe,
+ 0x6eb9ffff,
+ 0x0421f402,
+ 0xfd02d8b9,
+ 0x60f90487,
+ 0xd0fc80f9,
+ 0x21f4e0fc,
+ 0xf067f133,
+ 0x026eb926,
+ 0xb90421f4,
+ 0x87fd02d8,
+ 0xf960f904,
+ 0xfcd0fc80,
+ 0x3321f4e0,
+ 0xf10467f0,
+ 0xd007e007,
+ 0x04bd0006,
+/* 0x053c: memx_func_enter_wait */
+ 0x07c067f1,
+ 0xf00066cf,
+ 0x0bf40464,
+ 0x2c67f0f6,
+ 0x800066cf,
+ 0x00f8f106,
+/* 0x0554: memx_func_leave */
+ 0xcf2c67f0,
+ 0x06800066,
+ 0x0467f0f2,
+ 0x07e407f1,
+ 0xbd0006d0,
+/* 0x0569: memx_func_leave_wait */
+ 0xc067f104,
+ 0x0066cf07,
+ 0xf40464f0,
+ 0x67f1f61b,
+ 0x77f126f0,
+ 0x73f00001,
+ 0x026eb900,
+ 0xb90421f4,
+ 0x87fd02d8,
+ 0xf960f905,
+ 0xfcd0fc80,
+ 0x3321f4e0,
+ 0x162067f1,
+ 0xf4026eb9,
+ 0xd8b90421,
+ 0x0587fd02,
+ 0x80f960f9,
+ 0xe0fcd0fc,
+ 0xf13321f4,
+ 0xf00aa277,
+ 0x6eb90073,
+ 0x0421f402,
+ 0xfd02d8b9,
+ 0x60f90587,
+ 0xd0fc80f9,
+ 0x21f4e0fc,
+/* 0x05d3: memx_func_wait_vblank */
+ 0xb600f833,
+ 0x00f80410,
+/* 0x05d8: memx_func_wr32 */
+ 0x98001698,
+ 0x10b60115,
+ 0xf960f908,
+ 0xfcd0fc50,
+ 0x3321f4e0,
+ 0xf40242b6,
+ 0x00f8e91b,
+/* 0x05f4: memx_func_wait */
+ 0xcf2c87f0,
+ 0x1e980088,
+ 0x011d9800,
+ 0x98021c98,
+ 0x10b6031b,
+ 0x8621f410,
+/* 0x060e: memx_func_delay */
+ 0x1e9800f8,
+ 0x0410b600,
+ 0xf86721f4,
+/* 0x0619: memx_func_train */
+/* 0x061b: memx_exec */
+ 0xf900f800,
+ 0xb9d0f9e0,
+ 0xb2b902c1,
+/* 0x0625: memx_exec_next */
+ 0x00139802,
+ 0xe70410b6,
+ 0xe701f034,
+ 0xb601e033,
+ 0x30f00132,
+ 0xde35980c,
+ 0x12b855f9,
+ 0xe41ef406,
+ 0x98f10b98,
+ 0xcbbbf20c,
+ 0xc4b7f102,
+ 0x00bbcf07,
+ 0xe0fcd0fc,
+ 0x02f121f5,
+/* 0x065e: memx_info */
+ 0xc67000f8,
+ 0x0e0bf401,
+/* 0x0664: memx_info_data */
+ 0x03ccc7f1,
+ 0x0800b7f1,
+/* 0x066f: memx_info_train */
+ 0xf10b0ef4,
+ 0xf10bccc7,
+/* 0x0677: memx_info_send */
+ 0xf50100b7,
+ 0xf802f121,
+/* 0x067d: memx_recv */
+ 0x01d6b000,
+ 0xb09b0bf4,
+ 0x0bf400d6,
+/* 0x068b: memx_init */
+ 0xf800f8d8,
+/* 0x068d: perf_recv */
+/* 0x068f: perf_init */
+ 0xf800f800,
+/* 0x0691: i2c_drive_scl */
+ 0x0036b000,
+ 0xf10e0bf4,
+ 0xd007e007,
+ 0x04bd0001,
+/* 0x06a2: i2c_drive_scl_lo */
+ 0x07f100f8,
+ 0x01d007e4,
+ 0xf804bd00,
+/* 0x06ad: i2c_drive_sda */
+ 0x0036b000,
+ 0xf10e0bf4,
+ 0xd007e007,
+ 0x04bd0002,
+/* 0x06be: i2c_drive_sda_lo */
+ 0x07f100f8,
+ 0x02d007e4,
+ 0xf804bd00,
+/* 0x06c9: i2c_sense_scl */
+ 0x0132f400,
+ 0x07c437f1,
+ 0xfd0033cf,
+ 0x0bf40431,
+ 0x0131f406,
+/* 0x06dc: i2c_sense_scl_done */
+/* 0x06de: i2c_sense_sda */
+ 0x32f400f8,
+ 0xc437f101,
+ 0x0033cf07,
+ 0xf40432fd,
+ 0x31f4060b,
+/* 0x06f1: i2c_sense_sda_done */
+/* 0x06f3: i2c_raise_scl */
+ 0xf900f801,
+ 0x9847f140,
+ 0x0137f008,
+ 0x069121f5,
+/* 0x0700: i2c_raise_scl_wait */
+ 0x03e8e7f1,
+ 0xf56721f4,
+ 0xf406c921,
+ 0x42b60901,
+ 0xef1bf401,
+/* 0x0714: i2c_raise_scl_done */
+ 0x00f840fc,
+/* 0x0718: i2c_start */
+ 0x06c921f5,
+ 0xf50d11f4,
+ 0xf406de21,
+ 0x0ef40611,
+/* 0x0729: i2c_start_rep */
+ 0x0037f030,
+ 0x069121f5,
+ 0xf50137f0,
+ 0xbb06ad21,
+ 0x65b60076,
+ 0x9450f904,
+ 0x56bb0465,
+ 0xfd50bd02,
+ 0x50fc0475,
+ 0x06f321f5,
+ 0xf40464b6,
+/* 0x0756: i2c_start_send */
+ 0x37f01f11,
+ 0xad21f500,
+ 0x88e7f106,
+ 0x6721f413,
+ 0xf50037f0,
+ 0xf1069121,
+ 0xf41388e7,
+/* 0x0772: i2c_start_out */
+ 0x00f86721,
+/* 0x0774: i2c_stop */
+ 0xf50037f0,
+ 0xf0069121,
+ 0x21f50037,
+ 0xe7f106ad,
+ 0x21f403e8,
+ 0x0137f067,
+ 0x069121f5,
+ 0x1388e7f1,
+ 0xf06721f4,
+ 0x21f50137,
+ 0xe7f106ad,
+ 0x21f41388,
+/* 0x07a7: i2c_bitw */
+ 0xf500f867,
+ 0xf106ad21,
+ 0xf403e8e7,
+ 0x76bb6721,
+ 0x0465b600,
+ 0x659450f9,
+ 0x0256bb04,
+ 0x75fd50bd,
+ 0xf550fc04,
+ 0xb606f321,
+ 0x11f40464,
+ 0x88e7f118,
+ 0x6721f413,
+ 0xf50037f0,
+ 0xf1069121,
+ 0xf41388e7,
+/* 0x07e6: i2c_bitw_out */
+ 0x00f86721,
+/* 0x07e8: i2c_bitr */
+ 0xf50137f0,
+ 0xf106ad21,
+ 0xf403e8e7,
+ 0x76bb6721,
+ 0x0465b600,
+ 0x659450f9,
+ 0x0256bb04,
+ 0x75fd50bd,
+ 0xf550fc04,
+ 0xb606f321,
+ 0x11f40464,
+ 0xde21f51b,
+ 0x0037f006,
+ 0x069121f5,
+ 0x1388e7f1,
+ 0xf06721f4,
+ 0x31f4013c,
+/* 0x082d: i2c_bitr_done */
+/* 0x082f: i2c_get_byte */
+ 0xf000f801,
+ 0x47f00057,
+/* 0x0835: i2c_get_byte_next */
+ 0x0154b608,
+ 0xb60076bb,
+ 0x50f90465,
+ 0xbb046594,
+ 0x50bd0256,
+ 0xfc0475fd,
+ 0xe821f550,
+ 0x0464b607,
+ 0xfd2b11f4,
+ 0x42b60553,
+ 0xd81bf401,
+ 0xbb0137f0,
+ 0x65b60076,
+ 0x9450f904,
+ 0x56bb0465,
+ 0xfd50bd02,
+ 0x50fc0475,
+ 0x07a721f5,
+/* 0x087f: i2c_get_byte_done */
+ 0xf80464b6,
+/* 0x0881: i2c_put_byte */
+ 0x0847f000,
+/* 0x0884: i2c_put_byte_next */
+ 0xff0142b6,
+ 0x76bb3854,
+ 0x0465b600,
+ 0x659450f9,
+ 0x0256bb04,
+ 0x75fd50bd,
+ 0xf550fc04,
+ 0xb607a721,
+ 0x11f40464,
+ 0x0046b034,
+ 0xbbd81bf4,
+ 0x65b60076,
+ 0x9450f904,
+ 0x56bb0465,
+ 0xfd50bd02,
+ 0x50fc0475,
+ 0x07e821f5,
+ 0xf40464b6,
+ 0x76bb0f11,
+ 0x0136b000,
+ 0xf4061bf4,
+/* 0x08da: i2c_put_byte_done */
+ 0x00f80132,
+/* 0x08dc: i2c_addr */
+ 0xb60076bb,
+ 0x50f90465,
+ 0xbb046594,
+ 0x50bd0256,
+ 0xfc0475fd,
+ 0x1821f550,
+ 0x0464b607,
+ 0xe72911f4,
+ 0xb6012ec3,
+ 0x53fd0134,
+ 0x0076bb05,
+ 0xf90465b6,
+ 0x04659450,
+ 0xbd0256bb,
+ 0x0475fd50,
+ 0x21f550fc,
+ 0x64b60881,
+/* 0x0921: i2c_addr_done */
+/* 0x0923: i2c_acquire_addr */
+ 0xc700f804,
+ 0xe4b6f8ce,
+ 0x14e0b705,
+/* 0x092f: i2c_acquire */
+ 0xf500f8d0,
+ 0xf4092321,
+ 0xd9f00421,
+ 0x3321f403,
+/* 0x093e: i2c_release */
+ 0x21f500f8,
+ 0x21f40923,
+ 0x03daf004,
+ 0xf83321f4,
+/* 0x094d: i2c_recv */
+ 0x0132f400,
+ 0xb6f8c1c7,
+ 0x16b00214,
+ 0x3a1ff528,
+ 0xf413a001,
+ 0x0032980c,
+ 0x0ccc13a0,
+ 0xf4003198,
+ 0xd0f90231,
+ 0xd0f9e0f9,
+ 0x000067f1,
+ 0x100063f1,
+ 0xbb016792,
+ 0x65b60076,
+ 0x9450f904,
+ 0x56bb0465,
+ 0xfd50bd02,
+ 0x50fc0475,
+ 0x092f21f5,
+ 0xfc0464b6,
+ 0x00d6b0d0,
+ 0x00b31bf5,
+ 0xbb0057f0,
+ 0x65b60076,
+ 0x9450f904,
+ 0x56bb0465,
+ 0xfd50bd02,
+ 0x50fc0475,
+ 0x08dc21f5,
+ 0xf50464b6,
+ 0xc700d011,
+ 0x76bbe0c5,
+ 0x0465b600,
+ 0x659450f9,
+ 0x0256bb04,
+ 0x75fd50bd,
+ 0xf550fc04,
+ 0xb6088121,
+ 0x11f50464,
+ 0x57f000ad,
+ 0x0076bb01,
+ 0xf90465b6,
+ 0x04659450,
+ 0xbd0256bb,
+ 0x0475fd50,
+ 0x21f550fc,
+ 0x64b608dc,
+ 0x8a11f504,
+ 0x0076bb00,
+ 0xf90465b6,
+ 0x04659450,
+ 0xbd0256bb,
+ 0x0475fd50,
+ 0x21f550fc,
+ 0x64b6082f,
+ 0x6a11f404,
+ 0xbbe05bcb,
+ 0x65b60076,
+ 0x9450f904,
+ 0x56bb0465,
+ 0xfd50bd02,
+ 0x50fc0475,
+ 0x077421f5,
+ 0xb90464b6,
+ 0x74bd025b,
+/* 0x0a53: i2c_recv_not_rd08 */
+ 0xb0430ef4,
+ 0x1bf401d6,
+ 0x0057f03d,
+ 0x08dc21f5,
+ 0xc73311f4,
+ 0x21f5e0c5,
+ 0x11f40881,
+ 0x0057f029,
+ 0x08dc21f5,
+ 0xc71f11f4,
+ 0x21f5e0b5,
+ 0x11f40881,
+ 0x7421f515,
+ 0xc774bd07,
+ 0x1bf408c5,
+ 0x0232f409,
+/* 0x0a93: i2c_recv_not_wr08 */
+/* 0x0a93: i2c_recv_done */
+ 0xc7030ef4,
+ 0x21f5f8ce,
+ 0xe0fc093e,
+ 0x12f4d0fc,
+ 0x027cb90a,
+ 0x02f121f5,
+/* 0x0aa8: i2c_recv_exit */
+/* 0x0aaa: i2c_init */
+ 0x00f800f8,
+/* 0x0aac: test_recv */
+ 0x05d817f1,
+ 0xb60011cf,
+ 0x07f10110,
+ 0x01d005d8,
+ 0xf104bd00,
+ 0xf1d900e7,
+ 0xf5134fe3,
+ 0xf8022321,
+/* 0x0acd: test_init */
+ 0x00e7f100,
+ 0x2321f508,
+/* 0x0ad7: idle_recv */
+ 0xf800f802,
+/* 0x0ad9: idle */
+ 0x0031f400,
+ 0x05d417f1,
+ 0xb60011cf,
+ 0x07f10110,
+ 0x01d005d4,
+/* 0x0aef: idle_loop */
+ 0xf004bd00,
+ 0x32f45817,
+/* 0x0af5: idle_proc */
+/* 0x0af5: idle_proc_exec */
+ 0xb910f902,
+ 0x21f5021e,
+ 0x10fc02fa,
+ 0xf40911f4,
+ 0x0ef40231,
+/* 0x0b09: idle_proc_next */
+ 0x5810b6ef,
+ 0xf4061fb8,
+ 0x02f4e61b,
+ 0x0028f4dd,
+ 0x00c10ef4,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+};
diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc
b/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc
index 96fc984..c5ec61f 100644
--- a/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc
+++ b/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc
@@ -25,6 +25,7 @@
#define GT215 0xa3
#define GF100 0xc0
#define GF119 0xd9
+#define GK104 0xe4
#define GK208 0x108
#include "os.h"
diff --git a/drm/nouveau/nvkm/subdev/pmu/gk104.c
b/drm/nouveau/nvkm/subdev/pmu/gk104.c
index ce7de3e..3bd7be6 100644
--- a/drm/nouveau/nvkm/subdev/pmu/gk104.c
+++ b/drm/nouveau/nvkm/subdev/pmu/gk104.c
@@ -21,10 +21,8 @@
*
* Authors: Ben Skeggs
*/
-#define gf119_pmu_code gk104_pmu_code
-#define gf119_pmu_data gk104_pmu_data
#include "priv.h"
-#include "fuc/gf119.fuc4.h"
+#include "fuc/gk104.fuc4.h"
static void
gk104_pmu_pgob(struct nvkm_pmu *pmu, bool enable)
diff --git a/drm/nouveau/nvkm/subdev/pmu/gk110.c
b/drm/nouveau/nvkm/subdev/pmu/gk110.c
index ae25524..5b0796a 100644
--- a/drm/nouveau/nvkm/subdev/pmu/gk110.c
+++ b/drm/nouveau/nvkm/subdev/pmu/gk110.c
@@ -21,10 +21,10 @@
*
* Authors: Ben Skeggs
*/
-#define gf119_pmu_code gk110_pmu_code
-#define gf119_pmu_data gk110_pmu_data
+#define gk104_pmu_code gk110_pmu_code
+#define gk104_pmu_data gk110_pmu_data
#include "priv.h"
-#include "fuc/gf119.fuc4.h"
+#include "fuc/gk104.fuc4.h"
#include <subdev/timer.h>
--
2.6.2
Karol Herbst
2015-Oct-26 18:13 UTC
[Nouveau] [PATCH 2/4] pmu/fuc: add macros for pdaemon pwr counters
From: Karol Herbst <git at karolherbst.de> --- drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc b/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc index c5ec61f..86b8fd4 100644 --- a/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc +++ b/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc @@ -66,6 +66,29 @@ #define NV_PPWR_RFIFO_GET 0x04cc #define NV_PPWR_H2D 0x04d0 #define NV_PPWR_D2H 0x04dc +#define NV_PPWR_COUNTER_MASK(i) (0x10 * (i) + 0x0504) +#define NV_PPWR_COUNTER_COUNT(i) (0x10 * (i) + 0x0508) +#define NV_PPWR_COUNTER_COUNT_RESET 0x80000000 +#define NV_PPWR_COUNTER_MODE(i) (0x10 * (i) + 0x050c) +#define NV_PPWR_COUNTER_MODE_NEVER 0 +#define NV_PPWR_COUNTER_MODE_IF_ALL 1 +#define NV_PPWR_COUNTER_MODE_IF_NOT_ALL 2 +#define NV_PPWR_COUNTER_MODE_ALWAYS 3 +#define NV_PPWR_COUNTER_SIG_GR_IDLE 0x00000001 +#define NV_PPWR_COUNTER_SIG_GR_HUB_IDLE 0x00000002 +#define NV_PPWR_COUNTER_SIG_GR_GPC_IDLE 0x00000004 +#define NV_PPWR_COUNTER_SIG_GR_ROP_IDLE 0x00000008 +#define NV_PPWR_COUNTER_SIG_PVLD_IDLE 0x00000010 +#define NV_PPWR_COUNTER_SIG_PPDEC_IDLE 0x00000020 +#define NV_PPWR_COUNTER_SIG_PPPP_IDLE 0x00000040 +#define NV_PPWR_COUNTER_SIG_BFB_PART0_REQ 0x00000080 +#define NV_PPWR_COUNTER_SIG_FB_PART0_REQ 0x00000100 +#define NV_PPWR_COUNTER_SIG_PMFB 0x00001000 +#define NV_PPWR_COUNTER_SIG_PVENC 0x00020000 +#define NV_PPWR_COUNTER_SIG_PCOPY0_IDLE 0x00080000 +#define NV_PPWR_COUNTER_SIG_PCOPY1_IDLE 0x00100000 +#define NV_PPWR_COUNTER_SIG_PCOPY2_IDLE 0x00200000 +#define NV_PPWR_COUNTER_SIG_PCIE 0x20000000 #if NVKM_PPWR_CHIPSET < GK208 #define NV_PPWR_DSCRATCH(i) (4 * (i) + 0x05d0) #endif -- 2.6.2
From: Karol Herbst <git at karolherbst.de>
---
drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h | 788 +++++++++++++++------------
drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h | 740 ++++++++++++++-----------
drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h | 740 ++++++++++++++-----------
drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h | 710 ++++++++++++++----------
drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h | 755 ++++++++++++++-----------
drm/nouveau/nvkm/subdev/pmu/fuc/os.h | 4 +
drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc | 148 +++++
7 files changed, 2267 insertions(+), 1618 deletions(-)
diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h
b/drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h
index 302557c..cd1c8e5 100644
--- a/drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h
+++ b/drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h
@@ -68,7 +68,7 @@ uint32_t gf100_pmu_data[] = {
0x00000000,
0x00000000,
0x46524550,
- 0x00000762,
+ 0x00000875,
0x00000760,
0x00000000,
0x00000000,
@@ -90,8 +90,8 @@ uint32_t gf100_pmu_data[] = {
0x00000000,
0x00000000,
0x5f433249,
- 0x00000b92,
- 0x00000a35,
+ 0x00000d51,
+ 0x00000bf4,
0x00000000,
0x00000000,
0x00000000,
@@ -112,8 +112,8 @@ uint32_t gf100_pmu_data[] = {
0x00000000,
0x00000000,
0x54534554,
- 0x00000bbb,
- 0x00000b94,
+ 0x00000d7a,
+ 0x00000d53,
0x00000000,
0x00000000,
0x00000000,
@@ -134,8 +134,8 @@ uint32_t gf100_pmu_data[] = {
0x00000000,
0x00000000,
0x454c4449,
- 0x00000bc7,
- 0x00000bc5,
+ 0x00000d86,
+ 0x00000d84,
0x00000000,
0x00000000,
0x00000000,
@@ -834,7 +834,15 @@ uint32_t gf100_pmu_data[] = {
0x00000000,
0x00000000,
/* 0x0ccc: memx_train_tail */
-/* 0x0ccc: i2c_scl_map */
+/* 0x0ccc: perf_attr_start */
+/* 0x0ccc: perf_polling_period_us */
+ 0x000186a0,
+/* 0x0cd0: perf_eng_gr */
+/* 0x0cd1: perf_eng_vdec */
+/* 0x0cd2: perf_eng_mc */
+/* 0x0cd3: perf_eng_pcie */
+ 0x00000000,
+/* 0x0cd4: i2c_scl_map */
0x00001000,
0x00004000,
0x00010000,
@@ -845,7 +853,7 @@ uint32_t gf100_pmu_data[] = {
0x01000000,
0x04000000,
0x10000000,
-/* 0x0cf4: i2c_sda_map */
+/* 0x0cfc: i2c_sda_map */
0x00002000,
0x00008000,
0x00020000,
@@ -856,7 +864,7 @@ uint32_t gf100_pmu_data[] = {
0x02000000,
0x08000000,
0x20000000,
-/* 0x0d1c: i2c_ctrl */
+/* 0x0d24: i2c_ctrl */
0x0000e138,
0x0000e150,
0x0000e168,
@@ -912,8 +920,6 @@ uint32_t gf100_pmu_data[] = {
0x00000000,
0x00000000,
0x00000000,
- 0x00000000,
- 0x00000000,
};
uint32_t gf100_pmu_code[] = {
@@ -1456,400 +1462,468 @@ uint32_t gf100_pmu_code[] = {
/* 0x075e: memx_init */
0x00f800f8,
/* 0x0760: perf_recv */
-/* 0x0762: perf_init */
- 0x00f800f8,
-/* 0x0764: i2c_drive_scl */
- 0xf40036b0,
- 0x07f1110b,
- 0x04b607e0,
- 0x0001d006,
- 0x00f804bd,
-/* 0x0778: i2c_drive_scl_lo */
- 0x07e407f1,
+ 0xa7f110f9,
+ 0xa3f14f48,
+ 0xeab85453,
+ 0x441bf406,
+ 0xf401d6b0,
+ 0x0ef4060b,
+/* 0x0779: perf_load */
+ 0xbdb4bd50,
+ 0xd307f1c4,
+ 0x000c180c,
+ 0xc4b604bd,
+ 0xd207f108,
+ 0x000c180c,
+ 0xc4b604bd,
+ 0xd107f108,
+ 0x000c180c,
+ 0xc4b604bd,
+ 0xd007f108,
+ 0x000c180c,
+ 0x21f504bd,
+ 0x0ef40342,
+/* 0x07b1: perf_recv_not_host */
+ 0xca21f518,
+ 0xcc07f107,
+ 0x000e980c,
+ 0x21f504bd,
+ 0x21f50236,
+/* 0x07c6: perf_recv_exit */
+ 0x10fc0262,
+/* 0x07ca: perf_counter_readout */
+ 0xe7f100f8,
+ 0xe4b60508,
+ 0x00eecf06,
+ 0xf1ffeecc,
+ 0xb60518d7,
+ 0xddcf06d4,
+ 0xdcdeff00,
+ 0x0cd007f1,
+ 0xbd000d00,
+ 0x28d7f104,
+ 0x06d4b605,
+ 0xff00ddcf,
+ 0x07f1dcde,
+ 0x0d000cd1,
+ 0xf104bd00,
+ 0xb60538d7,
+ 0xddcf06d4,
+ 0xdcdeff00,
+ 0x0cd207f1,
+ 0xbd000d00,
+ 0x48d7f104,
+ 0x06d4b605,
+ 0xff00ddcf,
+ 0x07f1dcde,
+ 0x0d000cd3,
+ 0xf104bd00,
+ 0xf10000e7,
+ 0xf18000e3,
+ 0xb6050807,
+ 0x0ed00604,
+ 0xf104bd00,
+ 0xb6051807,
+ 0x0ed00604,
+ 0xf104bd00,
+ 0xb6052807,
+ 0x0ed00604,
+ 0xf104bd00,
+ 0xb6053807,
+ 0x0ed00604,
+ 0xf104bd00,
+ 0xb6054807,
+ 0x0ed00604,
+ 0xf804bd00,
+/* 0x0875: perf_init */
+ 0x03e7f100,
+ 0x00e3f000,
+ 0x050c07f1,
0xd00604b6,
- 0x04bd0001,
-/* 0x0786: i2c_drive_sda */
- 0x36b000f8,
- 0x110bf400,
- 0x07e007f1,
+ 0x04bd000e,
+ 0x0002e7f1,
+ 0xf100e3f0,
+ 0xb6051c07,
+ 0x0ed00604,
+ 0xf104bd00,
+ 0xb6052c07,
+ 0x0ed00604,
+ 0xf104bd00,
+ 0xb6053c07,
+ 0x0ed00604,
+ 0xf104bd00,
+ 0xb6054c07,
+ 0x0ed00604,
+ 0xf104bd00,
+ 0xf0000fe7,
+ 0x07f118e3,
+ 0x04b60514,
+ 0x000ed006,
+ 0xe7f104bd,
+ 0xe3f00070,
+ 0x2407f100,
+ 0x0604b605,
+ 0xbd000ed0,
+ 0x80e7f104,
+ 0x00e3f000,
+ 0x053407f1,
0xd00604b6,
- 0x04bd0002,
-/* 0x079a: i2c_drive_sda_lo */
- 0x07f100f8,
- 0x04b607e4,
- 0x0002d006,
- 0x00f804bd,
-/* 0x07a8: i2c_sense_scl */
- 0xf10132f4,
- 0xb607c437,
- 0x33cf0634,
- 0x0431fd00,
- 0xf4060bf4,
-/* 0x07be: i2c_sense_scl_done */
- 0x00f80131,
-/* 0x07c0: i2c_sense_sda */
- 0xf10132f4,
- 0xb607c437,
- 0x33cf0634,
- 0x0432fd00,
- 0xf4060bf4,
-/* 0x07d6: i2c_sense_sda_done */
- 0x00f80131,
-/* 0x07d8: i2c_raise_scl */
- 0x47f140f9,
- 0x37f00898,
- 0x6421f501,
-/* 0x07e5: i2c_raise_scl_wait */
- 0xe8e7f107,
- 0x7f21f403,
- 0x07a821f5,
- 0xb60901f4,
- 0x1bf40142,
-/* 0x07f9: i2c_raise_scl_done */
- 0xf840fcef,
-/* 0x07fd: i2c_start */
- 0xa821f500,
- 0x0d11f407,
- 0x07c021f5,
- 0xf40611f4,
-/* 0x080e: i2c_start_rep */
- 0x37f0300e,
- 0x6421f500,
- 0x0137f007,
- 0x078621f5,
- 0xb60076bb,
- 0x50f90465,
- 0xbb046594,
- 0x50bd0256,
- 0xfc0475fd,
- 0xd821f550,
- 0x0464b607,
-/* 0x083b: i2c_start_send */
- 0xf01f11f4,
- 0x21f50037,
- 0xe7f10786,
- 0x21f41388,
- 0x0037f07f,
- 0x076421f5,
- 0x1388e7f1,
-/* 0x0857: i2c_start_out */
- 0xf87f21f4,
-/* 0x0859: i2c_stop */
- 0x0037f000,
- 0x076421f5,
- 0xf50037f0,
- 0xf1078621,
- 0xf403e8e7,
- 0x37f07f21,
- 0x6421f501,
- 0x88e7f107,
- 0x7f21f413,
- 0xf50137f0,
- 0xf1078621,
- 0xf41388e7,
- 0x00f87f21,
-/* 0x088c: i2c_bitw */
- 0x078621f5,
+ 0x04bd000e,
+ 0x0000e7f1,
+ 0x2000e3f1,
+ 0x054407f1,
+ 0xd00604b6,
+ 0x04bd000e,
+ 0x07ca21f5,
+ 0x0ccc07f1,
+ 0xbd000e98,
+ 0x3621f504,
+ 0x6221f502,
+/* 0x0923: i2c_drive_scl */
+ 0xb000f802,
+ 0x0bf40036,
+ 0xe007f111,
+ 0x0604b607,
+ 0xbd0001d0,
+/* 0x0937: i2c_drive_scl_lo */
+ 0xf100f804,
+ 0xb607e407,
+ 0x01d00604,
+ 0xf804bd00,
+/* 0x0945: i2c_drive_sda */
+ 0x0036b000,
+ 0xf1110bf4,
+ 0xb607e007,
+ 0x02d00604,
+ 0xf804bd00,
+/* 0x0959: i2c_drive_sda_lo */
+ 0xe407f100,
+ 0x0604b607,
+ 0xbd0002d0,
+/* 0x0967: i2c_sense_scl */
+ 0xf400f804,
+ 0x37f10132,
+ 0x34b607c4,
+ 0x0033cf06,
+ 0xf40431fd,
+ 0x31f4060b,
+/* 0x097d: i2c_sense_scl_done */
+/* 0x097f: i2c_sense_sda */
+ 0xf400f801,
+ 0x37f10132,
+ 0x34b607c4,
+ 0x0033cf06,
+ 0xf40432fd,
+ 0x31f4060b,
+/* 0x0995: i2c_sense_sda_done */
+/* 0x0997: i2c_raise_scl */
+ 0xf900f801,
+ 0x9847f140,
+ 0x0137f008,
+ 0x092321f5,
+/* 0x09a4: i2c_raise_scl_wait */
0x03e8e7f1,
- 0xbb7f21f4,
+ 0xf57f21f4,
+ 0xf4096721,
+ 0x42b60901,
+ 0xef1bf401,
+/* 0x09b8: i2c_raise_scl_done */
+ 0x00f840fc,
+/* 0x09bc: i2c_start */
+ 0x096721f5,
+ 0xf50d11f4,
+ 0xf4097f21,
+ 0x0ef40611,
+/* 0x09cd: i2c_start_rep */
+ 0x0037f030,
+ 0x092321f5,
+ 0xf50137f0,
+ 0xbb094521,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
- 0x07d821f5,
+ 0x099721f5,
0xf40464b6,
- 0xe7f11811,
- 0x21f41388,
- 0x0037f07f,
- 0x076421f5,
+/* 0x09fa: i2c_start_send */
+ 0x37f01f11,
+ 0x4521f500,
+ 0x88e7f109,
+ 0x7f21f413,
+ 0xf50037f0,
+ 0xf1092321,
+ 0xf41388e7,
+/* 0x0a16: i2c_start_out */
+ 0x00f87f21,
+/* 0x0a18: i2c_stop */
+ 0xf50037f0,
+ 0xf0092321,
+ 0x21f50037,
+ 0xe7f10945,
+ 0x21f403e8,
+ 0x0137f07f,
+ 0x092321f5,
0x1388e7f1,
-/* 0x08cb: i2c_bitw_out */
- 0xf87f21f4,
-/* 0x08cd: i2c_bitr */
- 0x0137f000,
- 0x078621f5,
- 0x03e8e7f1,
- 0xbb7f21f4,
- 0x65b60076,
- 0x9450f904,
- 0x56bb0465,
- 0xfd50bd02,
- 0x50fc0475,
- 0x07d821f5,
- 0xf40464b6,
- 0x21f51b11,
- 0x37f007c0,
- 0x6421f500,
- 0x88e7f107,
+ 0xf07f21f4,
+ 0x21f50137,
+ 0xe7f10945,
+ 0x21f41388,
+/* 0x0a4b: i2c_bitw */
+ 0xf500f87f,
+ 0xf1094521,
+ 0xf403e8e7,
+ 0x76bb7f21,
+ 0x0465b600,
+ 0x659450f9,
+ 0x0256bb04,
+ 0x75fd50bd,
+ 0xf550fc04,
+ 0xb6099721,
+ 0x11f40464,
+ 0x88e7f118,
0x7f21f413,
- 0xf4013cf0,
-/* 0x0912: i2c_bitr_done */
- 0x00f80131,
-/* 0x0914: i2c_get_byte */
- 0xf00057f0,
-/* 0x091a: i2c_get_byte_next */
- 0x54b60847,
- 0x0076bb01,
- 0xf90465b6,
- 0x04659450,
- 0xbd0256bb,
- 0x0475fd50,
- 0x21f550fc,
- 0x64b608cd,
- 0x2b11f404,
- 0xb60553fd,
- 0x1bf40142,
- 0x0137f0d8,
+ 0xf50037f0,
+ 0xf1092321,
+ 0xf41388e7,
+/* 0x0a8a: i2c_bitw_out */
+ 0x00f87f21,
+/* 0x0a8c: i2c_bitr */
+ 0xf50137f0,
+ 0xf1094521,
+ 0xf403e8e7,
+ 0x76bb7f21,
+ 0x0465b600,
+ 0x659450f9,
+ 0x0256bb04,
+ 0x75fd50bd,
+ 0xf550fc04,
+ 0xb6099721,
+ 0x11f40464,
+ 0x7f21f51b,
+ 0x0037f009,
+ 0x092321f5,
+ 0x1388e7f1,
+ 0xf07f21f4,
+ 0x31f4013c,
+/* 0x0ad1: i2c_bitr_done */
+/* 0x0ad3: i2c_get_byte */
+ 0xf000f801,
+ 0x47f00057,
+/* 0x0ad9: i2c_get_byte_next */
+ 0x0154b608,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
0x8c21f550,
- 0x0464b608,
-/* 0x0964: i2c_get_byte_done */
-/* 0x0966: i2c_put_byte */
- 0x47f000f8,
-/* 0x0969: i2c_put_byte_next */
- 0x0142b608,
- 0xbb3854ff,
+ 0x0464b60a,
+ 0xfd2b11f4,
+ 0x42b60553,
+ 0xd81bf401,
+ 0xbb0137f0,
+ 0x65b60076,
+ 0x9450f904,
+ 0x56bb0465,
+ 0xfd50bd02,
+ 0x50fc0475,
+ 0x0a4b21f5,
+/* 0x0b23: i2c_get_byte_done */
+ 0xf80464b6,
+/* 0x0b25: i2c_put_byte */
+ 0x0847f000,
+/* 0x0b28: i2c_put_byte_next */
+ 0xff0142b6,
+ 0x76bb3854,
+ 0x0465b600,
+ 0x659450f9,
+ 0x0256bb04,
+ 0x75fd50bd,
+ 0xf550fc04,
+ 0xb60a4b21,
+ 0x11f40464,
+ 0x0046b034,
+ 0xbbd81bf4,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
- 0x088c21f5,
+ 0x0a8c21f5,
0xf40464b6,
- 0x46b03411,
- 0xd81bf400,
+ 0x76bb0f11,
+ 0x0136b000,
+ 0xf4061bf4,
+/* 0x0b7e: i2c_put_byte_done */
+ 0x00f80132,
+/* 0x0b80: i2c_addr */
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
- 0xcd21f550,
- 0x0464b608,
- 0xbb0f11f4,
- 0x36b00076,
- 0x061bf401,
-/* 0x09bf: i2c_put_byte_done */
- 0xf80132f4,
-/* 0x09c1: i2c_addr */
- 0x0076bb00,
+ 0xbc21f550,
+ 0x0464b609,
+ 0xe72911f4,
+ 0xb6012ec3,
+ 0x53fd0134,
+ 0x0076bb05,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x21f550fc,
- 0x64b607fd,
- 0x2911f404,
- 0x012ec3e7,
- 0xfd0134b6,
- 0x76bb0553,
+ 0x64b60b25,
+/* 0x0bc5: i2c_addr_done */
+/* 0x0bc7: i2c_acquire_addr */
+ 0xc700f804,
+ 0xe4b6f8ce,
+ 0x24e0b702,
+ 0x00ee980d,
+/* 0x0bd6: i2c_acquire */
+ 0x21f500f8,
+ 0x21f40bc7,
+ 0x03d9f004,
+ 0xf83f21f4,
+/* 0x0be5: i2c_release */
+ 0xc721f500,
+ 0x0421f40b,
+ 0xf403daf0,
+ 0x00f83f21,
+/* 0x0bf4: i2c_recv */
+ 0xc70132f4,
+ 0x14b6f8c1,
+ 0x2816b002,
+ 0x013a1ff5,
+ 0x0cfc13a0,
+ 0xa0003298,
+ 0x980cd413,
+ 0x31f40031,
+ 0xf9d0f902,
+ 0xf1d0f9e0,
+ 0xf1000067,
+ 0x92100063,
+ 0x76bb0167,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0xf550fc04,
- 0xb6096621,
-/* 0x0a06: i2c_addr_done */
- 0x00f80464,
-/* 0x0a08: i2c_acquire_addr */
- 0xb6f8cec7,
- 0xe0b702e4,
- 0xee980d1c,
-/* 0x0a17: i2c_acquire */
- 0xf500f800,
- 0xf40a0821,
- 0xd9f00421,
- 0x3f21f403,
-/* 0x0a26: i2c_release */
- 0x21f500f8,
- 0x21f40a08,
- 0x03daf004,
- 0xf83f21f4,
-/* 0x0a35: i2c_recv */
- 0x0132f400,
- 0xb6f8c1c7,
- 0x16b00214,
- 0x3a1ff528,
- 0xf413a001,
- 0x0032980c,
- 0x0ccc13a0,
- 0xf4003198,
- 0xd0f90231,
- 0xd0f9e0f9,
- 0x000067f1,
- 0x100063f1,
- 0xbb016792,
- 0x65b60076,
- 0x9450f904,
- 0x56bb0465,
- 0xfd50bd02,
- 0x50fc0475,
- 0x0a1721f5,
- 0xfc0464b6,
- 0x00d6b0d0,
- 0x00b31bf5,
- 0xbb0057f0,
- 0x65b60076,
- 0x9450f904,
- 0x56bb0465,
- 0xfd50bd02,
- 0x50fc0475,
- 0x09c121f5,
- 0xf50464b6,
- 0xc700d011,
- 0x76bbe0c5,
+ 0xb60bd621,
+ 0xd0fc0464,
+ 0xf500d6b0,
+ 0xf000b31b,
+ 0x76bb0057,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0xf550fc04,
- 0xb6096621,
+ 0xb60b8021,
0x11f50464,
- 0x57f000ad,
- 0x0076bb01,
+ 0xc5c700d0,
+ 0x0076bbe0,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x21f550fc,
- 0x64b609c1,
- 0x8a11f504,
- 0x0076bb00,
- 0xf90465b6,
- 0x04659450,
- 0xbd0256bb,
- 0x0475fd50,
- 0x21f550fc,
- 0x64b60914,
- 0x6a11f404,
- 0xbbe05bcb,
- 0x65b60076,
- 0x9450f904,
- 0x56bb0465,
- 0xfd50bd02,
- 0x50fc0475,
- 0x085921f5,
- 0xb90464b6,
- 0x74bd025b,
-/* 0x0b3b: i2c_recv_not_rd08 */
- 0xb0430ef4,
- 0x1bf401d6,
- 0x0057f03d,
- 0x09c121f5,
- 0xc73311f4,
- 0x21f5e0c5,
- 0x11f40966,
- 0x0057f029,
- 0x09c121f5,
- 0xc71f11f4,
- 0x21f5e0b5,
- 0x11f40966,
- 0x5921f515,
- 0xc774bd08,
- 0x1bf408c5,
- 0x0232f409,
-/* 0x0b7b: i2c_recv_not_wr08 */
-/* 0x0b7b: i2c_recv_done */
- 0xc7030ef4,
- 0x21f5f8ce,
- 0xe0fc0a26,
- 0x12f4d0fc,
- 0x027cb90a,
- 0x034221f5,
-/* 0x0b90: i2c_recv_exit */
-/* 0x0b92: i2c_init */
- 0x00f800f8,
-/* 0x0b94: test_recv */
- 0x05d817f1,
- 0xcf0614b6,
- 0x10b60011,
- 0xd807f101,
- 0x0604b605,
- 0xbd0001d0,
- 0x00e7f104,
- 0x4fe3f1d9,
- 0x6221f513,
-/* 0x0bbb: test_init */
- 0xf100f802,
- 0xf50800e7,
- 0xf8026221,
-/* 0x0bc5: idle_recv */
-/* 0x0bc7: idle */
- 0xf400f800,
- 0x17f10031,
- 0x14b605d4,
- 0x0011cf06,
- 0xf10110b6,
- 0xb605d407,
- 0x01d00604,
-/* 0x0be3: idle_loop */
- 0xf004bd00,
- 0x32f45817,
-/* 0x0be9: idle_proc */
-/* 0x0be9: idle_proc_exec */
- 0xb910f902,
- 0x21f5021e,
- 0x10fc034b,
- 0xf40911f4,
- 0x0ef40231,
-/* 0x0bfd: idle_proc_next */
- 0x5810b6ef,
- 0xf4061fb8,
- 0x02f4e61b,
- 0x0028f4dd,
- 0x00bb0ef4,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
+ 0x64b60b25,
+ 0xad11f504,
+ 0x0157f000,
+ 0xb60076bb,
+ 0x50f90465,
+ 0xbb046594,
+ 0x50bd0256,
+ 0xfc0475fd,
+ 0x8021f550,
+ 0x0464b60b,
+ 0x008a11f5,
+ 0xb60076bb,
+ 0x50f90465,
+ 0xbb046594,
+ 0x50bd0256,
+ 0xfc0475fd,
+ 0xd321f550,
+ 0x0464b60a,
+ 0xcb6a11f4,
+ 0x76bbe05b,
+ 0x0465b600,
+ 0x659450f9,
+ 0x0256bb04,
+ 0x75fd50bd,
+ 0xf550fc04,
+ 0xb60a1821,
+ 0x5bb90464,
+ 0xf474bd02,
+/* 0x0cfa: i2c_recv_not_rd08 */
+ 0xd6b0430e,
+ 0x3d1bf401,
+ 0xf50057f0,
+ 0xf40b8021,
+ 0xc5c73311,
+ 0x2521f5e0,
+ 0x2911f40b,
+ 0xf50057f0,
+ 0xf40b8021,
+ 0xb5c71f11,
+ 0x2521f5e0,
+ 0x1511f40b,
+ 0x0a1821f5,
+ 0xc5c774bd,
+ 0x091bf408,
+ 0xf40232f4,
+/* 0x0d3a: i2c_recv_not_wr08 */
+/* 0x0d3a: i2c_recv_done */
+ 0xcec7030e,
+ 0xe521f5f8,
+ 0xfce0fc0b,
+ 0x0a12f4d0,
+ 0xf5027cb9,
+/* 0x0d4f: i2c_recv_exit */
+ 0xf8034221,
+/* 0x0d51: i2c_init */
+/* 0x0d53: test_recv */
+ 0xf100f800,
+ 0xb605d817,
+ 0x11cf0614,
+ 0x0110b600,
+ 0x05d807f1,
+ 0xd00604b6,
+ 0x04bd0001,
+ 0xd900e7f1,
+ 0x134fe3f1,
+ 0x026221f5,
+/* 0x0d7a: test_init */
+ 0xe7f100f8,
+ 0x21f50800,
+ 0x00f80262,
+/* 0x0d84: idle_recv */
+/* 0x0d86: idle */
+ 0x31f400f8,
+ 0xd417f100,
+ 0x0614b605,
+ 0xb60011cf,
+ 0x07f10110,
+ 0x04b605d4,
+ 0x0001d006,
+/* 0x0da2: idle_loop */
+ 0x17f004bd,
+ 0x0232f458,
+/* 0x0da8: idle_proc */
+/* 0x0da8: idle_proc_exec */
+ 0x1eb910f9,
+ 0x4b21f502,
+ 0xf410fc03,
+ 0x31f40911,
+ 0xef0ef402,
+/* 0x0dbc: idle_proc_next */
+ 0xb85810b6,
+ 0x1bf4061f,
+ 0xdd02f4e6,
+ 0xf40028f4,
+ 0x0000bb0e,
0x00000000,
0x00000000,
0x00000000,
diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h
b/drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h
index 31552af..6fc2290 100644
--- a/drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h
+++ b/drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h
@@ -68,7 +68,7 @@ uint32_t gf119_pmu_data[] = {
0x00000000,
0x00000000,
0x46524550,
- 0x0000068f,
+ 0x00000784,
0x0000068d,
0x00000000,
0x00000000,
@@ -90,8 +90,8 @@ uint32_t gf119_pmu_data[] = {
0x00000000,
0x00000000,
0x5f433249,
- 0x00000aaa,
- 0x0000094d,
+ 0x00000c30,
+ 0x00000ad3,
0x00000000,
0x00000000,
0x00000000,
@@ -112,8 +112,8 @@ uint32_t gf119_pmu_data[] = {
0x00000000,
0x00000000,
0x54534554,
- 0x00000acd,
- 0x00000aac,
+ 0x00000c53,
+ 0x00000c32,
0x00000000,
0x00000000,
0x00000000,
@@ -134,8 +134,8 @@ uint32_t gf119_pmu_data[] = {
0x00000000,
0x00000000,
0x454c4449,
- 0x00000ad9,
- 0x00000ad7,
+ 0x00000c5f,
+ 0x00000c5d,
0x00000000,
0x00000000,
0x00000000,
@@ -834,7 +834,15 @@ uint32_t gf119_pmu_data[] = {
0x00000000,
0x00000000,
/* 0x0ccc: memx_train_tail */
-/* 0x0ccc: i2c_scl_map */
+/* 0x0ccc: perf_attr_start */
+/* 0x0ccc: perf_polling_period_us */
+ 0x000186a0,
+/* 0x0cd0: perf_eng_gr */
+/* 0x0cd1: perf_eng_vdec */
+/* 0x0cd2: perf_eng_mc */
+/* 0x0cd3: perf_eng_pcie */
+ 0x00000000,
+/* 0x0cd4: i2c_scl_map */
0x00000400,
0x00000800,
0x00001000,
@@ -845,7 +853,7 @@ uint32_t gf119_pmu_data[] = {
0x00020000,
0x00040000,
0x00080000,
-/* 0x0cf4: i2c_sda_map */
+/* 0x0cfc: i2c_sda_map */
0x00100000,
0x00200000,
0x00400000,
@@ -911,8 +919,6 @@ uint32_t gf119_pmu_data[] = {
0x00000000,
0x00000000,
0x00000000,
- 0x00000000,
- 0x00000000,
};
uint32_t gf119_pmu_code[] = {
@@ -1397,378 +1403,446 @@ uint32_t gf119_pmu_code[] = {
/* 0x068b: memx_init */
0xf800f8d8,
/* 0x068d: perf_recv */
-/* 0x068f: perf_init */
- 0xf800f800,
-/* 0x0691: i2c_drive_scl */
- 0x0036b000,
- 0xf10e0bf4,
- 0xd007e007,
- 0x04bd0001,
-/* 0x06a2: i2c_drive_scl_lo */
- 0x07f100f8,
- 0x01d007e4,
- 0xf804bd00,
-/* 0x06ad: i2c_drive_sda */
- 0x0036b000,
- 0xf10e0bf4,
- 0xd007e007,
- 0x04bd0002,
-/* 0x06be: i2c_drive_sda_lo */
- 0x07f100f8,
- 0x02d007e4,
- 0xf804bd00,
-/* 0x06c9: i2c_sense_scl */
- 0x0132f400,
- 0x07c437f1,
- 0xfd0033cf,
- 0x0bf40431,
- 0x0131f406,
-/* 0x06dc: i2c_sense_scl_done */
-/* 0x06de: i2c_sense_sda */
- 0x32f400f8,
- 0xc437f101,
- 0x0033cf07,
- 0xf40432fd,
- 0x31f4060b,
-/* 0x06f1: i2c_sense_sda_done */
-/* 0x06f3: i2c_raise_scl */
- 0xf900f801,
- 0x9847f140,
- 0x0137f008,
- 0x069121f5,
-/* 0x0700: i2c_raise_scl_wait */
- 0x03e8e7f1,
- 0xf56721f4,
- 0xf406c921,
- 0x42b60901,
- 0xef1bf401,
-/* 0x0714: i2c_raise_scl_done */
- 0x00f840fc,
-/* 0x0718: i2c_start */
- 0x06c921f5,
- 0xf50d11f4,
- 0xf406de21,
- 0x0ef40611,
-/* 0x0729: i2c_start_rep */
- 0x0037f030,
- 0x069121f5,
- 0xf50137f0,
- 0xbb06ad21,
- 0x65b60076,
- 0x9450f904,
- 0x56bb0465,
- 0xfd50bd02,
- 0x50fc0475,
- 0x06f321f5,
- 0xf40464b6,
-/* 0x0756: i2c_start_send */
- 0x37f01f11,
- 0xad21f500,
- 0x88e7f106,
- 0x6721f413,
+ 0xf110f900,
+ 0xf14f48a7,
+ 0xb85453a3,
+ 0x1bf406ea,
+ 0x01d6b044,
+ 0xf4060bf4,
+/* 0x06a6: perf_load */
+ 0xb4bd500e,
+ 0x07f1c4bd,
+ 0x0c180cd3,
+ 0xb604bd00,
+ 0x07f108c4,
+ 0x0c180cd2,
+ 0xb604bd00,
+ 0x07f108c4,
+ 0x0c180cd1,
+ 0xb604bd00,
+ 0x07f108c4,
+ 0x0c180cd0,
+ 0xf504bd00,
+ 0xf402f121,
+/* 0x06de: perf_recv_not_host */
+ 0x21f5180e,
+ 0x07f106f7,
+ 0x0e980ccc,
+ 0xf504bd00,
+ 0xf501f721,
+/* 0x06f3: perf_recv_exit */
+ 0xfc022321,
+/* 0x06f7: perf_counter_readout */
+ 0xf100f810,
+ 0xcf0508e7,
+ 0xeecc00ee,
+ 0x18d7f1ff,
+ 0x00ddcf05,
+ 0xf1dcdeff,
+ 0x000cd007,
+ 0x04bd000d,
+ 0x0528d7f1,
+ 0xff00ddcf,
+ 0x07f1dcde,
+ 0x0d000cd1,
+ 0xf104bd00,
+ 0xcf0538d7,
+ 0xdeff00dd,
+ 0xd207f1dc,
+ 0x000d000c,
+ 0xd7f104bd,
+ 0xddcf0548,
+ 0xdcdeff00,
+ 0x0cd307f1,
+ 0xbd000d00,
+ 0x00e7f104,
+ 0x00e3f100,
+ 0x0807f180,
+ 0x000ed005,
+ 0x07f104bd,
+ 0x0ed00518,
+ 0xf104bd00,
+ 0xd0052807,
+ 0x04bd000e,
+ 0x053807f1,
+ 0xbd000ed0,
+ 0x4807f104,
+ 0x000ed005,
+ 0x00f804bd,
+/* 0x0784: perf_init */
+ 0x0003e7f1,
+ 0xf100e3f0,
+ 0xd0050c07,
+ 0x04bd000e,
+ 0x0002e7f1,
+ 0xf100e3f0,
+ 0xd0051c07,
+ 0x04bd000e,
+ 0x052c07f1,
+ 0xbd000ed0,
+ 0x3c07f104,
+ 0x000ed005,
+ 0x07f104bd,
+ 0x0ed0054c,
+ 0xf104bd00,
+ 0xf0000fe7,
+ 0x07f118e3,
+ 0x0ed00514,
+ 0xf104bd00,
+ 0xf00070e7,
+ 0x07f100e3,
+ 0x0ed00524,
+ 0xf104bd00,
+ 0xf00080e7,
+ 0x07f100e3,
+ 0x0ed00534,
+ 0xf104bd00,
+ 0xf10000e7,
+ 0xf12000e3,
+ 0xd0054407,
+ 0x04bd000e,
+ 0x06f721f5,
+ 0x0ccc07f1,
+ 0xbd000e98,
+ 0xf721f504,
+ 0x2321f501,
+/* 0x0817: i2c_drive_scl */
+ 0xb000f802,
+ 0x0bf40036,
+ 0xe007f10e,
+ 0x0001d007,
+ 0x00f804bd,
+/* 0x0828: i2c_drive_scl_lo */
+ 0x07e407f1,
+ 0xbd0001d0,
+/* 0x0833: i2c_drive_sda */
+ 0xb000f804,
+ 0x0bf40036,
+ 0xe007f10e,
+ 0x0002d007,
+ 0x00f804bd,
+/* 0x0844: i2c_drive_sda_lo */
+ 0x07e407f1,
+ 0xbd0002d0,
+/* 0x084f: i2c_sense_scl */
+ 0xf400f804,
+ 0x37f10132,
+ 0x33cf07c4,
+ 0x0431fd00,
+ 0xf4060bf4,
+/* 0x0862: i2c_sense_scl_done */
+ 0x00f80131,
+/* 0x0864: i2c_sense_sda */
+ 0xf10132f4,
+ 0xcf07c437,
+ 0x32fd0033,
+ 0x060bf404,
+/* 0x0877: i2c_sense_sda_done */
+ 0xf80131f4,
+/* 0x0879: i2c_raise_scl */
+ 0xf140f900,
+ 0xf0089847,
+ 0x21f50137,
+/* 0x0886: i2c_raise_scl_wait */
+ 0xe7f10817,
+ 0x21f403e8,
+ 0x4f21f567,
+ 0x0901f408,
+ 0xf40142b6,
+/* 0x089a: i2c_raise_scl_done */
+ 0x40fcef1b,
+/* 0x089e: i2c_start */
+ 0x21f500f8,
+ 0x11f4084f,
+ 0x6421f50d,
+ 0x0611f408,
+/* 0x08af: i2c_start_rep */
+ 0xf0300ef4,
+ 0x21f50037,
+ 0x37f00817,
+ 0x3321f501,
+ 0x0076bb08,
+ 0xf90465b6,
+ 0x04659450,
+ 0xbd0256bb,
+ 0x0475fd50,
+ 0x21f550fc,
+ 0x64b60879,
+ 0x1f11f404,
+/* 0x08dc: i2c_start_send */
0xf50037f0,
- 0xf1069121,
+ 0xf1083321,
0xf41388e7,
-/* 0x0772: i2c_start_out */
- 0x00f86721,
-/* 0x0774: i2c_stop */
- 0xf50037f0,
- 0xf0069121,
- 0x21f50037,
- 0xe7f106ad,
- 0x21f403e8,
- 0x0137f067,
- 0x069121f5,
- 0x1388e7f1,
+ 0x37f06721,
+ 0x1721f500,
+ 0x88e7f108,
+ 0x6721f413,
+/* 0x08f8: i2c_start_out */
+/* 0x08fa: i2c_stop */
+ 0x37f000f8,
+ 0x1721f500,
+ 0x0037f008,
+ 0x083321f5,
+ 0x03e8e7f1,
0xf06721f4,
0x21f50137,
- 0xe7f106ad,
+ 0xe7f10817,
0x21f41388,
-/* 0x07a7: i2c_bitw */
- 0xf500f867,
- 0xf106ad21,
- 0xf403e8e7,
- 0x76bb6721,
- 0x0465b600,
- 0x659450f9,
- 0x0256bb04,
- 0x75fd50bd,
- 0xf550fc04,
- 0xb606f321,
- 0x11f40464,
- 0x88e7f118,
- 0x6721f413,
- 0xf50037f0,
- 0xf1069121,
- 0xf41388e7,
-/* 0x07e6: i2c_bitw_out */
- 0x00f86721,
-/* 0x07e8: i2c_bitr */
- 0xf50137f0,
- 0xf106ad21,
- 0xf403e8e7,
- 0x76bb6721,
- 0x0465b600,
- 0x659450f9,
- 0x0256bb04,
- 0x75fd50bd,
- 0xf550fc04,
- 0xb606f321,
- 0x11f40464,
- 0xde21f51b,
- 0x0037f006,
- 0x069121f5,
+ 0x0137f067,
+ 0x083321f5,
0x1388e7f1,
- 0xf06721f4,
- 0x31f4013c,
-/* 0x082d: i2c_bitr_done */
-/* 0x082f: i2c_get_byte */
- 0xf000f801,
- 0x47f00057,
-/* 0x0835: i2c_get_byte_next */
- 0x0154b608,
+ 0xf86721f4,
+/* 0x092d: i2c_bitw */
+ 0x3321f500,
+ 0xe8e7f108,
+ 0x6721f403,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
- 0xe821f550,
- 0x0464b607,
- 0xfd2b11f4,
- 0x42b60553,
- 0xd81bf401,
- 0xbb0137f0,
- 0x65b60076,
- 0x9450f904,
- 0x56bb0465,
- 0xfd50bd02,
- 0x50fc0475,
- 0x07a721f5,
-/* 0x087f: i2c_get_byte_done */
- 0xf80464b6,
-/* 0x0881: i2c_put_byte */
- 0x0847f000,
-/* 0x0884: i2c_put_byte_next */
- 0xff0142b6,
- 0x76bb3854,
+ 0x7921f550,
+ 0x0464b608,
+ 0xf11811f4,
+ 0xf41388e7,
+ 0x37f06721,
+ 0x1721f500,
+ 0x88e7f108,
+ 0x6721f413,
+/* 0x096c: i2c_bitw_out */
+/* 0x096e: i2c_bitr */
+ 0x37f000f8,
+ 0x3321f501,
+ 0xe8e7f108,
+ 0x6721f403,
+ 0xb60076bb,
+ 0x50f90465,
+ 0xbb046594,
+ 0x50bd0256,
+ 0xfc0475fd,
+ 0x7921f550,
+ 0x0464b608,
+ 0xf51b11f4,
+ 0xf0086421,
+ 0x21f50037,
+ 0xe7f10817,
+ 0x21f41388,
+ 0x013cf067,
+/* 0x09b3: i2c_bitr_done */
+ 0xf80131f4,
+/* 0x09b5: i2c_get_byte */
+ 0x0057f000,
+/* 0x09bb: i2c_get_byte_next */
+ 0xb60847f0,
+ 0x76bb0154,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0xf550fc04,
- 0xb607a721,
+ 0xb6096e21,
0x11f40464,
- 0x0046b034,
- 0xbbd81bf4,
- 0x65b60076,
- 0x9450f904,
- 0x56bb0465,
- 0xfd50bd02,
- 0x50fc0475,
- 0x07e821f5,
- 0xf40464b6,
- 0x76bb0f11,
- 0x0136b000,
- 0xf4061bf4,
-/* 0x08da: i2c_put_byte_done */
- 0x00f80132,
-/* 0x08dc: i2c_addr */
+ 0x0553fd2b,
+ 0xf40142b6,
+ 0x37f0d81b,
+ 0x0076bb01,
+ 0xf90465b6,
+ 0x04659450,
+ 0xbd0256bb,
+ 0x0475fd50,
+ 0x21f550fc,
+ 0x64b6092d,
+/* 0x0a05: i2c_get_byte_done */
+/* 0x0a07: i2c_put_byte */
+ 0xf000f804,
+/* 0x0a0a: i2c_put_byte_next */
+ 0x42b60847,
+ 0x3854ff01,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
- 0x1821f550,
- 0x0464b607,
- 0xe72911f4,
- 0xb6012ec3,
- 0x53fd0134,
- 0x0076bb05,
+ 0x2d21f550,
+ 0x0464b609,
+ 0xb03411f4,
+ 0x1bf40046,
+ 0x0076bbd8,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x21f550fc,
- 0x64b60881,
-/* 0x0921: i2c_addr_done */
-/* 0x0923: i2c_acquire_addr */
- 0xc700f804,
- 0xe4b6f8ce,
- 0x14e0b705,
-/* 0x092f: i2c_acquire */
- 0xf500f8d0,
- 0xf4092321,
- 0xd9f00421,
- 0x3321f403,
-/* 0x093e: i2c_release */
- 0x21f500f8,
- 0x21f40923,
- 0x03daf004,
- 0xf83321f4,
-/* 0x094d: i2c_recv */
- 0x0132f400,
- 0xb6f8c1c7,
- 0x16b00214,
- 0x3a1ff528,
- 0xf413a001,
- 0x0032980c,
- 0x0ccc13a0,
- 0xf4003198,
- 0xd0f90231,
- 0xd0f9e0f9,
- 0x000067f1,
- 0x100063f1,
- 0xbb016792,
- 0x65b60076,
- 0x9450f904,
- 0x56bb0465,
- 0xfd50bd02,
- 0x50fc0475,
- 0x092f21f5,
- 0xfc0464b6,
- 0x00d6b0d0,
- 0x00b31bf5,
- 0xbb0057f0,
- 0x65b60076,
- 0x9450f904,
- 0x56bb0465,
- 0xfd50bd02,
- 0x50fc0475,
- 0x08dc21f5,
- 0xf50464b6,
- 0xc700d011,
- 0x76bbe0c5,
+ 0x64b6096e,
+ 0x0f11f404,
+ 0xb00076bb,
+ 0x1bf40136,
+ 0x0132f406,
+/* 0x0a60: i2c_put_byte_done */
+/* 0x0a62: i2c_addr */
+ 0x76bb00f8,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0xf550fc04,
- 0xb6088121,
- 0x11f50464,
- 0x57f000ad,
+ 0xb6089e21,
+ 0x11f40464,
+ 0x2ec3e729,
+ 0x0134b601,
+ 0xbb0553fd,
+ 0x65b60076,
+ 0x9450f904,
+ 0x56bb0465,
+ 0xfd50bd02,
+ 0x50fc0475,
+ 0x0a0721f5,
+/* 0x0aa7: i2c_addr_done */
+ 0xf80464b6,
+/* 0x0aa9: i2c_acquire_addr */
+ 0xf8cec700,
+ 0xb705e4b6,
+ 0xf8d014e0,
+/* 0x0ab5: i2c_acquire */
+ 0xa921f500,
+ 0x0421f40a,
+ 0xf403d9f0,
+ 0x00f83321,
+/* 0x0ac4: i2c_release */
+ 0x0aa921f5,
+ 0xf00421f4,
+ 0x21f403da,
+/* 0x0ad3: i2c_recv */
+ 0xf400f833,
+ 0xc1c70132,
+ 0x0214b6f8,
+ 0xf52816b0,
+ 0xa0013a1f,
+ 0x980cfc13,
+ 0x13a00032,
+ 0x31980cd4,
+ 0x0231f400,
+ 0xe0f9d0f9,
+ 0x67f1d0f9,
+ 0x63f10000,
+ 0x67921000,
0x0076bb01,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x21f550fc,
- 0x64b608dc,
- 0x8a11f504,
+ 0x64b60ab5,
+ 0xb0d0fc04,
+ 0x1bf500d6,
+ 0x57f000b3,
0x0076bb00,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x21f550fc,
- 0x64b6082f,
- 0x6a11f404,
- 0xbbe05bcb,
+ 0x64b60a62,
+ 0xd011f504,
+ 0xe0c5c700,
+ 0xb60076bb,
+ 0x50f90465,
+ 0xbb046594,
+ 0x50bd0256,
+ 0xfc0475fd,
+ 0x0721f550,
+ 0x0464b60a,
+ 0x00ad11f5,
+ 0xbb0157f0,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
- 0x077421f5,
- 0xb90464b6,
- 0x74bd025b,
-/* 0x0a53: i2c_recv_not_rd08 */
- 0xb0430ef4,
- 0x1bf401d6,
- 0x0057f03d,
- 0x08dc21f5,
- 0xc73311f4,
- 0x21f5e0c5,
- 0x11f40881,
- 0x0057f029,
- 0x08dc21f5,
- 0xc71f11f4,
- 0x21f5e0b5,
- 0x11f40881,
- 0x7421f515,
- 0xc774bd07,
- 0x1bf408c5,
- 0x0232f409,
-/* 0x0a93: i2c_recv_not_wr08 */
-/* 0x0a93: i2c_recv_done */
- 0xc7030ef4,
- 0x21f5f8ce,
- 0xe0fc093e,
- 0x12f4d0fc,
- 0x027cb90a,
- 0x02f121f5,
-/* 0x0aa8: i2c_recv_exit */
-/* 0x0aaa: i2c_init */
- 0x00f800f8,
-/* 0x0aac: test_recv */
- 0x05d817f1,
- 0xb60011cf,
- 0x07f10110,
- 0x01d005d8,
- 0xf104bd00,
- 0xf1d900e7,
- 0xf5134fe3,
+ 0x0a6221f5,
+ 0xf50464b6,
+ 0xbb008a11,
+ 0x65b60076,
+ 0x9450f904,
+ 0x56bb0465,
+ 0xfd50bd02,
+ 0x50fc0475,
+ 0x09b521f5,
+ 0xf40464b6,
+ 0x5bcb6a11,
+ 0x0076bbe0,
+ 0xf90465b6,
+ 0x04659450,
+ 0xbd0256bb,
+ 0x0475fd50,
+ 0x21f550fc,
+ 0x64b608fa,
+ 0x025bb904,
+ 0x0ef474bd,
+/* 0x0bd9: i2c_recv_not_rd08 */
+ 0x01d6b043,
+ 0xf03d1bf4,
+ 0x21f50057,
+ 0x11f40a62,
+ 0xe0c5c733,
+ 0x0a0721f5,
+ 0xf02911f4,
+ 0x21f50057,
+ 0x11f40a62,
+ 0xe0b5c71f,
+ 0x0a0721f5,
+ 0xf51511f4,
+ 0xbd08fa21,
+ 0x08c5c774,
+ 0xf4091bf4,
+ 0x0ef40232,
+/* 0x0c19: i2c_recv_not_wr08 */
+/* 0x0c19: i2c_recv_done */
+ 0xf8cec703,
+ 0x0ac421f5,
+ 0xd0fce0fc,
+ 0xb90a12f4,
+ 0x21f5027c,
+/* 0x0c2e: i2c_recv_exit */
+ 0x00f802f1,
+/* 0x0c30: i2c_init */
+/* 0x0c32: test_recv */
+ 0x17f100f8,
+ 0x11cf05d8,
+ 0x0110b600,
+ 0x05d807f1,
+ 0xbd0001d0,
+ 0x00e7f104,
+ 0x4fe3f1d9,
+ 0x2321f513,
+/* 0x0c53: test_init */
+ 0xf100f802,
+ 0xf50800e7,
0xf8022321,
-/* 0x0acd: test_init */
- 0x00e7f100,
- 0x2321f508,
-/* 0x0ad7: idle_recv */
- 0xf800f802,
-/* 0x0ad9: idle */
- 0x0031f400,
- 0x05d417f1,
- 0xb60011cf,
- 0x07f10110,
- 0x01d005d4,
-/* 0x0aef: idle_loop */
- 0xf004bd00,
- 0x32f45817,
-/* 0x0af5: idle_proc */
-/* 0x0af5: idle_proc_exec */
- 0xb910f902,
- 0x21f5021e,
- 0x10fc02fa,
- 0xf40911f4,
- 0x0ef40231,
-/* 0x0b09: idle_proc_next */
- 0x5810b6ef,
- 0xf4061fb8,
- 0x02f4e61b,
- 0x0028f4dd,
- 0x00c10ef4,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
+/* 0x0c5d: idle_recv */
+/* 0x0c5f: idle */
+ 0xf400f800,
+ 0x17f10031,
+ 0x11cf05d4,
+ 0x0110b600,
+ 0x05d407f1,
+ 0xbd0001d0,
+/* 0x0c75: idle_loop */
+ 0x5817f004,
+/* 0x0c7b: idle_proc */
+/* 0x0c7b: idle_proc_exec */
+ 0xf90232f4,
+ 0x021eb910,
+ 0x02fa21f5,
+ 0x11f410fc,
+ 0x0231f409,
+/* 0x0c8f: idle_proc_next */
+ 0xb6ef0ef4,
+ 0x1fb85810,
+ 0xe61bf406,
+ 0xf4dd02f4,
+ 0x0ef40028,
+ 0x000000c1,
0x00000000,
0x00000000,
0x00000000,
diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h
b/drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h
index ca7f2b8..9a5bdc1 100644
--- a/drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h
+++ b/drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h
@@ -68,7 +68,7 @@ uint32_t gk104_pmu_data[] = {
0x00000000,
0x00000000,
0x46524550,
- 0x0000068f,
+ 0x00000784,
0x0000068d,
0x00000000,
0x00000000,
@@ -90,8 +90,8 @@ uint32_t gk104_pmu_data[] = {
0x00000000,
0x00000000,
0x5f433249,
- 0x00000aaa,
- 0x0000094d,
+ 0x00000c30,
+ 0x00000ad3,
0x00000000,
0x00000000,
0x00000000,
@@ -112,8 +112,8 @@ uint32_t gk104_pmu_data[] = {
0x00000000,
0x00000000,
0x54534554,
- 0x00000acd,
- 0x00000aac,
+ 0x00000c53,
+ 0x00000c32,
0x00000000,
0x00000000,
0x00000000,
@@ -134,8 +134,8 @@ uint32_t gk104_pmu_data[] = {
0x00000000,
0x00000000,
0x454c4449,
- 0x00000ad9,
- 0x00000ad7,
+ 0x00000c5f,
+ 0x00000c5d,
0x00000000,
0x00000000,
0x00000000,
@@ -834,7 +834,15 @@ uint32_t gk104_pmu_data[] = {
0x00000000,
0x00000000,
/* 0x0ccc: memx_train_tail */
-/* 0x0ccc: i2c_scl_map */
+/* 0x0ccc: perf_attr_start */
+/* 0x0ccc: perf_polling_period_us */
+ 0x000186a0,
+/* 0x0cd0: perf_eng_gr */
+/* 0x0cd1: perf_eng_vdec */
+/* 0x0cd2: perf_eng_mc */
+/* 0x0cd3: perf_eng_pcie */
+ 0x00000000,
+/* 0x0cd4: i2c_scl_map */
0x00000400,
0x00000800,
0x00001000,
@@ -845,7 +853,7 @@ uint32_t gk104_pmu_data[] = {
0x00020000,
0x00040000,
0x00080000,
-/* 0x0cf4: i2c_sda_map */
+/* 0x0cfc: i2c_sda_map */
0x00100000,
0x00200000,
0x00400000,
@@ -911,8 +919,6 @@ uint32_t gk104_pmu_data[] = {
0x00000000,
0x00000000,
0x00000000,
- 0x00000000,
- 0x00000000,
};
uint32_t gk104_pmu_code[] = {
@@ -1397,378 +1403,446 @@ uint32_t gk104_pmu_code[] = {
/* 0x068b: memx_init */
0xf800f8d8,
/* 0x068d: perf_recv */
-/* 0x068f: perf_init */
- 0xf800f800,
-/* 0x0691: i2c_drive_scl */
- 0x0036b000,
- 0xf10e0bf4,
- 0xd007e007,
- 0x04bd0001,
-/* 0x06a2: i2c_drive_scl_lo */
- 0x07f100f8,
- 0x01d007e4,
- 0xf804bd00,
-/* 0x06ad: i2c_drive_sda */
- 0x0036b000,
- 0xf10e0bf4,
- 0xd007e007,
- 0x04bd0002,
-/* 0x06be: i2c_drive_sda_lo */
- 0x07f100f8,
- 0x02d007e4,
- 0xf804bd00,
-/* 0x06c9: i2c_sense_scl */
- 0x0132f400,
- 0x07c437f1,
- 0xfd0033cf,
- 0x0bf40431,
- 0x0131f406,
-/* 0x06dc: i2c_sense_scl_done */
-/* 0x06de: i2c_sense_sda */
- 0x32f400f8,
- 0xc437f101,
- 0x0033cf07,
- 0xf40432fd,
- 0x31f4060b,
-/* 0x06f1: i2c_sense_sda_done */
-/* 0x06f3: i2c_raise_scl */
- 0xf900f801,
- 0x9847f140,
- 0x0137f008,
- 0x069121f5,
-/* 0x0700: i2c_raise_scl_wait */
- 0x03e8e7f1,
- 0xf56721f4,
- 0xf406c921,
- 0x42b60901,
- 0xef1bf401,
-/* 0x0714: i2c_raise_scl_done */
- 0x00f840fc,
-/* 0x0718: i2c_start */
- 0x06c921f5,
- 0xf50d11f4,
- 0xf406de21,
- 0x0ef40611,
-/* 0x0729: i2c_start_rep */
- 0x0037f030,
- 0x069121f5,
- 0xf50137f0,
- 0xbb06ad21,
- 0x65b60076,
- 0x9450f904,
- 0x56bb0465,
- 0xfd50bd02,
- 0x50fc0475,
- 0x06f321f5,
- 0xf40464b6,
-/* 0x0756: i2c_start_send */
- 0x37f01f11,
- 0xad21f500,
- 0x88e7f106,
- 0x6721f413,
+ 0xf110f900,
+ 0xf14f48a7,
+ 0xb85453a3,
+ 0x1bf406ea,
+ 0x01d6b044,
+ 0xf4060bf4,
+/* 0x06a6: perf_load */
+ 0xb4bd500e,
+ 0x07f1c4bd,
+ 0x0c180cd3,
+ 0xb604bd00,
+ 0x07f108c4,
+ 0x0c180cd2,
+ 0xb604bd00,
+ 0x07f108c4,
+ 0x0c180cd1,
+ 0xb604bd00,
+ 0x07f108c4,
+ 0x0c180cd0,
+ 0xf504bd00,
+ 0xf402f121,
+/* 0x06de: perf_recv_not_host */
+ 0x21f5180e,
+ 0x07f106f7,
+ 0x0e980ccc,
+ 0xf504bd00,
+ 0xf501f721,
+/* 0x06f3: perf_recv_exit */
+ 0xfc022321,
+/* 0x06f7: perf_counter_readout */
+ 0xf100f810,
+ 0xcf0508e7,
+ 0xeecc00ee,
+ 0x18d7f1ff,
+ 0x00ddcf05,
+ 0xf1dcdeff,
+ 0x000cd007,
+ 0x04bd000d,
+ 0x0528d7f1,
+ 0xff00ddcf,
+ 0x07f1dcde,
+ 0x0d000cd1,
+ 0xf104bd00,
+ 0xcf0538d7,
+ 0xdeff00dd,
+ 0xd207f1dc,
+ 0x000d000c,
+ 0xd7f104bd,
+ 0xddcf0548,
+ 0xdcdeff00,
+ 0x0cd307f1,
+ 0xbd000d00,
+ 0x00e7f104,
+ 0x00e3f100,
+ 0x0807f180,
+ 0x000ed005,
+ 0x07f104bd,
+ 0x0ed00518,
+ 0xf104bd00,
+ 0xd0052807,
+ 0x04bd000e,
+ 0x053807f1,
+ 0xbd000ed0,
+ 0x4807f104,
+ 0x000ed005,
+ 0x00f804bd,
+/* 0x0784: perf_init */
+ 0x0003e7f1,
+ 0xf100e3f0,
+ 0xd0050c07,
+ 0x04bd000e,
+ 0x0002e7f1,
+ 0xf100e3f0,
+ 0xd0051c07,
+ 0x04bd000e,
+ 0x052c07f1,
+ 0xbd000ed0,
+ 0x3c07f104,
+ 0x000ed005,
+ 0x07f104bd,
+ 0x0ed0054c,
+ 0xf104bd00,
+ 0xf0000fe7,
+ 0x07f138e3,
+ 0x0ed00514,
+ 0xf104bd00,
+ 0xf00070e7,
+ 0x07f102e3,
+ 0x0ed00524,
+ 0xf104bd00,
+ 0xf00080e7,
+ 0x07f100e3,
+ 0x0ed00534,
+ 0xf104bd00,
+ 0xf10000e7,
+ 0xf12000e3,
+ 0xd0054407,
+ 0x04bd000e,
+ 0x06f721f5,
+ 0x0ccc07f1,
+ 0xbd000e98,
+ 0xf721f504,
+ 0x2321f501,
+/* 0x0817: i2c_drive_scl */
+ 0xb000f802,
+ 0x0bf40036,
+ 0xe007f10e,
+ 0x0001d007,
+ 0x00f804bd,
+/* 0x0828: i2c_drive_scl_lo */
+ 0x07e407f1,
+ 0xbd0001d0,
+/* 0x0833: i2c_drive_sda */
+ 0xb000f804,
+ 0x0bf40036,
+ 0xe007f10e,
+ 0x0002d007,
+ 0x00f804bd,
+/* 0x0844: i2c_drive_sda_lo */
+ 0x07e407f1,
+ 0xbd0002d0,
+/* 0x084f: i2c_sense_scl */
+ 0xf400f804,
+ 0x37f10132,
+ 0x33cf07c4,
+ 0x0431fd00,
+ 0xf4060bf4,
+/* 0x0862: i2c_sense_scl_done */
+ 0x00f80131,
+/* 0x0864: i2c_sense_sda */
+ 0xf10132f4,
+ 0xcf07c437,
+ 0x32fd0033,
+ 0x060bf404,
+/* 0x0877: i2c_sense_sda_done */
+ 0xf80131f4,
+/* 0x0879: i2c_raise_scl */
+ 0xf140f900,
+ 0xf0089847,
+ 0x21f50137,
+/* 0x0886: i2c_raise_scl_wait */
+ 0xe7f10817,
+ 0x21f403e8,
+ 0x4f21f567,
+ 0x0901f408,
+ 0xf40142b6,
+/* 0x089a: i2c_raise_scl_done */
+ 0x40fcef1b,
+/* 0x089e: i2c_start */
+ 0x21f500f8,
+ 0x11f4084f,
+ 0x6421f50d,
+ 0x0611f408,
+/* 0x08af: i2c_start_rep */
+ 0xf0300ef4,
+ 0x21f50037,
+ 0x37f00817,
+ 0x3321f501,
+ 0x0076bb08,
+ 0xf90465b6,
+ 0x04659450,
+ 0xbd0256bb,
+ 0x0475fd50,
+ 0x21f550fc,
+ 0x64b60879,
+ 0x1f11f404,
+/* 0x08dc: i2c_start_send */
0xf50037f0,
- 0xf1069121,
+ 0xf1083321,
0xf41388e7,
-/* 0x0772: i2c_start_out */
- 0x00f86721,
-/* 0x0774: i2c_stop */
- 0xf50037f0,
- 0xf0069121,
- 0x21f50037,
- 0xe7f106ad,
- 0x21f403e8,
- 0x0137f067,
- 0x069121f5,
- 0x1388e7f1,
+ 0x37f06721,
+ 0x1721f500,
+ 0x88e7f108,
+ 0x6721f413,
+/* 0x08f8: i2c_start_out */
+/* 0x08fa: i2c_stop */
+ 0x37f000f8,
+ 0x1721f500,
+ 0x0037f008,
+ 0x083321f5,
+ 0x03e8e7f1,
0xf06721f4,
0x21f50137,
- 0xe7f106ad,
+ 0xe7f10817,
0x21f41388,
-/* 0x07a7: i2c_bitw */
- 0xf500f867,
- 0xf106ad21,
- 0xf403e8e7,
- 0x76bb6721,
- 0x0465b600,
- 0x659450f9,
- 0x0256bb04,
- 0x75fd50bd,
- 0xf550fc04,
- 0xb606f321,
- 0x11f40464,
- 0x88e7f118,
- 0x6721f413,
- 0xf50037f0,
- 0xf1069121,
- 0xf41388e7,
-/* 0x07e6: i2c_bitw_out */
- 0x00f86721,
-/* 0x07e8: i2c_bitr */
- 0xf50137f0,
- 0xf106ad21,
- 0xf403e8e7,
- 0x76bb6721,
- 0x0465b600,
- 0x659450f9,
- 0x0256bb04,
- 0x75fd50bd,
- 0xf550fc04,
- 0xb606f321,
- 0x11f40464,
- 0xde21f51b,
- 0x0037f006,
- 0x069121f5,
+ 0x0137f067,
+ 0x083321f5,
0x1388e7f1,
- 0xf06721f4,
- 0x31f4013c,
-/* 0x082d: i2c_bitr_done */
-/* 0x082f: i2c_get_byte */
- 0xf000f801,
- 0x47f00057,
-/* 0x0835: i2c_get_byte_next */
- 0x0154b608,
+ 0xf86721f4,
+/* 0x092d: i2c_bitw */
+ 0x3321f500,
+ 0xe8e7f108,
+ 0x6721f403,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
- 0xe821f550,
- 0x0464b607,
- 0xfd2b11f4,
- 0x42b60553,
- 0xd81bf401,
- 0xbb0137f0,
- 0x65b60076,
- 0x9450f904,
- 0x56bb0465,
- 0xfd50bd02,
- 0x50fc0475,
- 0x07a721f5,
-/* 0x087f: i2c_get_byte_done */
- 0xf80464b6,
-/* 0x0881: i2c_put_byte */
- 0x0847f000,
-/* 0x0884: i2c_put_byte_next */
- 0xff0142b6,
- 0x76bb3854,
+ 0x7921f550,
+ 0x0464b608,
+ 0xf11811f4,
+ 0xf41388e7,
+ 0x37f06721,
+ 0x1721f500,
+ 0x88e7f108,
+ 0x6721f413,
+/* 0x096c: i2c_bitw_out */
+/* 0x096e: i2c_bitr */
+ 0x37f000f8,
+ 0x3321f501,
+ 0xe8e7f108,
+ 0x6721f403,
+ 0xb60076bb,
+ 0x50f90465,
+ 0xbb046594,
+ 0x50bd0256,
+ 0xfc0475fd,
+ 0x7921f550,
+ 0x0464b608,
+ 0xf51b11f4,
+ 0xf0086421,
+ 0x21f50037,
+ 0xe7f10817,
+ 0x21f41388,
+ 0x013cf067,
+/* 0x09b3: i2c_bitr_done */
+ 0xf80131f4,
+/* 0x09b5: i2c_get_byte */
+ 0x0057f000,
+/* 0x09bb: i2c_get_byte_next */
+ 0xb60847f0,
+ 0x76bb0154,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0xf550fc04,
- 0xb607a721,
+ 0xb6096e21,
0x11f40464,
- 0x0046b034,
- 0xbbd81bf4,
- 0x65b60076,
- 0x9450f904,
- 0x56bb0465,
- 0xfd50bd02,
- 0x50fc0475,
- 0x07e821f5,
- 0xf40464b6,
- 0x76bb0f11,
- 0x0136b000,
- 0xf4061bf4,
-/* 0x08da: i2c_put_byte_done */
- 0x00f80132,
-/* 0x08dc: i2c_addr */
+ 0x0553fd2b,
+ 0xf40142b6,
+ 0x37f0d81b,
+ 0x0076bb01,
+ 0xf90465b6,
+ 0x04659450,
+ 0xbd0256bb,
+ 0x0475fd50,
+ 0x21f550fc,
+ 0x64b6092d,
+/* 0x0a05: i2c_get_byte_done */
+/* 0x0a07: i2c_put_byte */
+ 0xf000f804,
+/* 0x0a0a: i2c_put_byte_next */
+ 0x42b60847,
+ 0x3854ff01,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
- 0x1821f550,
- 0x0464b607,
- 0xe72911f4,
- 0xb6012ec3,
- 0x53fd0134,
- 0x0076bb05,
+ 0x2d21f550,
+ 0x0464b609,
+ 0xb03411f4,
+ 0x1bf40046,
+ 0x0076bbd8,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x21f550fc,
- 0x64b60881,
-/* 0x0921: i2c_addr_done */
-/* 0x0923: i2c_acquire_addr */
- 0xc700f804,
- 0xe4b6f8ce,
- 0x14e0b705,
-/* 0x092f: i2c_acquire */
- 0xf500f8d0,
- 0xf4092321,
- 0xd9f00421,
- 0x3321f403,
-/* 0x093e: i2c_release */
- 0x21f500f8,
- 0x21f40923,
- 0x03daf004,
- 0xf83321f4,
-/* 0x094d: i2c_recv */
- 0x0132f400,
- 0xb6f8c1c7,
- 0x16b00214,
- 0x3a1ff528,
- 0xf413a001,
- 0x0032980c,
- 0x0ccc13a0,
- 0xf4003198,
- 0xd0f90231,
- 0xd0f9e0f9,
- 0x000067f1,
- 0x100063f1,
- 0xbb016792,
- 0x65b60076,
- 0x9450f904,
- 0x56bb0465,
- 0xfd50bd02,
- 0x50fc0475,
- 0x092f21f5,
- 0xfc0464b6,
- 0x00d6b0d0,
- 0x00b31bf5,
- 0xbb0057f0,
- 0x65b60076,
- 0x9450f904,
- 0x56bb0465,
- 0xfd50bd02,
- 0x50fc0475,
- 0x08dc21f5,
- 0xf50464b6,
- 0xc700d011,
- 0x76bbe0c5,
+ 0x64b6096e,
+ 0x0f11f404,
+ 0xb00076bb,
+ 0x1bf40136,
+ 0x0132f406,
+/* 0x0a60: i2c_put_byte_done */
+/* 0x0a62: i2c_addr */
+ 0x76bb00f8,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0xf550fc04,
- 0xb6088121,
- 0x11f50464,
- 0x57f000ad,
+ 0xb6089e21,
+ 0x11f40464,
+ 0x2ec3e729,
+ 0x0134b601,
+ 0xbb0553fd,
+ 0x65b60076,
+ 0x9450f904,
+ 0x56bb0465,
+ 0xfd50bd02,
+ 0x50fc0475,
+ 0x0a0721f5,
+/* 0x0aa7: i2c_addr_done */
+ 0xf80464b6,
+/* 0x0aa9: i2c_acquire_addr */
+ 0xf8cec700,
+ 0xb705e4b6,
+ 0xf8d014e0,
+/* 0x0ab5: i2c_acquire */
+ 0xa921f500,
+ 0x0421f40a,
+ 0xf403d9f0,
+ 0x00f83321,
+/* 0x0ac4: i2c_release */
+ 0x0aa921f5,
+ 0xf00421f4,
+ 0x21f403da,
+/* 0x0ad3: i2c_recv */
+ 0xf400f833,
+ 0xc1c70132,
+ 0x0214b6f8,
+ 0xf52816b0,
+ 0xa0013a1f,
+ 0x980cfc13,
+ 0x13a00032,
+ 0x31980cd4,
+ 0x0231f400,
+ 0xe0f9d0f9,
+ 0x67f1d0f9,
+ 0x63f10000,
+ 0x67921000,
0x0076bb01,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x21f550fc,
- 0x64b608dc,
- 0x8a11f504,
+ 0x64b60ab5,
+ 0xb0d0fc04,
+ 0x1bf500d6,
+ 0x57f000b3,
0x0076bb00,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x21f550fc,
- 0x64b6082f,
- 0x6a11f404,
- 0xbbe05bcb,
+ 0x64b60a62,
+ 0xd011f504,
+ 0xe0c5c700,
+ 0xb60076bb,
+ 0x50f90465,
+ 0xbb046594,
+ 0x50bd0256,
+ 0xfc0475fd,
+ 0x0721f550,
+ 0x0464b60a,
+ 0x00ad11f5,
+ 0xbb0157f0,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
- 0x077421f5,
- 0xb90464b6,
- 0x74bd025b,
-/* 0x0a53: i2c_recv_not_rd08 */
- 0xb0430ef4,
- 0x1bf401d6,
- 0x0057f03d,
- 0x08dc21f5,
- 0xc73311f4,
- 0x21f5e0c5,
- 0x11f40881,
- 0x0057f029,
- 0x08dc21f5,
- 0xc71f11f4,
- 0x21f5e0b5,
- 0x11f40881,
- 0x7421f515,
- 0xc774bd07,
- 0x1bf408c5,
- 0x0232f409,
-/* 0x0a93: i2c_recv_not_wr08 */
-/* 0x0a93: i2c_recv_done */
- 0xc7030ef4,
- 0x21f5f8ce,
- 0xe0fc093e,
- 0x12f4d0fc,
- 0x027cb90a,
- 0x02f121f5,
-/* 0x0aa8: i2c_recv_exit */
-/* 0x0aaa: i2c_init */
- 0x00f800f8,
-/* 0x0aac: test_recv */
- 0x05d817f1,
- 0xb60011cf,
- 0x07f10110,
- 0x01d005d8,
- 0xf104bd00,
- 0xf1d900e7,
- 0xf5134fe3,
+ 0x0a6221f5,
+ 0xf50464b6,
+ 0xbb008a11,
+ 0x65b60076,
+ 0x9450f904,
+ 0x56bb0465,
+ 0xfd50bd02,
+ 0x50fc0475,
+ 0x09b521f5,
+ 0xf40464b6,
+ 0x5bcb6a11,
+ 0x0076bbe0,
+ 0xf90465b6,
+ 0x04659450,
+ 0xbd0256bb,
+ 0x0475fd50,
+ 0x21f550fc,
+ 0x64b608fa,
+ 0x025bb904,
+ 0x0ef474bd,
+/* 0x0bd9: i2c_recv_not_rd08 */
+ 0x01d6b043,
+ 0xf03d1bf4,
+ 0x21f50057,
+ 0x11f40a62,
+ 0xe0c5c733,
+ 0x0a0721f5,
+ 0xf02911f4,
+ 0x21f50057,
+ 0x11f40a62,
+ 0xe0b5c71f,
+ 0x0a0721f5,
+ 0xf51511f4,
+ 0xbd08fa21,
+ 0x08c5c774,
+ 0xf4091bf4,
+ 0x0ef40232,
+/* 0x0c19: i2c_recv_not_wr08 */
+/* 0x0c19: i2c_recv_done */
+ 0xf8cec703,
+ 0x0ac421f5,
+ 0xd0fce0fc,
+ 0xb90a12f4,
+ 0x21f5027c,
+/* 0x0c2e: i2c_recv_exit */
+ 0x00f802f1,
+/* 0x0c30: i2c_init */
+/* 0x0c32: test_recv */
+ 0x17f100f8,
+ 0x11cf05d8,
+ 0x0110b600,
+ 0x05d807f1,
+ 0xbd0001d0,
+ 0x00e7f104,
+ 0x4fe3f1d9,
+ 0x2321f513,
+/* 0x0c53: test_init */
+ 0xf100f802,
+ 0xf50800e7,
0xf8022321,
-/* 0x0acd: test_init */
- 0x00e7f100,
- 0x2321f508,
-/* 0x0ad7: idle_recv */
- 0xf800f802,
-/* 0x0ad9: idle */
- 0x0031f400,
- 0x05d417f1,
- 0xb60011cf,
- 0x07f10110,
- 0x01d005d4,
-/* 0x0aef: idle_loop */
- 0xf004bd00,
- 0x32f45817,
-/* 0x0af5: idle_proc */
-/* 0x0af5: idle_proc_exec */
- 0xb910f902,
- 0x21f5021e,
- 0x10fc02fa,
- 0xf40911f4,
- 0x0ef40231,
-/* 0x0b09: idle_proc_next */
- 0x5810b6ef,
- 0xf4061fb8,
- 0x02f4e61b,
- 0x0028f4dd,
- 0x00c10ef4,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
- 0x00000000,
+/* 0x0c5d: idle_recv */
+/* 0x0c5f: idle */
+ 0xf400f800,
+ 0x17f10031,
+ 0x11cf05d4,
+ 0x0110b600,
+ 0x05d407f1,
+ 0xbd0001d0,
+/* 0x0c75: idle_loop */
+ 0x5817f004,
+/* 0x0c7b: idle_proc */
+/* 0x0c7b: idle_proc_exec */
+ 0xf90232f4,
+ 0x021eb910,
+ 0x02fa21f5,
+ 0x11f410fc,
+ 0x0231f409,
+/* 0x0c8f: idle_proc_next */
+ 0xb6ef0ef4,
+ 0x1fb85810,
+ 0xe61bf406,
+ 0xf4dd02f4,
+ 0x0ef40028,
+ 0x000000c1,
0x00000000,
0x00000000,
0x00000000,
diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h
b/drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h
index fe4f63d..a619f74 100644
--- a/drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h
+++ b/drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h
@@ -68,7 +68,7 @@ uint32_t gk208_pmu_data[] = {
0x00000000,
0x00000000,
0x46524550,
- 0x00000631,
+ 0x00000717,
0x0000062f,
0x00000000,
0x00000000,
@@ -90,8 +90,8 @@ uint32_t gk208_pmu_data[] = {
0x00000000,
0x00000000,
0x5f433249,
- 0x00000a35,
- 0x000008dc,
+ 0x00000ba3,
+ 0x00000a4a,
0x00000000,
0x00000000,
0x00000000,
@@ -112,8 +112,8 @@ uint32_t gk208_pmu_data[] = {
0x00000000,
0x00000000,
0x54534554,
- 0x00000a56,
- 0x00000a37,
+ 0x00000bc4,
+ 0x00000ba5,
0x00000000,
0x00000000,
0x00000000,
@@ -134,8 +134,8 @@ uint32_t gk208_pmu_data[] = {
0x00000000,
0x00000000,
0x454c4449,
- 0x00000a61,
- 0x00000a5f,
+ 0x00000bcf,
+ 0x00000bcd,
0x00000000,
0x00000000,
0x00000000,
@@ -834,7 +834,15 @@ uint32_t gk208_pmu_data[] = {
0x00000000,
0x00000000,
/* 0x0ccc: memx_train_tail */
-/* 0x0ccc: i2c_scl_map */
+/* 0x0ccc: perf_attr_start */
+/* 0x0ccc: perf_polling_period_us */
+ 0x000186a0,
+/* 0x0cd0: perf_eng_gr */
+/* 0x0cd1: perf_eng_vdec */
+/* 0x0cd2: perf_eng_mc */
+/* 0x0cd3: perf_eng_pcie */
+ 0x00000000,
+/* 0x0cd4: i2c_scl_map */
0x00000400,
0x00000800,
0x00001000,
@@ -845,7 +853,7 @@ uint32_t gk208_pmu_data[] = {
0x00020000,
0x00040000,
0x00080000,
-/* 0x0cf4: i2c_sda_map */
+/* 0x0cfc: i2c_sda_map */
0x00100000,
0x00200000,
0x00400000,
@@ -911,8 +919,6 @@ uint32_t gk208_pmu_data[] = {
0x00000000,
0x00000000,
0x00000000,
- 0x00000000,
- 0x00000000,
};
uint32_t gk208_pmu_code[] = {
@@ -1373,111 +1379,188 @@ uint32_t gk208_pmu_code[] = {
0xf8dc0bf4,
/* 0x062d: memx_init */
/* 0x062f: perf_recv */
- 0xf800f800,
-/* 0x0631: perf_init */
-/* 0x0633: i2c_drive_scl */
- 0xb000f800,
- 0x0bf40036,
- 0x07e0400d,
- 0xbd0001f6,
-/* 0x0643: i2c_drive_scl_lo */
- 0x4000f804,
- 0x01f607e4,
- 0xf804bd00,
-/* 0x064d: i2c_drive_sda */
+ 0xf900f800,
+ 0x48a7f110,
+ 0x53a3f14f,
+ 0xf4eaa654,
+ 0xd6b0441b,
+ 0x060bf401,
+/* 0x0647: perf_load */
+ 0xbd500ef4,
+ 0xf1c4bdb4,
+ 0x180cd307,
+ 0x04bd000c,
+ 0xf108c4b6,
+ 0x180cd207,
+ 0x04bd000c,
+ 0xf108c4b6,
+ 0x180cd107,
+ 0x04bd000c,
+ 0xf108c4b6,
+ 0x180cd007,
+ 0x04bd000c,
+ 0x0002c27e,
+/* 0x067f: perf_recv_not_host */
+ 0x7e180ef4,
+ 0xf1000698,
+ 0x980ccc07,
+ 0x04bd000e,
+ 0x01d621f5,
+ 0x0002017e,
+/* 0x0694: perf_recv_exit */
+ 0x00f810fc,
+/* 0x0698: perf_counter_readout */
+ 0xcf05084e,
+ 0xeecc00ee,
+ 0x05184dff,
+ 0xff00ddcf,
+ 0x07f1dcde,
+ 0x0d200cd0,
+ 0x284d04bd,
+ 0x00ddcf05,
+ 0xf1dcdeff,
+ 0x200cd107,
+ 0x4d04bd0d,
+ 0xddcf0538,
+ 0xdcdeff00,
+ 0x0cd207f1,
+ 0x04bd0d20,
+ 0xcf05484d,
+ 0xdeff00dd,
+ 0xd307f1dc,
+ 0xbd0d200c,
+ 0x00e7f104,
+ 0x00e3f100,
+ 0x05084080,
+ 0xbd000ef6,
+ 0x05184004,
+ 0xbd000ef6,
+ 0x05284004,
+ 0xbd000ef6,
+ 0x05384004,
+ 0xbd000ef6,
+ 0x05484004,
+ 0xbd000ef6,
+/* 0x0717: perf_init */
+ 0xf100f804,
+ 0xf00003e7,
+ 0x0c4000e3,
+ 0x000ef605,
+ 0xe7f104bd,
+ 0xe3f00002,
+ 0x051c4000,
+ 0xbd000ef6,
+ 0x052c4004,
+ 0xbd000ef6,
+ 0x053c4004,
+ 0xbd000ef6,
+ 0x054c4004,
+ 0xbd000ef6,
+ 0x0fe7f104,
+ 0x38e3f000,
+ 0xf6051440,
+ 0x04bd000e,
+ 0x0070e7f1,
+ 0x4002e3f0,
+ 0x0ef60524,
+ 0xf104bd00,
+ 0xf00080e7,
+ 0x344000e3,
+ 0x000ef605,
+ 0xe7f104bd,
+ 0xe3f10000,
+ 0x44402000,
+ 0x000ef605,
+ 0x987e04bd,
+ 0x07f10006,
+ 0x0e980ccc,
+ 0xf504bd00,
+ 0x7e01d621,
+ 0xf8000201,
+/* 0x07a1: i2c_drive_scl */
0x0036b000,
0x400d0bf4,
- 0x02f607e0,
+ 0x01f607e0,
0xf804bd00,
-/* 0x065d: i2c_drive_sda_lo */
+/* 0x07b1: i2c_drive_scl_lo */
0x07e44000,
+ 0xbd0001f6,
+/* 0x07bb: i2c_drive_sda */
+ 0xb000f804,
+ 0x0bf40036,
+ 0x07e0400d,
0xbd0002f6,
-/* 0x0667: i2c_sense_scl */
- 0xf400f804,
- 0xc4430132,
- 0x0033cf07,
- 0xf40431fd,
- 0x31f4060b,
-/* 0x0679: i2c_sense_scl_done */
-/* 0x067b: i2c_sense_sda */
- 0xf400f801,
- 0xc4430132,
- 0x0033cf07,
- 0xf40432fd,
- 0x31f4060b,
-/* 0x068d: i2c_sense_sda_done */
-/* 0x068f: i2c_raise_scl */
- 0xf900f801,
- 0x08984440,
- 0x337e0103,
-/* 0x069a: i2c_raise_scl_wait */
- 0xe84e0006,
- 0x005d7e03,
- 0x06677e00,
- 0x0901f400,
- 0xf40142b6,
-/* 0x06ae: i2c_raise_scl_done */
- 0x40fcef1b,
-/* 0x06b2: i2c_start */
- 0x677e00f8,
- 0x11f40006,
- 0x067b7e0d,
- 0x0611f400,
-/* 0x06c3: i2c_start_rep */
- 0x032e0ef4,
- 0x06337e00,
- 0x7e010300,
- 0xbb00064d,
- 0x65b60076,
- 0x9450f904,
- 0x56bb0465,
- 0xfd50bd02,
- 0x50fc0475,
- 0x00068f7e,
- 0xf40464b6,
-/* 0x06ee: i2c_start_send */
- 0x00031d11,
- 0x00064d7e,
- 0x7e13884e,
+/* 0x07cb: i2c_drive_sda_lo */
+ 0x4000f804,
+ 0x02f607e4,
+ 0xf804bd00,
+/* 0x07d5: i2c_sense_scl */
+ 0x0132f400,
+ 0xcf07c443,
+ 0x31fd0033,
+ 0x060bf404,
+/* 0x07e7: i2c_sense_scl_done */
+ 0xf80131f4,
+/* 0x07e9: i2c_sense_sda */
+ 0x0132f400,
+ 0xcf07c443,
+ 0x32fd0033,
+ 0x060bf404,
+/* 0x07fb: i2c_sense_sda_done */
+ 0xf80131f4,
+/* 0x07fd: i2c_raise_scl */
+ 0x4440f900,
+ 0x01030898,
+ 0x0007a17e,
+/* 0x0808: i2c_raise_scl_wait */
+ 0x7e03e84e,
+ 0x7e00005d,
+ 0xf40007d5,
+ 0x42b60901,
+ 0xef1bf401,
+/* 0x081c: i2c_raise_scl_done */
+ 0x00f840fc,
+/* 0x0820: i2c_start */
+ 0x0007d57e,
+ 0x7e0d11f4,
+ 0xf40007e9,
+ 0x0ef40611,
+/* 0x0831: i2c_start_rep */
+ 0x7e00032e,
+ 0x030007a1,
+ 0x07bb7e01,
+ 0x0076bb00,
+ 0xf90465b6,
+ 0x04659450,
+ 0xbd0256bb,
+ 0x0475fd50,
+ 0xfd7e50fc,
+ 0x64b60007,
+ 0x1d11f404,
+/* 0x085c: i2c_start_send */
+ 0xbb7e0003,
+ 0x884e0007,
+ 0x005d7e13,
+ 0x7e000300,
+ 0x4e0007a1,
+ 0x5d7e1388,
+/* 0x0876: i2c_start_out */
+ 0x00f80000,
+/* 0x0878: i2c_stop */
+ 0xa17e0003,
+ 0x00030007,
+ 0x0007bb7e,
+ 0x7e03e84e,
0x0300005d,
- 0x06337e00,
+ 0x07a17e01,
0x13884e00,
0x00005d7e,
-/* 0x0708: i2c_start_out */
-/* 0x070a: i2c_stop */
- 0x000300f8,
- 0x0006337e,
- 0x4d7e0003,
- 0xe84e0006,
- 0x005d7e03,
- 0x7e010300,
- 0x4e000633,
- 0x5d7e1388,
- 0x01030000,
- 0x00064d7e,
- 0x7e13884e,
- 0xf800005d,
-/* 0x0739: i2c_bitw */
- 0x064d7e00,
- 0x03e84e00,
- 0x00005d7e,
- 0xb60076bb,
- 0x50f90465,
- 0xbb046594,
- 0x50bd0256,
- 0xfc0475fd,
- 0x068f7e50,
- 0x0464b600,
- 0x4e1711f4,
- 0x5d7e1388,
- 0x00030000,
- 0x0006337e,
- 0x7e13884e,
-/* 0x0777: i2c_bitw_out */
- 0xf800005d,
-/* 0x0779: i2c_bitr */
- 0x7e010300,
- 0x4e00064d,
+ 0xbb7e0103,
+ 0x884e0007,
+ 0x005d7e13,
+/* 0x08a7: i2c_bitw */
+ 0x7e00f800,
+ 0x4e0007bb,
0x5d7e03e8,
0x76bb0000,
0x0465b600,
@@ -1485,225 +1568,280 @@ uint32_t gk208_pmu_code[] = {
0x0256bb04,
0x75fd50bd,
0x7e50fc04,
- 0xb600068f,
+ 0xb60007fd,
0x11f40464,
- 0x067b7e1a,
- 0x7e000300,
- 0x4e000633,
- 0x5d7e1388,
- 0x3cf00000,
- 0x0131f401,
-/* 0x07bc: i2c_bitr_done */
-/* 0x07be: i2c_get_byte */
- 0x000500f8,
-/* 0x07c2: i2c_get_byte_next */
- 0x54b60804,
- 0x0076bb01,
- 0xf90465b6,
- 0x04659450,
- 0xbd0256bb,
- 0x0475fd50,
- 0x797e50fc,
- 0x64b60007,
- 0x2a11f404,
- 0xb60553fd,
- 0x1bf40142,
- 0xbb0103d8,
+ 0x13884e17,
+ 0x00005d7e,
+ 0xa17e0003,
+ 0x884e0007,
+ 0x005d7e13,
+/* 0x08e5: i2c_bitw_out */
+/* 0x08e7: i2c_bitr */
+ 0x0300f800,
+ 0x07bb7e01,
+ 0x03e84e00,
+ 0x00005d7e,
+ 0xb60076bb,
+ 0x50f90465,
+ 0xbb046594,
+ 0x50bd0256,
+ 0xfc0475fd,
+ 0x07fd7e50,
+ 0x0464b600,
+ 0x7e1a11f4,
+ 0x030007e9,
+ 0x07a17e00,
+ 0x13884e00,
+ 0x00005d7e,
+ 0xf4013cf0,
+/* 0x092a: i2c_bitr_done */
+ 0x00f80131,
+/* 0x092c: i2c_get_byte */
+ 0x08040005,
+/* 0x0930: i2c_get_byte_next */
+ 0xbb0154b6,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
- 0x0007397e,
-/* 0x080b: i2c_get_byte_done */
- 0xf80464b6,
-/* 0x080d: i2c_put_byte */
-/* 0x080f: i2c_put_byte_next */
- 0xb6080400,
- 0x54ff0142,
- 0x0076bb38,
+ 0x0008e77e,
+ 0xf40464b6,
+ 0x53fd2a11,
+ 0x0142b605,
+ 0x03d81bf4,
+ 0x0076bb01,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
- 0x397e50fc,
- 0x64b60007,
- 0x3411f404,
- 0xf40046b0,
- 0x76bbd81b,
- 0x0465b600,
- 0x659450f9,
- 0x0256bb04,
- 0x75fd50bd,
- 0x7e50fc04,
- 0xb6000779,
- 0x11f40464,
- 0x0076bb0f,
- 0xf40136b0,
- 0x32f4061b,
-/* 0x0865: i2c_put_byte_done */
-/* 0x0867: i2c_addr */
- 0xbb00f801,
+ 0xa77e50fc,
+ 0x64b60008,
+/* 0x0979: i2c_get_byte_done */
+/* 0x097b: i2c_put_byte */
+ 0x0400f804,
+/* 0x097d: i2c_put_byte_next */
+ 0x0142b608,
+ 0xbb3854ff,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
- 0x0006b27e,
+ 0x0008a77e,
0xf40464b6,
- 0xc3e72911,
- 0x34b6012e,
- 0x0553fd01,
+ 0x46b03411,
+ 0xd81bf400,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
- 0x080d7e50,
+ 0x08e77e50,
0x0464b600,
-/* 0x08ac: i2c_addr_done */
-/* 0x08ae: i2c_acquire_addr */
- 0xcec700f8,
- 0x05e4b6f8,
- 0xd014e0b7,
-/* 0x08ba: i2c_acquire */
- 0xae7e00f8,
- 0x047e0008,
- 0xd9f00000,
- 0x002e7e03,
-/* 0x08cb: i2c_release */
- 0x7e00f800,
- 0x7e0008ae,
- 0xf0000004,
- 0x2e7e03da,
- 0x00f80000,
-/* 0x08dc: i2c_recv */
- 0xc70132f4,
- 0x14b6f8c1,
- 0x2816b002,
- 0x01371ff5,
- 0x0cf413b8,
- 0x00329800,
- 0x0ccc13b8,
- 0x00319800,
- 0xf90231f4,
- 0xf9e0f9d0,
- 0x0067f1d0,
- 0x0063f100,
- 0x01679210,
+ 0xbb0f11f4,
+ 0x36b00076,
+ 0x061bf401,
+/* 0x09d3: i2c_put_byte_done */
+ 0xf80132f4,
+/* 0x09d5: i2c_addr */
+ 0x0076bb00,
+ 0xf90465b6,
+ 0x04659450,
+ 0xbd0256bb,
+ 0x0475fd50,
+ 0x207e50fc,
+ 0x64b60008,
+ 0x2911f404,
+ 0x012ec3e7,
+ 0xfd0134b6,
+ 0x76bb0553,
+ 0x0465b600,
+ 0x659450f9,
+ 0x0256bb04,
+ 0x75fd50bd,
+ 0x7e50fc04,
+ 0xb600097b,
+/* 0x0a1a: i2c_addr_done */
+ 0x00f80464,
+/* 0x0a1c: i2c_acquire_addr */
+ 0xb6f8cec7,
+ 0xe0b705e4,
+ 0x00f8d014,
+/* 0x0a28: i2c_acquire */
+ 0x000a1c7e,
+ 0x0000047e,
+ 0x7e03d9f0,
+ 0xf800002e,
+/* 0x0a39: i2c_release */
+ 0x0a1c7e00,
+ 0x00047e00,
+ 0x03daf000,
+ 0x00002e7e,
+/* 0x0a4a: i2c_recv */
+ 0x32f400f8,
+ 0xf8c1c701,
+ 0xb00214b6,
+ 0x1ff52816,
+ 0x13b80137,
+ 0x98000cfc,
+ 0x13b80032,
+ 0x98000cd4,
+ 0x31f40031,
+ 0xf9d0f902,
+ 0xf1d0f9e0,
+ 0xf1000067,
+ 0x92100063,
+ 0x76bb0167,
+ 0x0465b600,
+ 0x659450f9,
+ 0x0256bb04,
+ 0x75fd50bd,
+ 0x7e50fc04,
+ 0xb6000a28,
+ 0xd0fc0464,
+ 0xf500d6b0,
+ 0x0500b01b,
+ 0x0076bb00,
+ 0xf90465b6,
+ 0x04659450,
+ 0xbd0256bb,
+ 0x0475fd50,
+ 0xd57e50fc,
+ 0x64b60009,
+ 0xcc11f504,
+ 0xe0c5c700,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
- 0x08ba7e50,
+ 0x097b7e50,
0x0464b600,
- 0xd6b0d0fc,
- 0xb01bf500,
- 0xbb000500,
- 0x65b60076,
- 0x9450f904,
- 0x56bb0465,
- 0xfd50bd02,
- 0x50fc0475,
- 0x0008677e,
- 0xf50464b6,
- 0xc700cc11,
- 0x76bbe0c5,
+ 0x00a911f5,
+ 0x76bb0105,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0x7e50fc04,
- 0xb600080d,
+ 0xb60009d5,
0x11f50464,
- 0x010500a9,
- 0xb60076bb,
- 0x50f90465,
- 0xbb046594,
- 0x50bd0256,
- 0xfc0475fd,
- 0x08677e50,
- 0x0464b600,
- 0x008711f5,
+ 0x76bb0087,
+ 0x0465b600,
+ 0x659450f9,
+ 0x0256bb04,
+ 0x75fd50bd,
+ 0x7e50fc04,
+ 0xb600092c,
+ 0x11f40464,
+ 0xe05bcb67,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
- 0x07be7e50,
+ 0x08787e50,
0x0464b600,
- 0xcb6711f4,
- 0x76bbe05b,
- 0x0465b600,
- 0x659450f9,
- 0x0256bb04,
- 0x75fd50bd,
- 0x7e50fc04,
- 0xb600070a,
- 0x5bb20464,
- 0x0ef474bd,
-/* 0x09e1: i2c_recv_not_rd08 */
- 0x01d6b041,
- 0x053b1bf4,
- 0x08677e00,
- 0x3211f400,
- 0x7ee0c5c7,
- 0xf400080d,
- 0x00052811,
- 0x0008677e,
- 0xc71f11f4,
- 0x0d7ee0b5,
- 0x11f40008,
- 0x070a7e15,
- 0xc774bd00,
- 0x1bf408c5,
- 0x0232f409,
-/* 0x0a1f: i2c_recv_not_wr08 */
-/* 0x0a1f: i2c_recv_done */
- 0xc7030ef4,
- 0xcb7ef8ce,
- 0xe0fc0008,
- 0x12f4d0fc,
- 0x7e7cb209,
-/* 0x0a33: i2c_recv_exit */
- 0xf80002c2,
-/* 0x0a35: i2c_init */
-/* 0x0a37: test_recv */
- 0x4100f800,
- 0x11cf0458,
- 0x0110b600,
- 0xf6045840,
- 0x04bd0001,
- 0xd900e7f1,
- 0x134fe3f1,
- 0x0002017e,
-/* 0x0a56: test_init */
- 0x004e00f8,
- 0x02017e08,
-/* 0x0a5f: idle_recv */
+ 0x74bd5bb2,
+/* 0x0b4f: i2c_recv_not_rd08 */
+ 0xb0410ef4,
+ 0x1bf401d6,
+ 0x7e00053b,
+ 0xf40009d5,
+ 0xc5c73211,
+ 0x097b7ee0,
+ 0x2811f400,
+ 0xd57e0005,
+ 0x11f40009,
+ 0xe0b5c71f,
+ 0x00097b7e,
+ 0x7e1511f4,
+ 0xbd000878,
+ 0x08c5c774,
+ 0xf4091bf4,
+ 0x0ef40232,
+/* 0x0b8d: i2c_recv_not_wr08 */
+/* 0x0b8d: i2c_recv_done */
+ 0xf8cec703,
+ 0x000a397e,
+ 0xd0fce0fc,
+ 0xb20912f4,
+ 0x02c27e7c,
+/* 0x0ba1: i2c_recv_exit */
+/* 0x0ba3: i2c_init */
0xf800f800,
-/* 0x0a61: idle */
- 0x0031f400,
- 0xcf045441,
- 0x10b60011,
- 0x04544001,
- 0xbd0001f6,
-/* 0x0a75: idle_loop */
- 0xf4580104,
-/* 0x0a7a: idle_proc */
-/* 0x0a7a: idle_proc_exec */
- 0x10f90232,
- 0xcb7e1eb2,
- 0x10fc0002,
- 0xf40911f4,
- 0x0ef40231,
-/* 0x0a8d: idle_proc_next */
- 0x5810b6f0,
- 0x1bf41fa6,
- 0xe002f4e8,
- 0xf40028f4,
- 0x0000c60e,
+/* 0x0ba5: test_recv */
+ 0x04584100,
+ 0xb60011cf,
+ 0x58400110,
+ 0x0001f604,
+ 0xe7f104bd,
+ 0xe3f1d900,
+ 0x017e134f,
+ 0x00f80002,
+/* 0x0bc4: test_init */
+ 0x7e08004e,
+ 0xf8000201,
+/* 0x0bcd: idle_recv */
+/* 0x0bcf: idle */
+ 0xf400f800,
+ 0x54410031,
+ 0x0011cf04,
+ 0x400110b6,
+ 0x01f60454,
+/* 0x0be3: idle_loop */
+ 0x0104bd00,
+ 0x0232f458,
+/* 0x0be8: idle_proc */
+/* 0x0be8: idle_proc_exec */
+ 0x1eb210f9,
+ 0x0002cb7e,
+ 0x11f410fc,
+ 0x0231f409,
+/* 0x0bfb: idle_proc_next */
+ 0xb6f00ef4,
+ 0x1fa65810,
+ 0xf4e81bf4,
+ 0x28f4e002,
+ 0xc60ef400,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
0x00000000,
0x00000000,
0x00000000,
diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h
b/drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h
index 2686f8f..7fb9a49 100644
--- a/drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h
+++ b/drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h
@@ -68,7 +68,7 @@ uint32_t gt215_pmu_data[] = {
0x00000000,
0x00000000,
0x46524550,
- 0x00000846,
+ 0x0000092b,
0x00000844,
0x00000000,
0x00000000,
@@ -90,8 +90,8 @@ uint32_t gt215_pmu_data[] = {
0x00000000,
0x00000000,
0x5f433249,
- 0x00000c76,
- 0x00000b19,
+ 0x00000de7,
+ 0x00000c8a,
0x00000000,
0x00000000,
0x00000000,
@@ -112,8 +112,8 @@ uint32_t gt215_pmu_data[] = {
0x00000000,
0x00000000,
0x54534554,
- 0x00000c9f,
- 0x00000c78,
+ 0x00000e10,
+ 0x00000de9,
0x00000000,
0x00000000,
0x00000000,
@@ -134,8 +134,8 @@ uint32_t gt215_pmu_data[] = {
0x00000000,
0x00000000,
0x454c4449,
- 0x00000cab,
- 0x00000ca9,
+ 0x00000e1c,
+ 0x00000e1a,
0x00000000,
0x00000000,
0x00000000,
@@ -834,7 +834,14 @@ uint32_t gt215_pmu_data[] = {
0x00000000,
0x00000000,
/* 0x0ccc: memx_train_tail */
-/* 0x0ccc: i2c_scl_map */
+/* 0x0ccc: perf_attr_start */
+/* 0x0ccc: perf_polling_period_us */
+ 0x000186a0,
+/* 0x0cd0: perf_eng_gr */
+/* 0x0cd1: perf_eng_vdec */
+/* 0x0cd2: perf_eng_mc */
+ 0x00000000,
+/* 0x0cd4: i2c_scl_map */
0x00001000,
0x00004000,
0x00010000,
@@ -845,7 +852,7 @@ uint32_t gt215_pmu_data[] = {
0x01000000,
0x04000000,
0x10000000,
-/* 0x0cf4: i2c_sda_map */
+/* 0x0cfc: i2c_sda_map */
0x00002000,
0x00008000,
0x00020000,
@@ -856,7 +863,7 @@ uint32_t gt215_pmu_data[] = {
0x02000000,
0x08000000,
0x20000000,
-/* 0x0d1c: i2c_ctrl */
+/* 0x0d24: i2c_ctrl */
0x0000e138,
0x0000e150,
0x0000e168,
@@ -912,8 +919,6 @@ uint32_t gt215_pmu_data[] = {
0x00000000,
0x00000000,
0x00000000,
- 0x00000000,
- 0x00000000,
};
uint32_t gt215_pmu_code[] = {
@@ -1516,352 +1521,484 @@ uint32_t gt215_pmu_code[] = {
/* 0x0842: memx_init */
0x00f800f8,
/* 0x0844: perf_recv */
-/* 0x0846: perf_init */
- 0x00f800f8,
-/* 0x0848: i2c_drive_scl */
- 0xf40036b0,
- 0x07f1110b,
- 0x04b607e0,
- 0x0001d006,
- 0x00f804bd,
-/* 0x085c: i2c_drive_scl_lo */
- 0x07e407f1,
- 0xd00604b6,
- 0x04bd0001,
-/* 0x086a: i2c_drive_sda */
- 0x36b000f8,
- 0x110bf400,
- 0x07e007f1,
+ 0xa7f110f9,
+ 0xa3f14f48,
+ 0xeab85453,
+ 0x381bf406,
+ 0xf401d6b0,
+ 0x0ef4060b,
+/* 0x085d: perf_load */
+ 0xbdb4bd44,
+ 0xd207f1c4,
+ 0x000c180c,
+ 0xc4b604bd,
+ 0xd107f108,
+ 0x000c180c,
+ 0xc4b604bd,
+ 0xd007f108,
+ 0x000c180c,
+ 0x21f504bd,
+ 0x0ef40342,
+/* 0x0889: perf_recv_not_host */
+ 0xa221f518,
+ 0xcc07f108,
+ 0x000e980c,
+ 0x21f504bd,
+ 0x21f50236,
+/* 0x089e: perf_recv_exit */
+ 0x10fc0262,
+/* 0x08a2: perf_counter_readout */
+ 0xe7f100f8,
+ 0xe4b60508,
+ 0x00eecf06,
+ 0xf1ffeecc,
+ 0xb60518d7,
+ 0xddcf06d4,
+ 0xdcdeff00,
+ 0x0cd007f1,
+ 0xbd000d00,
+ 0x28d7f104,
+ 0x06d4b605,
+ 0xff00ddcf,
+ 0x07f1dcde,
+ 0x0d000cd1,
+ 0xf104bd00,
+ 0xb60538d7,
+ 0xddcf06d4,
+ 0xdcdeff00,
+ 0x0cd207f1,
+ 0xbd000d00,
+ 0x00e7f104,
+ 0x00e3f100,
+ 0x0807f180,
+ 0x0604b605,
+ 0xbd000ed0,
+ 0x1807f104,
+ 0x0604b605,
+ 0xbd000ed0,
+ 0x2807f104,
+ 0x0604b605,
+ 0xbd000ed0,
+ 0x3807f104,
+ 0x0604b605,
+ 0xbd000ed0,
+/* 0x092b: perf_init */
+ 0xf100f804,
+ 0xf00003e7,
+ 0x07f100e3,
+ 0x04b6050c,
+ 0x000ed006,
+ 0xe7f104bd,
+ 0xe3f00002,
+ 0x1c07f100,
+ 0x0604b605,
+ 0xbd000ed0,
+ 0x2c07f104,
+ 0x0604b605,
+ 0xbd000ed0,
+ 0x3c07f104,
+ 0x0604b605,
+ 0xbd000ed0,
+ 0x0de7f104,
+ 0x00e3f000,
+ 0x051407f1,
0xd00604b6,
- 0x04bd0002,
-/* 0x087e: i2c_drive_sda_lo */
- 0x07f100f8,
- 0x04b607e4,
- 0x0002d006,
- 0x00f804bd,
-/* 0x088c: i2c_sense_scl */
- 0xf10132f4,
- 0xb607c437,
- 0x33cf0634,
- 0x0431fd00,
- 0xf4060bf4,
-/* 0x08a2: i2c_sense_scl_done */
- 0x00f80131,
-/* 0x08a4: i2c_sense_sda */
- 0xf10132f4,
- 0xb607c437,
- 0x33cf0634,
- 0x0432fd00,
- 0xf4060bf4,
-/* 0x08ba: i2c_sense_sda_done */
- 0x00f80131,
-/* 0x08bc: i2c_raise_scl */
- 0x47f140f9,
- 0x37f00898,
- 0x4821f501,
-/* 0x08c9: i2c_raise_scl_wait */
- 0xe8e7f108,
- 0x7f21f403,
- 0x088c21f5,
- 0xb60901f4,
- 0x1bf40142,
-/* 0x08dd: i2c_raise_scl_done */
- 0xf840fcef,
-/* 0x08e1: i2c_start */
- 0x8c21f500,
- 0x0d11f408,
- 0x08a421f5,
- 0xf40611f4,
-/* 0x08f2: i2c_start_rep */
- 0x37f0300e,
- 0x4821f500,
- 0x0137f008,
- 0x086a21f5,
- 0xb60076bb,
- 0x50f90465,
- 0xbb046594,
- 0x50bd0256,
- 0xfc0475fd,
- 0xbc21f550,
- 0x0464b608,
-/* 0x091f: i2c_start_send */
- 0xf01f11f4,
+ 0x04bd000e,
+ 0x0070e7f1,
+ 0xf100e3f0,
+ 0xb6052407,
+ 0x0ed00604,
+ 0xf104bd00,
+ 0xf00100e7,
+ 0x07f100e3,
+ 0x04b60534,
+ 0x000ed006,
+ 0x21f504bd,
+ 0x07f108a2,
+ 0x0e980ccc,
+ 0xf504bd00,
+ 0xf5023621,
+ 0xf8026221,
+/* 0x09b9: i2c_drive_scl */
+ 0x0036b000,
+ 0xf1110bf4,
+ 0xb607e007,
+ 0x01d00604,
+ 0xf804bd00,
+/* 0x09cd: i2c_drive_scl_lo */
+ 0xe407f100,
+ 0x0604b607,
+ 0xbd0001d0,
+/* 0x09db: i2c_drive_sda */
+ 0xb000f804,
+ 0x0bf40036,
+ 0xe007f111,
+ 0x0604b607,
+ 0xbd0002d0,
+/* 0x09ef: i2c_drive_sda_lo */
+ 0xf100f804,
+ 0xb607e407,
+ 0x02d00604,
+ 0xf804bd00,
+/* 0x09fd: i2c_sense_scl */
+ 0x0132f400,
+ 0x07c437f1,
+ 0xcf0634b6,
+ 0x31fd0033,
+ 0x060bf404,
+/* 0x0a13: i2c_sense_scl_done */
+ 0xf80131f4,
+/* 0x0a15: i2c_sense_sda */
+ 0x0132f400,
+ 0x07c437f1,
+ 0xcf0634b6,
+ 0x32fd0033,
+ 0x060bf404,
+/* 0x0a2b: i2c_sense_sda_done */
+ 0xf80131f4,
+/* 0x0a2d: i2c_raise_scl */
+ 0xf140f900,
+ 0xf0089847,
+ 0x21f50137,
+/* 0x0a3a: i2c_raise_scl_wait */
+ 0xe7f109b9,
+ 0x21f403e8,
+ 0xfd21f57f,
+ 0x0901f409,
+ 0xf40142b6,
+/* 0x0a4e: i2c_raise_scl_done */
+ 0x40fcef1b,
+/* 0x0a52: i2c_start */
+ 0x21f500f8,
+ 0x11f409fd,
+ 0x1521f50d,
+ 0x0611f40a,
+/* 0x0a63: i2c_start_rep */
+ 0xf0300ef4,
0x21f50037,
- 0xe7f1086a,
- 0x21f41388,
- 0x0037f07f,
- 0x084821f5,
- 0x1388e7f1,
-/* 0x093b: i2c_start_out */
- 0xf87f21f4,
-/* 0x093d: i2c_stop */
- 0x0037f000,
- 0x084821f5,
+ 0x37f009b9,
+ 0xdb21f501,
+ 0x0076bb09,
+ 0xf90465b6,
+ 0x04659450,
+ 0xbd0256bb,
+ 0x0475fd50,
+ 0x21f550fc,
+ 0x64b60a2d,
+ 0x1f11f404,
+/* 0x0a90: i2c_start_send */
0xf50037f0,
- 0xf1086a21,
- 0xf403e8e7,
+ 0xf109db21,
+ 0xf41388e7,
0x37f07f21,
- 0x4821f501,
- 0x88e7f108,
+ 0xb921f500,
+ 0x88e7f109,
0x7f21f413,
- 0xf50137f0,
- 0xf1086a21,
- 0xf41388e7,
- 0x00f87f21,
-/* 0x0970: i2c_bitw */
- 0x086a21f5,
+/* 0x0aac: i2c_start_out */
+/* 0x0aae: i2c_stop */
+ 0x37f000f8,
+ 0xb921f500,
+ 0x0037f009,
+ 0x09db21f5,
0x03e8e7f1,
- 0xbb7f21f4,
- 0x65b60076,
- 0x9450f904,
- 0x56bb0465,
- 0xfd50bd02,
- 0x50fc0475,
- 0x08bc21f5,
- 0xf40464b6,
- 0xe7f11811,
+ 0xf07f21f4,
+ 0x21f50137,
+ 0xe7f109b9,
0x21f41388,
- 0x0037f07f,
- 0x084821f5,
+ 0x0137f07f,
+ 0x09db21f5,
0x1388e7f1,
-/* 0x09af: i2c_bitw_out */
0xf87f21f4,
-/* 0x09b1: i2c_bitr */
- 0x0137f000,
- 0x086a21f5,
- 0x03e8e7f1,
- 0xbb7f21f4,
- 0x65b60076,
- 0x9450f904,
- 0x56bb0465,
- 0xfd50bd02,
- 0x50fc0475,
- 0x08bc21f5,
- 0xf40464b6,
- 0x21f51b11,
- 0x37f008a4,
- 0x4821f500,
- 0x88e7f108,
+/* 0x0ae1: i2c_bitw */
+ 0xdb21f500,
+ 0xe8e7f109,
+ 0x7f21f403,
+ 0xb60076bb,
+ 0x50f90465,
+ 0xbb046594,
+ 0x50bd0256,
+ 0xfc0475fd,
+ 0x2d21f550,
+ 0x0464b60a,
+ 0xf11811f4,
+ 0xf41388e7,
+ 0x37f07f21,
+ 0xb921f500,
+ 0x88e7f109,
0x7f21f413,
- 0xf4013cf0,
-/* 0x09f6: i2c_bitr_done */
- 0x00f80131,
-/* 0x09f8: i2c_get_byte */
- 0xf00057f0,
-/* 0x09fe: i2c_get_byte_next */
- 0x54b60847,
+/* 0x0b20: i2c_bitw_out */
+/* 0x0b22: i2c_bitr */
+ 0x37f000f8,
+ 0xdb21f501,
+ 0xe8e7f109,
+ 0x7f21f403,
+ 0xb60076bb,
+ 0x50f90465,
+ 0xbb046594,
+ 0x50bd0256,
+ 0xfc0475fd,
+ 0x2d21f550,
+ 0x0464b60a,
+ 0xf51b11f4,
+ 0xf00a1521,
+ 0x21f50037,
+ 0xe7f109b9,
+ 0x21f41388,
+ 0x013cf07f,
+/* 0x0b67: i2c_bitr_done */
+ 0xf80131f4,
+/* 0x0b69: i2c_get_byte */
+ 0x0057f000,
+/* 0x0b6f: i2c_get_byte_next */
+ 0xb60847f0,
+ 0x76bb0154,
+ 0x0465b600,
+ 0x659450f9,
+ 0x0256bb04,
+ 0x75fd50bd,
+ 0xf550fc04,
+ 0xb60b2221,
+ 0x11f40464,
+ 0x0553fd2b,
+ 0xf40142b6,
+ 0x37f0d81b,
0x0076bb01,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x21f550fc,
- 0x64b609b1,
- 0x2b11f404,
- 0xb60553fd,
- 0x1bf40142,
- 0x0137f0d8,
+ 0x64b60ae1,
+/* 0x0bb9: i2c_get_byte_done */
+/* 0x0bbb: i2c_put_byte */
+ 0xf000f804,
+/* 0x0bbe: i2c_put_byte_next */
+ 0x42b60847,
+ 0x3854ff01,
0xb60076bb,
0x50f90465,
0xbb046594,
0x50bd0256,
0xfc0475fd,
- 0x7021f550,
- 0x0464b609,
-/* 0x0a48: i2c_get_byte_done */
-/* 0x0a4a: i2c_put_byte */
- 0x47f000f8,
-/* 0x0a4d: i2c_put_byte_next */
- 0x0142b608,
- 0xbb3854ff,
- 0x65b60076,
- 0x9450f904,
- 0x56bb0465,
- 0xfd50bd02,
- 0x50fc0475,
- 0x097021f5,
- 0xf40464b6,
- 0x46b03411,
- 0xd81bf400,
- 0xb60076bb,
- 0x50f90465,
- 0xbb046594,
- 0x50bd0256,
- 0xfc0475fd,
- 0xb121f550,
- 0x0464b609,
- 0xbb0f11f4,
- 0x36b00076,
- 0x061bf401,
-/* 0x0aa3: i2c_put_byte_done */
- 0xf80132f4,
-/* 0x0aa5: i2c_addr */
- 0x0076bb00,
+ 0xe121f550,
+ 0x0464b60a,
+ 0xb03411f4,
+ 0x1bf40046,
+ 0x0076bbd8,
0xf90465b6,
0x04659450,
0xbd0256bb,
0x0475fd50,
0x21f550fc,
- 0x64b608e1,
- 0x2911f404,
- 0x012ec3e7,
- 0xfd0134b6,
- 0x76bb0553,
+ 0x64b60b22,
+ 0x0f11f404,
+ 0xb00076bb,
+ 0x1bf40136,
+ 0x0132f406,
+/* 0x0c14: i2c_put_byte_done */
+/* 0x0c16: i2c_addr */
+ 0x76bb00f8,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0xf550fc04,
- 0xb60a4a21,
-/* 0x0aea: i2c_addr_done */
- 0x00f80464,
-/* 0x0aec: i2c_acquire_addr */
- 0xb6f8cec7,
- 0xe0b702e4,
- 0xee980d1c,
-/* 0x0afb: i2c_acquire */
- 0xf500f800,
- 0xf40aec21,
- 0xd9f00421,
- 0x3f21f403,
-/* 0x0b0a: i2c_release */
- 0x21f500f8,
- 0x21f40aec,
- 0x03daf004,
- 0xf83f21f4,
-/* 0x0b19: i2c_recv */
- 0x0132f400,
- 0xb6f8c1c7,
- 0x16b00214,
- 0x3a1ff528,
- 0xf413a001,
- 0x0032980c,
- 0x0ccc13a0,
- 0xf4003198,
- 0xd0f90231,
- 0xd0f9e0f9,
- 0x000067f1,
- 0x100063f1,
- 0xbb016792,
+ 0xb60a5221,
+ 0x11f40464,
+ 0x2ec3e729,
+ 0x0134b601,
+ 0xbb0553fd,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
- 0x0afb21f5,
- 0xfc0464b6,
- 0x00d6b0d0,
- 0x00b31bf5,
- 0xbb0057f0,
+ 0x0bbb21f5,
+/* 0x0c5b: i2c_addr_done */
+ 0xf80464b6,
+/* 0x0c5d: i2c_acquire_addr */
+ 0xf8cec700,
+ 0xb702e4b6,
+ 0x980d24e0,
+ 0x00f800ee,
+/* 0x0c6c: i2c_acquire */
+ 0x0c5d21f5,
+ 0xf00421f4,
+ 0x21f403d9,
+/* 0x0c7b: i2c_release */
+ 0xf500f83f,
+ 0xf40c5d21,
+ 0xdaf00421,
+ 0x3f21f403,
+/* 0x0c8a: i2c_recv */
+ 0x32f400f8,
+ 0xf8c1c701,
+ 0xb00214b6,
+ 0x1ff52816,
+ 0x13a0013a,
+ 0x32980cfc,
+ 0xd413a000,
+ 0x0031980c,
+ 0xf90231f4,
+ 0xf9e0f9d0,
+ 0x0067f1d0,
+ 0x0063f100,
+ 0x01679210,
+ 0xb60076bb,
+ 0x50f90465,
+ 0xbb046594,
+ 0x50bd0256,
+ 0xfc0475fd,
+ 0x6c21f550,
+ 0x0464b60c,
+ 0xd6b0d0fc,
+ 0xb31bf500,
+ 0x0057f000,
+ 0xb60076bb,
+ 0x50f90465,
+ 0xbb046594,
+ 0x50bd0256,
+ 0xfc0475fd,
+ 0x1621f550,
+ 0x0464b60c,
+ 0x00d011f5,
+ 0xbbe0c5c7,
0x65b60076,
0x9450f904,
0x56bb0465,
0xfd50bd02,
0x50fc0475,
- 0x0aa521f5,
+ 0x0bbb21f5,
0xf50464b6,
- 0xc700d011,
- 0x76bbe0c5,
+ 0xf000ad11,
+ 0x76bb0157,
0x0465b600,
0x659450f9,
0x0256bb04,
0x75fd50bd,
0xf550fc04,
- 0xb60a4a21,
+ 0xb60c1621,
0x11f50464,
- 0x57f000ad,
- 0x0076bb01,
- 0xf90465b6,
- 0x04659450,
- 0xbd0256bb,
- 0x0475fd50,
- 0x21f550fc,
- 0x64b60aa5,
- 0x8a11f504,
- 0x0076bb00,
- 0xf90465b6,
- 0x04659450,
- 0xbd0256bb,
- 0x0475fd50,
- 0x21f550fc,
- 0x64b609f8,
- 0x6a11f404,
- 0xbbe05bcb,
- 0x65b60076,
- 0x9450f904,
- 0x56bb0465,
- 0xfd50bd02,
- 0x50fc0475,
- 0x093d21f5,
- 0xb90464b6,
- 0x74bd025b,
-/* 0x0c1f: i2c_recv_not_rd08 */
- 0xb0430ef4,
- 0x1bf401d6,
- 0x0057f03d,
- 0x0aa521f5,
- 0xc73311f4,
- 0x21f5e0c5,
- 0x11f40a4a,
- 0x0057f029,
- 0x0aa521f5,
- 0xc71f11f4,
- 0x21f5e0b5,
- 0x11f40a4a,
- 0x3d21f515,
- 0xc774bd09,
- 0x1bf408c5,
- 0x0232f409,
-/* 0x0c5f: i2c_recv_not_wr08 */
-/* 0x0c5f: i2c_recv_done */
- 0xc7030ef4,
- 0x21f5f8ce,
- 0xe0fc0b0a,
- 0x12f4d0fc,
- 0x027cb90a,
- 0x034221f5,
-/* 0x0c74: i2c_recv_exit */
-/* 0x0c76: i2c_init */
+ 0x76bb008a,
+ 0x0465b600,
+ 0x659450f9,
+ 0x0256bb04,
+ 0x75fd50bd,
+ 0xf550fc04,
+ 0xb60b6921,
+ 0x11f40464,
+ 0xe05bcb6a,
+ 0xb60076bb,
+ 0x50f90465,
+ 0xbb046594,
+ 0x50bd0256,
+ 0xfc0475fd,
+ 0xae21f550,
+ 0x0464b60a,
+ 0xbd025bb9,
+ 0x430ef474,
+/* 0x0d90: i2c_recv_not_rd08 */
+ 0xf401d6b0,
+ 0x57f03d1b,
+ 0x1621f500,
+ 0x3311f40c,
+ 0xf5e0c5c7,
+ 0xf40bbb21,
+ 0x57f02911,
+ 0x1621f500,
+ 0x1f11f40c,
+ 0xf5e0b5c7,
+ 0xf40bbb21,
+ 0x21f51511,
+ 0x74bd0aae,
+ 0xf408c5c7,
+ 0x32f4091b,
+ 0x030ef402,
+/* 0x0dd0: i2c_recv_not_wr08 */
+/* 0x0dd0: i2c_recv_done */
+ 0xf5f8cec7,
+ 0xfc0c7b21,
+ 0xf4d0fce0,
+ 0x7cb90a12,
+ 0x4221f502,
+/* 0x0de5: i2c_recv_exit */
+/* 0x0de7: i2c_init */
+ 0xf800f803,
+/* 0x0de9: test_recv */
+ 0xd817f100,
+ 0x0614b605,
+ 0xb60011cf,
+ 0x07f10110,
+ 0x04b605d8,
+ 0x0001d006,
+ 0xe7f104bd,
+ 0xe3f1d900,
+ 0x21f5134f,
+ 0x00f80262,
+/* 0x0e10: test_init */
+ 0x0800e7f1,
+ 0x026221f5,
+/* 0x0e1a: idle_recv */
0x00f800f8,
-/* 0x0c78: test_recv */
- 0x05d817f1,
- 0xcf0614b6,
- 0x10b60011,
- 0xd807f101,
- 0x0604b605,
- 0xbd0001d0,
- 0x00e7f104,
- 0x4fe3f1d9,
- 0x6221f513,
-/* 0x0c9f: test_init */
- 0xf100f802,
- 0xf50800e7,
- 0xf8026221,
-/* 0x0ca9: idle_recv */
-/* 0x0cab: idle */
- 0xf400f800,
- 0x17f10031,
- 0x14b605d4,
- 0x0011cf06,
- 0xf10110b6,
- 0xb605d407,
- 0x01d00604,
-/* 0x0cc7: idle_loop */
- 0xf004bd00,
- 0x32f45817,
-/* 0x0ccd: idle_proc */
-/* 0x0ccd: idle_proc_exec */
- 0xb910f902,
- 0x21f5021e,
- 0x10fc034b,
- 0xf40911f4,
- 0x0ef40231,
-/* 0x0ce1: idle_proc_next */
- 0x5810b6ef,
- 0xf4061fb8,
- 0x02f4e61b,
- 0x0028f4dd,
- 0x00bb0ef4,
+/* 0x0e1c: idle */
+ 0xf10031f4,
+ 0xb605d417,
+ 0x11cf0614,
+ 0x0110b600,
+ 0x05d407f1,
+ 0xd00604b6,
+ 0x04bd0001,
+/* 0x0e38: idle_loop */
+ 0xf45817f0,
+/* 0x0e3e: idle_proc */
+/* 0x0e3e: idle_proc_exec */
+ 0x10f90232,
+ 0xf5021eb9,
+ 0xfc034b21,
+ 0x0911f410,
+ 0xf40231f4,
+/* 0x0e52: idle_proc_next */
+ 0x10b6ef0e,
+ 0x061fb858,
+ 0xf4e61bf4,
+ 0x28f4dd02,
+ 0xbb0ef400,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
0x00000000,
0x00000000,
0x00000000,
diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/os.h
b/drm/nouveau/nvkm/subdev/pmu/fuc/os.h
index c8b06cb..53508d9 100644
--- a/drm/nouveau/nvkm/subdev/pmu/fuc/os.h
+++ b/drm/nouveau/nvkm/subdev/pmu/fuc/os.h
@@ -49,4 +49,8 @@
#define I2C__MSG_DATA0_WR08_REG 0:7
#define I2C__MSG_DATA1_WR08_VAL 0:7
+
+/* PERF: message identifiers */
+#define PERF_MSG_LOAD 1
+
#endif
diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc
b/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc
index 38eadf7..69a8f8d 100644
--- a/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc
+++ b/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc
@@ -30,6 +30,18 @@ process(PROC_PERF, #perf_init, #perf_recv)
* PERF data segment
*****************************************************************************/
#ifdef INCLUDE_DATA
+perf_attr_start:
+// parameters
+perf_polling_period_us: .b32 100000
+
+// engine usage percentage
+perf_eng_gr: .b8 0
+perf_eng_vdec: .b8 0
+perf_eng_mc: .b8 0
+#if NVKM_PPWR_CHIPSET >= GF100
+perf_eng_pcie: .b8 0
+#endif
+.align 4
#endif
/******************************************************************************
@@ -46,6 +58,78 @@ process(PROC_PERF, #perf_init, #perf_recv)
// $r11 - data1
// $r0 - zero
perf_recv:
+ push $r1
+
+ imm32($r10, PROC_HOST)
+ cmp b32 $r14 $r10
+ bra ne #perf_recv_not_host
+ cmp b32 $r13 PERF_MSG_LOAD
+ bra e #perf_load
+ bra #perf_recv_exit
+
+perf_load:
+ clear b32 $r11
+ clear b32 $r12
+#if NVKM_PPWR_CHIPSET >= GF100
+ ld(b8, $r12, #perf_eng_pcie)
+ shl b32 $r12 8
+#endif
+ ld(b8, $r12, #perf_eng_mc)
+ shl b32 $r12 8
+ ld(b8, $r12, #perf_eng_vdec)
+ shl b32 $r12 8
+ ld(b8, $r12, #perf_eng_gr)
+ call(send)
+ bra #perf_recv_exit
+
+perf_recv_not_host:
+ call(perf_counter_readout)
+
+ ld(b32, $r14, #perf_polling_period_us)
+ call #ticks_from_us
+ call(timer)
+
+perf_recv_exit:
+ pop $r1
+ ret
+
+
+// description
+//
+// $r15 - current (perf)
+// $r0 - zero
+perf_counter_readout:
+ nv_iord($r14, NV_PPWR_COUNTER_COUNT(0))
+ div $r14 $r14 0xff
+
+ nv_iord($r13, NV_PPWR_COUNTER_COUNT(1))
+ div $r13 $r13 $r14
+ st(b8, #perf_eng_gr, $r13)
+
+ nv_iord($r13, NV_PPWR_COUNTER_COUNT(2))
+ div $r13 $r13 $r14
+ st(b8, #perf_eng_vdec, $r13)
+
+ nv_iord($r13, NV_PPWR_COUNTER_COUNT(3))
+ div $r13 $r13 $r14
+ st(b8, #perf_eng_mc, $r13)
+
+#if NVKM_PPWR_CHIPSET >= GF100
+ nv_iord($r13, NV_PPWR_COUNTER_COUNT(4))
+ div $r13 $r13 $r14
+ st(b8, #perf_eng_pcie, $r13)
+#endif
+
+ // reset the counters
+ imm32($r14, NV_PPWR_COUNTER_COUNT_RESET)
+ nv_iowr(NV_PPWR_COUNTER_COUNT(0), $r14)
+ nv_iowr(NV_PPWR_COUNTER_COUNT(1), $r14)
+ nv_iowr(NV_PPWR_COUNTER_COUNT(2), $r14)
+ nv_iowr(NV_PPWR_COUNTER_COUNT(3), $r14)
+#if NVKM_PPWR_CHIPSET >= GF100
+ nv_iowr(NV_PPWR_COUNTER_COUNT(4), $r14)
+#endif
+
ret
// description
@@ -53,5 +137,69 @@ perf_recv:
// $r15 - current (perf)
// $r0 - zero
perf_init:
+ // set up the total ticks counter first
+ imm32($r14, NV_PPWR_COUNTER_MODE_ALWAYS)
+ nv_iowr(NV_PPWR_COUNTER_MODE(0), $r14)
+
+ // set up the other counters, with fermi there are more
+ imm32($r14, NV_PPWR_COUNTER_MODE_IF_NOT_ALL)
+ nv_iowr(NV_PPWR_COUNTER_MODE(1), $r14)
+ nv_iowr(NV_PPWR_COUNTER_MODE(2), $r14)
+ nv_iowr(NV_PPWR_COUNTER_MODE(3), $r14)
+#if NVKM_PPWR_CHIPSET >= GF100
+ nv_iowr(NV_PPWR_COUNTER_MODE(4), $r14)
+#endif
+
+ // core load counter
+ imm32($r14,
+ NV_PPWR_COUNTER_SIG_GR_IDLE
+ | NV_PPWR_COUNTER_SIG_GR_GPC_IDLE
+ | NV_PPWR_COUNTER_SIG_GR_ROP_IDLE
+#if NVKM_PPWR_CHIPSET >= GF100
+ | NV_PPWR_COUNTER_SIG_GR_HUB_IDLE
+ | NV_PPWR_COUNTER_SIG_PCOPY0_IDLE
+ | NV_PPWR_COUNTER_SIG_PCOPY1_IDLE
+#if NVKM_PPWR_CHIPSET >= GK104
+ | NV_PPWR_COUNTER_SIG_PCOPY2_IDLE
+#endif
+#endif
+ )
+ nv_iowr(NV_PPWR_COUNTER_MASK(1), $r14)
+
+ // video load counter
+ imm32($r14,
+ NV_PPWR_COUNTER_SIG_PVLD_IDLE
+ | NV_PPWR_COUNTER_SIG_PPDEC_IDLE
+ | NV_PPWR_COUNTER_SIG_PPPP_IDLE
+#if NVKM_PPWR_CHIPSET >= GK104
+ | NV_PPWR_COUNTER_SIG_PVENC
+#endif
+ )
+ nv_iowr(NV_PPWR_COUNTER_MASK(2), $r14)
+
+ // memory load counter
+ imm32($r14,
+#if NVKM_PPWR_CHIPSET >= GF100
+ NV_PPWR_COUNTER_SIG_BFB_PART0_REQ
+#else
+ NV_PPWR_COUNTER_SIG_FB_PART0_REQ
+#endif
+ )
+ nv_iowr(NV_PPWR_COUNTER_MASK(3), $r14)
+
+ // pcie load counter
+#if NVKM_PPWR_CHIPSET >= GF100
+ imm32($r14, NV_PPWR_COUNTER_SIG_PCIE)
+ nv_iowr(NV_PPWR_COUNTER_MASK(4), $r14)
+#endif
+
+ // initial read out
+ call(perf_counter_readout)
+
+ // schedule the next read out
+ ld(b32, $r14, #perf_polling_period_us)
+ call #ticks_from_us
+ call(timer)
+
ret
#endif
--
2.6.2
Karol Herbst
2015-Oct-26 18:13 UTC
[Nouveau] [PATCH 4/4] nouveau/debugfs: add interface for current load
From: Karol Herbst <git at karolherbst.de>
---
drm/nouveau/include/nvif/device.h | 1 +
drm/nouveau/include/nvkm/subdev/pmu.h | 10 ++++++++++
drm/nouveau/nouveau_debugfs.c | 23 +++++++++++++++++++++++
drm/nouveau/nvkm/subdev/pmu/base.c | 18 ++++++++++++++++++
4 files changed, 52 insertions(+)
diff --git a/drm/nouveau/include/nvif/device.h
b/drm/nouveau/include/nvif/device.h
index 700a9b2..d289fdf 100644
--- a/drm/nouveau/include/nvif/device.h
+++ b/drm/nouveau/include/nvif/device.h
@@ -63,6 +63,7 @@ u64 nvif_device_time(struct nvif_device *);
#define nvxx_clk(a) nvxx_device(a)->clk
#define nvxx_i2c(a) nvxx_device(a)->i2c
#define nvxx_therm(a) nvxx_device(a)->therm
+#define nvxx_pmu(a) nvxx_device(a)->pmu
#include <core/device.h>
#include <engine/fifo.h>
diff --git a/drm/nouveau/include/nvkm/subdev/pmu.h
b/drm/nouveau/include/nvkm/subdev/pmu.h
index e61923d..be3c60e 100644
--- a/drm/nouveau/include/nvkm/subdev/pmu.h
+++ b/drm/nouveau/include/nvkm/subdev/pmu.h
@@ -23,6 +23,13 @@ struct nvkm_pmu {
} recv;
};
+struct nvkm_pmu_load_data {
+ u8 core;
+ u8 mem;
+ u8 video;
+ u8 pcie;
+};
+
int nvkm_pmu_send(struct nvkm_pmu *, u32 reply[2], u32 process,
u32 message, u32 data0, u32 data1);
void nvkm_pmu_pgob(struct nvkm_pmu *, bool enable);
@@ -48,4 +55,7 @@ void nvkm_memx_train(struct nvkm_memx *);
int nvkm_memx_train_result(struct nvkm_pmu *, u32 *, int);
void nvkm_memx_block(struct nvkm_memx *);
void nvkm_memx_unblock(struct nvkm_memx *);
+
+/* interface to PERF process running on PMU */
+int nvkm_pmu_get_perf_data(struct nvkm_pmu *, struct nvkm_pmu_load_data *);
#endif
diff --git a/drm/nouveau/nouveau_debugfs.c b/drm/nouveau/nouveau_debugfs.c
index 5392e07..ec3d3d3 100644
--- a/drm/nouveau/nouveau_debugfs.c
+++ b/drm/nouveau/nouveau_debugfs.c
@@ -28,6 +28,8 @@
* Ben Skeggs <bskeggs at redhat.com>
*/
+#include <nvkm/subdev/pmu.h>
+
#include "nouveau_debugfs.h"
#include "nouveau_drm.h"
@@ -43,8 +45,29 @@ nouveau_debugfs_vbios_image(struct seq_file *m, void *data)
return 0;
}
+static int
+nouveau_debugfs_current_load(struct seq_file *m, void *data)
+{
+ struct drm_info_node *node = (struct drm_info_node *) m->private;
+ struct nouveau_drm *drm = nouveau_drm(node->minor->dev);
+ struct nvkm_pmu *pmu = nvxx_pmu(&drm->device);
+ struct nvkm_pmu_load_data load_data;
+ int ret;
+
+ ret = nvkm_pmu_get_perf_data(pmu, &load_data);
+ if (ret < 0)
+ return ret;
+
+ seq_printf(m, "core: %i\n", load_data.core);
+ seq_printf(m, "mem: %i\n", load_data.mem);
+ seq_printf(m, "video: %i\n", load_data.video);
+ seq_printf(m, "pcie: %i\n", load_data.pcie);
+ return 0;
+}
+
static struct drm_info_list nouveau_debugfs_list[] = {
{ "vbios.rom", nouveau_debugfs_vbios_image, 0, NULL },
+ { "current_load", nouveau_debugfs_current_load, 0, NULL },
};
#define NOUVEAU_DEBUGFS_ENTRIES ARRAY_SIZE(nouveau_debugfs_list)
diff --git a/drm/nouveau/nvkm/subdev/pmu/base.c
b/drm/nouveau/nvkm/subdev/pmu/base.c
index d95eb86..ddb36e7 100644
--- a/drm/nouveau/nvkm/subdev/pmu/base.c
+++ b/drm/nouveau/nvkm/subdev/pmu/base.c
@@ -140,6 +140,24 @@ nvkm_pmu_recv(struct work_struct *work)
process, message, data0, data1);
}
+#define get_counter_index(v, i) (((v) & 0xff << ((i)*8)) >>
((i)*8))
+
+int
+nvkm_pmu_get_perf_data(struct nvkm_pmu *pmu, struct nvkm_pmu_load_data *data)
+{
+ int result[2], ret;
+ ret = nvkm_pmu_send(pmu, result, PROC_PERF, PERF_MSG_LOAD, 0, 0);
+
+ if (ret < 0)
+ return ret;
+
+ data->core = get_counter_index(result[0], 0);
+ data->video = get_counter_index(result[0], 1);
+ data->mem = get_counter_index(result[0], 2);
+ data->pcie = get_counter_index(result[0], 3);
+ return 0;
+}
+
static void
nvkm_pmu_intr(struct nvkm_subdev *subdev)
{
--
2.6.2
Ilia Mirkin
2015-Oct-26 18:17 UTC
[Nouveau] [PATCH 4/4] nouveau/debugfs: add interface for current load
On Mon, Oct 26, 2015 at 2:13 PM, Karol Herbst <nouveau at karolherbst.de> wrote:> From: Karol Herbst <git at karolherbst.de> > > --- > drm/nouveau/include/nvif/device.h | 1 + > drm/nouveau/include/nvkm/subdev/pmu.h | 10 ++++++++++ > drm/nouveau/nouveau_debugfs.c | 23 +++++++++++++++++++++++ > drm/nouveau/nvkm/subdev/pmu/base.c | 18 ++++++++++++++++++ > 4 files changed, 52 insertions(+) > > diff --git a/drm/nouveau/include/nvif/device.h b/drm/nouveau/include/nvif/device.h > index 700a9b2..d289fdf 100644 > --- a/drm/nouveau/include/nvif/device.h > +++ b/drm/nouveau/include/nvif/device.h > @@ -63,6 +63,7 @@ u64 nvif_device_time(struct nvif_device *); > #define nvxx_clk(a) nvxx_device(a)->clk > #define nvxx_i2c(a) nvxx_device(a)->i2c > #define nvxx_therm(a) nvxx_device(a)->therm > +#define nvxx_pmu(a) nvxx_device(a)->pmu > > #include <core/device.h> > #include <engine/fifo.h> > diff --git a/drm/nouveau/include/nvkm/subdev/pmu.h b/drm/nouveau/include/nvkm/subdev/pmu.h > index e61923d..be3c60e 100644 > --- a/drm/nouveau/include/nvkm/subdev/pmu.h > +++ b/drm/nouveau/include/nvkm/subdev/pmu.h > @@ -23,6 +23,13 @@ struct nvkm_pmu { > } recv; > }; > > +struct nvkm_pmu_load_data { > + u8 core; > + u8 mem; > + u8 video; > + u8 pcie; > +}; > + > int nvkm_pmu_send(struct nvkm_pmu *, u32 reply[2], u32 process, > u32 message, u32 data0, u32 data1); > void nvkm_pmu_pgob(struct nvkm_pmu *, bool enable); > @@ -48,4 +55,7 @@ void nvkm_memx_train(struct nvkm_memx *); > int nvkm_memx_train_result(struct nvkm_pmu *, u32 *, int); > void nvkm_memx_block(struct nvkm_memx *); > void nvkm_memx_unblock(struct nvkm_memx *); > + > +/* interface to PERF process running on PMU */ > +int nvkm_pmu_get_perf_data(struct nvkm_pmu *, struct nvkm_pmu_load_data *); > #endif > diff --git a/drm/nouveau/nouveau_debugfs.c b/drm/nouveau/nouveau_debugfs.c > index 5392e07..ec3d3d3 100644 > --- a/drm/nouveau/nouveau_debugfs.c > +++ b/drm/nouveau/nouveau_debugfs.c > @@ -28,6 +28,8 @@ > * Ben Skeggs <bskeggs at redhat.com> > */ > > +#include <nvkm/subdev/pmu.h> > + > #include "nouveau_debugfs.h" > #include "nouveau_drm.h" > > @@ -43,8 +45,29 @@ nouveau_debugfs_vbios_image(struct seq_file *m, void *data) > return 0; > } > > +static int > +nouveau_debugfs_current_load(struct seq_file *m, void *data) > +{ > + struct drm_info_node *node = (struct drm_info_node *) m->private; > + struct nouveau_drm *drm = nouveau_drm(node->minor->dev); > + struct nvkm_pmu *pmu = nvxx_pmu(&drm->device); > + struct nvkm_pmu_load_data load_data; > + int ret; > + > + ret = nvkm_pmu_get_perf_data(pmu, &load_data); > + if (ret < 0) > + return ret; > + > + seq_printf(m, "core: %i\n", load_data.core); > + seq_printf(m, "mem: %i\n", load_data.mem); > + seq_printf(m, "video: %i\n", load_data.video); > + seq_printf(m, "pcie: %i\n", load_data.pcie); > + return 0; > +} > + > static struct drm_info_list nouveau_debugfs_list[] = { > { "vbios.rom", nouveau_debugfs_vbios_image, 0, NULL }, > + { "current_load", nouveau_debugfs_current_load, 0, NULL }, > }; > #define NOUVEAU_DEBUGFS_ENTRIES ARRAY_SIZE(nouveau_debugfs_list) > > diff --git a/drm/nouveau/nvkm/subdev/pmu/base.c b/drm/nouveau/nvkm/subdev/pmu/base.c > index d95eb86..ddb36e7 100644 > --- a/drm/nouveau/nvkm/subdev/pmu/base.c > +++ b/drm/nouveau/nvkm/subdev/pmu/base.c > @@ -140,6 +140,24 @@ nvkm_pmu_recv(struct work_struct *work) > process, message, data0, data1); > } > > +#define get_counter_index(v, i) (((v) & 0xff << ((i)*8)) >> ((i)*8))Is this the same thing as (v >> (i*8)) & 0xff ? I can't tell if you're attempting to preserve the sign, but don't see why you'd want to since it all just becomes a u8 anyways.> + > +int > +nvkm_pmu_get_perf_data(struct nvkm_pmu *pmu, struct nvkm_pmu_load_data *data) > +{ > + int result[2], ret;Given the bit manipulations, sounds like result should be (a) unsigned and (b) sized.> + ret = nvkm_pmu_send(pmu, result, PROC_PERF, PERF_MSG_LOAD, 0, 0); > + > + if (ret < 0) > + return ret; > + > + data->core = get_counter_index(result[0], 0); > + data->video = get_counter_index(result[0], 1); > + data->mem = get_counter_index(result[0], 2); > + data->pcie = get_counter_index(result[0], 3); > + return 0; > +} > + > static void > nvkm_pmu_intr(struct nvkm_subdev *subdev) > { > -- > 2.6.2 > > _______________________________________________ > Nouveau mailing list > Nouveau at lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/nouveau
See my tiny nit-pick below. Op 26-10-15 om 18:13 schreef Karol Herbst:> From: Karol Herbst <git at karolherbst.de> > > --- > drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h | 788 +++++++++++++++------------ > drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h | 740 ++++++++++++++----------- > drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h | 740 ++++++++++++++----------- > drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h | 710 ++++++++++++++---------- > drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h | 755 ++++++++++++++----------- > drm/nouveau/nvkm/subdev/pmu/fuc/os.h | 4 + > drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc | 148 +++++ > 7 files changed, 2267 insertions(+), 1618 deletions(-) > > [snip] > > diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/os.h b/drm/nouveau/nvkm/subdev/pmu/fuc/os.h > index c8b06cb..53508d9 100644 > --- a/drm/nouveau/nvkm/subdev/pmu/fuc/os.h > +++ b/drm/nouveau/nvkm/subdev/pmu/fuc/os.h > @@ -49,4 +49,8 @@ > #define I2C__MSG_DATA0_WR08_REG 0:7 > #define I2C__MSG_DATA1_WR08_VAL 0:7 > > + > +/* PERF: message identifiers */ > +#define PERF_MSG_LOAD 1 > + > #endif > diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc b/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc > index 38eadf7..69a8f8d 100644 > --- a/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc > +++ b/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc > @@ -30,6 +30,18 @@ process(PROC_PERF, #perf_init, #perf_recv) > * PERF data segment > *****************************************************************************/ > #ifdef INCLUDE_DATA > +perf_attr_start: > +// parameters > +perf_polling_period_us: .b32 100000 > + > +// engine usage percentage > +perf_eng_gr: .b8 0 > +perf_eng_vdec: .b8 0 > +perf_eng_mc: .b8 0 > +#if NVKM_PPWR_CHIPSET >= GF100 > +perf_eng_pcie: .b8 0 > +#endif > +.align 4 > #endif > > /****************************************************************************** > @@ -46,6 +58,78 @@ process(PROC_PERF, #perf_init, #perf_recv) > // $r11 - data1 > // $r0 - zero > perf_recv: > + push $r1 > + > + imm32($r10, PROC_HOST) > + cmp b32 $r14 $r10 > + bra ne #perf_recv_not_host > + cmp b32 $r13 PERF_MSG_LOAD > + bra e #perf_load > + bra #perf_recv_exit > + > +perf_load: > + clear b32 $r11 > + clear b32 $r12 > +#if NVKM_PPWR_CHIPSET >= GF100 > + ld(b8, $r12, #perf_eng_pcie) > + shl b32 $r12 8 > +#endif > + ld(b8, $r12, #perf_eng_mc) > + shl b32 $r12 8 > + ld(b8, $r12, #perf_eng_vdec) > + shl b32 $r12 8 > + ld(b8, $r12, #perf_eng_gr) > + call(send) > + bra #perf_recv_exit > + > +perf_recv_not_host: > + call(perf_counter_readout) > + > + ld(b32, $r14, #perf_polling_period_us) > + call #ticks_from_us > + call(timer) > + > +perf_recv_exit: > + pop $r1 > + ret > + > + > +// description > +// > +// $r15 - current (perf) > +// $r0 - zero > +perf_counter_readout: > + nv_iord($r14, NV_PPWR_COUNTER_COUNT(0)) > + div $r14 $r14 0xff > + > + nv_iord($r13, NV_PPWR_COUNTER_COUNT(1)) > + div $r13 $r13 $r14 > + st(b8, #perf_eng_gr, $r13) > + > + nv_iord($r13, NV_PPWR_COUNTER_COUNT(2)) > + div $r13 $r13 $r14 > + st(b8, #perf_eng_vdec, $r13) > + > + nv_iord($r13, NV_PPWR_COUNTER_COUNT(3)) > + div $r13 $r13 $r14 > + st(b8, #perf_eng_mc, $r13) > + > +#if NVKM_PPWR_CHIPSET >= GF100 > + nv_iord($r13, NV_PPWR_COUNTER_COUNT(4)) > + div $r13 $r13 $r14 > + st(b8, #perf_eng_pcie, $r13) > +#endif > + > + // reset the counters > + imm32($r14, NV_PPWR_COUNTER_COUNT_RESET) > + nv_iowr(NV_PPWR_COUNTER_COUNT(0), $r14) > + nv_iowr(NV_PPWR_COUNTER_COUNT(1), $r14) > + nv_iowr(NV_PPWR_COUNTER_COUNT(2), $r14) > + nv_iowr(NV_PPWR_COUNTER_COUNT(3), $r14) > +#if NVKM_PPWR_CHIPSET >= GF100 > + nv_iowr(NV_PPWR_COUNTER_COUNT(4), $r14) > +#endif > + > ret > > // description > @@ -53,5 +137,69 @@ perf_recv: > // $r15 - current (perf) > // $r0 - zero > perf_init: > + // set up the total ticks counter first > + imm32($r14, NV_PPWR_COUNTER_MODE_ALWAYS) > + nv_iowr(NV_PPWR_COUNTER_MODE(0), $r14) > + > + // set up the other counters, with fermi there are more > + imm32($r14, NV_PPWR_COUNTER_MODE_IF_NOT_ALL) > + nv_iowr(NV_PPWR_COUNTER_MODE(1), $r14) > + nv_iowr(NV_PPWR_COUNTER_MODE(2), $r14) > + nv_iowr(NV_PPWR_COUNTER_MODE(3), $r14) > +#if NVKM_PPWR_CHIPSET >= GF100 > + nv_iowr(NV_PPWR_COUNTER_MODE(4), $r14) > +#endif > + > + // core load counter > + imm32($r14, > + NV_PPWR_COUNTER_SIG_GR_IDLE > + | NV_PPWR_COUNTER_SIG_GR_GPC_IDLE > + | NV_PPWR_COUNTER_SIG_GR_ROP_IDLE > +#if NVKM_PPWR_CHIPSET >= GF100 > + | NV_PPWR_COUNTER_SIG_GR_HUB_IDLE > + | NV_PPWR_COUNTER_SIG_PCOPY0_IDLE > + | NV_PPWR_COUNTER_SIG_PCOPY1_IDLE > +#if NVKM_PPWR_CHIPSET >= GK104 > + | NV_PPWR_COUNTER_SIG_PCOPY2_IDLE > +#endif > +#endifI'm not a big fan of nesting myself if it's not necessary, find it clearer to keep them separate "if" preprocessor hints.> + ) > + nv_iowr(NV_PPWR_COUNTER_MASK(1), $r14) > + > + // video load counter > + imm32($r14, > + NV_PPWR_COUNTER_SIG_PVLD_IDLE > + | NV_PPWR_COUNTER_SIG_PPDEC_IDLE > + | NV_PPWR_COUNTER_SIG_PPPP_IDLE > +#if NVKM_PPWR_CHIPSET >= GK104 > + | NV_PPWR_COUNTER_SIG_PVENC > +#endif > + ) > + nv_iowr(NV_PPWR_COUNTER_MASK(2), $r14) > + > + // memory load counter > + imm32($r14, > +#if NVKM_PPWR_CHIPSET >= GF100 > + NV_PPWR_COUNTER_SIG_BFB_PART0_REQ > +#else > + NV_PPWR_COUNTER_SIG_FB_PART0_REQ > +#endif > + ) > + nv_iowr(NV_PPWR_COUNTER_MASK(3), $r14) > + > + // pcie load counter > +#if NVKM_PPWR_CHIPSET >= GF100 > + imm32($r14, NV_PPWR_COUNTER_SIG_PCIE) > + nv_iowr(NV_PPWR_COUNTER_MASK(4), $r14) > +#endif > + > + // initial read out > + call(perf_counter_readout) > + > + // schedule the next read out > + ld(b32, $r14, #perf_polling_period_us) > + call #ticks_from_us > + call(timer) > + > ret > #endif
On 26/10/15 20:13, Karol Herbst wrote:> From: Karol Herbst <git at karolherbst.de> > > we need this, because since kepler there is PCOPY2 and this is needed for the > counters later in this series > --- > drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4 | 70 + > drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h | 1795 ++++++++++++++++++++++++++ > drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc | 1 + > drm/nouveau/nvkm/subdev/pmu/gk104.c | 4 +- > drm/nouveau/nvkm/subdev/pmu/gk110.c | 6 +- > 5 files changed, 1870 insertions(+), 6 deletions(-) > create mode 100644 drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4 > create mode 100644 drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h >Reviewed-by: Martin Peres <martin.peres at free.fr>
Martin Peres
2016-Feb-14 21:14 UTC
[Nouveau] [PATCH 2/4] pmu/fuc: add macros for pdaemon pwr counters
On 26/10/15 20:13, Karol Herbst wrote:> From: Karol Herbst <git at karolherbst.de> > > --- > drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc b/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc > index c5ec61f..86b8fd4 100644 > --- a/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc > +++ b/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc > @@ -66,6 +66,29 @@ > #define NV_PPWR_RFIFO_GET 0x04cc > #define NV_PPWR_H2D 0x04d0 > #define NV_PPWR_D2H 0x04dc > +#define NV_PPWR_COUNTER_MASK(i) (0x10 * (i) + 0x0504) > +#define NV_PPWR_COUNTER_COUNT(i) (0x10 * (i) + 0x0508) > +#define NV_PPWR_COUNTER_COUNT_RESET 0x80000000 > +#define NV_PPWR_COUNTER_MODE(i) (0x10 * (i) + 0x050c) > +#define NV_PPWR_COUNTER_MODE_NEVER 0 > +#define NV_PPWR_COUNTER_MODE_IF_ALL 1 > +#define NV_PPWR_COUNTER_MODE_IF_NOT_ALL 2 > +#define NV_PPWR_COUNTER_MODE_ALWAYS 3 > +#define NV_PPWR_COUNTER_SIG_GR_IDLE 0x00000001 > +#define NV_PPWR_COUNTER_SIG_GR_HUB_IDLE 0x00000002 > +#define NV_PPWR_COUNTER_SIG_GR_GPC_IDLE 0x00000004 > +#define NV_PPWR_COUNTER_SIG_GR_ROP_IDLE 0x00000008 > +#define NV_PPWR_COUNTER_SIG_PVLD_IDLE 0x00000010 > +#define NV_PPWR_COUNTER_SIG_PPDEC_IDLE 0x00000020 > +#define NV_PPWR_COUNTER_SIG_PPPP_IDLE 0x00000040 > +#define NV_PPWR_COUNTER_SIG_BFB_PART0_REQ 0x00000080 > +#define NV_PPWR_COUNTER_SIG_FB_PART0_REQ 0x00000100 > +#define NV_PPWR_COUNTER_SIG_PMFB 0x00001000 > +#define NV_PPWR_COUNTER_SIG_PVENC 0x00020000 > +#define NV_PPWR_COUNTER_SIG_PCOPY0_IDLE 0x00080000 > +#define NV_PPWR_COUNTER_SIG_PCOPY1_IDLE 0x00100000 > +#define NV_PPWR_COUNTER_SIG_PCOPY2_IDLE 0x00200000 > +#define NV_PPWR_COUNTER_SIG_PCIE 0x20000000 > #if NVKM_PPWR_CHIPSET < GK208 > #define NV_PPWR_DSCRATCH(i) (4 * (i) + 0x05d0) > #endifWhy call the signals _IDLE when they are set when the engine is busy and cleared when idle? This is why I named the bitfield gt215_pdaemon_counter_busy_signals in envytools. With this fixed: Reviewed-by: Martin Peres <martin.peres at free.fr>
On 26/10/15 20:13, Karol Herbst wrote:> From: Karol Herbst <git at karolherbst.de> > > --- > drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h | 788 +++++++++++++++------------ > drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h | 740 ++++++++++++++----------- > drm/nouveau/nvkm/subdev/pmu/fuc/gk104.fuc4.h | 740 ++++++++++++++----------- > drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h | 710 ++++++++++++++---------- > drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h | 755 ++++++++++++++----------- > drm/nouveau/nvkm/subdev/pmu/fuc/os.h | 4 + > drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc | 148 +++++ > 7 files changed, 2267 insertions(+), 1618 deletions(-) > > > diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/os.h b/drm/nouveau/nvkm/subdev/pmu/fuc/os.h > index c8b06cb..53508d9 100644 > --- a/drm/nouveau/nvkm/subdev/pmu/fuc/os.h > +++ b/drm/nouveau/nvkm/subdev/pmu/fuc/os.h > @@ -49,4 +49,8 @@ > #define I2C__MSG_DATA0_WR08_REG 0:7 > #define I2C__MSG_DATA1_WR08_VAL 0:7 > > + > +/* PERF: message identifiers */ > +#define PERF_MSG_LOAD 1Could you document the expected inputs and outputs of this message as a comment? // IN: don't care // OUT: // - byte 3: PCIe load (GF100+) // - byte 2: Memory load // - byte 1: Video decoding engines' load // - byte 0: GR load> + > #endif > diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc b/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc > index 38eadf7..69a8f8d 100644 > --- a/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc > +++ b/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc > @@ -30,6 +30,18 @@ process(PROC_PERF, #perf_init, #perf_recv) > * PERF data segment > *****************************************************************************/ > #ifdef INCLUDE_DATA > +perf_attr_start: > +// parameters > +perf_polling_period_us: .b32 100000 > + > +// engine usage percentageIt is a tiny bit misleading to say percentage when you mean per-255. How about: // engine usage (0-255)> +perf_eng_gr: .b8 0 > +perf_eng_vdec: .b8 0 > +perf_eng_mc: .b8 0 > +#if NVKM_PPWR_CHIPSET >= GF100 > +perf_eng_pcie: .b8 0 > +#endif > +.align 4 > #endif > > /****************************************************************************** > @@ -46,6 +58,78 @@ process(PROC_PERF, #perf_init, #perf_recv) > // $r11 - data1 > // $r0 - zero > perf_recv: > + push $r1 > + > + imm32($r10, PROC_HOST) > + cmp b32 $r14 $r10 > + bra ne #perf_recv_not_host > + cmp b32 $r13 PERF_MSG_LOADThanks for doing this and not assuming straight away that this is going to be the only type of messages you will receive from the host :)> + bra e #perf_load > + bra #perf_recv_exit > + > +perf_load: > + clear b32 $r11 > + clear b32 $r12 > +#if NVKM_PPWR_CHIPSET >= GF100 > + ld(b8, $r12, #perf_eng_pcie) > + shl b32 $r12 8 > +#endif > + ld(b8, $r12, #perf_eng_mc) > + shl b32 $r12 8 > + ld(b8, $r12, #perf_eng_vdec) > + shl b32 $r12 8 > + ld(b8, $r12, #perf_eng_gr)Simple and effective, that's nice :)> + call(send) > + bra #perf_recv_exit > + > +perf_recv_not_host: > + call(perf_counter_readout) > + > + ld(b32, $r14, #perf_polling_period_us) > + call #ticks_from_us > + call(timer) > + > +perf_recv_exit: > + pop $r1 > + ret > + > + > +// description > +// > +// $r15 - current (perf) > +// $r0 - zero > +perf_counter_readout: > + nv_iord($r14, NV_PPWR_COUNTER_COUNT(0)) > + div $r14 $r14 0xffNot a big fan of the loss in precision. Why do you do that instead of what I did here: https://cgit.freedesktop.org/~mperes/nouveau/tree/nvkm/subdev/pwr/fuc/perf.fuc?h=ppwr_rework&id=27310fa8fdc39e54a3f4383fada96a3562c5a022#n134 With my solution, you get no loss in precision. And you also poll the counters faster so it means a greater accuracy. I also miss less cycles. All in all, could you please reuse my polling function please? :D> + > + nv_iord($r13, NV_PPWR_COUNTER_COUNT(1)) > + div $r13 $r13 $r14 > + st(b8, #perf_eng_gr, $r13) > + > + nv_iord($r13, NV_PPWR_COUNTER_COUNT(2)) > + div $r13 $r13 $r14 > + st(b8, #perf_eng_vdec, $r13) > + > + nv_iord($r13, NV_PPWR_COUNTER_COUNT(3)) > + div $r13 $r13 $r14 > + st(b8, #perf_eng_mc, $r13) > + > +#if NVKM_PPWR_CHIPSET >= GF100 > + nv_iord($r13, NV_PPWR_COUNTER_COUNT(4)) > + div $r13 $r13 $r14 > + st(b8, #perf_eng_pcie, $r13) > +#endif > + > + // reset the counters > + imm32($r14, NV_PPWR_COUNTER_COUNT_RESET) > + nv_iowr(NV_PPWR_COUNTER_COUNT(0), $r14) > + nv_iowr(NV_PPWR_COUNTER_COUNT(1), $r14) > + nv_iowr(NV_PPWR_COUNTER_COUNT(2), $r14) > + nv_iowr(NV_PPWR_COUNTER_COUNT(3), $r14) > +#if NVKM_PPWR_CHIPSET >= GF100 > + nv_iowr(NV_PPWR_COUNTER_COUNT(4), $r14) > +#endif > + > ret > > // description > @@ -53,5 +137,69 @@ perf_recv: > // $r15 - current (perf) > // $r0 - zero > perf_init: > + // set up the total ticks counter first > + imm32($r14, NV_PPWR_COUNTER_MODE_ALWAYS) > + nv_iowr(NV_PPWR_COUNTER_MODE(0), $r14) > + > + // set up the other counters, with fermi there are more > + imm32($r14, NV_PPWR_COUNTER_MODE_IF_NOT_ALL) > + nv_iowr(NV_PPWR_COUNTER_MODE(1), $r14) > + nv_iowr(NV_PPWR_COUNTER_MODE(2), $r14) > + nv_iowr(NV_PPWR_COUNTER_MODE(3), $r14) > +#if NVKM_PPWR_CHIPSET >= GF100 > + nv_iowr(NV_PPWR_COUNTER_MODE(4), $r14) > +#endif > + > + // core load counter > + imm32($r14, > + NV_PPWR_COUNTER_SIG_GR_IDLE > + | NV_PPWR_COUNTER_SIG_GR_GPC_IDLE > + | NV_PPWR_COUNTER_SIG_GR_ROP_IDLE > +#if NVKM_PPWR_CHIPSET >= GF100 > + | NV_PPWR_COUNTER_SIG_GR_HUB_IDLE > + | NV_PPWR_COUNTER_SIG_PCOPY0_IDLE > + | NV_PPWR_COUNTER_SIG_PCOPY1_IDLE > +#if NVKM_PPWR_CHIPSET >= GK104 > + | NV_PPWR_COUNTER_SIG_PCOPY2_IDLE > +#endif > +#endif > + ) > + nv_iowr(NV_PPWR_COUNTER_MASK(1), $r14) > + > + // video load counter > + imm32($r14, > + NV_PPWR_COUNTER_SIG_PVLD_IDLE > + | NV_PPWR_COUNTER_SIG_PPDEC_IDLE > + | NV_PPWR_COUNTER_SIG_PPPP_IDLE > +#if NVKM_PPWR_CHIPSET >= GK104 > + | NV_PPWR_COUNTER_SIG_PVENC > +#endif > + ) > + nv_iowr(NV_PPWR_COUNTER_MASK(2), $r14) > + > + // memory load counter > + imm32($r14, > +#if NVKM_PPWR_CHIPSET >= GF100 > + NV_PPWR_COUNTER_SIG_BFB_PART0_REQ > +#else > + NV_PPWR_COUNTER_SIG_FB_PART0_REQ > +#endif > + ) > + nv_iowr(NV_PPWR_COUNTER_MASK(3), $r14) > + > + // pcie load counter > +#if NVKM_PPWR_CHIPSET >= GF100 > + imm32($r14, NV_PPWR_COUNTER_SIG_PCIE) > + nv_iowr(NV_PPWR_COUNTER_MASK(4), $r14) > +#endif > + > + // initial read out > + call(perf_counter_readout) > + > + // schedule the next read out > + ld(b32, $r14, #perf_polling_period_us) > + call #ticks_from_us > + call(timer) > + > ret > #endifLooks about good, except the polling function!
Maybe Matching Threads
- [PATCH v2 4/4] nouveau/debugfs: add interface for current load
- [PATCH v3 4/4] nouveau/debugfs: add interface for current load
- [PATCH 4/4] nouveau/debugfs: add interface for current load
- [PATCH 0/4] Add pdaemon load counters
- [PATCH 0/4] PMU engine counters