All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC v2 0/6] PMU engine counters
@ 2017-05-07 22:46 Karol Herbst
       [not found] ` <20170507224648.1182-1-karolherbst-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  0 siblings, 1 reply; 7+ messages in thread
From: Karol Herbst @ 2017-05-07 22:46 UTC (permalink / raw)
  To: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

reworked this series quite a lot.

Now we want the Host to configure the counters through the PMU.

The series isn't complete though because it needs:
1. reordering
2. better commit messages

but I felt like sending those out before doing a final version.

I also found some weird register overwriting issue on the PMU I have to track
down, because it interfers with the counter read out. I am quite sure it is not
cause by any of my changes.

Anyway this feature is required for implementing dynamic reclocking. As a side
effect it shows us a coarse load of several engines, allthough the counters can
only report "idle" or "non-idle".

Karol Herbst (6):
  pmu/fuc: add macros for pdaemon pwr counters
  pmu/fuc: read out counters and store them
  pmu/fuc: implement GET_SLOTS
  pmu/fuc: implement SET_SLOT
  nouveau/debugfs: add interface for current load
  pmu: setup counters

 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           |   8 +
 drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h | 838 ++++++++++++++++-----------
 drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h | 780 +++++++++++++++----------
 drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h | 732 +++++++++++++----------
 drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h | 736 +++++++++++++----------
 drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc   |   8 +
 drm/nouveau/nvkm/subdev/pmu/fuc/os.h         |   4 +
 drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc     | 157 +++++
 drm/nouveau/nvkm/subdev/pmu/gf100.c          |   2 +
 drm/nouveau/nvkm/subdev/pmu/gf119.c          |   2 +
 drm/nouveau/nvkm/subdev/pmu/gk104.c          |   2 +
 drm/nouveau/nvkm/subdev/pmu/gk110.c          |   2 +
 drm/nouveau/nvkm/subdev/pmu/gk208.c          |   2 +
 drm/nouveau/nvkm/subdev/pmu/gm107.c          |   2 +
 drm/nouveau/nvkm/subdev/pmu/gt215.c          |  70 +++
 drm/nouveau/nvkm/subdev/pmu/priv.h           |   4 +
 19 files changed, 2122 insertions(+), 1261 deletions(-)

-- 
2.12.2

_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/nouveau

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [RFC v2 1/6] pmu/fuc: add macros for pdaemon pwr counters
       [not found] ` <20170507224648.1182-1-karolherbst-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2017-05-07 22:46   ` Karol Herbst
  2017-05-07 22:46   ` [RFC v2 2/6] pmu/fuc: read out counters and store them Karol Herbst
                     ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Karol Herbst @ 2017-05-07 22:46 UTC (permalink / raw)
  To: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

v2: clean up definitions we won't need anymore

Signed-off-by: Karol Herbst <karolherbst@gmail.com>
Reviewed-by: Martin Peres <martin.peres@free.fr>
---
 drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc b/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc
index 3737bd27..4c5968cd 100644
--- a/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc
+++ b/drm/nouveau/nvkm/subdev/pmu/fuc/macros.fuc
@@ -65,6 +65,14 @@
 #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
 #if NVKM_PPWR_CHIPSET < GK208
 #define NV_PPWR_DSCRATCH(i)                                   (4 * (i) + 0x05d0)
 #endif
-- 
2.12.2

_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/nouveau

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [RFC v2 2/6] pmu/fuc: read out counters and store them
       [not found] ` <20170507224648.1182-1-karolherbst-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  2017-05-07 22:46   ` [RFC v2 1/6] pmu/fuc: add macros for pdaemon pwr counters Karol Herbst
@ 2017-05-07 22:46   ` Karol Herbst
  2017-05-07 22:46   ` [RFC v2 3/6] pmu/fuc: implement GET_SLOTS Karol Herbst
                     ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Karol Herbst @ 2017-05-07 22:46 UTC (permalink / raw)
  To: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

Signed-off-by: Karol Herbst <karolherbst@gmail.com>
---
 drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h | 821 +++++++++++++++------------
 drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h | 763 ++++++++++++++-----------
 drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h | 711 ++++++++++++-----------
 drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h | 757 ++++++++++++++----------
 drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc     | 121 ++++
 5 files changed, 1827 insertions(+), 1346 deletions(-)

diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h b/drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h
index 0bcf0b30..9ed8e313 100644
--- a/drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h
+++ b/drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h
@@ -1,4 +1,4 @@
-static uint32_t gf100_pmu_data[] = {
+uint32_t gf100_pmu_data[] = {
 /* 0x0000: proc_kern */
 	0x52544e49,
 	0x00000000,
@@ -68,7 +68,7 @@ static uint32_t gf100_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x46524550,
-	0x0000075a,
+	0x000008c9,
 	0x00000758,
 	0x00000000,
 	0x00000000,
@@ -90,8 +90,8 @@ static uint32_t gf100_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x5f433249,
-	0x00000b8a,
-	0x00000a2d,
+	0x00000d7f,
+	0x00000c22,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -112,8 +112,8 @@ static uint32_t gf100_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x54534554,
-	0x00000bb3,
-	0x00000b8c,
+	0x00000da8,
+	0x00000d81,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -134,8 +134,8 @@ static uint32_t gf100_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x454c4449,
-	0x00000bbf,
-	0x00000bbd,
+	0x00000db4,
+	0x00000db2,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -834,7 +834,18 @@ static uint32_t gf100_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 /* 0x0ccc: memx_train_tail */
-/* 0x0ccc: i2c_scl_map */
+/* 0x0ccc: perf_polling_period_us */
+	0x000186a0,
+/* 0x0cd0: perf_slot1 */
+/* 0x0cd1: perf_slot2 */
+/* 0x0cd2: perf_slot3 */
+/* 0x0cd3: perf_slot4 */
+	0x00000000,
+/* 0x0cd4: perf_slot5 */
+/* 0x0cd5: perf_slot6 */
+/* 0x0cd6: perf_slot7 */
+	0x00000000,
+/* 0x0cd8: i2c_scl_map */
 	0x00001000,
 	0x00004000,
 	0x00010000,
@@ -845,7 +856,7 @@ static uint32_t gf100_pmu_data[] = {
 	0x01000000,
 	0x04000000,
 	0x10000000,
-/* 0x0cf4: i2c_sda_map */
+/* 0x0d00: i2c_sda_map */
 	0x00002000,
 	0x00008000,
 	0x00020000,
@@ -856,7 +867,7 @@ static uint32_t gf100_pmu_data[] = {
 	0x02000000,
 	0x08000000,
 	0x20000000,
-/* 0x0d1c: i2c_ctrl */
+/* 0x0d28: i2c_ctrl */
 	0x0000e138,
 	0x0000e150,
 	0x0000e168,
@@ -911,12 +922,9 @@ static uint32_t gf100_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
 };
 
-static uint32_t gf100_pmu_code[] = {
+uint32_t gf100_pmu_code[] = {
 	0x03920ef5,
 /* 0x0004: rd32 */
 	0x07a007f1,
@@ -1452,412 +1460,479 @@ static uint32_t gf100_pmu_code[] = {
 /* 0x0756: memx_init */
 	0x00f800f8,
 /* 0x0758: perf_recv */
-/* 0x075a: perf_init */
-	0x00f800f8,
-/* 0x075c: i2c_drive_scl */
-	0xf40036b0,
-	0x07f1110b,
-	0x04b607e0,
-	0x0001d006,
-	0x00f804bd,
-/* 0x0770: i2c_drive_scl_lo */
-	0x07e407f1,
-	0xd00604b6,
-	0x04bd0001,
-/* 0x077e: i2c_drive_sda */
-	0x36b000f8,
-	0x110bf400,
-	0x07e007f1,
-	0xd00604b6,
-	0x04bd0002,
-/* 0x0792: i2c_drive_sda_lo */
-	0x07f100f8,
-	0x04b607e4,
-	0x0002d006,
-	0x00f804bd,
-/* 0x07a0: i2c_sense_scl */
-	0xf10132f4,
-	0xb607c437,
-	0x33cf0634,
-	0x0431fd00,
-	0xf4060bf4,
-/* 0x07b6: i2c_sense_scl_done */
-	0x00f80131,
-/* 0x07b8: i2c_sense_sda */
-	0xf10132f4,
-	0xb607c437,
+	0x4f48a7f1,
+	0x5453a3f1,
+	0xf406eab8,
+	0x0ef4061b,
+/* 0x0769: perf_recv_not_host */
+	0x8321f51b,
+	0xcc07f107,
+	0x0003f00c,
+	0xbd000e98,
+	0x2a21f504,
+	0x5621f502,
+/* 0x0781: perf_recv_exit */
+/* 0x0783: perf_counter_readout */
+	0xf900f802,
+	0xf920f910,
+	0xf940f930,
+	0xf960f950,
+	0xf180f970,
+	0xb6050817,
+	0x11cf0614,
+	0x1827f100,
+	0x0624b605,
+	0xf10022cf,
+	0xb6052837,
 	0x33cf0634,
-	0x0432fd00,
-	0xf4060bf4,
-/* 0x07ce: i2c_sense_sda_done */
-	0x00f80131,
-/* 0x07d0: i2c_raise_scl */
-	0x47f140f9,
-	0x37f00898,
-	0x5c21f501,
-/* 0x07dd: i2c_raise_scl_wait */
-	0xe8e7f107,
-	0x7e21f403,
-	0x07a021f5,
-	0xb60901f4,
-	0x1bf40142,
-/* 0x07f1: i2c_raise_scl_done */
-	0xf840fcef,
-/* 0x07f5: i2c_start */
-	0xa021f500,
-	0x0d11f407,
-	0x07b821f5,
-	0xf40611f4,
-/* 0x0806: i2c_start_rep */
-	0x37f0300e,
-	0x5c21f500,
-	0x0137f007,
-	0x077e21f5,
-	0xb60076bb,
-	0x50f90465,
-	0xbb046594,
-	0x50bd0256,
-	0xfc0475fd,
-	0xd021f550,
-	0x0464b607,
-/* 0x0833: i2c_start_send */
-	0xf01f11f4,
+	0x3847f100,
+	0x0644b605,
+	0xf10044cf,
+	0xb6054857,
+	0x55cf0654,
+	0x5867f100,
+	0x0664b605,
+	0xf10066cf,
+	0xb6056877,
+	0x77cf0674,
+	0x7887f100,
+	0x0684b605,
+	0xf10088cf,
+	0xf10000e7,
+	0xf18000e3,
+	0xb6050807,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6051807,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6052807,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6053807,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6054807,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6055807,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6056807,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6057807,
+	0x0ed00604,
+	0xcc04bd00,
+	0x21ffff11,
+	0x3c31ff2c,
+	0xff4c41ff,
+	0x61ff5c51,
+	0x7c71ff6c,
+	0xf18c81ff,
+	0xf00cd007,
+	0x02000003,
+	0xf104bd00,
+	0xf00cd107,
+	0x03000003,
+	0xf104bd00,
+	0xf00cd207,
+	0x04000003,
+	0xf104bd00,
+	0xf00cd307,
+	0x05000003,
+	0xf104bd00,
+	0xf00cd407,
+	0x06000003,
+	0xf104bd00,
+	0xf00cd507,
+	0x07000003,
+	0xf104bd00,
+	0xf00cd607,
+	0x08000003,
+	0xfc04bd00,
+	0xfc70fc80,
+	0xfc50fc60,
+	0xfc30fc40,
+	0xf810fc20,
+/* 0x08c9: perf_init */
+	0x03e7f100,
+	0x00e3f000,
+	0x050c07f1,
+	0xd00604b6,
+	0x04bd000e,
+	0x0002e7f1,
+	0xf100e3f0,
+	0xb6051c07,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6052c07,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6053c07,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6054c07,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6055c07,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6056c07,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6057c07,
+	0x0ed00604,
+	0xf504bd00,
+	0xf1078321,
+	0xf00ccc07,
+	0x0e980003,
+	0xf504bd00,
+	0xf5022a21,
+	0xf8025621,
+/* 0x0951: i2c_drive_scl */
+	0x0036b000,
+	0xf1110bf4,
+	0xb607e007,
+	0x01d00604,
+	0xf804bd00,
+/* 0x0965: i2c_drive_scl_lo */
+	0xe407f100,
+	0x0604b607,
+	0xbd0001d0,
+/* 0x0973: i2c_drive_sda */
+	0xb000f804,
+	0x0bf40036,
+	0xe007f111,
+	0x0604b607,
+	0xbd0002d0,
+/* 0x0987: i2c_drive_sda_lo */
+	0xf100f804,
+	0xb607e407,
+	0x02d00604,
+	0xf804bd00,
+/* 0x0995: i2c_sense_scl */
+	0x0132f400,
+	0x07c437f1,
+	0xcf0634b6,
+	0x31fd0033,
+	0x060bf404,
+/* 0x09ab: i2c_sense_scl_done */
+	0xf80131f4,
+/* 0x09ad: i2c_sense_sda */
+	0x0132f400,
+	0x07c437f1,
+	0xcf0634b6,
+	0x32fd0033,
+	0x060bf404,
+/* 0x09c3: i2c_sense_sda_done */
+	0xf80131f4,
+/* 0x09c5: i2c_raise_scl */
+	0xf140f900,
+	0xf0089847,
+	0x21f50137,
+/* 0x09d2: i2c_raise_scl_wait */
+	0xe7f10951,
+	0x21f403e8,
+	0x9521f57e,
+	0x0901f409,
+	0xf40142b6,
+/* 0x09e6: i2c_raise_scl_done */
+	0x40fcef1b,
+/* 0x09ea: i2c_start */
+	0x21f500f8,
+	0x11f40995,
+	0xad21f50d,
+	0x0611f409,
+/* 0x09fb: i2c_start_rep */
+	0xf0300ef4,
 	0x21f50037,
-	0xe7f1077e,
-	0x21f41388,
-	0x0037f07e,
-	0x075c21f5,
-	0x1388e7f1,
-/* 0x084f: i2c_start_out */
-	0xf87e21f4,
-/* 0x0851: i2c_stop */
-	0x0037f000,
-	0x075c21f5,
+	0x37f00951,
+	0x7321f501,
+	0x0076bb09,
+	0xf90465b6,
+	0x04659450,
+	0xbd0256bb,
+	0x0475fd50,
+	0x21f550fc,
+	0x64b609c5,
+	0x1f11f404,
+/* 0x0a28: i2c_start_send */
 	0xf50037f0,
-	0xf1077e21,
-	0xf403e8e7,
+	0xf1097321,
+	0xf41388e7,
 	0x37f07e21,
-	0x5c21f501,
-	0x88e7f107,
+	0x5121f500,
+	0x88e7f109,
 	0x7e21f413,
-	0xf50137f0,
-	0xf1077e21,
-	0xf41388e7,
-	0x00f87e21,
-/* 0x0884: i2c_bitw */
-	0x077e21f5,
+/* 0x0a44: i2c_start_out */
+/* 0x0a46: i2c_stop */
+	0x37f000f8,
+	0x5121f500,
+	0x0037f009,
+	0x097321f5,
 	0x03e8e7f1,
-	0xbb7e21f4,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x07d021f5,
-	0xf40464b6,
-	0xe7f11811,
+	0xf07e21f4,
+	0x21f50137,
+	0xe7f10951,
 	0x21f41388,
-	0x0037f07e,
-	0x075c21f5,
+	0x0137f07e,
+	0x097321f5,
 	0x1388e7f1,
-/* 0x08c3: i2c_bitw_out */
 	0xf87e21f4,
-/* 0x08c5: i2c_bitr */
-	0x0137f000,
-	0x077e21f5,
-	0x03e8e7f1,
-	0xbb7e21f4,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x07d021f5,
-	0xf40464b6,
-	0x21f51b11,
-	0x37f007b8,
-	0x5c21f500,
-	0x88e7f107,
+/* 0x0a79: i2c_bitw */
+	0x7321f500,
+	0xe8e7f109,
+	0x7e21f403,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0xc521f550,
+	0x0464b609,
+	0xf11811f4,
+	0xf41388e7,
+	0x37f07e21,
+	0x5121f500,
+	0x88e7f109,
 	0x7e21f413,
-	0xf4013cf0,
-/* 0x090a: i2c_bitr_done */
-	0x00f80131,
-/* 0x090c: i2c_get_byte */
-	0xf00057f0,
-/* 0x0912: i2c_get_byte_next */
-	0x54b60847,
+/* 0x0ab8: i2c_bitw_out */
+/* 0x0aba: i2c_bitr */
+	0x37f000f8,
+	0x7321f501,
+	0xe8e7f109,
+	0x7e21f403,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0xc521f550,
+	0x0464b609,
+	0xf51b11f4,
+	0xf009ad21,
+	0x21f50037,
+	0xe7f10951,
+	0x21f41388,
+	0x013cf07e,
+/* 0x0aff: i2c_bitr_done */
+	0xf80131f4,
+/* 0x0b01: i2c_get_byte */
+	0x0057f000,
+/* 0x0b07: i2c_get_byte_next */
+	0xb60847f0,
+	0x76bb0154,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0xf550fc04,
+	0xb60aba21,
+	0x11f40464,
+	0x0553fd2b,
+	0xf40142b6,
+	0x37f0d81b,
 	0x0076bb01,
 	0xf90465b6,
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b608c5,
-	0x2b11f404,
-	0xb60553fd,
-	0x1bf40142,
-	0x0137f0d8,
-	0xb60076bb,
-	0x50f90465,
-	0xbb046594,
-	0x50bd0256,
-	0xfc0475fd,
-	0x8421f550,
-	0x0464b608,
-/* 0x095c: i2c_get_byte_done */
-/* 0x095e: i2c_put_byte */
-	0x47f000f8,
-/* 0x0961: i2c_put_byte_next */
-	0x0142b608,
-	0xbb3854ff,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x088421f5,
-	0xf40464b6,
-	0x46b03411,
-	0xd81bf400,
+	0x64b60a79,
+/* 0x0b51: i2c_get_byte_done */
+/* 0x0b53: i2c_put_byte */
+	0xf000f804,
+/* 0x0b56: i2c_put_byte_next */
+	0x42b60847,
+	0x3854ff01,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0xc521f550,
-	0x0464b608,
-	0xbb0f11f4,
-	0x36b00076,
-	0x061bf401,
-/* 0x09b7: i2c_put_byte_done */
-	0xf80132f4,
-/* 0x09b9: i2c_addr */
-	0x0076bb00,
+	0x7921f550,
+	0x0464b60a,
+	0xb03411f4,
+	0x1bf40046,
+	0x0076bbd8,
 	0xf90465b6,
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b607f5,
-	0x2911f404,
-	0x012ec3e7,
-	0xfd0134b6,
-	0x76bb0553,
+	0x64b60aba,
+	0x0f11f404,
+	0xb00076bb,
+	0x1bf40136,
+	0x0132f406,
+/* 0x0bac: i2c_put_byte_done */
+/* 0x0bae: i2c_addr */
+	0x76bb00f8,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb6095e21,
-/* 0x09fe: i2c_addr_done */
-	0x00f80464,
-/* 0x0a00: i2c_acquire_addr */
-	0xb6f8cec7,
-	0xe0b702e4,
-	0xee980d1c,
-/* 0x0a0f: i2c_acquire */
-	0xf500f800,
-	0xf40a0021,
-	0xd9f00421,
-	0x4021f403,
-/* 0x0a1e: i2c_release */
-	0x21f500f8,
-	0x21f40a00,
-	0x03daf004,
-	0xf84021f4,
-/* 0x0a2d: i2c_recv */
-	0x0132f400,
-	0xb6f8c1c7,
-	0x16b00214,
-	0x3a1ff528,
-	0xf413a001,
-	0x0032980c,
-	0x0ccc13a0,
-	0xf4003198,
-	0xd0f90231,
-	0xd0f9e0f9,
-	0x000067f1,
-	0x100063f1,
-	0xbb016792,
+	0xb609ea21,
+	0x11f40464,
+	0x2ec3e729,
+	0x0134b601,
+	0xbb0553fd,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0a0f21f5,
-	0xfc0464b6,
-	0x00d6b0d0,
-	0x00b31bf5,
-	0xbb0057f0,
+	0x0b5321f5,
+/* 0x0bf3: i2c_addr_done */
+	0xf80464b6,
+/* 0x0bf5: i2c_acquire_addr */
+	0xf8cec700,
+	0xb702e4b6,
+	0x980d28e0,
+	0x00f800ee,
+/* 0x0c04: i2c_acquire */
+	0x0bf521f5,
+	0xf00421f4,
+	0x21f403d9,
+/* 0x0c13: i2c_release */
+	0xf500f840,
+	0xf40bf521,
+	0xdaf00421,
+	0x4021f403,
+/* 0x0c22: i2c_recv */
+	0x32f400f8,
+	0xf8c1c701,
+	0xb00214b6,
+	0x1ff52816,
+	0x13a0013a,
+	0x32980d00,
+	0xd813a000,
+	0x0031980c,
+	0xf90231f4,
+	0xf9e0f9d0,
+	0x0067f1d0,
+	0x0063f100,
+	0x01679210,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0x0421f550,
+	0x0464b60c,
+	0xd6b0d0fc,
+	0xb31bf500,
+	0x0057f000,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0xae21f550,
+	0x0464b60b,
+	0x00d011f5,
+	0xbbe0c5c7,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x09b921f5,
+	0x0b5321f5,
 	0xf50464b6,
-	0xc700d011,
-	0x76bbe0c5,
+	0xf000ad11,
+	0x76bb0157,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb6095e21,
+	0xb60bae21,
 	0x11f50464,
-	0x57f000ad,
-	0x0076bb01,
-	0xf90465b6,
-	0x04659450,
-	0xbd0256bb,
-	0x0475fd50,
-	0x21f550fc,
-	0x64b609b9,
-	0x8a11f504,
-	0x0076bb00,
-	0xf90465b6,
-	0x04659450,
-	0xbd0256bb,
-	0x0475fd50,
-	0x21f550fc,
-	0x64b6090c,
-	0x6a11f404,
-	0xbbe05bcb,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x085121f5,
-	0xb90464b6,
-	0x74bd025b,
-/* 0x0b33: i2c_recv_not_rd08 */
-	0xb0430ef4,
-	0x1bf401d6,
-	0x0057f03d,
-	0x09b921f5,
-	0xc73311f4,
-	0x21f5e0c5,
-	0x11f4095e,
-	0x0057f029,
-	0x09b921f5,
-	0xc71f11f4,
-	0x21f5e0b5,
-	0x11f4095e,
-	0x5121f515,
-	0xc774bd08,
-	0x1bf408c5,
-	0x0232f409,
-/* 0x0b73: i2c_recv_not_wr08 */
-/* 0x0b73: i2c_recv_done */
-	0xc7030ef4,
-	0x21f5f8ce,
-	0xe0fc0a1e,
-	0x12f4d0fc,
-	0x027cb90a,
-	0x033621f5,
-/* 0x0b88: i2c_recv_exit */
-/* 0x0b8a: i2c_init */
+	0x76bb008a,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0xf550fc04,
+	0xb60b0121,
+	0x11f40464,
+	0xe05bcb6a,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0x4621f550,
+	0x0464b60a,
+	0xbd025bb9,
+	0x430ef474,
+/* 0x0d28: i2c_recv_not_rd08 */
+	0xf401d6b0,
+	0x57f03d1b,
+	0xae21f500,
+	0x3311f40b,
+	0xf5e0c5c7,
+	0xf40b5321,
+	0x57f02911,
+	0xae21f500,
+	0x1f11f40b,
+	0xf5e0b5c7,
+	0xf40b5321,
+	0x21f51511,
+	0x74bd0a46,
+	0xf408c5c7,
+	0x32f4091b,
+	0x030ef402,
+/* 0x0d68: i2c_recv_not_wr08 */
+/* 0x0d68: i2c_recv_done */
+	0xf5f8cec7,
+	0xfc0c1321,
+	0xf4d0fce0,
+	0x7cb90a12,
+	0x3621f502,
+/* 0x0d7d: i2c_recv_exit */
+/* 0x0d7f: i2c_init */
+	0xf800f803,
+/* 0x0d81: test_recv */
+	0xd817f100,
+	0x0614b605,
+	0xb60011cf,
+	0x07f10110,
+	0x04b605d8,
+	0x0001d006,
+	0xe7f104bd,
+	0xe3f1d900,
+	0x21f5134f,
+	0x00f80256,
+/* 0x0da8: test_init */
+	0x0800e7f1,
+	0x025621f5,
+/* 0x0db2: idle_recv */
 	0x00f800f8,
-/* 0x0b8c: test_recv */
-	0x05d817f1,
-	0xcf0614b6,
-	0x10b60011,
-	0xd807f101,
-	0x0604b605,
-	0xbd0001d0,
-	0x00e7f104,
-	0x4fe3f1d9,
-	0x5621f513,
-/* 0x0bb3: test_init */
-	0xf100f802,
-	0xf50800e7,
-	0xf8025621,
-/* 0x0bbd: idle_recv */
-/* 0x0bbf: idle */
-	0xf400f800,
-	0x17f10031,
-	0x14b605d4,
-	0x0011cf06,
-	0xf10110b6,
-	0xb605d407,
-	0x01d00604,
-/* 0x0bdb: idle_loop */
-	0xf004bd00,
-	0x32f45817,
-/* 0x0be1: idle_proc */
-/* 0x0be1: idle_proc_exec */
-	0xb910f902,
-	0x21f5021e,
-	0x10fc033f,
-	0xf40911f4,
-	0x0ef40231,
-/* 0x0bf5: 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,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
+/* 0x0db4: idle */
+	0xf10031f4,
+	0xb605d417,
+	0x11cf0614,
+	0x0110b600,
+	0x05d407f1,
+	0xd00604b6,
+	0x04bd0001,
+/* 0x0dd0: idle_loop */
+	0xf45817f0,
+/* 0x0dd6: idle_proc */
+/* 0x0dd6: idle_proc_exec */
+	0x10f90232,
+	0xf5021eb9,
+	0xfc033f21,
+	0x0911f410,
+	0xf40231f4,
+/* 0x0dea: idle_proc_next */
+	0x10b6ef0e,
+	0x061fb858,
+	0xf4e61bf4,
+	0x28f4dd02,
+	0xbb0ef400,
 	0x00000000,
 };
diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h b/drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h
index fe890566..78f6379a 100644
--- a/drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h
+++ b/drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h
@@ -1,4 +1,4 @@
-static uint32_t gf119_pmu_data[] = {
+uint32_t gf119_pmu_data[] = {
 /* 0x0000: proc_kern */
 	0x52544e49,
 	0x00000000,
@@ -68,7 +68,7 @@ static uint32_t gf119_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x46524550,
-	0x00000687,
+	0x000007c6,
 	0x00000685,
 	0x00000000,
 	0x00000000,
@@ -90,8 +90,8 @@ static uint32_t gf119_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x5f433249,
-	0x00000aa2,
-	0x00000945,
+	0x00000c4f,
+	0x00000af2,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -112,8 +112,8 @@ static uint32_t gf119_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x54534554,
-	0x00000ac5,
-	0x00000aa4,
+	0x00000c72,
+	0x00000c51,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -134,8 +134,8 @@ static uint32_t gf119_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x454c4449,
-	0x00000ad1,
-	0x00000acf,
+	0x00000c7e,
+	0x00000c7c,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -834,7 +834,18 @@ static uint32_t gf119_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 /* 0x0ccc: memx_train_tail */
-/* 0x0ccc: i2c_scl_map */
+/* 0x0ccc: perf_polling_period_us */
+	0x000186a0,
+/* 0x0cd0: perf_slot1 */
+/* 0x0cd1: perf_slot2 */
+/* 0x0cd2: perf_slot3 */
+/* 0x0cd3: perf_slot4 */
+	0x00000000,
+/* 0x0cd4: perf_slot5 */
+/* 0x0cd5: perf_slot6 */
+/* 0x0cd6: perf_slot7 */
+	0x00000000,
+/* 0x0cd8: i2c_scl_map */
 	0x00000400,
 	0x00000800,
 	0x00001000,
@@ -845,7 +856,7 @@ static uint32_t gf119_pmu_data[] = {
 	0x00020000,
 	0x00040000,
 	0x00080000,
-/* 0x0cf4: i2c_sda_map */
+/* 0x0d00: i2c_sda_map */
 	0x00100000,
 	0x00200000,
 	0x00400000,
@@ -910,12 +921,9 @@ static uint32_t gf119_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
 };
 
-static uint32_t gf119_pmu_code[] = {
+uint32_t gf119_pmu_code[] = {
 	0x03410ef5,
 /* 0x0004: rd32 */
 	0x07a007f1,
@@ -1393,387 +1401,454 @@ static uint32_t gf119_pmu_code[] = {
 /* 0x0683: memx_init */
 	0xf800f8d8,
 /* 0x0685: perf_recv */
-/* 0x0687: perf_init */
-	0xf800f800,
-/* 0x0689: i2c_drive_scl */
-	0x0036b000,
-	0xf10e0bf4,
-	0xd007e007,
+	0x48a7f100,
+	0x53a3f14f,
+	0x06eab854,
+	0xf4061bf4,
+/* 0x0696: perf_recv_not_host */
+	0x21f51b0e,
+	0x07f106b0,
+	0x03f00ccc,
+	0x000e9800,
+	0x21f504bd,
+	0x21f501eb,
+/* 0x06ae: perf_recv_exit */
+	0x00f80217,
+/* 0x06b0: perf_counter_readout */
+	0x20f910f9,
+	0x40f930f9,
+	0x60f950f9,
+	0x80f970f9,
+	0x050817f1,
+	0xf10011cf,
+	0xcf051827,
+	0x37f10022,
+	0x33cf0528,
+	0x3847f100,
+	0x0044cf05,
+	0x054857f1,
+	0xf10055cf,
+	0xcf055867,
+	0x77f10066,
+	0x77cf0568,
+	0x7887f100,
+	0x0088cf05,
+	0x0000e7f1,
+	0x8000e3f1,
+	0x050807f1,
+	0xbd000ed0,
+	0x1807f104,
+	0x000ed005,
+	0x07f104bd,
+	0x0ed00528,
+	0xf104bd00,
+	0xd0053807,
+	0x04bd000e,
+	0x054807f1,
+	0xbd000ed0,
+	0x5807f104,
+	0x000ed005,
+	0x07f104bd,
+	0x0ed00568,
+	0xf104bd00,
+	0xd0057807,
+	0x04bd000e,
+	0xffff11cc,
+	0x31ff2c21,
+	0x4c41ff3c,
+	0xff5c51ff,
+	0x71ff6c61,
+	0x8c81ff7c,
+	0x0cd007f1,
+	0x000003f0,
+	0x04bd0002,
+	0x0cd107f1,
+	0x000003f0,
+	0x04bd0003,
+	0x0cd207f1,
+	0x000003f0,
+	0x04bd0004,
+	0x0cd307f1,
+	0x000003f0,
+	0x04bd0005,
+	0x0cd407f1,
+	0x000003f0,
+	0x04bd0006,
+	0x0cd507f1,
+	0x000003f0,
+	0x04bd0007,
+	0x0cd607f1,
+	0x000003f0,
+	0x04bd0008,
+	0x70fc80fc,
+	0x50fc60fc,
+	0x30fc40fc,
+	0x10fc20fc,
+/* 0x07c6: perf_init */
+	0xe7f100f8,
+	0xe3f00003,
+	0x0c07f100,
+	0x000ed005,
+	0xe7f104bd,
+	0xe3f00002,
+	0x1c07f100,
+	0x000ed005,
+	0x07f104bd,
+	0x0ed0052c,
+	0xf104bd00,
+	0xd0053c07,
+	0x04bd000e,
+	0x054c07f1,
+	0xbd000ed0,
+	0x5c07f104,
+	0x000ed005,
+	0x07f104bd,
+	0x0ed0056c,
+	0xf104bd00,
+	0xd0057c07,
+	0x04bd000e,
+	0x06b021f5,
+	0x0ccc07f1,
+	0x980003f0,
+	0x04bd000e,
+	0x01eb21f5,
+	0x021721f5,
+/* 0x0836: i2c_drive_scl */
+	0x36b000f8,
+	0x0e0bf400,
+	0x07e007f1,
+	0xbd0001d0,
+/* 0x0847: i2c_drive_scl_lo */
+	0xf100f804,
+	0xd007e407,
 	0x04bd0001,
-/* 0x069a: i2c_drive_scl_lo */
-	0x07f100f8,
-	0x01d007e4,
-	0xf804bd00,
-/* 0x06a5: i2c_drive_sda */
-	0x0036b000,
-	0xf10e0bf4,
-	0xd007e007,
+/* 0x0852: i2c_drive_sda */
+	0x36b000f8,
+	0x0e0bf400,
+	0x07e007f1,
+	0xbd0002d0,
+/* 0x0863: i2c_drive_sda_lo */
+	0xf100f804,
+	0xd007e407,
 	0x04bd0002,
-/* 0x06b6: i2c_drive_sda_lo */
-	0x07f100f8,
-	0x02d007e4,
-	0xf804bd00,
-/* 0x06c1: i2c_sense_scl */
-	0x0132f400,
-	0x07c437f1,
-	0xfd0033cf,
-	0x0bf40431,
-	0x0131f406,
-/* 0x06d4: i2c_sense_scl_done */
-/* 0x06d6: i2c_sense_sda */
+/* 0x086e: i2c_sense_scl */
 	0x32f400f8,
 	0xc437f101,
 	0x0033cf07,
-	0xf40432fd,
+	0xf40431fd,
 	0x31f4060b,
-/* 0x06e9: i2c_sense_sda_done */
-/* 0x06eb: i2c_raise_scl */
-	0xf900f801,
-	0x9847f140,
+/* 0x0881: i2c_sense_scl_done */
+/* 0x0883: i2c_sense_sda */
+	0xf400f801,
+	0x37f10132,
+	0x33cf07c4,
+	0x0432fd00,
+	0xf4060bf4,
+/* 0x0896: i2c_sense_sda_done */
+	0x00f80131,
+/* 0x0898: i2c_raise_scl */
+	0x47f140f9,
+	0x37f00898,
+	0x3621f501,
+/* 0x08a5: i2c_raise_scl_wait */
+	0xe8e7f108,
+	0x6621f403,
+	0x086e21f5,
+	0xb60901f4,
+	0x1bf40142,
+/* 0x08b9: i2c_raise_scl_done */
+	0xf840fcef,
+/* 0x08bd: i2c_start */
+	0x6e21f500,
+	0x0d11f408,
+	0x088321f5,
+	0xf40611f4,
+/* 0x08ce: i2c_start_rep */
+	0x37f0300e,
+	0x3621f500,
 	0x0137f008,
-	0x068921f5,
-/* 0x06f8: i2c_raise_scl_wait */
-	0x03e8e7f1,
-	0xf56621f4,
-	0xf406c121,
-	0x42b60901,
-	0xef1bf401,
-/* 0x070c: i2c_raise_scl_done */
-	0x00f840fc,
-/* 0x0710: i2c_start */
-	0x06c121f5,
-	0xf50d11f4,
-	0xf406d621,
-	0x0ef40611,
-/* 0x0721: i2c_start_rep */
-	0x0037f030,
-	0x068921f5,
+	0x085221f5,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0x9821f550,
+	0x0464b608,
+/* 0x08fb: i2c_start_send */
+	0xf01f11f4,
+	0x21f50037,
+	0xe7f10852,
+	0x21f41388,
+	0x0037f066,
+	0x083621f5,
+	0x1388e7f1,
+/* 0x0917: i2c_start_out */
+	0xf86621f4,
+/* 0x0919: i2c_stop */
+	0x0037f000,
+	0x083621f5,
+	0xf50037f0,
+	0xf1085221,
+	0xf403e8e7,
+	0x37f06621,
+	0x3621f501,
+	0x88e7f108,
+	0x6621f413,
 	0xf50137f0,
-	0xbb06a521,
+	0xf1085221,
+	0xf41388e7,
+	0x00f86621,
+/* 0x094c: i2c_bitw */
+	0x085221f5,
+	0x03e8e7f1,
+	0xbb6621f4,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x06eb21f5,
+	0x089821f5,
 	0xf40464b6,
-/* 0x074e: i2c_start_send */
-	0x37f01f11,
-	0xa521f500,
-	0x88e7f106,
-	0x6621f413,
-	0xf50037f0,
-	0xf1068921,
-	0xf41388e7,
-/* 0x076a: i2c_start_out */
-	0x00f86621,
-/* 0x076c: i2c_stop */
-	0xf50037f0,
-	0xf0068921,
-	0x21f50037,
-	0xe7f106a5,
-	0x21f403e8,
-	0x0137f066,
-	0x068921f5,
-	0x1388e7f1,
-	0xf06621f4,
-	0x21f50137,
-	0xe7f106a5,
+	0xe7f11811,
 	0x21f41388,
-/* 0x079f: i2c_bitw */
-	0xf500f866,
-	0xf106a521,
-	0xf403e8e7,
-	0x76bb6621,
-	0x0465b600,
-	0x659450f9,
-	0x0256bb04,
-	0x75fd50bd,
-	0xf550fc04,
-	0xb606eb21,
-	0x11f40464,
-	0x88e7f118,
-	0x6621f413,
-	0xf50037f0,
-	0xf1068921,
-	0xf41388e7,
-/* 0x07de: i2c_bitw_out */
-	0x00f86621,
-/* 0x07e0: i2c_bitr */
-	0xf50137f0,
-	0xf106a521,
-	0xf403e8e7,
-	0x76bb6621,
-	0x0465b600,
-	0x659450f9,
-	0x0256bb04,
-	0x75fd50bd,
-	0xf550fc04,
-	0xb606eb21,
-	0x11f40464,
-	0xd621f51b,
-	0x0037f006,
-	0x068921f5,
+	0x0037f066,
+	0x083621f5,
 	0x1388e7f1,
-	0xf06621f4,
-	0x31f4013c,
-/* 0x0825: i2c_bitr_done */
-/* 0x0827: i2c_get_byte */
-	0xf000f801,
-	0x47f00057,
-/* 0x082d: i2c_get_byte_next */
-	0x0154b608,
-	0xb60076bb,
-	0x50f90465,
-	0xbb046594,
-	0x50bd0256,
-	0xfc0475fd,
-	0xe021f550,
-	0x0464b607,
-	0xfd2b11f4,
-	0x42b60553,
-	0xd81bf401,
-	0xbb0137f0,
+/* 0x098b: i2c_bitw_out */
+	0xf86621f4,
+/* 0x098d: i2c_bitr */
+	0x0137f000,
+	0x085221f5,
+	0x03e8e7f1,
+	0xbb6621f4,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x079f21f5,
-/* 0x0877: i2c_get_byte_done */
-	0xf80464b6,
-/* 0x0879: i2c_put_byte */
-	0x0847f000,
-/* 0x087c: i2c_put_byte_next */
-	0xff0142b6,
-	0x76bb3854,
-	0x0465b600,
-	0x659450f9,
-	0x0256bb04,
-	0x75fd50bd,
-	0xf550fc04,
-	0xb6079f21,
-	0x11f40464,
-	0x0046b034,
-	0xbbd81bf4,
+	0x089821f5,
+	0xf40464b6,
+	0x21f51b11,
+	0x37f00883,
+	0x3621f500,
+	0x88e7f108,
+	0x6621f413,
+	0xf4013cf0,
+/* 0x09d2: i2c_bitr_done */
+	0x00f80131,
+/* 0x09d4: i2c_get_byte */
+	0xf00057f0,
+/* 0x09da: i2c_get_byte_next */
+	0x54b60847,
+	0x0076bb01,
+	0xf90465b6,
+	0x04659450,
+	0xbd0256bb,
+	0x0475fd50,
+	0x21f550fc,
+	0x64b6098d,
+	0x2b11f404,
+	0xb60553fd,
+	0x1bf40142,
+	0x0137f0d8,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0x4c21f550,
+	0x0464b609,
+/* 0x0a24: i2c_get_byte_done */
+/* 0x0a26: i2c_put_byte */
+	0x47f000f8,
+/* 0x0a29: i2c_put_byte_next */
+	0x0142b608,
+	0xbb3854ff,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x07e021f5,
+	0x094c21f5,
 	0xf40464b6,
-	0x76bb0f11,
-	0x0136b000,
-	0xf4061bf4,
-/* 0x08d2: i2c_put_byte_done */
-	0x00f80132,
-/* 0x08d4: i2c_addr */
+	0x46b03411,
+	0xd81bf400,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x1021f550,
-	0x0464b607,
-	0xe72911f4,
-	0xb6012ec3,
-	0x53fd0134,
-	0x0076bb05,
+	0x8d21f550,
+	0x0464b609,
+	0xbb0f11f4,
+	0x36b00076,
+	0x061bf401,
+/* 0x0a7f: i2c_put_byte_done */
+	0xf80132f4,
+/* 0x0a81: i2c_addr */
+	0x0076bb00,
 	0xf90465b6,
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b60879,
-/* 0x0919: i2c_addr_done */
-/* 0x091b: i2c_acquire_addr */
-	0xc700f804,
-	0xe4b6f8ce,
-	0x14e0b705,
-/* 0x0927: i2c_acquire */
-	0xf500f8d0,
-	0xf4091b21,
-	0xd9f00421,
+	0x64b608bd,
+	0x2911f404,
+	0x012ec3e7,
+	0xfd0134b6,
+	0x76bb0553,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0xf550fc04,
+	0xb60a2621,
+/* 0x0ac6: i2c_addr_done */
+	0x00f80464,
+/* 0x0ac8: i2c_acquire_addr */
+	0xb6f8cec7,
+	0xe0b705e4,
+	0x00f8d014,
+/* 0x0ad4: i2c_acquire */
+	0x0ac821f5,
+	0xf00421f4,
+	0x21f403d9,
+/* 0x0ae3: i2c_release */
+	0xf500f834,
+	0xf40ac821,
+	0xdaf00421,
 	0x3421f403,
-/* 0x0936: i2c_release */
-	0x21f500f8,
-	0x21f4091b,
-	0x03daf004,
-	0xf83421f4,
-/* 0x0945: i2c_recv */
-	0x0132f400,
-	0xb6f8c1c7,
-	0x16b00214,
-	0x3a1ff528,
-	0xf413a001,
-	0x0032980c,
-	0x0ccc13a0,
-	0xf4003198,
-	0xd0f90231,
-	0xd0f9e0f9,
-	0x000067f1,
-	0x100063f1,
-	0xbb016792,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x092721f5,
-	0xfc0464b6,
-	0x00d6b0d0,
-	0x00b31bf5,
-	0xbb0057f0,
+/* 0x0af2: i2c_recv */
+	0x32f400f8,
+	0xf8c1c701,
+	0xb00214b6,
+	0x1ff52816,
+	0x13a0013a,
+	0x32980d00,
+	0xd813a000,
+	0x0031980c,
+	0xf90231f4,
+	0xf9e0f9d0,
+	0x0067f1d0,
+	0x0063f100,
+	0x01679210,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0xd421f550,
+	0x0464b60a,
+	0xd6b0d0fc,
+	0xb31bf500,
+	0x0057f000,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0x8121f550,
+	0x0464b60a,
+	0x00d011f5,
+	0xbbe0c5c7,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x08d421f5,
+	0x0a2621f5,
 	0xf50464b6,
-	0xc700d011,
-	0x76bbe0c5,
+	0xf000ad11,
+	0x76bb0157,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb6087921,
+	0xb60a8121,
 	0x11f50464,
-	0x57f000ad,
-	0x0076bb01,
-	0xf90465b6,
-	0x04659450,
-	0xbd0256bb,
-	0x0475fd50,
-	0x21f550fc,
-	0x64b608d4,
-	0x8a11f504,
-	0x0076bb00,
-	0xf90465b6,
-	0x04659450,
-	0xbd0256bb,
-	0x0475fd50,
-	0x21f550fc,
-	0x64b60827,
-	0x6a11f404,
-	0xbbe05bcb,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x076c21f5,
-	0xb90464b6,
-	0x74bd025b,
-/* 0x0a4b: i2c_recv_not_rd08 */
-	0xb0430ef4,
-	0x1bf401d6,
-	0x0057f03d,
-	0x08d421f5,
-	0xc73311f4,
-	0x21f5e0c5,
-	0x11f40879,
-	0x0057f029,
-	0x08d421f5,
-	0xc71f11f4,
-	0x21f5e0b5,
-	0x11f40879,
-	0x6c21f515,
-	0xc774bd07,
-	0x1bf408c5,
-	0x0232f409,
-/* 0x0a8b: i2c_recv_not_wr08 */
-/* 0x0a8b: i2c_recv_done */
-	0xc7030ef4,
-	0x21f5f8ce,
-	0xe0fc0936,
-	0x12f4d0fc,
-	0x027cb90a,
-	0x02e521f5,
-/* 0x0aa0: i2c_recv_exit */
-/* 0x0aa2: i2c_init */
-	0x00f800f8,
-/* 0x0aa4: test_recv */
-	0x05d817f1,
-	0xb60011cf,
-	0x07f10110,
-	0x01d005d8,
-	0xf104bd00,
-	0xf1d900e7,
-	0xf5134fe3,
-	0xf8021721,
-/* 0x0ac5: test_init */
-	0x00e7f100,
-	0x1721f508,
-/* 0x0acf: idle_recv */
+	0x76bb008a,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0xf550fc04,
+	0xb609d421,
+	0x11f40464,
+	0xe05bcb6a,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0x1921f550,
+	0x0464b609,
+	0xbd025bb9,
+	0x430ef474,
+/* 0x0bf8: i2c_recv_not_rd08 */
+	0xf401d6b0,
+	0x57f03d1b,
+	0x8121f500,
+	0x3311f40a,
+	0xf5e0c5c7,
+	0xf40a2621,
+	0x57f02911,
+	0x8121f500,
+	0x1f11f40a,
+	0xf5e0b5c7,
+	0xf40a2621,
+	0x21f51511,
+	0x74bd0919,
+	0xf408c5c7,
+	0x32f4091b,
+	0x030ef402,
+/* 0x0c38: i2c_recv_not_wr08 */
+/* 0x0c38: i2c_recv_done */
+	0xf5f8cec7,
+	0xfc0ae321,
+	0xf4d0fce0,
+	0x7cb90a12,
+	0xe521f502,
+/* 0x0c4d: i2c_recv_exit */
+/* 0x0c4f: i2c_init */
 	0xf800f802,
-/* 0x0ad1: idle */
-	0x0031f400,
-	0x05d417f1,
-	0xb60011cf,
-	0x07f10110,
-	0x01d005d4,
-/* 0x0ae7: idle_loop */
-	0xf004bd00,
-	0x32f45817,
-/* 0x0aed: idle_proc */
-/* 0x0aed: idle_proc_exec */
-	0xb910f902,
-	0x21f5021e,
-	0x10fc02ee,
-	0xf40911f4,
-	0x0ef40231,
-/* 0x0b01: 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,
+/* 0x0c51: test_recv */
+	0xd817f100,
+	0x0011cf05,
+	0xf10110b6,
+	0xd005d807,
+	0x04bd0001,
+	0xd900e7f1,
+	0x134fe3f1,
+	0x021721f5,
+/* 0x0c72: test_init */
+	0xe7f100f8,
+	0x21f50800,
+	0x00f80217,
+/* 0x0c7c: idle_recv */
+/* 0x0c7e: idle */
+	0x31f400f8,
+	0xd417f100,
+	0x0011cf05,
+	0xf10110b6,
+	0xd005d407,
+	0x04bd0001,
+/* 0x0c94: idle_loop */
+	0xf45817f0,
+/* 0x0c9a: idle_proc */
+/* 0x0c9a: idle_proc_exec */
+	0x10f90232,
+	0xf5021eb9,
+	0xfc02ee21,
+	0x0911f410,
+	0xf40231f4,
+/* 0x0cae: idle_proc_next */
+	0x10b6ef0e,
+	0x061fb858,
+	0xf4e61bf4,
+	0x28f4dd02,
+	0xc10ef400,
 	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 9cf4e6fc..01f409ed 100644
--- a/drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h
+++ b/drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h
@@ -1,4 +1,4 @@
-static uint32_t gk208_pmu_data[] = {
+uint32_t gk208_pmu_data[] = {
 /* 0x0000: proc_kern */
 	0x52544e49,
 	0x00000000,
@@ -68,7 +68,7 @@ static uint32_t gk208_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x46524550,
-	0x000005f7,
+	0x000006f8,
 	0x000005f5,
 	0x00000000,
 	0x00000000,
@@ -90,8 +90,8 @@ static uint32_t gk208_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x5f433249,
-	0x000009f8,
-	0x000008a2,
+	0x00000b51,
+	0x000009fb,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -112,8 +112,8 @@ static uint32_t gk208_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x54534554,
-	0x00000a16,
-	0x000009fa,
+	0x00000b6f,
+	0x00000b53,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -134,8 +134,8 @@ static uint32_t gk208_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x454c4449,
-	0x00000a21,
-	0x00000a1f,
+	0x00000b7a,
+	0x00000b78,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -834,7 +834,18 @@ static uint32_t gk208_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 /* 0x0ccc: memx_train_tail */
-/* 0x0ccc: i2c_scl_map */
+/* 0x0ccc: perf_polling_period_us */
+	0x000186a0,
+/* 0x0cd0: perf_slot1 */
+/* 0x0cd1: perf_slot2 */
+/* 0x0cd2: perf_slot3 */
+/* 0x0cd3: perf_slot4 */
+	0x00000000,
+/* 0x0cd4: perf_slot5 */
+/* 0x0cd5: perf_slot6 */
+/* 0x0cd6: perf_slot7 */
+	0x00000000,
+/* 0x0cd8: i2c_scl_map */
 	0x00000400,
 	0x00000800,
 	0x00001000,
@@ -845,7 +856,7 @@ static uint32_t gk208_pmu_data[] = {
 	0x00020000,
 	0x00040000,
 	0x00080000,
-/* 0x0cf4: i2c_sda_map */
+/* 0x0d00: i2c_sda_map */
 	0x00100000,
 	0x00200000,
 	0x00400000,
@@ -910,12 +921,9 @@ static uint32_t gk208_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
 };
 
-static uint32_t gk208_pmu_code[] = {
+uint32_t gk208_pmu_code[] = {
 	0x02f90ef5,
 /* 0x0004: rd32 */
 	0xf607a040,
@@ -1357,357 +1365,424 @@ static uint32_t gk208_pmu_code[] = {
 /* 0x05f3: memx_init */
 	0xf800f8dc,
 /* 0x05f5: perf_recv */
-/* 0x05f7: perf_init */
-	0xf800f800,
-/* 0x05f9: i2c_drive_scl */
-	0x0036b000,
-	0x400d0bf4,
-	0x01f607e0,
-	0xf804bd00,
-/* 0x0609: i2c_drive_scl_lo */
-	0x07e44000,
-	0xbd0001f6,
-/* 0x0613: i2c_drive_sda */
-	0xb000f804,
-	0x0bf40036,
-	0x07e0400d,
-	0xbd0002f6,
-/* 0x0623: i2c_drive_sda_lo */
-	0x4000f804,
-	0x02f607e4,
-	0xf804bd00,
-/* 0x062d: i2c_sense_scl */
-	0x0132f400,
-	0xcf07c443,
-	0x31fd0033,
-	0x060bf404,
-/* 0x063f: i2c_sense_scl_done */
-	0xf80131f4,
-/* 0x0641: i2c_sense_sda */
-	0x0132f400,
-	0xcf07c443,
-	0x32fd0033,
-	0x060bf404,
-/* 0x0653: i2c_sense_sda_done */
-	0xf80131f4,
-/* 0x0655: i2c_raise_scl */
-	0x4440f900,
-	0x01030898,
-	0x0005f97e,
-/* 0x0660: i2c_raise_scl_wait */
-	0x7e03e84e,
-	0x7e000058,
-	0xf400062d,
-	0x42b60901,
-	0xef1bf401,
-/* 0x0674: i2c_raise_scl_done */
-	0x00f840fc,
-/* 0x0678: i2c_start */
-	0x00062d7e,
-	0x7e0d11f4,
-	0xf4000641,
-	0x0ef40611,
-/* 0x0689: i2c_start_rep */
-	0x7e00032e,
-	0x030005f9,
-	0x06137e01,
-	0x0076bb00,
-	0xf90465b6,
-	0x04659450,
-	0xbd0256bb,
-	0x0475fd50,
-	0x557e50fc,
-	0x64b60006,
-	0x1d11f404,
-/* 0x06b4: i2c_start_send */
-	0x137e0003,
-	0x884e0006,
-	0x00587e13,
-	0x7e000300,
-	0x4e0005f9,
-	0x587e1388,
-/* 0x06ce: i2c_start_out */
-	0x00f80000,
-/* 0x06d0: i2c_stop */
-	0xf97e0003,
-	0x00030005,
-	0x0006137e,
-	0x7e03e84e,
-	0x03000058,
-	0x05f97e01,
-	0x13884e00,
+	0x4f48da00,
+	0xeaa65453,
+	0xf4061bf4,
+/* 0x0602: perf_recv_not_host */
+	0x187e170e,
+	0xcc400006,
+	0x000e980c,
+	0xbb7e04bd,
+	0xde7e0001,
+/* 0x0616: perf_recv_exit */
+	0x00f80001,
+/* 0x0618: perf_counter_readout */
+	0x20f910f9,
+	0x40f930f9,
+	0x60f950f9,
+	0x80f970f9,
+	0xcf050841,
+	0x18420011,
+	0x0022cf05,
+	0xcf052843,
+	0x38440033,
+	0x0044cf05,
+	0xcf054845,
+	0x58460055,
+	0x0066cf05,
+	0xcf056847,
+	0x78480077,
+	0x0088cf05,
+	0x000000de,
+	0x05084080,
+	0xbd000ef6,
+	0x05184004,
+	0xbd000ef6,
+	0x05284004,
+	0xbd000ef6,
+	0x05384004,
+	0xbd000ef6,
+	0x05484004,
+	0xbd000ef6,
+	0x05584004,
+	0xbd000ef6,
+	0x05684004,
+	0xbd000ef6,
+	0x05784004,
+	0xbd000ef6,
+	0xff11cc04,
+	0xff2c21ff,
+	0x41ff3c31,
+	0x5c51ff4c,
+	0xff6c61ff,
+	0x81ff7c71,
+	0x0cd0408c,
+	0x04bd0220,
+	0x200cd140,
+	0x4004bd03,
+	0x04200cd2,
+	0xd34004bd,
+	0xbd05200c,
+	0x0cd44004,
+	0x04bd0620,
+	0x200cd540,
+	0x4004bd07,
+	0x08200cd6,
+	0x80fc04bd,
+	0x60fc70fc,
+	0x40fc50fc,
+	0x20fc30fc,
+	0x00f810fc,
+/* 0x06f8: perf_init */
+	0x0c40030e,
+	0x000ef605,
+	0x020e04bd,
+	0xf6051c40,
+	0x04bd000e,
+	0xf6052c40,
+	0x04bd000e,
+	0xf6053c40,
+	0x04bd000e,
+	0xf6054c40,
+	0x04bd000e,
+	0xf6055c40,
+	0x04bd000e,
+	0xf6056c40,
+	0x04bd000e,
+	0xf6057c40,
+	0x04bd000e,
+	0x0006187e,
+	0x980ccc40,
+	0x04bd000e,
+	0x01bb21f5,
+	0x0001de7e,
+/* 0x0752: i2c_drive_scl */
+	0x36b000f8,
+	0x0d0bf400,
+	0xf607e040,
+	0x04bd0001,
+/* 0x0762: i2c_drive_scl_lo */
+	0xe44000f8,
+	0x0001f607,
+	0x00f804bd,
+/* 0x076c: i2c_drive_sda */
+	0xf40036b0,
+	0xe0400d0b,
+	0x0002f607,
+	0x00f804bd,
+/* 0x077c: i2c_drive_sda_lo */
+	0xf607e440,
+	0x04bd0002,
+/* 0x0786: i2c_sense_scl */
+	0x32f400f8,
+	0x07c44301,
+	0xfd0033cf,
+	0x0bf40431,
+	0x0131f406,
+/* 0x0798: i2c_sense_scl_done */
+/* 0x079a: i2c_sense_sda */
+	0x32f400f8,
+	0x07c44301,
+	0xfd0033cf,
+	0x0bf40432,
+	0x0131f406,
+/* 0x07ac: i2c_sense_sda_done */
+/* 0x07ae: i2c_raise_scl */
+	0x40f900f8,
+	0x03089844,
+	0x07527e01,
+/* 0x07b9: i2c_raise_scl_wait */
+	0x03e84e00,
 	0x0000587e,
-	0x137e0103,
-	0x884e0006,
-	0x00587e13,
-/* 0x06ff: i2c_bitw */
-	0x7e00f800,
-	0x4e000613,
-	0x587e03e8,
-	0x76bb0000,
+	0x0007867e,
+	0xb60901f4,
+	0x1bf40142,
+/* 0x07cd: i2c_raise_scl_done */
+	0xf840fcef,
+/* 0x07d1: i2c_start */
+	0x07867e00,
+	0x0d11f400,
+	0x00079a7e,
+	0xf40611f4,
+/* 0x07e2: i2c_start_rep */
+	0x00032e0e,
+	0x0007527e,
+	0x6c7e0103,
+	0x76bb0007,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0x7e50fc04,
-	0xb6000655,
+	0xb60007ae,
 	0x11f40464,
-	0x13884e17,
-	0x0000587e,
-	0xf97e0003,
-	0x884e0005,
-	0x00587e13,
-/* 0x073d: i2c_bitw_out */
-/* 0x073f: i2c_bitr */
-	0x0300f800,
-	0x06137e01,
+/* 0x080d: i2c_start_send */
+	0x7e00031d,
+	0x4e00076c,
+	0x587e1388,
+	0x00030000,
+	0x0007527e,
+	0x7e13884e,
+/* 0x0827: i2c_start_out */
+	0xf8000058,
+/* 0x0829: i2c_stop */
+	0x7e000300,
+	0x03000752,
+	0x076c7e00,
 	0x03e84e00,
 	0x0000587e,
-	0xb60076bb,
-	0x50f90465,
-	0xbb046594,
-	0x50bd0256,
-	0xfc0475fd,
-	0x06557e50,
-	0x0464b600,
-	0x7e1a11f4,
-	0x03000641,
-	0x05f97e00,
-	0x13884e00,
-	0x0000587e,
-	0xf4013cf0,
-/* 0x0782: i2c_bitr_done */
-	0x00f80131,
-/* 0x0784: i2c_get_byte */
-	0x08040005,
-/* 0x0788: i2c_get_byte_next */
-	0xbb0154b6,
+	0x527e0103,
+	0x884e0007,
+	0x00587e13,
+	0x7e010300,
+	0x4e00076c,
+	0x587e1388,
+	0x00f80000,
+/* 0x0858: i2c_bitw */
+	0x00076c7e,
+	0x7e03e84e,
+	0xbb000058,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x00073f7e,
+	0x0007ae7e,
 	0xf40464b6,
-	0x53fd2a11,
-	0x0142b605,
-	0x03d81bf4,
-	0x0076bb01,
+	0x884e1711,
+	0x00587e13,
+	0x7e000300,
+	0x4e000752,
+	0x587e1388,
+/* 0x0896: i2c_bitw_out */
+	0x00f80000,
+/* 0x0898: i2c_bitr */
+	0x6c7e0103,
+	0xe84e0007,
+	0x00587e03,
+	0x0076bb00,
 	0xf90465b6,
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
-	0xff7e50fc,
-	0x64b60006,
-/* 0x07d1: i2c_get_byte_done */
-/* 0x07d3: i2c_put_byte */
-	0x0400f804,
-/* 0x07d5: i2c_put_byte_next */
-	0x0142b608,
-	0xbb3854ff,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x0006ff7e,
-	0xf40464b6,
-	0x46b03411,
-	0xd81bf400,
+	0xae7e50fc,
+	0x64b60007,
+	0x1a11f404,
+	0x00079a7e,
+	0x527e0003,
+	0x884e0007,
+	0x00587e13,
+	0x013cf000,
+/* 0x08db: i2c_bitr_done */
+	0xf80131f4,
+/* 0x08dd: i2c_get_byte */
+	0x04000500,
+/* 0x08e1: i2c_get_byte_next */
+	0x0154b608,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x073f7e50,
+	0x08987e50,
 	0x0464b600,
-	0xbb0f11f4,
-	0x36b00076,
-	0x061bf401,
-/* 0x082b: i2c_put_byte_done */
-	0xf80132f4,
-/* 0x082d: i2c_addr */
-	0x0076bb00,
+	0xfd2a11f4,
+	0x42b60553,
+	0xd81bf401,
+	0x76bb0103,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0x7e50fc04,
+	0xb6000858,
+/* 0x092a: i2c_get_byte_done */
+	0x00f80464,
+/* 0x092c: i2c_put_byte */
+/* 0x092e: i2c_put_byte_next */
+	0x42b60804,
+	0x3854ff01,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0x08587e50,
+	0x0464b600,
+	0xb03411f4,
+	0x1bf40046,
+	0x0076bbd8,
 	0xf90465b6,
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
-	0x787e50fc,
-	0x64b60006,
-	0x2911f404,
-	0x012ec3e7,
-	0xfd0134b6,
-	0x76bb0553,
+	0x987e50fc,
+	0x64b60008,
+	0x0f11f404,
+	0xb00076bb,
+	0x1bf40136,
+	0x0132f406,
+/* 0x0984: i2c_put_byte_done */
+/* 0x0986: i2c_addr */
+	0x76bb00f8,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0x7e50fc04,
-	0xb60007d3,
-/* 0x0872: i2c_addr_done */
-	0x00f80464,
-/* 0x0874: i2c_acquire_addr */
-	0xb6f8cec7,
-	0xe0b705e4,
-	0x00f8d014,
-/* 0x0880: i2c_acquire */
-	0x0008747e,
-	0x0000047e,
-	0x7e03d9f0,
-	0xf800002d,
-/* 0x0891: i2c_release */
-	0x08747e00,
+	0xb60007d1,
+	0x11f40464,
+	0x2ec3e729,
+	0x0134b601,
+	0xbb0553fd,
+	0x65b60076,
+	0x9450f904,
+	0x56bb0465,
+	0xfd50bd02,
+	0x50fc0475,
+	0x00092c7e,
+/* 0x09cb: i2c_addr_done */
+	0xf80464b6,
+/* 0x09cd: i2c_acquire_addr */
+	0xf8cec700,
+	0xb705e4b6,
+	0xf8d014e0,
+/* 0x09d9: i2c_acquire */
+	0x09cd7e00,
 	0x00047e00,
-	0x03daf000,
+	0x03d9f000,
 	0x00002d7e,
-/* 0x08a2: i2c_recv */
-	0x32f400f8,
-	0xf8c1c701,
-	0xb00214b6,
-	0x1ff52816,
-	0x13b80134,
-	0x98000cf4,
-	0x13b80032,
-	0x98000ccc,
-	0x31f40031,
-	0xf9d0f902,
-	0xd6d0f9e0,
-	0x10000000,
-	0xbb016792,
+/* 0x09ea: i2c_release */
+	0xcd7e00f8,
+	0x047e0009,
+	0xdaf00000,
+	0x002d7e03,
+/* 0x09fb: i2c_recv */
+	0xf400f800,
+	0xc1c70132,
+	0x0214b6f8,
+	0xf52816b0,
+	0xb801341f,
+	0x000d0013,
+	0xb8003298,
+	0x000cd813,
+	0xf4003198,
+	0xd0f90231,
+	0xd0f9e0f9,
+	0x000000d6,
+	0x01679210,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0x09d97e50,
+	0x0464b600,
+	0xd6b0d0fc,
+	0xb01bf500,
+	0xbb000500,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0008807e,
-	0xfc0464b6,
-	0x00d6b0d0,
-	0x00b01bf5,
-	0x76bb0005,
+	0x0009867e,
+	0xf50464b6,
+	0xc700cc11,
+	0x76bbe0c5,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0x7e50fc04,
-	0xb600082d,
+	0xb600092c,
 	0x11f50464,
-	0xc5c700cc,
-	0x0076bbe0,
-	0xf90465b6,
-	0x04659450,
-	0xbd0256bb,
-	0x0475fd50,
-	0xd37e50fc,
-	0x64b60007,
-	0xa911f504,
-	0xbb010500,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x00082d7e,
-	0xf50464b6,
-	0xbb008711,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x0007847e,
-	0xf40464b6,
-	0x5bcb6711,
-	0x0076bbe0,
-	0xf90465b6,
-	0x04659450,
-	0xbd0256bb,
-	0x0475fd50,
-	0xd07e50fc,
-	0x64b60006,
-	0xbd5bb204,
-	0x410ef474,
-/* 0x09a4: i2c_recv_not_rd08 */
-	0xf401d6b0,
-	0x00053b1b,
-	0x00082d7e,
-	0xc73211f4,
-	0xd37ee0c5,
-	0x11f40007,
-	0x7e000528,
-	0xf400082d,
-	0xb5c71f11,
-	0x07d37ee0,
-	0x1511f400,
-	0x0006d07e,
-	0xc5c774bd,
-	0x091bf408,
-	0xf40232f4,
-/* 0x09e2: i2c_recv_not_wr08 */
-/* 0x09e2: i2c_recv_done */
-	0xcec7030e,
-	0x08917ef8,
-	0xfce0fc00,
-	0x0912f4d0,
-	0x9f7e7cb2,
-/* 0x09f6: i2c_recv_exit */
-	0x00f80002,
-/* 0x09f8: i2c_init */
-/* 0x09fa: test_recv */
-	0x584100f8,
-	0x0011cf04,
-	0x400110b6,
-	0x01f60458,
-	0xde04bd00,
-	0x134fd900,
-	0x0001de7e,
-/* 0x0a16: test_init */
-	0x004e00f8,
-	0x01de7e08,
-/* 0x0a1f: idle_recv */
-	0xf800f800,
-/* 0x0a21: idle */
-	0x0031f400,
-	0xcf045441,
-	0x10b60011,
-	0x04544001,
-	0xbd0001f6,
-/* 0x0a35: idle_loop */
-	0xf4580104,
-/* 0x0a3a: idle_proc */
-/* 0x0a3a: idle_proc_exec */
-	0x10f90232,
-	0xa87e1eb2,
-	0x10fc0002,
-	0xf40911f4,
-	0x0ef40231,
-/* 0x0a4d: idle_proc_next */
-	0x5810b6f0,
-	0x1bf41fa6,
-	0xe002f4e8,
-	0xf40028f4,
-	0x0000c60e,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
+	0x010500a9,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0x09867e50,
+	0x0464b600,
+	0x008711f5,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0x08dd7e50,
+	0x0464b600,
+	0xcb6711f4,
+	0x76bbe05b,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0x7e50fc04,
+	0xb6000829,
+	0x5bb20464,
+	0x0ef474bd,
+/* 0x0afd: i2c_recv_not_rd08 */
+	0x01d6b041,
+	0x053b1bf4,
+	0x09867e00,
+	0x3211f400,
+	0x7ee0c5c7,
+	0xf400092c,
+	0x00052811,
+	0x0009867e,
+	0xc71f11f4,
+	0x2c7ee0b5,
+	0x11f40009,
+	0x08297e15,
+	0xc774bd00,
+	0x1bf408c5,
+	0x0232f409,
+/* 0x0b3b: i2c_recv_not_wr08 */
+/* 0x0b3b: i2c_recv_done */
+	0xc7030ef4,
+	0xea7ef8ce,
+	0xe0fc0009,
+	0x12f4d0fc,
+	0x7e7cb209,
+/* 0x0b4f: i2c_recv_exit */
+	0xf800029f,
+/* 0x0b51: i2c_init */
+/* 0x0b53: test_recv */
+	0x4100f800,
+	0x11cf0458,
+	0x0110b600,
+	0xf6045840,
+	0x04bd0001,
+	0x4fd900de,
+	0x01de7e13,
+/* 0x0b6f: test_init */
+	0x4e00f800,
+	0xde7e0800,
+	0x00f80001,
+/* 0x0b78: idle_recv */
+/* 0x0b7a: idle */
+	0x31f400f8,
+	0x04544100,
+	0xb60011cf,
+	0x54400110,
+	0x0001f604,
+/* 0x0b8e: idle_loop */
+	0x580104bd,
+/* 0x0b93: idle_proc */
+/* 0x0b93: idle_proc_exec */
+	0xf90232f4,
+	0x7e1eb210,
+	0xfc0002a8,
+	0x0911f410,
+	0xf40231f4,
+/* 0x0ba6: idle_proc_next */
+	0x10b6f00e,
+	0xf41fa658,
+	0x02f4e81b,
+	0x0028f4e0,
+	0x00c60ef4,
 	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 5d692425..345c9281 100644
--- a/drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h
+++ b/drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h
@@ -1,4 +1,4 @@
-static uint32_t gt215_pmu_data[] = {
+uint32_t gt215_pmu_data[] = {
 /* 0x0000: proc_kern */
 	0x52544e49,
 	0x00000000,
@@ -68,7 +68,7 @@ static uint32_t gt215_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x46524550,
-	0x0000083e,
+	0x00000909,
 	0x0000083c,
 	0x00000000,
 	0x00000000,
@@ -90,8 +90,8 @@ static uint32_t gt215_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x5f433249,
-	0x00000c6e,
-	0x00000b11,
+	0x00000d8f,
+	0x00000c32,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -112,8 +112,8 @@ static uint32_t gt215_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x54534554,
-	0x00000c97,
-	0x00000c70,
+	0x00000db8,
+	0x00000d91,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -134,8 +134,8 @@ static uint32_t gt215_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x454c4449,
-	0x00000ca3,
-	0x00000ca1,
+	0x00000dc4,
+	0x00000dc2,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -834,7 +834,13 @@ static uint32_t gt215_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 /* 0x0ccc: memx_train_tail */
-/* 0x0ccc: i2c_scl_map */
+/* 0x0ccc: perf_polling_period_us */
+	0x000186a0,
+/* 0x0cd0: perf_slot1 */
+/* 0x0cd1: perf_slot2 */
+/* 0x0cd2: perf_slot3 */
+	0x00000000,
+/* 0x0cd4: i2c_scl_map */
 	0x00001000,
 	0x00004000,
 	0x00010000,
@@ -845,7 +851,7 @@ static uint32_t gt215_pmu_data[] = {
 	0x01000000,
 	0x04000000,
 	0x10000000,
-/* 0x0cf4: i2c_sda_map */
+/* 0x0cfc: i2c_sda_map */
 	0x00002000,
 	0x00008000,
 	0x00020000,
@@ -856,7 +862,7 @@ static uint32_t gt215_pmu_data[] = {
 	0x02000000,
 	0x08000000,
 	0x20000000,
-/* 0x0d1c: i2c_ctrl */
+/* 0x0d24: i2c_ctrl */
 	0x0000e138,
 	0x0000e150,
 	0x0000e168,
@@ -912,11 +918,9 @@ static uint32_t gt215_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x00000000,
-	0x00000000,
-	0x00000000,
 };
 
-static uint32_t gt215_pmu_code[] = {
+uint32_t gt215_pmu_code[] = {
 	0x03920ef5,
 /* 0x0004: rd32 */
 	0x07a007f1,
@@ -1512,352 +1516,483 @@ static uint32_t gt215_pmu_code[] = {
 /* 0x083a: memx_init */
 	0x00f800f8,
 /* 0x083c: perf_recv */
-/* 0x083e: perf_init */
-	0x00f800f8,
-/* 0x0840: i2c_drive_scl */
-	0xf40036b0,
-	0x07f1110b,
-	0x04b607e0,
-	0x0001d006,
-	0x00f804bd,
-/* 0x0854: i2c_drive_scl_lo */
-	0x07e407f1,
-	0xd00604b6,
-	0x04bd0001,
-/* 0x0862: i2c_drive_sda */
-	0x36b000f8,
-	0x110bf400,
-	0x07e007f1,
-	0xd00604b6,
-	0x04bd0002,
-/* 0x0876: i2c_drive_sda_lo */
-	0x07f100f8,
-	0x04b607e4,
-	0x0002d006,
-	0x00f804bd,
-/* 0x0884: i2c_sense_scl */
-	0xf10132f4,
-	0xb607c437,
-	0x33cf0634,
-	0x0431fd00,
-	0xf4060bf4,
-/* 0x089a: i2c_sense_scl_done */
-	0x00f80131,
-/* 0x089c: i2c_sense_sda */
-	0xf10132f4,
-	0xb607c437,
+	0x4f48a7f1,
+	0x5453a3f1,
+	0xf406eab8,
+	0x0ef4061b,
+/* 0x084d: perf_recv_not_host */
+	0x6721f51b,
+	0xcc07f108,
+	0x0003f00c,
+	0xbd000e98,
+	0x2a21f504,
+	0x5621f502,
+/* 0x0865: perf_recv_exit */
+/* 0x0867: perf_counter_readout */
+	0xf900f802,
+	0xf920f910,
+	0xf140f930,
+	0xb6050817,
+	0x11cf0614,
+	0x1827f100,
+	0x0624b605,
+	0xf10022cf,
+	0xb6052837,
 	0x33cf0634,
-	0x0432fd00,
-	0xf4060bf4,
-/* 0x08b2: i2c_sense_sda_done */
-	0x00f80131,
-/* 0x08b4: i2c_raise_scl */
-	0x47f140f9,
-	0x37f00898,
-	0x4021f501,
-/* 0x08c1: i2c_raise_scl_wait */
-	0xe8e7f108,
-	0x7e21f403,
-	0x088421f5,
-	0xb60901f4,
-	0x1bf40142,
-/* 0x08d5: i2c_raise_scl_done */
-	0xf840fcef,
-/* 0x08d9: i2c_start */
-	0x8421f500,
-	0x0d11f408,
-	0x089c21f5,
-	0xf40611f4,
-/* 0x08ea: i2c_start_rep */
-	0x37f0300e,
-	0x4021f500,
-	0x0137f008,
-	0x086221f5,
-	0xb60076bb,
-	0x50f90465,
-	0xbb046594,
-	0x50bd0256,
-	0xfc0475fd,
-	0xb421f550,
-	0x0464b608,
-/* 0x0917: i2c_start_send */
-	0xf01f11f4,
+	0x3847f100,
+	0x0644b605,
+	0xf10044cf,
+	0xf10000e7,
+	0xf18000e3,
+	0xb6050807,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6051807,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6052807,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6053807,
+	0x0ed00604,
+	0xcc04bd00,
+	0x21ffff11,
+	0x3c31ff2c,
+	0xf14c41ff,
+	0xf00cd007,
+	0x02000003,
+	0xf104bd00,
+	0xf00cd107,
+	0x03000003,
+	0xf104bd00,
+	0xf00cd207,
+	0x04000003,
+	0xfc04bd00,
+	0xfc30fc40,
+	0xf810fc20,
+/* 0x0909: perf_init */
+	0x03e7f100,
+	0x00e3f000,
+	0x050c07f1,
+	0xd00604b6,
+	0x04bd000e,
+	0x0002e7f1,
+	0xf100e3f0,
+	0xb6051c07,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6052c07,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6053c07,
+	0x0ed00604,
+	0xf504bd00,
+	0xf1086721,
+	0xf00ccc07,
+	0x0e980003,
+	0xf504bd00,
+	0xf5022a21,
+	0xf8025621,
+/* 0x0961: i2c_drive_scl */
+	0x0036b000,
+	0xf1110bf4,
+	0xb607e007,
+	0x01d00604,
+	0xf804bd00,
+/* 0x0975: i2c_drive_scl_lo */
+	0xe407f100,
+	0x0604b607,
+	0xbd0001d0,
+/* 0x0983: i2c_drive_sda */
+	0xb000f804,
+	0x0bf40036,
+	0xe007f111,
+	0x0604b607,
+	0xbd0002d0,
+/* 0x0997: i2c_drive_sda_lo */
+	0xf100f804,
+	0xb607e407,
+	0x02d00604,
+	0xf804bd00,
+/* 0x09a5: i2c_sense_scl */
+	0x0132f400,
+	0x07c437f1,
+	0xcf0634b6,
+	0x31fd0033,
+	0x060bf404,
+/* 0x09bb: i2c_sense_scl_done */
+	0xf80131f4,
+/* 0x09bd: i2c_sense_sda */
+	0x0132f400,
+	0x07c437f1,
+	0xcf0634b6,
+	0x32fd0033,
+	0x060bf404,
+/* 0x09d3: i2c_sense_sda_done */
+	0xf80131f4,
+/* 0x09d5: i2c_raise_scl */
+	0xf140f900,
+	0xf0089847,
+	0x21f50137,
+/* 0x09e2: i2c_raise_scl_wait */
+	0xe7f10961,
+	0x21f403e8,
+	0xa521f57e,
+	0x0901f409,
+	0xf40142b6,
+/* 0x09f6: i2c_raise_scl_done */
+	0x40fcef1b,
+/* 0x09fa: i2c_start */
+	0x21f500f8,
+	0x11f409a5,
+	0xbd21f50d,
+	0x0611f409,
+/* 0x0a0b: i2c_start_rep */
+	0xf0300ef4,
 	0x21f50037,
-	0xe7f10862,
-	0x21f41388,
-	0x0037f07e,
-	0x084021f5,
-	0x1388e7f1,
-/* 0x0933: i2c_start_out */
-	0xf87e21f4,
-/* 0x0935: i2c_stop */
-	0x0037f000,
-	0x084021f5,
+	0x37f00961,
+	0x8321f501,
+	0x0076bb09,
+	0xf90465b6,
+	0x04659450,
+	0xbd0256bb,
+	0x0475fd50,
+	0x21f550fc,
+	0x64b609d5,
+	0x1f11f404,
+/* 0x0a38: i2c_start_send */
 	0xf50037f0,
-	0xf1086221,
-	0xf403e8e7,
+	0xf1098321,
+	0xf41388e7,
 	0x37f07e21,
-	0x4021f501,
-	0x88e7f108,
+	0x6121f500,
+	0x88e7f109,
 	0x7e21f413,
-	0xf50137f0,
-	0xf1086221,
-	0xf41388e7,
-	0x00f87e21,
-/* 0x0968: i2c_bitw */
-	0x086221f5,
+/* 0x0a54: i2c_start_out */
+/* 0x0a56: i2c_stop */
+	0x37f000f8,
+	0x6121f500,
+	0x0037f009,
+	0x098321f5,
 	0x03e8e7f1,
-	0xbb7e21f4,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x08b421f5,
-	0xf40464b6,
-	0xe7f11811,
+	0xf07e21f4,
+	0x21f50137,
+	0xe7f10961,
 	0x21f41388,
-	0x0037f07e,
-	0x084021f5,
+	0x0137f07e,
+	0x098321f5,
 	0x1388e7f1,
-/* 0x09a7: i2c_bitw_out */
 	0xf87e21f4,
-/* 0x09a9: i2c_bitr */
-	0x0137f000,
-	0x086221f5,
-	0x03e8e7f1,
-	0xbb7e21f4,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x08b421f5,
-	0xf40464b6,
-	0x21f51b11,
-	0x37f0089c,
-	0x4021f500,
-	0x88e7f108,
-	0x7e21f413,
-	0xf4013cf0,
-/* 0x09ee: i2c_bitr_done */
-	0x00f80131,
-/* 0x09f0: i2c_get_byte */
-	0xf00057f0,
-/* 0x09f6: i2c_get_byte_next */
-	0x54b60847,
-	0x0076bb01,
-	0xf90465b6,
-	0x04659450,
-	0xbd0256bb,
-	0x0475fd50,
-	0x21f550fc,
-	0x64b609a9,
-	0x2b11f404,
-	0xb60553fd,
-	0x1bf40142,
-	0x0137f0d8,
+/* 0x0a89: i2c_bitw */
+	0x8321f500,
+	0xe8e7f109,
+	0x7e21f403,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x6821f550,
+	0xd521f550,
 	0x0464b609,
-/* 0x0a40: i2c_get_byte_done */
-/* 0x0a42: i2c_put_byte */
-	0x47f000f8,
-/* 0x0a45: i2c_put_byte_next */
-	0x0142b608,
-	0xbb3854ff,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x096821f5,
-	0xf40464b6,
-	0x46b03411,
-	0xd81bf400,
+	0xf11811f4,
+	0xf41388e7,
+	0x37f07e21,
+	0x6121f500,
+	0x88e7f109,
+	0x7e21f413,
+/* 0x0ac8: i2c_bitw_out */
+/* 0x0aca: i2c_bitr */
+	0x37f000f8,
+	0x8321f501,
+	0xe8e7f109,
+	0x7e21f403,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0xa921f550,
+	0xd521f550,
 	0x0464b609,
-	0xbb0f11f4,
-	0x36b00076,
-	0x061bf401,
-/* 0x0a9b: i2c_put_byte_done */
-	0xf80132f4,
-/* 0x0a9d: i2c_addr */
-	0x0076bb00,
+	0xf51b11f4,
+	0xf009bd21,
+	0x21f50037,
+	0xe7f10961,
+	0x21f41388,
+	0x013cf07e,
+/* 0x0b0f: i2c_bitr_done */
+	0xf80131f4,
+/* 0x0b11: i2c_get_byte */
+	0x0057f000,
+/* 0x0b17: i2c_get_byte_next */
+	0xb60847f0,
+	0x76bb0154,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0xf550fc04,
+	0xb60aca21,
+	0x11f40464,
+	0x0553fd2b,
+	0xf40142b6,
+	0x37f0d81b,
+	0x0076bb01,
 	0xf90465b6,
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b608d9,
-	0x2911f404,
-	0x012ec3e7,
-	0xfd0134b6,
-	0x76bb0553,
+	0x64b60a89,
+/* 0x0b61: i2c_get_byte_done */
+/* 0x0b63: i2c_put_byte */
+	0xf000f804,
+/* 0x0b66: i2c_put_byte_next */
+	0x42b60847,
+	0x3854ff01,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0x8921f550,
+	0x0464b60a,
+	0xb03411f4,
+	0x1bf40046,
+	0x0076bbd8,
+	0xf90465b6,
+	0x04659450,
+	0xbd0256bb,
+	0x0475fd50,
+	0x21f550fc,
+	0x64b60aca,
+	0x0f11f404,
+	0xb00076bb,
+	0x1bf40136,
+	0x0132f406,
+/* 0x0bbc: i2c_put_byte_done */
+/* 0x0bbe: i2c_addr */
+	0x76bb00f8,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb60a4221,
-/* 0x0ae2: i2c_addr_done */
-	0x00f80464,
-/* 0x0ae4: i2c_acquire_addr */
-	0xb6f8cec7,
-	0xe0b702e4,
-	0xee980d1c,
-/* 0x0af3: i2c_acquire */
-	0xf500f800,
-	0xf40ae421,
-	0xd9f00421,
-	0x4021f403,
-/* 0x0b02: i2c_release */
-	0x21f500f8,
-	0x21f40ae4,
-	0x03daf004,
-	0xf84021f4,
-/* 0x0b11: i2c_recv */
-	0x0132f400,
-	0xb6f8c1c7,
-	0x16b00214,
-	0x3a1ff528,
-	0xf413a001,
-	0x0032980c,
-	0x0ccc13a0,
-	0xf4003198,
-	0xd0f90231,
-	0xd0f9e0f9,
-	0x000067f1,
-	0x100063f1,
-	0xbb016792,
+	0xb609fa21,
+	0x11f40464,
+	0x2ec3e729,
+	0x0134b601,
+	0xbb0553fd,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0af321f5,
-	0xfc0464b6,
-	0x00d6b0d0,
-	0x00b31bf5,
-	0xbb0057f0,
+	0x0b6321f5,
+/* 0x0c03: i2c_addr_done */
+	0xf80464b6,
+/* 0x0c05: i2c_acquire_addr */
+	0xf8cec700,
+	0xb702e4b6,
+	0x980d24e0,
+	0x00f800ee,
+/* 0x0c14: i2c_acquire */
+	0x0c0521f5,
+	0xf00421f4,
+	0x21f403d9,
+/* 0x0c23: i2c_release */
+	0xf500f840,
+	0xf40c0521,
+	0xdaf00421,
+	0x4021f403,
+/* 0x0c32: i2c_recv */
+	0x32f400f8,
+	0xf8c1c701,
+	0xb00214b6,
+	0x1ff52816,
+	0x13a0013a,
+	0x32980cfc,
+	0xd413a000,
+	0x0031980c,
+	0xf90231f4,
+	0xf9e0f9d0,
+	0x0067f1d0,
+	0x0063f100,
+	0x01679210,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0x1421f550,
+	0x0464b60c,
+	0xd6b0d0fc,
+	0xb31bf500,
+	0x0057f000,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0xbe21f550,
+	0x0464b60b,
+	0x00d011f5,
+	0xbbe0c5c7,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0a9d21f5,
+	0x0b6321f5,
 	0xf50464b6,
-	0xc700d011,
-	0x76bbe0c5,
+	0xf000ad11,
+	0x76bb0157,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb60a4221,
+	0xb60bbe21,
 	0x11f50464,
-	0x57f000ad,
-	0x0076bb01,
-	0xf90465b6,
-	0x04659450,
-	0xbd0256bb,
-	0x0475fd50,
-	0x21f550fc,
-	0x64b60a9d,
-	0x8a11f504,
-	0x0076bb00,
-	0xf90465b6,
-	0x04659450,
-	0xbd0256bb,
-	0x0475fd50,
-	0x21f550fc,
-	0x64b609f0,
-	0x6a11f404,
-	0xbbe05bcb,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x093521f5,
-	0xb90464b6,
-	0x74bd025b,
-/* 0x0c17: i2c_recv_not_rd08 */
-	0xb0430ef4,
-	0x1bf401d6,
-	0x0057f03d,
-	0x0a9d21f5,
-	0xc73311f4,
-	0x21f5e0c5,
-	0x11f40a42,
-	0x0057f029,
-	0x0a9d21f5,
-	0xc71f11f4,
-	0x21f5e0b5,
-	0x11f40a42,
-	0x3521f515,
-	0xc774bd09,
-	0x1bf408c5,
-	0x0232f409,
-/* 0x0c57: i2c_recv_not_wr08 */
-/* 0x0c57: i2c_recv_done */
-	0xc7030ef4,
-	0x21f5f8ce,
-	0xe0fc0b02,
-	0x12f4d0fc,
-	0x027cb90a,
-	0x033621f5,
-/* 0x0c6c: i2c_recv_exit */
-/* 0x0c6e: i2c_init */
+	0x76bb008a,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0xf550fc04,
+	0xb60b1121,
+	0x11f40464,
+	0xe05bcb6a,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0x5621f550,
+	0x0464b60a,
+	0xbd025bb9,
+	0x430ef474,
+/* 0x0d38: i2c_recv_not_rd08 */
+	0xf401d6b0,
+	0x57f03d1b,
+	0xbe21f500,
+	0x3311f40b,
+	0xf5e0c5c7,
+	0xf40b6321,
+	0x57f02911,
+	0xbe21f500,
+	0x1f11f40b,
+	0xf5e0b5c7,
+	0xf40b6321,
+	0x21f51511,
+	0x74bd0a56,
+	0xf408c5c7,
+	0x32f4091b,
+	0x030ef402,
+/* 0x0d78: i2c_recv_not_wr08 */
+/* 0x0d78: i2c_recv_done */
+	0xf5f8cec7,
+	0xfc0c2321,
+	0xf4d0fce0,
+	0x7cb90a12,
+	0x3621f502,
+/* 0x0d8d: i2c_recv_exit */
+/* 0x0d8f: i2c_init */
+	0xf800f803,
+/* 0x0d91: test_recv */
+	0xd817f100,
+	0x0614b605,
+	0xb60011cf,
+	0x07f10110,
+	0x04b605d8,
+	0x0001d006,
+	0xe7f104bd,
+	0xe3f1d900,
+	0x21f5134f,
+	0x00f80256,
+/* 0x0db8: test_init */
+	0x0800e7f1,
+	0x025621f5,
+/* 0x0dc2: idle_recv */
 	0x00f800f8,
-/* 0x0c70: test_recv */
-	0x05d817f1,
-	0xcf0614b6,
-	0x10b60011,
-	0xd807f101,
-	0x0604b605,
-	0xbd0001d0,
-	0x00e7f104,
-	0x4fe3f1d9,
-	0x5621f513,
-/* 0x0c97: test_init */
-	0xf100f802,
-	0xf50800e7,
-	0xf8025621,
-/* 0x0ca1: idle_recv */
-/* 0x0ca3: idle */
-	0xf400f800,
-	0x17f10031,
-	0x14b605d4,
-	0x0011cf06,
-	0xf10110b6,
-	0xb605d407,
-	0x01d00604,
-/* 0x0cbf: idle_loop */
-	0xf004bd00,
-	0x32f45817,
-/* 0x0cc5: idle_proc */
-/* 0x0cc5: idle_proc_exec */
-	0xb910f902,
-	0x21f5021e,
-	0x10fc033f,
-	0xf40911f4,
-	0x0ef40231,
-/* 0x0cd9: idle_proc_next */
-	0x5810b6ef,
-	0xf4061fb8,
-	0x02f4e61b,
-	0x0028f4dd,
-	0x00bb0ef4,
+/* 0x0dc4: idle */
+	0xf10031f4,
+	0xb605d417,
+	0x11cf0614,
+	0x0110b600,
+	0x05d407f1,
+	0xd00604b6,
+	0x04bd0001,
+/* 0x0de0: idle_loop */
+	0xf45817f0,
+/* 0x0de6: idle_proc */
+/* 0x0de6: idle_proc_exec */
+	0x10f90232,
+	0xf5021eb9,
+	0xfc033f21,
+	0x0911f410,
+	0xf40231f4,
+/* 0x0dfa: 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,
+	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/perf.fuc b/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc
index 38eadf70..82fecf3d 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
+// parameters
+perf_polling_period_us: .b32 100000
+perf_slot1: .b8 0
+perf_slot2: .b8 0
+perf_slot3: .b8 0
+#if NVKM_PPWR_CHIPSET >= GF100
+perf_slot4: .b8 0
+perf_slot5: .b8 0
+perf_slot6: .b8 0
+perf_slot7: .b8 0
+#endif
+.align 4
 #endif
 
 /******************************************************************************
@@ -46,6 +58,93 @@ process(PROC_PERF, #perf_init, #perf_recv)
 // $r11 - data1
 // $r0  - zero
 perf_recv:
+	imm32($r10, PROC_HOST)
+	cmp b32 $r14 $r10
+	bra ne #perf_recv_not_host
+		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:
+	ret
+
+// description
+//
+// $r15 - current (perf)
+// $r0  - zero
+perf_counter_readout:
+	push $r1
+	push $r2
+	push $r3
+	push $r4
+#if NVKM_PPWR_CHIPSET >= GF100
+	push $r5
+	push $r6
+	push $r7
+	push $r8
+#endif
+
+	// read out all at once to reduce latency problems
+	nv_iord($r1, NV_PPWR_COUNTER_COUNT(0))
+	nv_iord($r2, NV_PPWR_COUNTER_COUNT(1))
+	nv_iord($r3, NV_PPWR_COUNTER_COUNT(2))
+	nv_iord($r4, NV_PPWR_COUNTER_COUNT(3))
+#if NVKM_PPWR_CHIPSET >= GF100
+	nv_iord($r5, NV_PPWR_COUNTER_COUNT(4))
+	nv_iord($r6, NV_PPWR_COUNTER_COUNT(5))
+	nv_iord($r7, NV_PPWR_COUNTER_COUNT(6))
+	nv_iord($r8, NV_PPWR_COUNTER_COUNT(7))
+#endif
+
+	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)
+	nv_iowr(NV_PPWR_COUNTER_COUNT(5), $r14)
+	nv_iowr(NV_PPWR_COUNTER_COUNT(6), $r14)
+	nv_iowr(NV_PPWR_COUNTER_COUNT(7), $r14)
+#endif
+
+	// with that we always get 8 bit values as the result
+	div $r1 $r1 0xff
+
+	div $r2 $r2 $r1
+	div $r3 $r3 $r1
+	div $r4 $r4 $r1
+#if NVKM_PPWR_CHIPSET >= GF100
+	div $r5 $r5 $r1
+	div $r6 $r6 $r1
+	div $r7 $r7 $r1
+	div $r8 $r8 $r1
+#endif
+
+	// now we can actually store our values
+	st(b8, #perf_slot1, $r2)
+	st(b8, #perf_slot2, $r3)
+	st(b8, #perf_slot3, $r4)
+#if NVKM_PPWR_CHIPSET >= GF100
+	st(b8, #perf_slot4, $r5)
+	st(b8, #perf_slot5, $r6)
+	st(b8, #perf_slot6, $r7)
+	st(b8, #perf_slot7, $r8)
+#endif
+
+#if NVKM_PPWR_CHIPSET >= GF100
+	pop $r8
+	pop $r7
+	pop $r6
+	pop $r5
+#endif
+	pop $r4
+	pop $r3
+	pop $r2
+	pop $r1
+
 	ret
 
 // description
@@ -53,5 +152,27 @@ perf_recv:
 // $r15 - current (perf)
 // $r0  - zero
 perf_init:
+	imm32($r14, NV_PPWR_COUNTER_MODE_ALWAYS)
+	nv_iowr(NV_PPWR_COUNTER_MODE(0), $r14)
+
+	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)
+	nv_iowr(NV_PPWR_COUNTER_MODE(5), $r14)
+	nv_iowr(NV_PPWR_COUNTER_MODE(6), $r14)
+	nv_iowr(NV_PPWR_COUNTER_MODE(7), $r14)
+#endif
+
+	// initial readout
+	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.12.2

_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/nouveau

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [RFC v2 3/6] pmu/fuc: implement GET_SLOTS
       [not found] ` <20170507224648.1182-1-karolherbst-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  2017-05-07 22:46   ` [RFC v2 1/6] pmu/fuc: add macros for pdaemon pwr counters Karol Herbst
  2017-05-07 22:46   ` [RFC v2 2/6] pmu/fuc: read out counters and store them Karol Herbst
@ 2017-05-07 22:46   ` Karol Herbst
  2017-05-07 22:46   ` [RFC v2 4/6] pmu/fuc: implement SET_SLOT Karol Herbst
                     ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Karol Herbst @ 2017-05-07 22:46 UTC (permalink / raw)
  To: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

Signed-off-by: Karol Herbst <karolherbst@gmail.com>

fixup

Signed-off-by: Karol Herbst <karolherbst@gmail.com>
---
 drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h | 894 ++++++++++++++-------------
 drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h | 840 +++++++++++++------------
 drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h | 776 ++++++++++++-----------
 drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h | 770 +++++++++++------------
 drm/nouveau/nvkm/subdev/pmu/fuc/os.h         |   3 +
 drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc     |  29 +-
 6 files changed, 1771 insertions(+), 1541 deletions(-)

diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h b/drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h
index 9ed8e313..2cbdcdff 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,
-	0x000008c9,
+	0x0000094b,
 	0x00000758,
 	0x00000000,
 	0x00000000,
@@ -90,8 +90,8 @@ uint32_t gf100_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x5f433249,
-	0x00000d7f,
-	0x00000c22,
+	0x00000e01,
+	0x00000ca4,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -112,8 +112,8 @@ uint32_t gf100_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x54534554,
-	0x00000da8,
-	0x00000d81,
+	0x00000e2a,
+	0x00000e03,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -134,8 +134,8 @@ uint32_t gf100_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x454c4449,
-	0x00000db4,
-	0x00000db2,
+	0x00000e36,
+	0x00000e34,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -1462,477 +1462,543 @@ uint32_t gf100_pmu_code[] = {
 /* 0x0758: perf_recv */
 	0x4f48a7f1,
 	0x5453a3f1,
-	0xf406eab8,
-	0x0ef4061b,
-/* 0x0769: perf_recv_not_host */
-	0x8321f51b,
-	0xcc07f107,
+	0xf506eab8,
+	0xf100811b,
+	0xf00001a7,
+	0xdab800a3,
+	0x070bf406,
+	0x008b0ef5,
+/* 0x0778: perf_recv_get_slots */
+	0x0cd207f1,
+	0x180003f0,
+	0x04bd000c,
+	0xf108c4b6,
+	0xf00cd107,
+	0x0c180003,
+	0xb604bd00,
+	0x07f108c4,
+	0x03f00cd0,
+	0x000c1800,
+	0xc4b604bd,
+	0xffc5f008,
+	0x0cd607f1,
+	0x180003f0,
+	0x04bd000b,
+	0xf108b4b6,
+	0xf00cd507,
+	0x0b180003,
+	0xb604bd00,
+	0x07f108b4,
+	0x03f00cd4,
+	0x000b1800,
+	0xb4b604bd,
+	0xd307f108,
+	0x0003f00c,
+	0xbd000b18,
+	0x1e0ef404,
+/* 0x07e4: perf_recv_not_host */
+	0x080521f5,
+	0x0ccc07f1,
+	0x980003f0,
+	0x04bd000e,
+	0x022a21f5,
+	0x025621f5,
+/* 0x07ff: perf_recv_host */
+	0xf5070ef4,
+/* 0x0803: perf_recv_exit */
+	0xf8033621,
+/* 0x0805: perf_counter_readout */
+	0xf910f900,
+	0xf930f920,
+	0xf950f940,
+	0xf970f960,
+	0x0817f180,
+	0x0614b605,
+	0xf10011cf,
+	0xb6051827,
+	0x22cf0624,
+	0x2837f100,
+	0x0634b605,
+	0xf10033cf,
+	0xb6053847,
+	0x44cf0644,
+	0x4857f100,
+	0x0654b605,
+	0xf10055cf,
+	0xb6055867,
+	0x66cf0664,
+	0x6877f100,
+	0x0674b605,
+	0xf10077cf,
+	0xb6057887,
+	0x88cf0684,
+	0x00e7f100,
+	0x00e3f100,
+	0x0807f180,
+	0x0604b605,
+	0xbd000ed0,
+	0x1807f104,
+	0x0604b605,
+	0xbd000ed0,
+	0x2807f104,
+	0x0604b605,
+	0xbd000ed0,
+	0x3807f104,
+	0x0604b605,
+	0xbd000ed0,
+	0x4807f104,
+	0x0604b605,
+	0xbd000ed0,
+	0x5807f104,
+	0x0604b605,
+	0xbd000ed0,
+	0x6807f104,
+	0x0604b605,
+	0xbd000ed0,
+	0x7807f104,
+	0x0604b605,
+	0xbd000ed0,
+	0xff11cc04,
+	0xff2c21ff,
+	0x41ff3c31,
+	0x5c51ff4c,
+	0xff6c61ff,
+	0x81ff7c71,
+	0xd007f18c,
+	0x0003f00c,
+	0xbd000200,
+	0xd107f104,
+	0x0003f00c,
+	0xbd000300,
+	0xd207f104,
+	0x0003f00c,
+	0xbd000400,
+	0xd307f104,
+	0x0003f00c,
+	0xbd000500,
+	0xd407f104,
+	0x0003f00c,
+	0xbd000600,
+	0xd507f104,
+	0x0003f00c,
+	0xbd000700,
+	0xd607f104,
+	0x0003f00c,
+	0xbd000800,
+	0xfc80fc04,
+	0xfc60fc70,
+	0xfc40fc50,
+	0xfc20fc30,
+/* 0x094b: perf_init */
+	0xf100f810,
+	0xf00003e7,
+	0x07f100e3,
+	0x04b6050c,
+	0x000ed006,
+	0xe7f104bd,
+	0xe3f00002,
+	0x1c07f100,
+	0x0604b605,
+	0xbd000ed0,
+	0x2c07f104,
+	0x0604b605,
+	0xbd000ed0,
+	0x3c07f104,
+	0x0604b605,
+	0xbd000ed0,
+	0x4c07f104,
+	0x0604b605,
+	0xbd000ed0,
+	0x5c07f104,
+	0x0604b605,
+	0xbd000ed0,
+	0x6c07f104,
+	0x0604b605,
+	0xbd000ed0,
+	0x7c07f104,
+	0x0604b605,
+	0xbd000ed0,
+	0x0521f504,
+	0xcc07f108,
 	0x0003f00c,
 	0xbd000e98,
 	0x2a21f504,
 	0x5621f502,
-/* 0x0781: perf_recv_exit */
-/* 0x0783: perf_counter_readout */
-	0xf900f802,
-	0xf920f910,
-	0xf940f930,
-	0xf960f950,
-	0xf180f970,
-	0xb6050817,
-	0x11cf0614,
-	0x1827f100,
-	0x0624b605,
-	0xf10022cf,
-	0xb6052837,
-	0x33cf0634,
-	0x3847f100,
-	0x0644b605,
-	0xf10044cf,
-	0xb6054857,
-	0x55cf0654,
-	0x5867f100,
-	0x0664b605,
-	0xf10066cf,
-	0xb6056877,
-	0x77cf0674,
-	0x7887f100,
-	0x0684b605,
-	0xf10088cf,
-	0xf10000e7,
-	0xf18000e3,
-	0xb6050807,
-	0x0ed00604,
-	0xf104bd00,
-	0xb6051807,
-	0x0ed00604,
-	0xf104bd00,
-	0xb6052807,
-	0x0ed00604,
-	0xf104bd00,
-	0xb6053807,
-	0x0ed00604,
-	0xf104bd00,
-	0xb6054807,
-	0x0ed00604,
-	0xf104bd00,
-	0xb6055807,
-	0x0ed00604,
-	0xf104bd00,
-	0xb6056807,
-	0x0ed00604,
-	0xf104bd00,
-	0xb6057807,
-	0x0ed00604,
-	0xcc04bd00,
-	0x21ffff11,
-	0x3c31ff2c,
-	0xff4c41ff,
-	0x61ff5c51,
-	0x7c71ff6c,
-	0xf18c81ff,
-	0xf00cd007,
-	0x02000003,
-	0xf104bd00,
-	0xf00cd107,
-	0x03000003,
-	0xf104bd00,
-	0xf00cd207,
-	0x04000003,
-	0xf104bd00,
-	0xf00cd307,
-	0x05000003,
-	0xf104bd00,
-	0xf00cd407,
-	0x06000003,
-	0xf104bd00,
-	0xf00cd507,
-	0x07000003,
-	0xf104bd00,
-	0xf00cd607,
-	0x08000003,
-	0xfc04bd00,
-	0xfc70fc80,
-	0xfc50fc60,
-	0xfc30fc40,
-	0xf810fc20,
-/* 0x08c9: perf_init */
-	0x03e7f100,
-	0x00e3f000,
-	0x050c07f1,
-	0xd00604b6,
-	0x04bd000e,
-	0x0002e7f1,
-	0xf100e3f0,
-	0xb6051c07,
-	0x0ed00604,
-	0xf104bd00,
-	0xb6052c07,
-	0x0ed00604,
-	0xf104bd00,
-	0xb6053c07,
-	0x0ed00604,
-	0xf104bd00,
-	0xb6054c07,
-	0x0ed00604,
-	0xf104bd00,
-	0xb6055c07,
-	0x0ed00604,
-	0xf104bd00,
-	0xb6056c07,
-	0x0ed00604,
-	0xf104bd00,
-	0xb6057c07,
-	0x0ed00604,
-	0xf504bd00,
-	0xf1078321,
-	0xf00ccc07,
-	0x0e980003,
-	0xf504bd00,
-	0xf5022a21,
-	0xf8025621,
-/* 0x0951: i2c_drive_scl */
-	0x0036b000,
-	0xf1110bf4,
-	0xb607e007,
-	0x01d00604,
-	0xf804bd00,
-/* 0x0965: i2c_drive_scl_lo */
-	0xe407f100,
-	0x0604b607,
-	0xbd0001d0,
-/* 0x0973: i2c_drive_sda */
-	0xb000f804,
+/* 0x09d3: i2c_drive_scl */
+	0xb000f802,
 	0x0bf40036,
 	0xe007f111,
 	0x0604b607,
-	0xbd0002d0,
-/* 0x0987: i2c_drive_sda_lo */
+	0xbd0001d0,
+/* 0x09e7: i2c_drive_scl_lo */
 	0xf100f804,
 	0xb607e407,
+	0x01d00604,
+	0xf804bd00,
+/* 0x09f5: i2c_drive_sda */
+	0x0036b000,
+	0xf1110bf4,
+	0xb607e007,
 	0x02d00604,
 	0xf804bd00,
-/* 0x0995: i2c_sense_scl */
-	0x0132f400,
-	0x07c437f1,
-	0xcf0634b6,
-	0x31fd0033,
-	0x060bf404,
-/* 0x09ab: i2c_sense_scl_done */
-	0xf80131f4,
-/* 0x09ad: i2c_sense_sda */
-	0x0132f400,
-	0x07c437f1,
-	0xcf0634b6,
-	0x32fd0033,
-	0x060bf404,
-/* 0x09c3: i2c_sense_sda_done */
-	0xf80131f4,
-/* 0x09c5: i2c_raise_scl */
-	0xf140f900,
-	0xf0089847,
-	0x21f50137,
-/* 0x09d2: i2c_raise_scl_wait */
-	0xe7f10951,
-	0x21f403e8,
-	0x9521f57e,
-	0x0901f409,
-	0xf40142b6,
-/* 0x09e6: i2c_raise_scl_done */
-	0x40fcef1b,
-/* 0x09ea: i2c_start */
-	0x21f500f8,
-	0x11f40995,
-	0xad21f50d,
-	0x0611f409,
-/* 0x09fb: i2c_start_rep */
-	0xf0300ef4,
-	0x21f50037,
-	0x37f00951,
-	0x7321f501,
-	0x0076bb09,
-	0xf90465b6,
-	0x04659450,
-	0xbd0256bb,
-	0x0475fd50,
-	0x21f550fc,
-	0x64b609c5,
-	0x1f11f404,
-/* 0x0a28: i2c_start_send */
-	0xf50037f0,
-	0xf1097321,
-	0xf41388e7,
-	0x37f07e21,
-	0x5121f500,
+/* 0x0a09: i2c_drive_sda_lo */
+	0xe407f100,
+	0x0604b607,
+	0xbd0002d0,
+/* 0x0a17: i2c_sense_scl */
+	0xf400f804,
+	0x37f10132,
+	0x34b607c4,
+	0x0033cf06,
+	0xf40431fd,
+	0x31f4060b,
+/* 0x0a2d: i2c_sense_scl_done */
+/* 0x0a2f: i2c_sense_sda */
+	0xf400f801,
+	0x37f10132,
+	0x34b607c4,
+	0x0033cf06,
+	0xf40432fd,
+	0x31f4060b,
+/* 0x0a45: i2c_sense_sda_done */
+/* 0x0a47: i2c_raise_scl */
+	0xf900f801,
+	0x9847f140,
+	0x0137f008,
+	0x09d321f5,
+/* 0x0a54: i2c_raise_scl_wait */
+	0x03e8e7f1,
+	0xf57e21f4,
+	0xf40a1721,
+	0x42b60901,
+	0xef1bf401,
+/* 0x0a68: i2c_raise_scl_done */
+	0x00f840fc,
+/* 0x0a6c: i2c_start */
+	0x0a1721f5,
+	0xf50d11f4,
+	0xf40a2f21,
+	0x0ef40611,
+/* 0x0a7d: i2c_start_rep */
+	0x0037f030,
+	0x09d321f5,
+	0xf50137f0,
+	0xbb09f521,
+	0x65b60076,
+	0x9450f904,
+	0x56bb0465,
+	0xfd50bd02,
+	0x50fc0475,
+	0x0a4721f5,
+	0xf40464b6,
+/* 0x0aaa: i2c_start_send */
+	0x37f01f11,
+	0xf521f500,
 	0x88e7f109,
 	0x7e21f413,
-/* 0x0a44: i2c_start_out */
-/* 0x0a46: i2c_stop */
-	0x37f000f8,
-	0x5121f500,
-	0x0037f009,
-	0x097321f5,
-	0x03e8e7f1,
+	0xf50037f0,
+	0xf109d321,
+	0xf41388e7,
+/* 0x0ac6: i2c_start_out */
+	0x00f87e21,
+/* 0x0ac8: i2c_stop */
+	0xf50037f0,
+	0xf009d321,
+	0x21f50037,
+	0xe7f109f5,
+	0x21f403e8,
+	0x0137f07e,
+	0x09d321f5,
+	0x1388e7f1,
 	0xf07e21f4,
 	0x21f50137,
-	0xe7f10951,
+	0xe7f109f5,
 	0x21f41388,
-	0x0137f07e,
-	0x097321f5,
-	0x1388e7f1,
-	0xf87e21f4,
-/* 0x0a79: i2c_bitw */
-	0x7321f500,
-	0xe8e7f109,
-	0x7e21f403,
-	0xb60076bb,
-	0x50f90465,
-	0xbb046594,
-	0x50bd0256,
-	0xfc0475fd,
-	0xc521f550,
-	0x0464b609,
-	0xf11811f4,
-	0xf41388e7,
-	0x37f07e21,
-	0x5121f500,
-	0x88e7f109,
+/* 0x0afb: i2c_bitw */
+	0xf500f87e,
+	0xf109f521,
+	0xf403e8e7,
+	0x76bb7e21,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0xf550fc04,
+	0xb60a4721,
+	0x11f40464,
+	0x88e7f118,
 	0x7e21f413,
-/* 0x0ab8: i2c_bitw_out */
-/* 0x0aba: i2c_bitr */
-	0x37f000f8,
-	0x7321f501,
-	0xe8e7f109,
-	0x7e21f403,
+	0xf50037f0,
+	0xf109d321,
+	0xf41388e7,
+/* 0x0b3a: i2c_bitw_out */
+	0x00f87e21,
+/* 0x0b3c: i2c_bitr */
+	0xf50137f0,
+	0xf109f521,
+	0xf403e8e7,
+	0x76bb7e21,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0xf550fc04,
+	0xb60a4721,
+	0x11f40464,
+	0x2f21f51b,
+	0x0037f00a,
+	0x09d321f5,
+	0x1388e7f1,
+	0xf07e21f4,
+	0x31f4013c,
+/* 0x0b81: i2c_bitr_done */
+/* 0x0b83: i2c_get_byte */
+	0xf000f801,
+	0x47f00057,
+/* 0x0b89: i2c_get_byte_next */
+	0x0154b608,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0xc521f550,
-	0x0464b609,
-	0xf51b11f4,
-	0xf009ad21,
-	0x21f50037,
-	0xe7f10951,
-	0x21f41388,
-	0x013cf07e,
-/* 0x0aff: i2c_bitr_done */
-	0xf80131f4,
-/* 0x0b01: i2c_get_byte */
-	0x0057f000,
-/* 0x0b07: i2c_get_byte_next */
-	0xb60847f0,
-	0x76bb0154,
+	0x3c21f550,
+	0x0464b60b,
+	0xfd2b11f4,
+	0x42b60553,
+	0xd81bf401,
+	0xbb0137f0,
+	0x65b60076,
+	0x9450f904,
+	0x56bb0465,
+	0xfd50bd02,
+	0x50fc0475,
+	0x0afb21f5,
+/* 0x0bd3: i2c_get_byte_done */
+	0xf80464b6,
+/* 0x0bd5: i2c_put_byte */
+	0x0847f000,
+/* 0x0bd8: i2c_put_byte_next */
+	0xff0142b6,
+	0x76bb3854,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb60aba21,
+	0xb60afb21,
 	0x11f40464,
-	0x0553fd2b,
-	0xf40142b6,
-	0x37f0d81b,
-	0x0076bb01,
-	0xf90465b6,
-	0x04659450,
-	0xbd0256bb,
-	0x0475fd50,
-	0x21f550fc,
-	0x64b60a79,
-/* 0x0b51: i2c_get_byte_done */
-/* 0x0b53: i2c_put_byte */
-	0xf000f804,
-/* 0x0b56: i2c_put_byte_next */
-	0x42b60847,
-	0x3854ff01,
+	0x0046b034,
+	0xbbd81bf4,
+	0x65b60076,
+	0x9450f904,
+	0x56bb0465,
+	0xfd50bd02,
+	0x50fc0475,
+	0x0b3c21f5,
+	0xf40464b6,
+	0x76bb0f11,
+	0x0136b000,
+	0xf4061bf4,
+/* 0x0c2e: i2c_put_byte_done */
+	0x00f80132,
+/* 0x0c30: i2c_addr */
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x7921f550,
+	0x6c21f550,
 	0x0464b60a,
-	0xb03411f4,
-	0x1bf40046,
-	0x0076bbd8,
+	0xe72911f4,
+	0xb6012ec3,
+	0x53fd0134,
+	0x0076bb05,
 	0xf90465b6,
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b60aba,
-	0x0f11f404,
-	0xb00076bb,
-	0x1bf40136,
-	0x0132f406,
-/* 0x0bac: i2c_put_byte_done */
-/* 0x0bae: i2c_addr */
-	0x76bb00f8,
+	0x64b60bd5,
+/* 0x0c75: i2c_addr_done */
+/* 0x0c77: i2c_acquire_addr */
+	0xc700f804,
+	0xe4b6f8ce,
+	0x28e0b702,
+	0x00ee980d,
+/* 0x0c86: i2c_acquire */
+	0x21f500f8,
+	0x21f40c77,
+	0x03d9f004,
+	0xf84021f4,
+/* 0x0c95: i2c_release */
+	0x7721f500,
+	0x0421f40c,
+	0xf403daf0,
+	0x00f84021,
+/* 0x0ca4: i2c_recv */
+	0xc70132f4,
+	0x14b6f8c1,
+	0x2816b002,
+	0x013a1ff5,
+	0x0d0013a0,
+	0xa0003298,
+	0x980cd813,
+	0x31f40031,
+	0xf9d0f902,
+	0xf1d0f9e0,
+	0xf1000067,
+	0x92100063,
+	0x76bb0167,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb609ea21,
-	0x11f40464,
-	0x2ec3e729,
-	0x0134b601,
-	0xbb0553fd,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x0b5321f5,
-/* 0x0bf3: i2c_addr_done */
-	0xf80464b6,
-/* 0x0bf5: i2c_acquire_addr */
-	0xf8cec700,
-	0xb702e4b6,
-	0x980d28e0,
-	0x00f800ee,
-/* 0x0c04: i2c_acquire */
-	0x0bf521f5,
-	0xf00421f4,
-	0x21f403d9,
-/* 0x0c13: i2c_release */
-	0xf500f840,
-	0xf40bf521,
-	0xdaf00421,
-	0x4021f403,
-/* 0x0c22: i2c_recv */
-	0x32f400f8,
-	0xf8c1c701,
-	0xb00214b6,
-	0x1ff52816,
-	0x13a0013a,
-	0x32980d00,
-	0xd813a000,
-	0x0031980c,
-	0xf90231f4,
-	0xf9e0f9d0,
-	0x0067f1d0,
-	0x0063f100,
-	0x01679210,
+	0xb60c8621,
+	0xd0fc0464,
+	0xf500d6b0,
+	0xf000b31b,
+	0x76bb0057,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0xf550fc04,
+	0xb60c3021,
+	0x11f50464,
+	0xc5c700d0,
+	0x0076bbe0,
+	0xf90465b6,
+	0x04659450,
+	0xbd0256bb,
+	0x0475fd50,
+	0x21f550fc,
+	0x64b60bd5,
+	0xad11f504,
+	0x0157f000,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x0421f550,
+	0x3021f550,
 	0x0464b60c,
-	0xd6b0d0fc,
-	0xb31bf500,
-	0x0057f000,
+	0x008a11f5,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0xae21f550,
+	0x8321f550,
 	0x0464b60b,
-	0x00d011f5,
-	0xbbe0c5c7,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x0b5321f5,
-	0xf50464b6,
-	0xf000ad11,
-	0x76bb0157,
+	0xcb6a11f4,
+	0x76bbe05b,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb60bae21,
-	0x11f50464,
-	0x76bb008a,
-	0x0465b600,
-	0x659450f9,
-	0x0256bb04,
-	0x75fd50bd,
-	0xf550fc04,
-	0xb60b0121,
-	0x11f40464,
-	0xe05bcb6a,
-	0xb60076bb,
-	0x50f90465,
-	0xbb046594,
-	0x50bd0256,
-	0xfc0475fd,
-	0x4621f550,
-	0x0464b60a,
-	0xbd025bb9,
-	0x430ef474,
-/* 0x0d28: i2c_recv_not_rd08 */
-	0xf401d6b0,
-	0x57f03d1b,
-	0xae21f500,
-	0x3311f40b,
-	0xf5e0c5c7,
-	0xf40b5321,
-	0x57f02911,
-	0xae21f500,
-	0x1f11f40b,
-	0xf5e0b5c7,
-	0xf40b5321,
-	0x21f51511,
-	0x74bd0a46,
-	0xf408c5c7,
-	0x32f4091b,
-	0x030ef402,
-/* 0x0d68: i2c_recv_not_wr08 */
-/* 0x0d68: i2c_recv_done */
-	0xf5f8cec7,
-	0xfc0c1321,
-	0xf4d0fce0,
-	0x7cb90a12,
-	0x3621f502,
-/* 0x0d7d: i2c_recv_exit */
-/* 0x0d7f: i2c_init */
-	0xf800f803,
-/* 0x0d81: test_recv */
-	0xd817f100,
-	0x0614b605,
-	0xb60011cf,
-	0x07f10110,
-	0x04b605d8,
-	0x0001d006,
-	0xe7f104bd,
-	0xe3f1d900,
-	0x21f5134f,
-	0x00f80256,
-/* 0x0da8: test_init */
-	0x0800e7f1,
-	0x025621f5,
-/* 0x0db2: idle_recv */
-	0x00f800f8,
-/* 0x0db4: idle */
-	0xf10031f4,
-	0xb605d417,
+	0xb60ac821,
+	0x5bb90464,
+	0xf474bd02,
+/* 0x0daa: i2c_recv_not_rd08 */
+	0xd6b0430e,
+	0x3d1bf401,
+	0xf50057f0,
+	0xf40c3021,
+	0xc5c73311,
+	0xd521f5e0,
+	0x2911f40b,
+	0xf50057f0,
+	0xf40c3021,
+	0xb5c71f11,
+	0xd521f5e0,
+	0x1511f40b,
+	0x0ac821f5,
+	0xc5c774bd,
+	0x091bf408,
+	0xf40232f4,
+/* 0x0dea: i2c_recv_not_wr08 */
+/* 0x0dea: i2c_recv_done */
+	0xcec7030e,
+	0x9521f5f8,
+	0xfce0fc0c,
+	0x0a12f4d0,
+	0xf5027cb9,
+/* 0x0dff: i2c_recv_exit */
+	0xf8033621,
+/* 0x0e01: i2c_init */
+/* 0x0e03: test_recv */
+	0xf100f800,
+	0xb605d817,
 	0x11cf0614,
 	0x0110b600,
-	0x05d407f1,
+	0x05d807f1,
 	0xd00604b6,
 	0x04bd0001,
-/* 0x0dd0: idle_loop */
-	0xf45817f0,
-/* 0x0dd6: idle_proc */
-/* 0x0dd6: idle_proc_exec */
-	0x10f90232,
-	0xf5021eb9,
-	0xfc033f21,
-	0x0911f410,
-	0xf40231f4,
-/* 0x0dea: idle_proc_next */
-	0x10b6ef0e,
-	0x061fb858,
-	0xf4e61bf4,
-	0x28f4dd02,
-	0xbb0ef400,
+	0xd900e7f1,
+	0x134fe3f1,
+	0x025621f5,
+/* 0x0e2a: test_init */
+	0xe7f100f8,
+	0x21f50800,
+	0x00f80256,
+/* 0x0e34: idle_recv */
+/* 0x0e36: idle */
+	0x31f400f8,
+	0xd417f100,
+	0x0614b605,
+	0xb60011cf,
+	0x07f10110,
+	0x04b605d4,
+	0x0001d006,
+/* 0x0e52: idle_loop */
+	0x17f004bd,
+	0x0232f458,
+/* 0x0e58: idle_proc */
+/* 0x0e58: idle_proc_exec */
+	0x1eb910f9,
+	0x3f21f502,
+	0xf410fc03,
+	0x31f40911,
+	0xef0ef402,
+/* 0x0e6c: idle_proc_next */
+	0xb85810b6,
+	0x1bf4061f,
+	0xdd02f4e6,
+	0xf40028f4,
+	0x0000bb0e,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	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/gf119.fuc4.h b/drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h
index 78f6379a..213a774d 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,
-	0x000007c6,
+	0x00000848,
 	0x00000685,
 	0x00000000,
 	0x00000000,
@@ -90,8 +90,8 @@ uint32_t gf119_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x5f433249,
-	0x00000c4f,
-	0x00000af2,
+	0x00000cd1,
+	0x00000b74,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -112,8 +112,8 @@ uint32_t gf119_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x54534554,
-	0x00000c72,
-	0x00000c51,
+	0x00000cf4,
+	0x00000cd3,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -134,8 +134,8 @@ uint32_t gf119_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x454c4449,
-	0x00000c7e,
-	0x00000c7c,
+	0x00000d00,
+	0x00000cfe,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -1404,451 +1404,517 @@ uint32_t gf119_pmu_code[] = {
 	0x48a7f100,
 	0x53a3f14f,
 	0x06eab854,
-	0xf4061bf4,
-/* 0x0696: perf_recv_not_host */
-	0x21f51b0e,
-	0x07f106b0,
-	0x03f00ccc,
-	0x000e9800,
-	0x21f504bd,
-	0x21f501eb,
-/* 0x06ae: perf_recv_exit */
-	0x00f80217,
-/* 0x06b0: perf_counter_readout */
-	0x20f910f9,
-	0x40f930f9,
-	0x60f950f9,
-	0x80f970f9,
-	0x050817f1,
-	0xf10011cf,
-	0xcf051827,
-	0x37f10022,
-	0x33cf0528,
-	0x3847f100,
-	0x0044cf05,
-	0x054857f1,
-	0xf10055cf,
-	0xcf055867,
-	0x77f10066,
-	0x77cf0568,
-	0x7887f100,
-	0x0088cf05,
-	0x0000e7f1,
-	0x8000e3f1,
-	0x050807f1,
-	0xbd000ed0,
-	0x1807f104,
-	0x000ed005,
-	0x07f104bd,
-	0x0ed00528,
+	0x00811bf5,
+	0x0001a7f1,
+	0xb800a3f0,
+	0x0bf406da,
+	0x8b0ef507,
+/* 0x06a5: perf_recv_get_slots */
+	0xd207f100,
+	0x0003f00c,
+	0xbd000c18,
+	0x08c4b604,
+	0x0cd107f1,
+	0x180003f0,
+	0x04bd000c,
+	0xf108c4b6,
+	0xf00cd007,
+	0x0c180003,
+	0xb604bd00,
+	0xc5f008c4,
+	0xd607f1ff,
+	0x0003f00c,
+	0xbd000b18,
+	0x08b4b604,
+	0x0cd507f1,
+	0x180003f0,
+	0x04bd000b,
+	0xf108b4b6,
+	0xf00cd407,
+	0x0b180003,
+	0xb604bd00,
+	0x07f108b4,
+	0x03f00cd3,
+	0x000b1800,
+	0x0ef404bd,
+/* 0x0711: perf_recv_not_host */
+	0x3221f51e,
+	0xcc07f107,
+	0x0003f00c,
+	0xbd000e98,
+	0xeb21f504,
+	0x1721f501,
+	0x070ef402,
+/* 0x072c: perf_recv_host */
+	0x02e521f5,
+/* 0x0730: perf_recv_exit */
+/* 0x0732: perf_counter_readout */
+	0x10f900f8,
+	0x30f920f9,
+	0x50f940f9,
+	0x70f960f9,
+	0x17f180f9,
+	0x11cf0508,
+	0x1827f100,
+	0x0022cf05,
+	0x052837f1,
+	0xf10033cf,
+	0xcf053847,
+	0x57f10044,
+	0x55cf0548,
+	0x5867f100,
+	0x0066cf05,
+	0x056877f1,
+	0xf10077cf,
+	0xcf057887,
+	0xe7f10088,
+	0xe3f10000,
+	0x07f18000,
+	0x0ed00508,
 	0xf104bd00,
-	0xd0053807,
+	0xd0051807,
 	0x04bd000e,
-	0x054807f1,
+	0x052807f1,
 	0xbd000ed0,
-	0x5807f104,
+	0x3807f104,
 	0x000ed005,
 	0x07f104bd,
-	0x0ed00568,
+	0x0ed00548,
 	0xf104bd00,
-	0xd0057807,
+	0xd0055807,
 	0x04bd000e,
-	0xffff11cc,
-	0x31ff2c21,
-	0x4c41ff3c,
-	0xff5c51ff,
-	0x71ff6c61,
-	0x8c81ff7c,
-	0x0cd007f1,
-	0x000003f0,
-	0x04bd0002,
-	0x0cd107f1,
-	0x000003f0,
-	0x04bd0003,
-	0x0cd207f1,
-	0x000003f0,
-	0x04bd0004,
-	0x0cd307f1,
-	0x000003f0,
-	0x04bd0005,
-	0x0cd407f1,
-	0x000003f0,
-	0x04bd0006,
-	0x0cd507f1,
-	0x000003f0,
-	0x04bd0007,
-	0x0cd607f1,
-	0x000003f0,
-	0x04bd0008,
-	0x70fc80fc,
-	0x50fc60fc,
-	0x30fc40fc,
-	0x10fc20fc,
-/* 0x07c6: perf_init */
-	0xe7f100f8,
-	0xe3f00003,
-	0x0c07f100,
-	0x000ed005,
-	0xe7f104bd,
-	0xe3f00002,
-	0x1c07f100,
+	0x056807f1,
+	0xbd000ed0,
+	0x7807f104,
 	0x000ed005,
+	0x11cc04bd,
+	0x2c21ffff,
+	0xff3c31ff,
+	0x51ff4c41,
+	0x6c61ff5c,
+	0xff7c71ff,
+	0x07f18c81,
+	0x03f00cd0,
+	0x00020000,
 	0x07f104bd,
-	0x0ed0052c,
-	0xf104bd00,
-	0xd0053c07,
+	0x03f00cd1,
+	0x00030000,
+	0x07f104bd,
+	0x03f00cd2,
+	0x00040000,
+	0x07f104bd,
+	0x03f00cd3,
+	0x00050000,
+	0x07f104bd,
+	0x03f00cd4,
+	0x00060000,
+	0x07f104bd,
+	0x03f00cd5,
+	0x00070000,
+	0x07f104bd,
+	0x03f00cd6,
+	0x00080000,
+	0x80fc04bd,
+	0x60fc70fc,
+	0x40fc50fc,
+	0x20fc30fc,
+	0x00f810fc,
+/* 0x0848: perf_init */
+	0x0003e7f1,
+	0xf100e3f0,
+	0xd0050c07,
 	0x04bd000e,
-	0x054c07f1,
+	0x0002e7f1,
+	0xf100e3f0,
+	0xd0051c07,
+	0x04bd000e,
+	0x052c07f1,
 	0xbd000ed0,
-	0x5c07f104,
+	0x3c07f104,
 	0x000ed005,
 	0x07f104bd,
-	0x0ed0056c,
+	0x0ed0054c,
 	0xf104bd00,
-	0xd0057c07,
-	0x04bd000e,
-	0x06b021f5,
-	0x0ccc07f1,
-	0x980003f0,
+	0xd0055c07,
 	0x04bd000e,
-	0x01eb21f5,
-	0x021721f5,
-/* 0x0836: i2c_drive_scl */
-	0x36b000f8,
-	0x0e0bf400,
-	0x07e007f1,
-	0xbd0001d0,
-/* 0x0847: i2c_drive_scl_lo */
-	0xf100f804,
-	0xd007e407,
-	0x04bd0001,
-/* 0x0852: i2c_drive_sda */
-	0x36b000f8,
-	0x0e0bf400,
-	0x07e007f1,
-	0xbd0002d0,
-/* 0x0863: i2c_drive_sda_lo */
-	0xf100f804,
-	0xd007e407,
-	0x04bd0002,
-/* 0x086e: i2c_sense_scl */
-	0x32f400f8,
-	0xc437f101,
-	0x0033cf07,
-	0xf40431fd,
-	0x31f4060b,
-/* 0x0881: i2c_sense_scl_done */
-/* 0x0883: i2c_sense_sda */
-	0xf400f801,
-	0x37f10132,
-	0x33cf07c4,
-	0x0432fd00,
-	0xf4060bf4,
-/* 0x0896: i2c_sense_sda_done */
-	0x00f80131,
-/* 0x0898: i2c_raise_scl */
-	0x47f140f9,
-	0x37f00898,
-	0x3621f501,
-/* 0x08a5: i2c_raise_scl_wait */
-	0xe8e7f108,
-	0x6621f403,
-	0x086e21f5,
-	0xb60901f4,
-	0x1bf40142,
-/* 0x08b9: i2c_raise_scl_done */
-	0xf840fcef,
-/* 0x08bd: i2c_start */
-	0x6e21f500,
-	0x0d11f408,
-	0x088321f5,
-	0xf40611f4,
-/* 0x08ce: i2c_start_rep */
-	0x37f0300e,
-	0x3621f500,
-	0x0137f008,
-	0x085221f5,
-	0xb60076bb,
-	0x50f90465,
-	0xbb046594,
-	0x50bd0256,
-	0xfc0475fd,
-	0x9821f550,
-	0x0464b608,
-/* 0x08fb: i2c_start_send */
-	0xf01f11f4,
+	0x056c07f1,
+	0xbd000ed0,
+	0x7c07f104,
+	0x000ed005,
+	0x21f504bd,
+	0x07f10732,
+	0x03f00ccc,
+	0x000e9800,
+	0x21f504bd,
+	0x21f501eb,
+	0x00f80217,
+/* 0x08b8: i2c_drive_scl */
+	0xf40036b0,
+	0x07f10e0b,
+	0x01d007e0,
+	0xf804bd00,
+/* 0x08c9: i2c_drive_scl_lo */
+	0xe407f100,
+	0x0001d007,
+	0x00f804bd,
+/* 0x08d4: i2c_drive_sda */
+	0xf40036b0,
+	0x07f10e0b,
+	0x02d007e0,
+	0xf804bd00,
+/* 0x08e5: i2c_drive_sda_lo */
+	0xe407f100,
+	0x0002d007,
+	0x00f804bd,
+/* 0x08f0: i2c_sense_scl */
+	0xf10132f4,
+	0xcf07c437,
+	0x31fd0033,
+	0x060bf404,
+/* 0x0903: i2c_sense_scl_done */
+	0xf80131f4,
+/* 0x0905: i2c_sense_sda */
+	0x0132f400,
+	0x07c437f1,
+	0xfd0033cf,
+	0x0bf40432,
+	0x0131f406,
+/* 0x0918: i2c_sense_sda_done */
+/* 0x091a: i2c_raise_scl */
+	0x40f900f8,
+	0x089847f1,
+	0xf50137f0,
+/* 0x0927: i2c_raise_scl_wait */
+	0xf108b821,
+	0xf403e8e7,
+	0x21f56621,
+	0x01f408f0,
+	0x0142b609,
+/* 0x093b: i2c_raise_scl_done */
+	0xfcef1bf4,
+/* 0x093f: i2c_start */
+	0xf500f840,
+	0xf408f021,
+	0x21f50d11,
+	0x11f40905,
+	0x300ef406,
+/* 0x0950: i2c_start_rep */
+	0xf50037f0,
+	0xf008b821,
+	0x21f50137,
+	0x76bb08d4,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0xf550fc04,
+	0xb6091a21,
+	0x11f40464,
+/* 0x097d: i2c_start_send */
+	0x0037f01f,
+	0x08d421f5,
+	0x1388e7f1,
+	0xf06621f4,
 	0x21f50037,
-	0xe7f10852,
+	0xe7f108b8,
 	0x21f41388,
-	0x0037f066,
-	0x083621f5,
-	0x1388e7f1,
-/* 0x0917: i2c_start_out */
-	0xf86621f4,
-/* 0x0919: i2c_stop */
-	0x0037f000,
-	0x083621f5,
-	0xf50037f0,
-	0xf1085221,
-	0xf403e8e7,
+/* 0x0999: i2c_start_out */
+/* 0x099b: i2c_stop */
+	0xf000f866,
+	0x21f50037,
+	0x37f008b8,
+	0xd421f500,
+	0xe8e7f108,
+	0x6621f403,
+	0xf50137f0,
+	0xf108b821,
+	0xf41388e7,
 	0x37f06621,
-	0x3621f501,
+	0xd421f501,
 	0x88e7f108,
 	0x6621f413,
-	0xf50137f0,
-	0xf1085221,
-	0xf41388e7,
-	0x00f86621,
-/* 0x094c: i2c_bitw */
-	0x085221f5,
-	0x03e8e7f1,
-	0xbb6621f4,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x089821f5,
-	0xf40464b6,
-	0xe7f11811,
-	0x21f41388,
-	0x0037f066,
-	0x083621f5,
+/* 0x09ce: i2c_bitw */
+	0x21f500f8,
+	0xe7f108d4,
+	0x21f403e8,
+	0x0076bb66,
+	0xf90465b6,
+	0x04659450,
+	0xbd0256bb,
+	0x0475fd50,
+	0x21f550fc,
+	0x64b6091a,
+	0x1811f404,
 	0x1388e7f1,
-/* 0x098b: i2c_bitw_out */
-	0xf86621f4,
-/* 0x098d: i2c_bitr */
-	0x0137f000,
-	0x085221f5,
-	0x03e8e7f1,
-	0xbb6621f4,
+	0xf06621f4,
+	0x21f50037,
+	0xe7f108b8,
+	0x21f41388,
+/* 0x0a0d: i2c_bitw_out */
+/* 0x0a0f: i2c_bitr */
+	0xf000f866,
+	0x21f50137,
+	0xe7f108d4,
+	0x21f403e8,
+	0x0076bb66,
+	0xf90465b6,
+	0x04659450,
+	0xbd0256bb,
+	0x0475fd50,
+	0x21f550fc,
+	0x64b6091a,
+	0x1b11f404,
+	0x090521f5,
+	0xf50037f0,
+	0xf108b821,
+	0xf41388e7,
+	0x3cf06621,
+	0x0131f401,
+/* 0x0a54: i2c_bitr_done */
+/* 0x0a56: i2c_get_byte */
+	0x57f000f8,
+	0x0847f000,
+/* 0x0a5c: i2c_get_byte_next */
+	0xbb0154b6,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x089821f5,
+	0x0a0f21f5,
 	0xf40464b6,
-	0x21f51b11,
-	0x37f00883,
-	0x3621f500,
-	0x88e7f108,
-	0x6621f413,
-	0xf4013cf0,
-/* 0x09d2: i2c_bitr_done */
-	0x00f80131,
-/* 0x09d4: i2c_get_byte */
-	0xf00057f0,
-/* 0x09da: i2c_get_byte_next */
-	0x54b60847,
-	0x0076bb01,
+	0x53fd2b11,
+	0x0142b605,
+	0xf0d81bf4,
+	0x76bb0137,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0xf550fc04,
+	0xb609ce21,
+/* 0x0aa6: i2c_get_byte_done */
+	0x00f80464,
+/* 0x0aa8: i2c_put_byte */
+/* 0x0aab: i2c_put_byte_next */
+	0xb60847f0,
+	0x54ff0142,
+	0x0076bb38,
 	0xf90465b6,
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b6098d,
-	0x2b11f404,
-	0xb60553fd,
-	0x1bf40142,
-	0x0137f0d8,
-	0xb60076bb,
-	0x50f90465,
-	0xbb046594,
-	0x50bd0256,
-	0xfc0475fd,
-	0x4c21f550,
-	0x0464b609,
-/* 0x0a24: i2c_get_byte_done */
-/* 0x0a26: i2c_put_byte */
-	0x47f000f8,
-/* 0x0a29: i2c_put_byte_next */
-	0x0142b608,
-	0xbb3854ff,
+	0x64b609ce,
+	0x3411f404,
+	0xf40046b0,
+	0x76bbd81b,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0xf550fc04,
+	0xb60a0f21,
+	0x11f40464,
+	0x0076bb0f,
+	0xf40136b0,
+	0x32f4061b,
+/* 0x0b01: i2c_put_byte_done */
+/* 0x0b03: i2c_addr */
+	0xbb00f801,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x094c21f5,
+	0x093f21f5,
 	0xf40464b6,
-	0x46b03411,
-	0xd81bf400,
+	0xc3e72911,
+	0x34b6012e,
+	0x0553fd01,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x8d21f550,
-	0x0464b609,
-	0xbb0f11f4,
-	0x36b00076,
-	0x061bf401,
-/* 0x0a7f: i2c_put_byte_done */
-	0xf80132f4,
-/* 0x0a81: i2c_addr */
-	0x0076bb00,
-	0xf90465b6,
-	0x04659450,
-	0xbd0256bb,
-	0x0475fd50,
-	0x21f550fc,
-	0x64b608bd,
-	0x2911f404,
-	0x012ec3e7,
-	0xfd0134b6,
-	0x76bb0553,
+	0xa821f550,
+	0x0464b60a,
+/* 0x0b48: i2c_addr_done */
+/* 0x0b4a: i2c_acquire_addr */
+	0xcec700f8,
+	0x05e4b6f8,
+	0xd014e0b7,
+/* 0x0b56: i2c_acquire */
+	0x21f500f8,
+	0x21f40b4a,
+	0x03d9f004,
+	0xf83421f4,
+/* 0x0b65: i2c_release */
+	0x4a21f500,
+	0x0421f40b,
+	0xf403daf0,
+	0x00f83421,
+/* 0x0b74: i2c_recv */
+	0xc70132f4,
+	0x14b6f8c1,
+	0x2816b002,
+	0x013a1ff5,
+	0x0d0013a0,
+	0xa0003298,
+	0x980cd813,
+	0x31f40031,
+	0xf9d0f902,
+	0xf1d0f9e0,
+	0xf1000067,
+	0x92100063,
+	0x76bb0167,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb60a2621,
-/* 0x0ac6: i2c_addr_done */
-	0x00f80464,
-/* 0x0ac8: i2c_acquire_addr */
-	0xb6f8cec7,
-	0xe0b705e4,
-	0x00f8d014,
-/* 0x0ad4: i2c_acquire */
-	0x0ac821f5,
-	0xf00421f4,
-	0x21f403d9,
-/* 0x0ae3: i2c_release */
-	0xf500f834,
-	0xf40ac821,
-	0xdaf00421,
-	0x3421f403,
-/* 0x0af2: i2c_recv */
-	0x32f400f8,
-	0xf8c1c701,
-	0xb00214b6,
-	0x1ff52816,
-	0x13a0013a,
-	0x32980d00,
-	0xd813a000,
-	0x0031980c,
-	0xf90231f4,
-	0xf9e0f9d0,
-	0x0067f1d0,
-	0x0063f100,
-	0x01679210,
+	0xb60b5621,
+	0xd0fc0464,
+	0xf500d6b0,
+	0xf000b31b,
+	0x76bb0057,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0xf550fc04,
+	0xb60b0321,
+	0x11f50464,
+	0xc5c700d0,
+	0x0076bbe0,
+	0xf90465b6,
+	0x04659450,
+	0xbd0256bb,
+	0x0475fd50,
+	0x21f550fc,
+	0x64b60aa8,
+	0xad11f504,
+	0x0157f000,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0xd421f550,
-	0x0464b60a,
-	0xd6b0d0fc,
-	0xb31bf500,
-	0x0057f000,
+	0x0321f550,
+	0x0464b60b,
+	0x008a11f5,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x8121f550,
+	0x5621f550,
 	0x0464b60a,
-	0x00d011f5,
-	0xbbe0c5c7,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x0a2621f5,
-	0xf50464b6,
-	0xf000ad11,
-	0x76bb0157,
-	0x0465b600,
-	0x659450f9,
-	0x0256bb04,
-	0x75fd50bd,
-	0xf550fc04,
-	0xb60a8121,
-	0x11f50464,
-	0x76bb008a,
+	0xcb6a11f4,
+	0x76bbe05b,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb609d421,
-	0x11f40464,
-	0xe05bcb6a,
-	0xb60076bb,
-	0x50f90465,
-	0xbb046594,
-	0x50bd0256,
-	0xfc0475fd,
-	0x1921f550,
-	0x0464b609,
-	0xbd025bb9,
-	0x430ef474,
-/* 0x0bf8: i2c_recv_not_rd08 */
-	0xf401d6b0,
-	0x57f03d1b,
-	0x8121f500,
-	0x3311f40a,
-	0xf5e0c5c7,
-	0xf40a2621,
-	0x57f02911,
-	0x8121f500,
-	0x1f11f40a,
-	0xf5e0b5c7,
-	0xf40a2621,
-	0x21f51511,
-	0x74bd0919,
-	0xf408c5c7,
-	0x32f4091b,
-	0x030ef402,
-/* 0x0c38: i2c_recv_not_wr08 */
-/* 0x0c38: i2c_recv_done */
-	0xf5f8cec7,
-	0xfc0ae321,
-	0xf4d0fce0,
-	0x7cb90a12,
-	0xe521f502,
-/* 0x0c4d: i2c_recv_exit */
-/* 0x0c4f: i2c_init */
-	0xf800f802,
-/* 0x0c51: test_recv */
-	0xd817f100,
-	0x0011cf05,
-	0xf10110b6,
-	0xd005d807,
-	0x04bd0001,
-	0xd900e7f1,
-	0x134fe3f1,
-	0x021721f5,
-/* 0x0c72: test_init */
-	0xe7f100f8,
-	0x21f50800,
+	0xb6099b21,
+	0x5bb90464,
+	0xf474bd02,
+/* 0x0c7a: i2c_recv_not_rd08 */
+	0xd6b0430e,
+	0x3d1bf401,
+	0xf50057f0,
+	0xf40b0321,
+	0xc5c73311,
+	0xa821f5e0,
+	0x2911f40a,
+	0xf50057f0,
+	0xf40b0321,
+	0xb5c71f11,
+	0xa821f5e0,
+	0x1511f40a,
+	0x099b21f5,
+	0xc5c774bd,
+	0x091bf408,
+	0xf40232f4,
+/* 0x0cba: i2c_recv_not_wr08 */
+/* 0x0cba: i2c_recv_done */
+	0xcec7030e,
+	0x6521f5f8,
+	0xfce0fc0b,
+	0x0a12f4d0,
+	0xf5027cb9,
+/* 0x0ccf: i2c_recv_exit */
+	0xf802e521,
+/* 0x0cd1: i2c_init */
+/* 0x0cd3: test_recv */
+	0xf100f800,
+	0xcf05d817,
+	0x10b60011,
+	0xd807f101,
+	0x0001d005,
+	0xe7f104bd,
+	0xe3f1d900,
+	0x21f5134f,
 	0x00f80217,
-/* 0x0c7c: idle_recv */
-/* 0x0c7e: idle */
-	0x31f400f8,
-	0xd417f100,
-	0x0011cf05,
-	0xf10110b6,
-	0xd005d407,
-	0x04bd0001,
-/* 0x0c94: idle_loop */
-	0xf45817f0,
-/* 0x0c9a: idle_proc */
-/* 0x0c9a: idle_proc_exec */
-	0x10f90232,
-	0xf5021eb9,
-	0xfc02ee21,
-	0x0911f410,
-	0xf40231f4,
-/* 0x0cae: idle_proc_next */
-	0x10b6ef0e,
-	0x061fb858,
-	0xf4e61bf4,
-	0x28f4dd02,
-	0xc10ef400,
+/* 0x0cf4: test_init */
+	0x0800e7f1,
+	0x021721f5,
+/* 0x0cfe: idle_recv */
+	0x00f800f8,
+/* 0x0d00: idle */
+	0xf10031f4,
+	0xcf05d417,
+	0x10b60011,
+	0xd407f101,
+	0x0001d005,
+/* 0x0d16: idle_loop */
+	0x17f004bd,
+	0x0232f458,
+/* 0x0d1c: idle_proc */
+/* 0x0d1c: idle_proc_exec */
+	0x1eb910f9,
+	0xee21f502,
+	0xf410fc02,
+	0x31f40911,
+	0xef0ef402,
+/* 0x0d30: idle_proc_next */
+	0xb85810b6,
+	0x1bf4061f,
+	0xdd02f4e6,
+	0xf40028f4,
+	0x0000c10e,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	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/gk208.fuc5.h b/drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h
index 01f409ed..43dada42 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,
-	0x000006f8,
+	0x00000756,
 	0x000005f5,
 	0x00000000,
 	0x00000000,
@@ -90,8 +90,8 @@ uint32_t gk208_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x5f433249,
-	0x00000b51,
-	0x000009fb,
+	0x00000baf,
+	0x00000a59,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -112,8 +112,8 @@ uint32_t gk208_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x54534554,
-	0x00000b6f,
-	0x00000b53,
+	0x00000bcd,
+	0x00000bb1,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -134,8 +134,8 @@ uint32_t gk208_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x454c4449,
-	0x00000b7a,
-	0x00000b78,
+	0x00000bd8,
+	0x00000bd6,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -1367,197 +1367,204 @@ uint32_t gk208_pmu_code[] = {
 /* 0x05f5: perf_recv */
 	0x4f48da00,
 	0xeaa65453,
-	0xf4061bf4,
-/* 0x0602: perf_recv_not_host */
-	0x187e170e,
+	0x0a5d1bf4,
+	0xf4daa601,
+	0x0ef4060b,
+/* 0x0609: perf_recv_get_slots */
+	0x0cd2406a,
+	0xbd000c18,
+	0x08c4b604,
+	0x180cd140,
+	0x04bd000c,
+	0x4008c4b6,
+	0x0c180cd0,
+	0xb604bd00,
+	0xc5f008c4,
+	0x0cd640ff,
+	0xbd000b18,
+	0x08b4b604,
+	0x180cd540,
+	0x04bd000b,
+	0x4008b4b6,
+	0x0b180cd4,
+	0xb604bd00,
+	0xd34008b4,
+	0x000b180c,
+	0x0ef404bd,
+/* 0x0659: perf_recv_not_host */
+	0x06767e1a,
+	0x0ccc4000,
+	0xbd000e98,
+	0x01bb7e04,
+	0x01de7e00,
+	0x070ef400,
+/* 0x0670: perf_recv_host */
+	0x00029f7e,
+/* 0x0674: perf_recv_exit */
+/* 0x0676: perf_counter_readout */
+	0x10f900f8,
+	0x30f920f9,
+	0x50f940f9,
+	0x70f960f9,
+	0x084180f9,
+	0x0011cf05,
+	0xcf051842,
+	0x28430022,
+	0x0033cf05,
+	0xcf053844,
+	0x48450044,
+	0x0055cf05,
+	0xcf055846,
+	0x68470066,
+	0x0077cf05,
+	0xcf057848,
+	0x00de0088,
+	0x40800000,
+	0x0ef60508,
+	0x4004bd00,
+	0x0ef60518,
+	0x4004bd00,
+	0x0ef60528,
+	0x4004bd00,
+	0x0ef60538,
+	0x4004bd00,
+	0x0ef60548,
+	0x4004bd00,
+	0x0ef60558,
+	0x4004bd00,
+	0x0ef60568,
+	0x4004bd00,
+	0x0ef60578,
+	0xcc04bd00,
+	0x21ffff11,
+	0x3c31ff2c,
+	0xff4c41ff,
+	0x61ff5c51,
+	0x7c71ff6c,
+	0x408c81ff,
+	0x02200cd0,
+	0xd14004bd,
+	0xbd03200c,
+	0x0cd24004,
+	0x04bd0420,
+	0x200cd340,
+	0x4004bd05,
+	0x06200cd4,
+	0xd54004bd,
+	0xbd07200c,
+	0x0cd64004,
+	0x04bd0820,
+	0x70fc80fc,
+	0x50fc60fc,
+	0x30fc40fc,
+	0x10fc20fc,
+/* 0x0756: perf_init */
+	0x030e00f8,
+	0xf6050c40,
+	0x04bd000e,
+	0x1c40020e,
+	0x000ef605,
+	0x2c4004bd,
+	0x000ef605,
+	0x3c4004bd,
+	0x000ef605,
+	0x4c4004bd,
+	0x000ef605,
+	0x5c4004bd,
+	0x000ef605,
+	0x6c4004bd,
+	0x000ef605,
+	0x7c4004bd,
+	0x000ef605,
+	0x767e04bd,
 	0xcc400006,
 	0x000e980c,
-	0xbb7e04bd,
-	0xde7e0001,
-/* 0x0616: perf_recv_exit */
+	0x21f504bd,
+	0xde7e01bb,
 	0x00f80001,
-/* 0x0618: perf_counter_readout */
-	0x20f910f9,
-	0x40f930f9,
-	0x60f950f9,
-	0x80f970f9,
-	0xcf050841,
-	0x18420011,
-	0x0022cf05,
-	0xcf052843,
-	0x38440033,
-	0x0044cf05,
-	0xcf054845,
-	0x58460055,
-	0x0066cf05,
-	0xcf056847,
-	0x78480077,
-	0x0088cf05,
-	0x000000de,
-	0x05084080,
-	0xbd000ef6,
-	0x05184004,
-	0xbd000ef6,
-	0x05284004,
-	0xbd000ef6,
-	0x05384004,
-	0xbd000ef6,
-	0x05484004,
-	0xbd000ef6,
-	0x05584004,
-	0xbd000ef6,
-	0x05684004,
-	0xbd000ef6,
-	0x05784004,
-	0xbd000ef6,
-	0xff11cc04,
-	0xff2c21ff,
-	0x41ff3c31,
-	0x5c51ff4c,
-	0xff6c61ff,
-	0x81ff7c71,
-	0x0cd0408c,
-	0x04bd0220,
-	0x200cd140,
-	0x4004bd03,
-	0x04200cd2,
-	0xd34004bd,
-	0xbd05200c,
-	0x0cd44004,
-	0x04bd0620,
-	0x200cd540,
-	0x4004bd07,
-	0x08200cd6,
-	0x80fc04bd,
-	0x60fc70fc,
-	0x40fc50fc,
-	0x20fc30fc,
-	0x00f810fc,
-/* 0x06f8: perf_init */
-	0x0c40030e,
-	0x000ef605,
-	0x020e04bd,
-	0xf6051c40,
-	0x04bd000e,
-	0xf6052c40,
-	0x04bd000e,
-	0xf6053c40,
-	0x04bd000e,
-	0xf6054c40,
-	0x04bd000e,
-	0xf6055c40,
-	0x04bd000e,
-	0xf6056c40,
-	0x04bd000e,
-	0xf6057c40,
-	0x04bd000e,
-	0x0006187e,
-	0x980ccc40,
-	0x04bd000e,
-	0x01bb21f5,
-	0x0001de7e,
-/* 0x0752: i2c_drive_scl */
+/* 0x07b0: i2c_drive_scl */
+	0xf40036b0,
+	0xe0400d0b,
+	0x0001f607,
+	0x00f804bd,
+/* 0x07c0: i2c_drive_scl_lo */
+	0xf607e440,
+	0x04bd0001,
+/* 0x07ca: i2c_drive_sda */
 	0x36b000f8,
 	0x0d0bf400,
 	0xf607e040,
-	0x04bd0001,
-/* 0x0762: i2c_drive_scl_lo */
+	0x04bd0002,
+/* 0x07da: i2c_drive_sda_lo */
 	0xe44000f8,
-	0x0001f607,
-	0x00f804bd,
-/* 0x076c: i2c_drive_sda */
-	0xf40036b0,
-	0xe0400d0b,
 	0x0002f607,
 	0x00f804bd,
-/* 0x077c: i2c_drive_sda_lo */
-	0xf607e440,
-	0x04bd0002,
-/* 0x0786: i2c_sense_scl */
-	0x32f400f8,
-	0x07c44301,
-	0xfd0033cf,
-	0x0bf40431,
-	0x0131f406,
-/* 0x0798: i2c_sense_scl_done */
-/* 0x079a: i2c_sense_sda */
-	0x32f400f8,
-	0x07c44301,
-	0xfd0033cf,
-	0x0bf40432,
-	0x0131f406,
-/* 0x07ac: i2c_sense_sda_done */
-/* 0x07ae: i2c_raise_scl */
-	0x40f900f8,
-	0x03089844,
-	0x07527e01,
-/* 0x07b9: i2c_raise_scl_wait */
-	0x03e84e00,
-	0x0000587e,
-	0x0007867e,
-	0xb60901f4,
-	0x1bf40142,
-/* 0x07cd: i2c_raise_scl_done */
-	0xf840fcef,
-/* 0x07d1: i2c_start */
-	0x07867e00,
-	0x0d11f400,
-	0x00079a7e,
-	0xf40611f4,
-/* 0x07e2: i2c_start_rep */
-	0x00032e0e,
-	0x0007527e,
-	0x6c7e0103,
-	0x76bb0007,
-	0x0465b600,
-	0x659450f9,
-	0x0256bb04,
-	0x75fd50bd,
-	0x7e50fc04,
-	0xb60007ae,
-	0x11f40464,
-/* 0x080d: i2c_start_send */
-	0x7e00031d,
-	0x4e00076c,
-	0x587e1388,
-	0x00030000,
-	0x0007527e,
-	0x7e13884e,
-/* 0x0827: i2c_start_out */
-	0xf8000058,
-/* 0x0829: i2c_stop */
-	0x7e000300,
-	0x03000752,
-	0x076c7e00,
-	0x03e84e00,
+/* 0x07e4: i2c_sense_scl */
+	0x430132f4,
+	0x33cf07c4,
+	0x0431fd00,
+	0xf4060bf4,
+/* 0x07f6: i2c_sense_scl_done */
+	0x00f80131,
+/* 0x07f8: i2c_sense_sda */
+	0x430132f4,
+	0x33cf07c4,
+	0x0432fd00,
+	0xf4060bf4,
+/* 0x080a: i2c_sense_sda_done */
+	0x00f80131,
+/* 0x080c: i2c_raise_scl */
+	0x984440f9,
+	0x7e010308,
+/* 0x0817: i2c_raise_scl_wait */
+	0x4e0007b0,
+	0x587e03e8,
+	0xe47e0000,
+	0x01f40007,
+	0x0142b609,
+/* 0x082b: i2c_raise_scl_done */
+	0xfcef1bf4,
+/* 0x082f: i2c_start */
+	0x7e00f840,
+	0xf40007e4,
+	0xf87e0d11,
+	0x11f40007,
+	0x2e0ef406,
+/* 0x0840: i2c_start_rep */
+	0xb07e0003,
+	0x01030007,
+	0x0007ca7e,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0x080c7e50,
+	0x0464b600,
+/* 0x086b: i2c_start_send */
+	0x031d11f4,
+	0x07ca7e00,
+	0x13884e00,
 	0x0000587e,
-	0x527e0103,
+	0xb07e0003,
 	0x884e0007,
 	0x00587e13,
-	0x7e010300,
-	0x4e00076c,
-	0x587e1388,
-	0x00f80000,
-/* 0x0858: i2c_bitw */
-	0x00076c7e,
-	0x7e03e84e,
-	0xbb000058,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x0007ae7e,
-	0xf40464b6,
-	0x884e1711,
-	0x00587e13,
+/* 0x0885: i2c_start_out */
+/* 0x0887: i2c_stop */
+	0x0300f800,
+	0x07b07e00,
 	0x7e000300,
-	0x4e000752,
-	0x587e1388,
-/* 0x0896: i2c_bitw_out */
-	0x00f80000,
-/* 0x0898: i2c_bitr */
-	0x6c7e0103,
+	0x4e0007ca,
+	0x587e03e8,
+	0x01030000,
+	0x0007b07e,
+	0x7e13884e,
+	0x03000058,
+	0x07ca7e01,
+	0x13884e00,
+	0x0000587e,
+/* 0x08b6: i2c_bitw */
+	0xca7e00f8,
 	0xe84e0007,
 	0x00587e03,
 	0x0076bb00,
@@ -1565,224 +1572,283 @@ uint32_t gk208_pmu_code[] = {
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
-	0xae7e50fc,
-	0x64b60007,
-	0x1a11f404,
-	0x00079a7e,
-	0x527e0003,
-	0x884e0007,
-	0x00587e13,
-	0x013cf000,
-/* 0x08db: i2c_bitr_done */
-	0xf80131f4,
-/* 0x08dd: i2c_get_byte */
-	0x04000500,
-/* 0x08e1: i2c_get_byte_next */
-	0x0154b608,
-	0xb60076bb,
-	0x50f90465,
-	0xbb046594,
-	0x50bd0256,
-	0xfc0475fd,
-	0x08987e50,
-	0x0464b600,
-	0xfd2a11f4,
-	0x42b60553,
-	0xd81bf401,
-	0x76bb0103,
+	0x0c7e50fc,
+	0x64b60008,
+	0x1711f404,
+	0x7e13884e,
+	0x03000058,
+	0x07b07e00,
+	0x13884e00,
+	0x0000587e,
+/* 0x08f4: i2c_bitw_out */
+/* 0x08f6: i2c_bitr */
+	0x010300f8,
+	0x0007ca7e,
+	0x7e03e84e,
+	0xbb000058,
+	0x65b60076,
+	0x9450f904,
+	0x56bb0465,
+	0xfd50bd02,
+	0x50fc0475,
+	0x00080c7e,
+	0xf40464b6,
+	0xf87e1a11,
+	0x00030007,
+	0x0007b07e,
+	0x7e13884e,
+	0xf0000058,
+	0x31f4013c,
+/* 0x0939: i2c_bitr_done */
+/* 0x093b: i2c_get_byte */
+	0x0500f801,
+/* 0x093f: i2c_get_byte_next */
+	0xb6080400,
+	0x76bb0154,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0x7e50fc04,
-	0xb6000858,
-/* 0x092a: i2c_get_byte_done */
-	0x00f80464,
-/* 0x092c: i2c_put_byte */
-/* 0x092e: i2c_put_byte_next */
-	0x42b60804,
-	0x3854ff01,
+	0xb60008f6,
+	0x11f40464,
+	0x0553fd2a,
+	0xf40142b6,
+	0x0103d81b,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x08587e50,
+	0x08b67e50,
 	0x0464b600,
-	0xb03411f4,
-	0x1bf40046,
-	0x0076bbd8,
-	0xf90465b6,
-	0x04659450,
-	0xbd0256bb,
-	0x0475fd50,
-	0x987e50fc,
-	0x64b60008,
-	0x0f11f404,
-	0xb00076bb,
-	0x1bf40136,
-	0x0132f406,
-/* 0x0984: i2c_put_byte_done */
-/* 0x0986: i2c_addr */
-	0x76bb00f8,
+/* 0x0988: i2c_get_byte_done */
+/* 0x098a: i2c_put_byte */
+	0x080400f8,
+/* 0x098c: i2c_put_byte_next */
+	0xff0142b6,
+	0x76bb3854,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0x7e50fc04,
-	0xb60007d1,
+	0xb60008b6,
 	0x11f40464,
-	0x2ec3e729,
-	0x0134b601,
-	0xbb0553fd,
+	0x0046b034,
+	0xbbd81bf4,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x00092c7e,
-/* 0x09cb: i2c_addr_done */
-	0xf80464b6,
-/* 0x09cd: i2c_acquire_addr */
-	0xf8cec700,
-	0xb705e4b6,
-	0xf8d014e0,
-/* 0x09d9: i2c_acquire */
-	0x09cd7e00,
-	0x00047e00,
-	0x03d9f000,
-	0x00002d7e,
-/* 0x09ea: i2c_release */
-	0xcd7e00f8,
-	0x047e0009,
-	0xdaf00000,
-	0x002d7e03,
-/* 0x09fb: i2c_recv */
-	0xf400f800,
-	0xc1c70132,
-	0x0214b6f8,
-	0xf52816b0,
-	0xb801341f,
-	0x000d0013,
-	0xb8003298,
-	0x000cd813,
-	0xf4003198,
-	0xd0f90231,
-	0xd0f9e0f9,
-	0x000000d6,
-	0x01679210,
+	0x0008f67e,
+	0xf40464b6,
+	0x76bb0f11,
+	0x0136b000,
+	0xf4061bf4,
+/* 0x09e2: i2c_put_byte_done */
+	0x00f80132,
+/* 0x09e4: i2c_addr */
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x09d97e50,
+	0x082f7e50,
 	0x0464b600,
-	0xd6b0d0fc,
-	0xb01bf500,
-	0xbb000500,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x0009867e,
-	0xf50464b6,
-	0xc700cc11,
-	0x76bbe0c5,
+	0xe72911f4,
+	0xb6012ec3,
+	0x53fd0134,
+	0x0076bb05,
+	0xf90465b6,
+	0x04659450,
+	0xbd0256bb,
+	0x0475fd50,
+	0x8a7e50fc,
+	0x64b60009,
+/* 0x0a29: i2c_addr_done */
+/* 0x0a2b: i2c_acquire_addr */
+	0xc700f804,
+	0xe4b6f8ce,
+	0x14e0b705,
+/* 0x0a37: i2c_acquire */
+	0x7e00f8d0,
+	0x7e000a2b,
+	0xf0000004,
+	0x2d7e03d9,
+	0x00f80000,
+/* 0x0a48: i2c_release */
+	0x000a2b7e,
+	0x0000047e,
+	0x7e03daf0,
+	0xf800002d,
+/* 0x0a59: i2c_recv */
+	0x0132f400,
+	0xb6f8c1c7,
+	0x16b00214,
+	0x341ff528,
+	0x0013b801,
+	0x3298000d,
+	0xd813b800,
+	0x3198000c,
+	0x0231f400,
+	0xe0f9d0f9,
+	0x00d6d0f9,
+	0x92100000,
+	0x76bb0167,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0x7e50fc04,
-	0xb600092c,
-	0x11f50464,
-	0x010500a9,
+	0xb6000a37,
+	0xd0fc0464,
+	0xf500d6b0,
+	0x0500b01b,
+	0x0076bb00,
+	0xf90465b6,
+	0x04659450,
+	0xbd0256bb,
+	0x0475fd50,
+	0xe47e50fc,
+	0x64b60009,
+	0xcc11f504,
+	0xe0c5c700,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x09867e50,
+	0x098a7e50,
 	0x0464b600,
-	0x008711f5,
+	0x00a911f5,
+	0x76bb0105,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0x7e50fc04,
+	0xb60009e4,
+	0x11f50464,
+	0x76bb0087,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0x7e50fc04,
+	0xb600093b,
+	0x11f40464,
+	0xe05bcb67,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x08dd7e50,
+	0x08877e50,
 	0x0464b600,
-	0xcb6711f4,
-	0x76bbe05b,
-	0x0465b600,
-	0x659450f9,
-	0x0256bb04,
-	0x75fd50bd,
-	0x7e50fc04,
-	0xb6000829,
-	0x5bb20464,
-	0x0ef474bd,
-/* 0x0afd: i2c_recv_not_rd08 */
-	0x01d6b041,
-	0x053b1bf4,
-	0x09867e00,
-	0x3211f400,
-	0x7ee0c5c7,
-	0xf400092c,
-	0x00052811,
-	0x0009867e,
-	0xc71f11f4,
-	0x2c7ee0b5,
+	0x74bd5bb2,
+/* 0x0b5b: i2c_recv_not_rd08 */
+	0xb0410ef4,
+	0x1bf401d6,
+	0x7e00053b,
+	0xf40009e4,
+	0xc5c73211,
+	0x098a7ee0,
+	0x2811f400,
+	0xe47e0005,
 	0x11f40009,
-	0x08297e15,
-	0xc774bd00,
-	0x1bf408c5,
-	0x0232f409,
-/* 0x0b3b: i2c_recv_not_wr08 */
-/* 0x0b3b: i2c_recv_done */
-	0xc7030ef4,
-	0xea7ef8ce,
-	0xe0fc0009,
-	0x12f4d0fc,
-	0x7e7cb209,
-/* 0x0b4f: i2c_recv_exit */
-	0xf800029f,
-/* 0x0b51: i2c_init */
-/* 0x0b53: test_recv */
-	0x4100f800,
-	0x11cf0458,
-	0x0110b600,
-	0xf6045840,
-	0x04bd0001,
-	0x4fd900de,
-	0x01de7e13,
-/* 0x0b6f: test_init */
-	0x4e00f800,
-	0xde7e0800,
-	0x00f80001,
-/* 0x0b78: idle_recv */
-/* 0x0b7a: idle */
-	0x31f400f8,
-	0x04544100,
+	0xe0b5c71f,
+	0x00098a7e,
+	0x7e1511f4,
+	0xbd000887,
+	0x08c5c774,
+	0xf4091bf4,
+	0x0ef40232,
+/* 0x0b99: i2c_recv_not_wr08 */
+/* 0x0b99: i2c_recv_done */
+	0xf8cec703,
+	0x000a487e,
+	0xd0fce0fc,
+	0xb20912f4,
+	0x029f7e7c,
+/* 0x0bad: i2c_recv_exit */
+/* 0x0baf: i2c_init */
+	0xf800f800,
+/* 0x0bb1: test_recv */
+	0x04584100,
 	0xb60011cf,
-	0x54400110,
+	0x58400110,
 	0x0001f604,
-/* 0x0b8e: idle_loop */
-	0x580104bd,
-/* 0x0b93: idle_proc */
-/* 0x0b93: idle_proc_exec */
-	0xf90232f4,
-	0x7e1eb210,
-	0xfc0002a8,
-	0x0911f410,
-	0xf40231f4,
-/* 0x0ba6: idle_proc_next */
-	0x10b6f00e,
-	0xf41fa658,
-	0x02f4e81b,
-	0x0028f4e0,
-	0x00c60ef4,
+	0x00de04bd,
+	0x7e134fd9,
+	0xf80001de,
+/* 0x0bcd: test_init */
+	0x08004e00,
+	0x0001de7e,
+/* 0x0bd6: idle_recv */
+	0x00f800f8,
+/* 0x0bd8: idle */
+	0x410031f4,
+	0x11cf0454,
+	0x0110b600,
+	0xf6045440,
+	0x04bd0001,
+/* 0x0bec: idle_loop */
+	0x32f45801,
+/* 0x0bf1: idle_proc */
+/* 0x0bf1: idle_proc_exec */
+	0xb210f902,
+	0x02a87e1e,
+	0xf410fc00,
+	0x31f40911,
+	0xf00ef402,
+/* 0x0c04: idle_proc_next */
+	0xa65810b6,
+	0xe81bf41f,
+	0xf4e002f4,
+	0x0ef40028,
+	0x000000c6,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	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 345c9281..a86478e6 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,
-	0x00000909,
+	0x00000950,
 	0x0000083c,
 	0x00000000,
 	0x00000000,
@@ -90,8 +90,8 @@ uint32_t gt215_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x5f433249,
-	0x00000d8f,
-	0x00000c32,
+	0x00000dd6,
+	0x00000c79,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -112,8 +112,8 @@ uint32_t gt215_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x54534554,
-	0x00000db8,
-	0x00000d91,
+	0x00000dff,
+	0x00000dd8,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -134,8 +134,8 @@ uint32_t gt215_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x454c4449,
-	0x00000dc4,
-	0x00000dc2,
+	0x00000e0b,
+	0x00000e09,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -1519,442 +1519,444 @@ uint32_t gt215_pmu_code[] = {
 	0x4f48a7f1,
 	0x5453a3f1,
 	0xf406eab8,
-	0x0ef4061b,
-/* 0x084d: perf_recv_not_host */
-	0x6721f51b,
+	0xa7f1461b,
+	0xa3f00001,
+	0x06dab800,
+	0xf4060bf4,
+/* 0x085a: perf_recv_get_slots */
+	0x07f1510e,
+	0x03f00cd2,
+	0x000c1800,
+	0xc4b604bd,
+	0xd107f108,
+	0x0003f00c,
+	0xbd000c18,
+	0x08c4b604,
+	0x0cd007f1,
+	0x180003f0,
+	0x04bd000c,
+	0xf008c4b6,
+	0x0ef4ffc5,
+/* 0x088d: perf_recv_not_host */
+	0xae21f51e,
 	0xcc07f108,
 	0x0003f00c,
 	0xbd000e98,
 	0x2a21f504,
 	0x5621f502,
-/* 0x0865: perf_recv_exit */
-/* 0x0867: perf_counter_readout */
-	0xf900f802,
-	0xf920f910,
-	0xf140f930,
-	0xb6050817,
-	0x11cf0614,
-	0x1827f100,
-	0x0624b605,
-	0xf10022cf,
-	0xb6052837,
-	0x33cf0634,
-	0x3847f100,
-	0x0644b605,
-	0xf10044cf,
-	0xf10000e7,
-	0xf18000e3,
-	0xb6050807,
-	0x0ed00604,
-	0xf104bd00,
-	0xb6051807,
-	0x0ed00604,
-	0xf104bd00,
-	0xb6052807,
-	0x0ed00604,
-	0xf104bd00,
-	0xb6053807,
-	0x0ed00604,
-	0xcc04bd00,
-	0x21ffff11,
-	0x3c31ff2c,
-	0xf14c41ff,
-	0xf00cd007,
-	0x02000003,
-	0xf104bd00,
-	0xf00cd107,
-	0x03000003,
-	0xf104bd00,
-	0xf00cd207,
-	0x04000003,
-	0xfc04bd00,
-	0xfc30fc40,
-	0xf810fc20,
-/* 0x0909: perf_init */
-	0x03e7f100,
-	0x00e3f000,
-	0x050c07f1,
-	0xd00604b6,
-	0x04bd000e,
-	0x0002e7f1,
+	0x070ef402,
+/* 0x08a8: perf_recv_host */
+	0x033621f5,
+/* 0x08ac: perf_recv_exit */
+/* 0x08ae: perf_counter_readout */
+	0x10f900f8,
+	0x30f920f9,
+	0x17f140f9,
+	0x14b60508,
+	0x0011cf06,
+	0x051827f1,
+	0xcf0624b6,
+	0x37f10022,
+	0x34b60528,
+	0x0033cf06,
+	0x053847f1,
+	0xcf0644b6,
+	0xe7f10044,
+	0xe3f10000,
+	0x07f18000,
+	0x04b60508,
+	0x000ed006,
+	0x07f104bd,
+	0x04b60518,
+	0x000ed006,
+	0x07f104bd,
+	0x04b60528,
+	0x000ed006,
+	0x07f104bd,
+	0x04b60538,
+	0x000ed006,
+	0x11cc04bd,
+	0x2c21ffff,
+	0xff3c31ff,
+	0x07f14c41,
+	0x03f00cd0,
+	0x00020000,
+	0x07f104bd,
+	0x03f00cd1,
+	0x00030000,
+	0x07f104bd,
+	0x03f00cd2,
+	0x00040000,
+	0x40fc04bd,
+	0x20fc30fc,
+	0x00f810fc,
+/* 0x0950: perf_init */
+	0x0003e7f1,
 	0xf100e3f0,
-	0xb6051c07,
-	0x0ed00604,
-	0xf104bd00,
-	0xb6052c07,
+	0xb6050c07,
 	0x0ed00604,
 	0xf104bd00,
-	0xb6053c07,
-	0x0ed00604,
-	0xf504bd00,
-	0xf1086721,
-	0xf00ccc07,
-	0x0e980003,
-	0xf504bd00,
-	0xf5022a21,
-	0xf8025621,
-/* 0x0961: i2c_drive_scl */
-	0x0036b000,
-	0xf1110bf4,
-	0xb607e007,
-	0x01d00604,
-	0xf804bd00,
-/* 0x0975: i2c_drive_scl_lo */
-	0xe407f100,
-	0x0604b607,
-	0xbd0001d0,
-/* 0x0983: i2c_drive_sda */
-	0xb000f804,
-	0x0bf40036,
-	0xe007f111,
-	0x0604b607,
-	0xbd0002d0,
-/* 0x0997: i2c_drive_sda_lo */
-	0xf100f804,
-	0xb607e407,
-	0x02d00604,
-	0xf804bd00,
-/* 0x09a5: i2c_sense_scl */
-	0x0132f400,
-	0x07c437f1,
-	0xcf0634b6,
-	0x31fd0033,
-	0x060bf404,
-/* 0x09bb: i2c_sense_scl_done */
-	0xf80131f4,
-/* 0x09bd: i2c_sense_sda */
-	0x0132f400,
-	0x07c437f1,
-	0xcf0634b6,
-	0x32fd0033,
-	0x060bf404,
-/* 0x09d3: i2c_sense_sda_done */
-	0xf80131f4,
-/* 0x09d5: i2c_raise_scl */
-	0xf140f900,
-	0xf0089847,
-	0x21f50137,
-/* 0x09e2: i2c_raise_scl_wait */
-	0xe7f10961,
-	0x21f403e8,
-	0xa521f57e,
-	0x0901f409,
-	0xf40142b6,
-/* 0x09f6: i2c_raise_scl_done */
-	0x40fcef1b,
-/* 0x09fa: i2c_start */
-	0x21f500f8,
-	0x11f409a5,
-	0xbd21f50d,
-	0x0611f409,
-/* 0x0a0b: i2c_start_rep */
-	0xf0300ef4,
-	0x21f50037,
-	0x37f00961,
-	0x8321f501,
-	0x0076bb09,
-	0xf90465b6,
-	0x04659450,
-	0xbd0256bb,
-	0x0475fd50,
-	0x21f550fc,
-	0x64b609d5,
-	0x1f11f404,
-/* 0x0a38: i2c_start_send */
-	0xf50037f0,
-	0xf1098321,
-	0xf41388e7,
-	0x37f07e21,
-	0x6121f500,
-	0x88e7f109,
-	0x7e21f413,
-/* 0x0a54: i2c_start_out */
-/* 0x0a56: i2c_stop */
-	0x37f000f8,
-	0x6121f500,
-	0x0037f009,
-	0x098321f5,
-	0x03e8e7f1,
-	0xf07e21f4,
-	0x21f50137,
-	0xe7f10961,
-	0x21f41388,
-	0x0137f07e,
-	0x098321f5,
-	0x1388e7f1,
-	0xf87e21f4,
-/* 0x0a89: i2c_bitw */
-	0x8321f500,
+	0xf00002e7,
+	0x07f100e3,
+	0x04b6051c,
+	0x000ed006,
+	0x07f104bd,
+	0x04b6052c,
+	0x000ed006,
+	0x07f104bd,
+	0x04b6053c,
+	0x000ed006,
+	0x21f504bd,
+	0x07f108ae,
+	0x03f00ccc,
+	0x000e9800,
+	0x21f504bd,
+	0x21f5022a,
+	0x00f80256,
+/* 0x09a8: i2c_drive_scl */
+	0xf40036b0,
+	0x07f1110b,
+	0x04b607e0,
+	0x0001d006,
+	0x00f804bd,
+/* 0x09bc: i2c_drive_scl_lo */
+	0x07e407f1,
+	0xd00604b6,
+	0x04bd0001,
+/* 0x09ca: i2c_drive_sda */
+	0x36b000f8,
+	0x110bf400,
+	0x07e007f1,
+	0xd00604b6,
+	0x04bd0002,
+/* 0x09de: i2c_drive_sda_lo */
+	0x07f100f8,
+	0x04b607e4,
+	0x0002d006,
+	0x00f804bd,
+/* 0x09ec: i2c_sense_scl */
+	0xf10132f4,
+	0xb607c437,
+	0x33cf0634,
+	0x0431fd00,
+	0xf4060bf4,
+/* 0x0a02: i2c_sense_scl_done */
+	0x00f80131,
+/* 0x0a04: i2c_sense_sda */
+	0xf10132f4,
+	0xb607c437,
+	0x33cf0634,
+	0x0432fd00,
+	0xf4060bf4,
+/* 0x0a1a: i2c_sense_sda_done */
+	0x00f80131,
+/* 0x0a1c: i2c_raise_scl */
+	0x47f140f9,
+	0x37f00898,
+	0xa821f501,
+/* 0x0a29: i2c_raise_scl_wait */
 	0xe8e7f109,
 	0x7e21f403,
+	0x09ec21f5,
+	0xb60901f4,
+	0x1bf40142,
+/* 0x0a3d: i2c_raise_scl_done */
+	0xf840fcef,
+/* 0x0a41: i2c_start */
+	0xec21f500,
+	0x0d11f409,
+	0x0a0421f5,
+	0xf40611f4,
+/* 0x0a52: i2c_start_rep */
+	0x37f0300e,
+	0xa821f500,
+	0x0137f009,
+	0x09ca21f5,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0xd521f550,
-	0x0464b609,
-	0xf11811f4,
-	0xf41388e7,
+	0x1c21f550,
+	0x0464b60a,
+/* 0x0a7f: i2c_start_send */
+	0xf01f11f4,
+	0x21f50037,
+	0xe7f109ca,
+	0x21f41388,
+	0x0037f07e,
+	0x09a821f5,
+	0x1388e7f1,
+/* 0x0a9b: i2c_start_out */
+	0xf87e21f4,
+/* 0x0a9d: i2c_stop */
+	0x0037f000,
+	0x09a821f5,
+	0xf50037f0,
+	0xf109ca21,
+	0xf403e8e7,
 	0x37f07e21,
-	0x6121f500,
+	0xa821f501,
 	0x88e7f109,
 	0x7e21f413,
-/* 0x0ac8: i2c_bitw_out */
-/* 0x0aca: i2c_bitr */
-	0x37f000f8,
-	0x8321f501,
-	0xe8e7f109,
-	0x7e21f403,
-	0xb60076bb,
-	0x50f90465,
-	0xbb046594,
-	0x50bd0256,
-	0xfc0475fd,
-	0xd521f550,
-	0x0464b609,
-	0xf51b11f4,
-	0xf009bd21,
-	0x21f50037,
-	0xe7f10961,
+	0xf50137f0,
+	0xf109ca21,
+	0xf41388e7,
+	0x00f87e21,
+/* 0x0ad0: i2c_bitw */
+	0x09ca21f5,
+	0x03e8e7f1,
+	0xbb7e21f4,
+	0x65b60076,
+	0x9450f904,
+	0x56bb0465,
+	0xfd50bd02,
+	0x50fc0475,
+	0x0a1c21f5,
+	0xf40464b6,
+	0xe7f11811,
 	0x21f41388,
-	0x013cf07e,
-/* 0x0b0f: i2c_bitr_done */
-	0xf80131f4,
-/* 0x0b11: i2c_get_byte */
-	0x0057f000,
-/* 0x0b17: i2c_get_byte_next */
-	0xb60847f0,
-	0x76bb0154,
-	0x0465b600,
-	0x659450f9,
-	0x0256bb04,
-	0x75fd50bd,
-	0xf550fc04,
-	0xb60aca21,
-	0x11f40464,
-	0x0553fd2b,
-	0xf40142b6,
-	0x37f0d81b,
+	0x0037f07e,
+	0x09a821f5,
+	0x1388e7f1,
+/* 0x0b0f: i2c_bitw_out */
+	0xf87e21f4,
+/* 0x0b11: i2c_bitr */
+	0x0137f000,
+	0x09ca21f5,
+	0x03e8e7f1,
+	0xbb7e21f4,
+	0x65b60076,
+	0x9450f904,
+	0x56bb0465,
+	0xfd50bd02,
+	0x50fc0475,
+	0x0a1c21f5,
+	0xf40464b6,
+	0x21f51b11,
+	0x37f00a04,
+	0xa821f500,
+	0x88e7f109,
+	0x7e21f413,
+	0xf4013cf0,
+/* 0x0b56: i2c_bitr_done */
+	0x00f80131,
+/* 0x0b58: i2c_get_byte */
+	0xf00057f0,
+/* 0x0b5e: i2c_get_byte_next */
+	0x54b60847,
 	0x0076bb01,
 	0xf90465b6,
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b60a89,
-/* 0x0b61: i2c_get_byte_done */
-/* 0x0b63: i2c_put_byte */
-	0xf000f804,
-/* 0x0b66: i2c_put_byte_next */
-	0x42b60847,
-	0x3854ff01,
+	0x64b60b11,
+	0x2b11f404,
+	0xb60553fd,
+	0x1bf40142,
+	0x0137f0d8,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x8921f550,
+	0xd021f550,
 	0x0464b60a,
-	0xb03411f4,
-	0x1bf40046,
-	0x0076bbd8,
+/* 0x0ba8: i2c_get_byte_done */
+/* 0x0baa: i2c_put_byte */
+	0x47f000f8,
+/* 0x0bad: i2c_put_byte_next */
+	0x0142b608,
+	0xbb3854ff,
+	0x65b60076,
+	0x9450f904,
+	0x56bb0465,
+	0xfd50bd02,
+	0x50fc0475,
+	0x0ad021f5,
+	0xf40464b6,
+	0x46b03411,
+	0xd81bf400,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0x1121f550,
+	0x0464b60b,
+	0xbb0f11f4,
+	0x36b00076,
+	0x061bf401,
+/* 0x0c03: i2c_put_byte_done */
+	0xf80132f4,
+/* 0x0c05: i2c_addr */
+	0x0076bb00,
 	0xf90465b6,
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b60aca,
-	0x0f11f404,
-	0xb00076bb,
-	0x1bf40136,
-	0x0132f406,
-/* 0x0bbc: i2c_put_byte_done */
-/* 0x0bbe: i2c_addr */
-	0x76bb00f8,
+	0x64b60a41,
+	0x2911f404,
+	0x012ec3e7,
+	0xfd0134b6,
+	0x76bb0553,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb609fa21,
-	0x11f40464,
-	0x2ec3e729,
-	0x0134b601,
-	0xbb0553fd,
+	0xb60baa21,
+/* 0x0c4a: i2c_addr_done */
+	0x00f80464,
+/* 0x0c4c: i2c_acquire_addr */
+	0xb6f8cec7,
+	0xe0b702e4,
+	0xee980d24,
+/* 0x0c5b: i2c_acquire */
+	0xf500f800,
+	0xf40c4c21,
+	0xd9f00421,
+	0x4021f403,
+/* 0x0c6a: i2c_release */
+	0x21f500f8,
+	0x21f40c4c,
+	0x03daf004,
+	0xf84021f4,
+/* 0x0c79: i2c_recv */
+	0x0132f400,
+	0xb6f8c1c7,
+	0x16b00214,
+	0x3a1ff528,
+	0xfc13a001,
+	0x0032980c,
+	0x0cd413a0,
+	0xf4003198,
+	0xd0f90231,
+	0xd0f9e0f9,
+	0x000067f1,
+	0x100063f1,
+	0xbb016792,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0b6321f5,
-/* 0x0c03: i2c_addr_done */
-	0xf80464b6,
-/* 0x0c05: i2c_acquire_addr */
-	0xf8cec700,
-	0xb702e4b6,
-	0x980d24e0,
-	0x00f800ee,
-/* 0x0c14: i2c_acquire */
-	0x0c0521f5,
-	0xf00421f4,
-	0x21f403d9,
-/* 0x0c23: i2c_release */
-	0xf500f840,
-	0xf40c0521,
-	0xdaf00421,
-	0x4021f403,
-/* 0x0c32: i2c_recv */
-	0x32f400f8,
-	0xf8c1c701,
-	0xb00214b6,
-	0x1ff52816,
-	0x13a0013a,
-	0x32980cfc,
-	0xd413a000,
-	0x0031980c,
-	0xf90231f4,
-	0xf9e0f9d0,
-	0x0067f1d0,
-	0x0063f100,
-	0x01679210,
-	0xb60076bb,
-	0x50f90465,
-	0xbb046594,
-	0x50bd0256,
-	0xfc0475fd,
-	0x1421f550,
-	0x0464b60c,
-	0xd6b0d0fc,
-	0xb31bf500,
-	0x0057f000,
-	0xb60076bb,
-	0x50f90465,
-	0xbb046594,
-	0x50bd0256,
-	0xfc0475fd,
-	0xbe21f550,
-	0x0464b60b,
-	0x00d011f5,
-	0xbbe0c5c7,
+	0x0c5b21f5,
+	0xfc0464b6,
+	0x00d6b0d0,
+	0x00b31bf5,
+	0xbb0057f0,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0b6321f5,
+	0x0c0521f5,
 	0xf50464b6,
-	0xf000ad11,
-	0x76bb0157,
+	0xc700d011,
+	0x76bbe0c5,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb60bbe21,
+	0xb60baa21,
 	0x11f50464,
-	0x76bb008a,
-	0x0465b600,
-	0x659450f9,
-	0x0256bb04,
-	0x75fd50bd,
-	0xf550fc04,
-	0xb60b1121,
-	0x11f40464,
-	0xe05bcb6a,
-	0xb60076bb,
-	0x50f90465,
-	0xbb046594,
-	0x50bd0256,
-	0xfc0475fd,
-	0x5621f550,
-	0x0464b60a,
-	0xbd025bb9,
-	0x430ef474,
-/* 0x0d38: i2c_recv_not_rd08 */
-	0xf401d6b0,
-	0x57f03d1b,
-	0xbe21f500,
-	0x3311f40b,
-	0xf5e0c5c7,
-	0xf40b6321,
-	0x57f02911,
-	0xbe21f500,
-	0x1f11f40b,
-	0xf5e0b5c7,
-	0xf40b6321,
-	0x21f51511,
-	0x74bd0a56,
-	0xf408c5c7,
-	0x32f4091b,
-	0x030ef402,
-/* 0x0d78: i2c_recv_not_wr08 */
-/* 0x0d78: i2c_recv_done */
-	0xf5f8cec7,
-	0xfc0c2321,
-	0xf4d0fce0,
-	0x7cb90a12,
-	0x3621f502,
-/* 0x0d8d: i2c_recv_exit */
-/* 0x0d8f: i2c_init */
-	0xf800f803,
-/* 0x0d91: test_recv */
-	0xd817f100,
-	0x0614b605,
-	0xb60011cf,
-	0x07f10110,
-	0x04b605d8,
-	0x0001d006,
-	0xe7f104bd,
-	0xe3f1d900,
-	0x21f5134f,
-	0x00f80256,
-/* 0x0db8: test_init */
-	0x0800e7f1,
-	0x025621f5,
-/* 0x0dc2: idle_recv */
+	0x57f000ad,
+	0x0076bb01,
+	0xf90465b6,
+	0x04659450,
+	0xbd0256bb,
+	0x0475fd50,
+	0x21f550fc,
+	0x64b60c05,
+	0x8a11f504,
+	0x0076bb00,
+	0xf90465b6,
+	0x04659450,
+	0xbd0256bb,
+	0x0475fd50,
+	0x21f550fc,
+	0x64b60b58,
+	0x6a11f404,
+	0xbbe05bcb,
+	0x65b60076,
+	0x9450f904,
+	0x56bb0465,
+	0xfd50bd02,
+	0x50fc0475,
+	0x0a9d21f5,
+	0xb90464b6,
+	0x74bd025b,
+/* 0x0d7f: i2c_recv_not_rd08 */
+	0xb0430ef4,
+	0x1bf401d6,
+	0x0057f03d,
+	0x0c0521f5,
+	0xc73311f4,
+	0x21f5e0c5,
+	0x11f40baa,
+	0x0057f029,
+	0x0c0521f5,
+	0xc71f11f4,
+	0x21f5e0b5,
+	0x11f40baa,
+	0x9d21f515,
+	0xc774bd0a,
+	0x1bf408c5,
+	0x0232f409,
+/* 0x0dbf: i2c_recv_not_wr08 */
+/* 0x0dbf: i2c_recv_done */
+	0xc7030ef4,
+	0x21f5f8ce,
+	0xe0fc0c6a,
+	0x12f4d0fc,
+	0x027cb90a,
+	0x033621f5,
+/* 0x0dd4: i2c_recv_exit */
+/* 0x0dd6: i2c_init */
 	0x00f800f8,
-/* 0x0dc4: idle */
-	0xf10031f4,
-	0xb605d417,
-	0x11cf0614,
-	0x0110b600,
-	0x05d407f1,
-	0xd00604b6,
-	0x04bd0001,
-/* 0x0de0: idle_loop */
-	0xf45817f0,
-/* 0x0de6: idle_proc */
-/* 0x0de6: idle_proc_exec */
-	0x10f90232,
-	0xf5021eb9,
-	0xfc033f21,
-	0x0911f410,
-	0xf40231f4,
-/* 0x0dfa: 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,
+/* 0x0dd8: test_recv */
+	0x05d817f1,
+	0xcf0614b6,
+	0x10b60011,
+	0xd807f101,
+	0x0604b605,
+	0xbd0001d0,
+	0x00e7f104,
+	0x4fe3f1d9,
+	0x5621f513,
+/* 0x0dff: test_init */
+	0xf100f802,
+	0xf50800e7,
+	0xf8025621,
+/* 0x0e09: idle_recv */
+/* 0x0e0b: idle */
+	0xf400f800,
+	0x17f10031,
+	0x14b605d4,
+	0x0011cf06,
+	0xf10110b6,
+	0xb605d407,
+	0x01d00604,
+/* 0x0e27: idle_loop */
+	0xf004bd00,
+	0x32f45817,
+/* 0x0e2d: idle_proc */
+/* 0x0e2d: idle_proc_exec */
+	0xb910f902,
+	0x21f5021e,
+	0x10fc033f,
+	0xf40911f4,
+	0x0ef40231,
+/* 0x0e41: idle_proc_next */
+	0x5810b6ef,
+	0xf4061fb8,
+	0x02f4e61b,
+	0x0028f4dd,
+	0x00bb0ef4,
 	0x00000000,
 	0x00000000,
 	0x00000000,
diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/os.h b/drm/nouveau/nvkm/subdev/pmu/fuc/os.h
index c8b06cb7..2d0a693a 100644
--- a/drm/nouveau/nvkm/subdev/pmu/fuc/os.h
+++ b/drm/nouveau/nvkm/subdev/pmu/fuc/os.h
@@ -49,4 +49,7 @@
 #define I2C__MSG_DATA0_WR08_REG 0:7
 #define I2C__MSG_DATA1_WR08_VAL 0:7
 
+/* PERF: message identifiers */
+#define PERF_MSG_GET_SLOTS 1
+
 #endif
diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc b/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc
index 82fecf3d..d8e296a9 100644
--- a/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc
+++ b/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc
@@ -61,12 +61,39 @@ perf_recv:
 	imm32($r10, PROC_HOST)
 	cmp b32 $r14 $r10
 	bra ne #perf_recv_not_host
-		bra #perf_recv_exit
+		imm32($r10, PERF_MSG_GET_SLOTS)
+		cmp b32 $r13 $r10
+		bra e #perf_recv_get_slots
+		bra   #perf_recv_host
+
+perf_recv_get_slots:
+	ld(b8, $r12, #perf_slot3)
+	shl b32 $r12 8
+	ld(b8, $r12, #perf_slot2)
+	shl b32 $r12 8
+	ld(b8, $r12, #perf_slot1)
+	shl b32 $r12 8
+	or $r12 0xff
+#if NVKM_PPWR_CHIPSET >= GF100
+	ld(b8, $r11, #perf_slot7)
+	shl b32 $r11 8
+	ld(b8, $r11, #perf_slot6)
+	shl b32 $r11 8
+	ld(b8, $r11, #perf_slot5)
+	shl b32 $r11 8
+	ld(b8, $r11, #perf_slot4)
+#endif
+	bra #perf_recv_host
+
 perf_recv_not_host:
 	call(perf_counter_readout)
 	ld(b32, $r14, #perf_polling_period_us)
 	call(ticks_from_us)
 	call(timer)
+	bra #perf_recv_exit
+
+perf_recv_host:
+	call(send)
 perf_recv_exit:
 	ret
 
-- 
2.12.2

_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/nouveau

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [RFC v2 4/6] pmu/fuc: implement SET_SLOT
       [not found] ` <20170507224648.1182-1-karolherbst-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
                     ` (2 preceding siblings ...)
  2017-05-07 22:46   ` [RFC v2 3/6] pmu/fuc: implement GET_SLOTS Karol Herbst
@ 2017-05-07 22:46   ` Karol Herbst
  2017-05-07 22:46   ` [RFC v2 5/6] nouveau/debugfs: add interface for current load Karol Herbst
  2017-05-07 22:46   ` [RFC v2 6/6] pmu: setup counters Karol Herbst
  5 siblings, 0 replies; 7+ messages in thread
From: Karol Herbst @ 2017-05-07 22:46 UTC (permalink / raw)
  To: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

Signed-off-by: Karol Herbst <karolherbst@gmail.com>
---
 drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h | 889 ++++++++++++++-------------
 drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h | 825 ++++++++++++-------------
 drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h | 245 ++++----
 drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h | 763 +++++++++++------------
 drm/nouveau/nvkm/subdev/pmu/fuc/os.h         |   1 +
 drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc     |   9 +
 6 files changed, 1373 insertions(+), 1359 deletions(-)

diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h b/drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h
index 2cbdcdff..0838d503 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,
-	0x0000094b,
+	0x00000965,
 	0x00000758,
 	0x00000000,
 	0x00000000,
@@ -90,8 +90,8 @@ uint32_t gf100_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x5f433249,
-	0x00000e01,
-	0x00000ca4,
+	0x00000e1b,
+	0x00000cbe,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -112,8 +112,8 @@ uint32_t gf100_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x54534554,
-	0x00000e2a,
-	0x00000e03,
+	0x00000e44,
+	0x00000e1d,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -134,8 +134,8 @@ uint32_t gf100_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x454c4449,
-	0x00000e36,
-	0x00000e34,
+	0x00000e50,
+	0x00000e4e,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -1463,518 +1463,519 @@ uint32_t gf100_pmu_code[] = {
 	0x4f48a7f1,
 	0x5453a3f1,
 	0xf506eab8,
-	0xf100811b,
+	0xf1009b1b,
 	0xf00001a7,
 	0xdab800a3,
-	0x070bf406,
-	0x008b0ef5,
-/* 0x0778: perf_recv_get_slots */
-	0x0cd207f1,
+	0x140bf406,
+	0x0002a7f1,
+	0xb800a3f0,
+	0x0bf406da,
+	0x980ef573,
+/* 0x0785: perf_recv_get_slots */
+	0xd207f100,
+	0x0003f00c,
+	0xbd000c18,
+	0x08c4b604,
+	0x0cd107f1,
 	0x180003f0,
 	0x04bd000c,
 	0xf108c4b6,
-	0xf00cd107,
+	0xf00cd007,
 	0x0c180003,
 	0xb604bd00,
-	0x07f108c4,
-	0x03f00cd0,
-	0x000c1800,
-	0xc4b604bd,
-	0xffc5f008,
-	0x0cd607f1,
+	0xc5f008c4,
+	0xd607f1ff,
+	0x0003f00c,
+	0xbd000b18,
+	0x08b4b604,
+	0x0cd507f1,
 	0x180003f0,
 	0x04bd000b,
 	0xf108b4b6,
-	0xf00cd507,
+	0xf00cd407,
 	0x0b180003,
 	0xb604bd00,
 	0x07f108b4,
-	0x03f00cd4,
+	0x03f00cd3,
 	0x000b1800,
-	0xb4b604bd,
-	0xd307f108,
-	0x0003f00c,
-	0xbd000b18,
-	0x1e0ef404,
-/* 0x07e4: perf_recv_not_host */
-	0x080521f5,
-	0x0ccc07f1,
-	0x980003f0,
+	0x0ef404bd,
+/* 0x07f1: perf_recv_set_slot */
+	0x10c0f02b,
+	0x0504c0b7,
+	0xf400cbd0,
+/* 0x07fe: perf_recv_not_host */
+	0x21f5220e,
+	0x07f1081f,
+	0x03f00ccc,
+	0x000e9800,
+	0x21f504bd,
+	0x21f5022a,
+	0x0ef40256,
+/* 0x0819: perf_recv_host */
+	0x3621f507,
+/* 0x081d: perf_recv_exit */
+/* 0x081f: perf_counter_readout */
+	0xf900f803,
+	0xf920f910,
+	0xf940f930,
+	0xf960f950,
+	0xf180f970,
+	0xb6050817,
+	0x11cf0614,
+	0x1827f100,
+	0x0624b605,
+	0xf10022cf,
+	0xb6052837,
+	0x33cf0634,
+	0x3847f100,
+	0x0644b605,
+	0xf10044cf,
+	0xb6054857,
+	0x55cf0654,
+	0x5867f100,
+	0x0664b605,
+	0xf10066cf,
+	0xb6056877,
+	0x77cf0674,
+	0x7887f100,
+	0x0684b605,
+	0xf10088cf,
+	0xf10000e7,
+	0xf18000e3,
+	0xb6050807,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6051807,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6052807,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6053807,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6054807,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6055807,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6056807,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6057807,
+	0x0ed00604,
+	0xcc04bd00,
+	0x21ffff11,
+	0x3c31ff2c,
+	0xff4c41ff,
+	0x61ff5c51,
+	0x7c71ff6c,
+	0xf18c81ff,
+	0xf00cd007,
+	0x02000003,
+	0xf104bd00,
+	0xf00cd107,
+	0x03000003,
+	0xf104bd00,
+	0xf00cd207,
+	0x04000003,
+	0xf104bd00,
+	0xf00cd307,
+	0x05000003,
+	0xf104bd00,
+	0xf00cd407,
+	0x06000003,
+	0xf104bd00,
+	0xf00cd507,
+	0x07000003,
+	0xf104bd00,
+	0xf00cd607,
+	0x08000003,
+	0xfc04bd00,
+	0xfc70fc80,
+	0xfc50fc60,
+	0xfc30fc40,
+	0xf810fc20,
+/* 0x0965: perf_init */
+	0x03e7f100,
+	0x00e3f000,
+	0x050c07f1,
+	0xd00604b6,
 	0x04bd000e,
-	0x022a21f5,
-	0x025621f5,
-/* 0x07ff: perf_recv_host */
-	0xf5070ef4,
-/* 0x0803: perf_recv_exit */
-	0xf8033621,
-/* 0x0805: perf_counter_readout */
-	0xf910f900,
-	0xf930f920,
-	0xf950f940,
-	0xf970f960,
-	0x0817f180,
-	0x0614b605,
-	0xf10011cf,
-	0xb6051827,
-	0x22cf0624,
-	0x2837f100,
-	0x0634b605,
-	0xf10033cf,
-	0xb6053847,
-	0x44cf0644,
-	0x4857f100,
-	0x0654b605,
-	0xf10055cf,
-	0xb6055867,
-	0x66cf0664,
-	0x6877f100,
-	0x0674b605,
-	0xf10077cf,
-	0xb6057887,
-	0x88cf0684,
-	0x00e7f100,
-	0x00e3f100,
-	0x0807f180,
-	0x0604b605,
-	0xbd000ed0,
-	0x1807f104,
-	0x0604b605,
-	0xbd000ed0,
-	0x2807f104,
-	0x0604b605,
-	0xbd000ed0,
-	0x3807f104,
-	0x0604b605,
-	0xbd000ed0,
-	0x4807f104,
-	0x0604b605,
-	0xbd000ed0,
-	0x5807f104,
-	0x0604b605,
-	0xbd000ed0,
-	0x6807f104,
-	0x0604b605,
-	0xbd000ed0,
-	0x7807f104,
-	0x0604b605,
-	0xbd000ed0,
-	0xff11cc04,
-	0xff2c21ff,
-	0x41ff3c31,
-	0x5c51ff4c,
-	0xff6c61ff,
-	0x81ff7c71,
-	0xd007f18c,
-	0x0003f00c,
-	0xbd000200,
-	0xd107f104,
-	0x0003f00c,
-	0xbd000300,
-	0xd207f104,
-	0x0003f00c,
-	0xbd000400,
-	0xd307f104,
-	0x0003f00c,
-	0xbd000500,
-	0xd407f104,
-	0x0003f00c,
-	0xbd000600,
-	0xd507f104,
-	0x0003f00c,
-	0xbd000700,
-	0xd607f104,
-	0x0003f00c,
-	0xbd000800,
-	0xfc80fc04,
-	0xfc60fc70,
-	0xfc40fc50,
-	0xfc20fc30,
-/* 0x094b: perf_init */
-	0xf100f810,
-	0xf00003e7,
-	0x07f100e3,
-	0x04b6050c,
-	0x000ed006,
-	0xe7f104bd,
-	0xe3f00002,
-	0x1c07f100,
-	0x0604b605,
-	0xbd000ed0,
-	0x2c07f104,
-	0x0604b605,
-	0xbd000ed0,
-	0x3c07f104,
-	0x0604b605,
-	0xbd000ed0,
-	0x4c07f104,
-	0x0604b605,
-	0xbd000ed0,
-	0x5c07f104,
-	0x0604b605,
-	0xbd000ed0,
-	0x6c07f104,
-	0x0604b605,
-	0xbd000ed0,
-	0x7c07f104,
-	0x0604b605,
-	0xbd000ed0,
-	0x0521f504,
-	0xcc07f108,
-	0x0003f00c,
-	0xbd000e98,
-	0x2a21f504,
-	0x5621f502,
-/* 0x09d3: i2c_drive_scl */
-	0xb000f802,
-	0x0bf40036,
-	0xe007f111,
-	0x0604b607,
-	0xbd0001d0,
-/* 0x09e7: i2c_drive_scl_lo */
-	0xf100f804,
-	0xb607e407,
-	0x01d00604,
-	0xf804bd00,
-/* 0x09f5: i2c_drive_sda */
+	0x0002e7f1,
+	0xf100e3f0,
+	0xb6051c07,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6052c07,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6053c07,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6054c07,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6055c07,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6056c07,
+	0x0ed00604,
+	0xf104bd00,
+	0xb6057c07,
+	0x0ed00604,
+	0xf504bd00,
+	0xf1081f21,
+	0xf00ccc07,
+	0x0e980003,
+	0xf504bd00,
+	0xf5022a21,
+	0xf8025621,
+/* 0x09ed: i2c_drive_scl */
 	0x0036b000,
 	0xf1110bf4,
 	0xb607e007,
-	0x02d00604,
+	0x01d00604,
 	0xf804bd00,
-/* 0x0a09: i2c_drive_sda_lo */
+/* 0x0a01: i2c_drive_scl_lo */
 	0xe407f100,
 	0x0604b607,
+	0xbd0001d0,
+/* 0x0a0f: i2c_drive_sda */
+	0xb000f804,
+	0x0bf40036,
+	0xe007f111,
+	0x0604b607,
 	0xbd0002d0,
-/* 0x0a17: i2c_sense_scl */
-	0xf400f804,
-	0x37f10132,
-	0x34b607c4,
-	0x0033cf06,
-	0xf40431fd,
-	0x31f4060b,
-/* 0x0a2d: i2c_sense_scl_done */
-/* 0x0a2f: i2c_sense_sda */
-	0xf400f801,
-	0x37f10132,
-	0x34b607c4,
-	0x0033cf06,
-	0xf40432fd,
-	0x31f4060b,
-/* 0x0a45: i2c_sense_sda_done */
-/* 0x0a47: i2c_raise_scl */
-	0xf900f801,
-	0x9847f140,
-	0x0137f008,
-	0x09d321f5,
-/* 0x0a54: i2c_raise_scl_wait */
-	0x03e8e7f1,
-	0xf57e21f4,
-	0xf40a1721,
-	0x42b60901,
-	0xef1bf401,
-/* 0x0a68: i2c_raise_scl_done */
-	0x00f840fc,
-/* 0x0a6c: i2c_start */
-	0x0a1721f5,
-	0xf50d11f4,
-	0xf40a2f21,
-	0x0ef40611,
-/* 0x0a7d: i2c_start_rep */
-	0x0037f030,
-	0x09d321f5,
-	0xf50137f0,
-	0xbb09f521,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x0a4721f5,
-	0xf40464b6,
-/* 0x0aaa: i2c_start_send */
-	0x37f01f11,
-	0xf521f500,
-	0x88e7f109,
-	0x7e21f413,
+/* 0x0a23: i2c_drive_sda_lo */
+	0xf100f804,
+	0xb607e407,
+	0x02d00604,
+	0xf804bd00,
+/* 0x0a31: i2c_sense_scl */
+	0x0132f400,
+	0x07c437f1,
+	0xcf0634b6,
+	0x31fd0033,
+	0x060bf404,
+/* 0x0a47: i2c_sense_scl_done */
+	0xf80131f4,
+/* 0x0a49: i2c_sense_sda */
+	0x0132f400,
+	0x07c437f1,
+	0xcf0634b6,
+	0x32fd0033,
+	0x060bf404,
+/* 0x0a5f: i2c_sense_sda_done */
+	0xf80131f4,
+/* 0x0a61: i2c_raise_scl */
+	0xf140f900,
+	0xf0089847,
+	0x21f50137,
+/* 0x0a6e: i2c_raise_scl_wait */
+	0xe7f109ed,
+	0x21f403e8,
+	0x3121f57e,
+	0x0901f40a,
+	0xf40142b6,
+/* 0x0a82: i2c_raise_scl_done */
+	0x40fcef1b,
+/* 0x0a86: i2c_start */
+	0x21f500f8,
+	0x11f40a31,
+	0x4921f50d,
+	0x0611f40a,
+/* 0x0a97: i2c_start_rep */
+	0xf0300ef4,
+	0x21f50037,
+	0x37f009ed,
+	0x0f21f501,
+	0x0076bb0a,
+	0xf90465b6,
+	0x04659450,
+	0xbd0256bb,
+	0x0475fd50,
+	0x21f550fc,
+	0x64b60a61,
+	0x1f11f404,
+/* 0x0ac4: i2c_start_send */
 	0xf50037f0,
-	0xf109d321,
+	0xf10a0f21,
 	0xf41388e7,
-/* 0x0ac6: i2c_start_out */
-	0x00f87e21,
-/* 0x0ac8: i2c_stop */
-	0xf50037f0,
-	0xf009d321,
-	0x21f50037,
-	0xe7f109f5,
-	0x21f403e8,
-	0x0137f07e,
-	0x09d321f5,
-	0x1388e7f1,
+	0x37f07e21,
+	0xed21f500,
+	0x88e7f109,
+	0x7e21f413,
+/* 0x0ae0: i2c_start_out */
+/* 0x0ae2: i2c_stop */
+	0x37f000f8,
+	0xed21f500,
+	0x0037f009,
+	0x0a0f21f5,
+	0x03e8e7f1,
 	0xf07e21f4,
 	0x21f50137,
-	0xe7f109f5,
+	0xe7f109ed,
 	0x21f41388,
-/* 0x0afb: i2c_bitw */
-	0xf500f87e,
-	0xf109f521,
-	0xf403e8e7,
-	0x76bb7e21,
-	0x0465b600,
-	0x659450f9,
-	0x0256bb04,
-	0x75fd50bd,
-	0xf550fc04,
-	0xb60a4721,
-	0x11f40464,
-	0x88e7f118,
-	0x7e21f413,
-	0xf50037f0,
-	0xf109d321,
+	0x0137f07e,
+	0x0a0f21f5,
+	0x1388e7f1,
+	0xf87e21f4,
+/* 0x0b15: i2c_bitw */
+	0x0f21f500,
+	0xe8e7f10a,
+	0x7e21f403,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0x6121f550,
+	0x0464b60a,
+	0xf11811f4,
 	0xf41388e7,
-/* 0x0b3a: i2c_bitw_out */
-	0x00f87e21,
-/* 0x0b3c: i2c_bitr */
-	0xf50137f0,
-	0xf109f521,
-	0xf403e8e7,
-	0x76bb7e21,
+	0x37f07e21,
+	0xed21f500,
+	0x88e7f109,
+	0x7e21f413,
+/* 0x0b54: i2c_bitw_out */
+/* 0x0b56: i2c_bitr */
+	0x37f000f8,
+	0x0f21f501,
+	0xe8e7f10a,
+	0x7e21f403,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0x6121f550,
+	0x0464b60a,
+	0xf51b11f4,
+	0xf00a4921,
+	0x21f50037,
+	0xe7f109ed,
+	0x21f41388,
+	0x013cf07e,
+/* 0x0b9b: i2c_bitr_done */
+	0xf80131f4,
+/* 0x0b9d: i2c_get_byte */
+	0x0057f000,
+/* 0x0ba3: i2c_get_byte_next */
+	0xb60847f0,
+	0x76bb0154,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb60a4721,
+	0xb60b5621,
 	0x11f40464,
-	0x2f21f51b,
-	0x0037f00a,
-	0x09d321f5,
-	0x1388e7f1,
-	0xf07e21f4,
-	0x31f4013c,
-/* 0x0b81: i2c_bitr_done */
-/* 0x0b83: i2c_get_byte */
-	0xf000f801,
-	0x47f00057,
-/* 0x0b89: i2c_get_byte_next */
-	0x0154b608,
+	0x0553fd2b,
+	0xf40142b6,
+	0x37f0d81b,
+	0x0076bb01,
+	0xf90465b6,
+	0x04659450,
+	0xbd0256bb,
+	0x0475fd50,
+	0x21f550fc,
+	0x64b60b15,
+/* 0x0bed: i2c_get_byte_done */
+/* 0x0bef: i2c_put_byte */
+	0xf000f804,
+/* 0x0bf2: i2c_put_byte_next */
+	0x42b60847,
+	0x3854ff01,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x3c21f550,
+	0x1521f550,
 	0x0464b60b,
-	0xfd2b11f4,
-	0x42b60553,
-	0xd81bf401,
-	0xbb0137f0,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x0afb21f5,
-/* 0x0bd3: i2c_get_byte_done */
-	0xf80464b6,
-/* 0x0bd5: i2c_put_byte */
-	0x0847f000,
-/* 0x0bd8: i2c_put_byte_next */
-	0xff0142b6,
-	0x76bb3854,
+	0xb03411f4,
+	0x1bf40046,
+	0x0076bbd8,
+	0xf90465b6,
+	0x04659450,
+	0xbd0256bb,
+	0x0475fd50,
+	0x21f550fc,
+	0x64b60b56,
+	0x0f11f404,
+	0xb00076bb,
+	0x1bf40136,
+	0x0132f406,
+/* 0x0c48: i2c_put_byte_done */
+/* 0x0c4a: i2c_addr */
+	0x76bb00f8,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb60afb21,
+	0xb60a8621,
 	0x11f40464,
-	0x0046b034,
-	0xbbd81bf4,
+	0x2ec3e729,
+	0x0134b601,
+	0xbb0553fd,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0b3c21f5,
-	0xf40464b6,
-	0x76bb0f11,
-	0x0136b000,
-	0xf4061bf4,
-/* 0x0c2e: i2c_put_byte_done */
-	0x00f80132,
-/* 0x0c30: i2c_addr */
+	0x0bef21f5,
+/* 0x0c8f: i2c_addr_done */
+	0xf80464b6,
+/* 0x0c91: i2c_acquire_addr */
+	0xf8cec700,
+	0xb702e4b6,
+	0x980d28e0,
+	0x00f800ee,
+/* 0x0ca0: i2c_acquire */
+	0x0c9121f5,
+	0xf00421f4,
+	0x21f403d9,
+/* 0x0caf: i2c_release */
+	0xf500f840,
+	0xf40c9121,
+	0xdaf00421,
+	0x4021f403,
+/* 0x0cbe: i2c_recv */
+	0x32f400f8,
+	0xf8c1c701,
+	0xb00214b6,
+	0x1ff52816,
+	0x13a0013a,
+	0x32980d00,
+	0xd813a000,
+	0x0031980c,
+	0xf90231f4,
+	0xf9e0f9d0,
+	0x0067f1d0,
+	0x0063f100,
+	0x01679210,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x6c21f550,
-	0x0464b60a,
-	0xe72911f4,
-	0xb6012ec3,
-	0x53fd0134,
-	0x0076bb05,
-	0xf90465b6,
-	0x04659450,
-	0xbd0256bb,
-	0x0475fd50,
-	0x21f550fc,
-	0x64b60bd5,
-/* 0x0c75: i2c_addr_done */
-/* 0x0c77: i2c_acquire_addr */
-	0xc700f804,
-	0xe4b6f8ce,
-	0x28e0b702,
-	0x00ee980d,
-/* 0x0c86: i2c_acquire */
-	0x21f500f8,
-	0x21f40c77,
-	0x03d9f004,
-	0xf84021f4,
-/* 0x0c95: i2c_release */
-	0x7721f500,
-	0x0421f40c,
-	0xf403daf0,
-	0x00f84021,
-/* 0x0ca4: i2c_recv */
-	0xc70132f4,
-	0x14b6f8c1,
-	0x2816b002,
-	0x013a1ff5,
-	0x0d0013a0,
-	0xa0003298,
-	0x980cd813,
-	0x31f40031,
-	0xf9d0f902,
-	0xf1d0f9e0,
-	0xf1000067,
-	0x92100063,
-	0x76bb0167,
+	0xa021f550,
+	0x0464b60c,
+	0xd6b0d0fc,
+	0xb31bf500,
+	0x0057f000,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0x4a21f550,
+	0x0464b60c,
+	0x00d011f5,
+	0xbbe0c5c7,
+	0x65b60076,
+	0x9450f904,
+	0x56bb0465,
+	0xfd50bd02,
+	0x50fc0475,
+	0x0bef21f5,
+	0xf50464b6,
+	0xf000ad11,
+	0x76bb0157,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb60c8621,
-	0xd0fc0464,
-	0xf500d6b0,
-	0xf000b31b,
-	0x76bb0057,
+	0xb60c4a21,
+	0x11f50464,
+	0x76bb008a,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb60c3021,
-	0x11f50464,
-	0xc5c700d0,
-	0x0076bbe0,
-	0xf90465b6,
-	0x04659450,
-	0xbd0256bb,
-	0x0475fd50,
-	0x21f550fc,
-	0x64b60bd5,
-	0xad11f504,
-	0x0157f000,
-	0xb60076bb,
-	0x50f90465,
-	0xbb046594,
-	0x50bd0256,
-	0xfc0475fd,
-	0x3021f550,
-	0x0464b60c,
-	0x008a11f5,
+	0xb60b9d21,
+	0x11f40464,
+	0xe05bcb6a,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x8321f550,
-	0x0464b60b,
-	0xcb6a11f4,
-	0x76bbe05b,
-	0x0465b600,
-	0x659450f9,
-	0x0256bb04,
-	0x75fd50bd,
-	0xf550fc04,
-	0xb60ac821,
-	0x5bb90464,
-	0xf474bd02,
-/* 0x0daa: i2c_recv_not_rd08 */
-	0xd6b0430e,
-	0x3d1bf401,
-	0xf50057f0,
-	0xf40c3021,
-	0xc5c73311,
-	0xd521f5e0,
-	0x2911f40b,
-	0xf50057f0,
-	0xf40c3021,
-	0xb5c71f11,
-	0xd521f5e0,
-	0x1511f40b,
-	0x0ac821f5,
-	0xc5c774bd,
-	0x091bf408,
-	0xf40232f4,
-/* 0x0dea: i2c_recv_not_wr08 */
-/* 0x0dea: i2c_recv_done */
-	0xcec7030e,
-	0x9521f5f8,
-	0xfce0fc0c,
-	0x0a12f4d0,
-	0xf5027cb9,
-/* 0x0dff: i2c_recv_exit */
-	0xf8033621,
-/* 0x0e01: i2c_init */
-/* 0x0e03: test_recv */
-	0xf100f800,
-	0xb605d817,
-	0x11cf0614,
-	0x0110b600,
-	0x05d807f1,
-	0xd00604b6,
-	0x04bd0001,
-	0xd900e7f1,
-	0x134fe3f1,
-	0x025621f5,
-/* 0x0e2a: test_init */
-	0xe7f100f8,
-	0x21f50800,
-	0x00f80256,
-/* 0x0e34: idle_recv */
-/* 0x0e36: idle */
-	0x31f400f8,
-	0xd417f100,
+	0xe221f550,
+	0x0464b60a,
+	0xbd025bb9,
+	0x430ef474,
+/* 0x0dc4: i2c_recv_not_rd08 */
+	0xf401d6b0,
+	0x57f03d1b,
+	0x4a21f500,
+	0x3311f40c,
+	0xf5e0c5c7,
+	0xf40bef21,
+	0x57f02911,
+	0x4a21f500,
+	0x1f11f40c,
+	0xf5e0b5c7,
+	0xf40bef21,
+	0x21f51511,
+	0x74bd0ae2,
+	0xf408c5c7,
+	0x32f4091b,
+	0x030ef402,
+/* 0x0e04: i2c_recv_not_wr08 */
+/* 0x0e04: i2c_recv_done */
+	0xf5f8cec7,
+	0xfc0caf21,
+	0xf4d0fce0,
+	0x7cb90a12,
+	0x3621f502,
+/* 0x0e19: i2c_recv_exit */
+/* 0x0e1b: i2c_init */
+	0xf800f803,
+/* 0x0e1d: test_recv */
+	0xd817f100,
 	0x0614b605,
 	0xb60011cf,
 	0x07f10110,
-	0x04b605d4,
+	0x04b605d8,
 	0x0001d006,
-/* 0x0e52: idle_loop */
-	0x17f004bd,
-	0x0232f458,
-/* 0x0e58: idle_proc */
-/* 0x0e58: idle_proc_exec */
-	0x1eb910f9,
-	0x3f21f502,
-	0xf410fc03,
-	0x31f40911,
-	0xef0ef402,
-/* 0x0e6c: idle_proc_next */
-	0xb85810b6,
-	0x1bf4061f,
-	0xdd02f4e6,
-	0xf40028f4,
-	0x0000bb0e,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
+	0xe7f104bd,
+	0xe3f1d900,
+	0x21f5134f,
+	0x00f80256,
+/* 0x0e44: test_init */
+	0x0800e7f1,
+	0x025621f5,
+/* 0x0e4e: idle_recv */
+	0x00f800f8,
+/* 0x0e50: idle */
+	0xf10031f4,
+	0xb605d417,
+	0x11cf0614,
+	0x0110b600,
+	0x05d407f1,
+	0xd00604b6,
+	0x04bd0001,
+/* 0x0e6c: idle_loop */
+	0xf45817f0,
+/* 0x0e72: idle_proc */
+/* 0x0e72: idle_proc_exec */
+	0x10f90232,
+	0xf5021eb9,
+	0xfc033f21,
+	0x0911f410,
+	0xf40231f4,
+/* 0x0e86: idle_proc_next */
+	0x10b6ef0e,
+	0x061fb858,
+	0xf4e61bf4,
+	0x28f4dd02,
+	0xbb0ef400,
 	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 213a774d..86294b2f 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,
-	0x00000848,
+	0x00000862,
 	0x00000685,
 	0x00000000,
 	0x00000000,
@@ -90,8 +90,8 @@ uint32_t gf119_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x5f433249,
-	0x00000cd1,
-	0x00000b74,
+	0x00000ceb,
+	0x00000b8e,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -112,8 +112,8 @@ uint32_t gf119_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x54534554,
-	0x00000cf4,
-	0x00000cd3,
+	0x00000d0e,
+	0x00000ced,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -134,8 +134,8 @@ uint32_t gf119_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x454c4449,
-	0x00000d00,
-	0x00000cfe,
+	0x00000d1a,
+	0x00000d18,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -1404,492 +1404,493 @@ uint32_t gf119_pmu_code[] = {
 	0x48a7f100,
 	0x53a3f14f,
 	0x06eab854,
-	0x00811bf5,
+	0x009b1bf5,
 	0x0001a7f1,
 	0xb800a3f0,
 	0x0bf406da,
-	0x8b0ef507,
-/* 0x06a5: perf_recv_get_slots */
-	0xd207f100,
+	0x02a7f114,
+	0x00a3f000,
+	0xf406dab8,
+	0x0ef5730b,
+/* 0x06b2: perf_recv_get_slots */
+	0x07f10098,
+	0x03f00cd2,
+	0x000c1800,
+	0xc4b604bd,
+	0xd107f108,
 	0x0003f00c,
 	0xbd000c18,
 	0x08c4b604,
-	0x0cd107f1,
+	0x0cd007f1,
 	0x180003f0,
 	0x04bd000c,
-	0xf108c4b6,
-	0xf00cd007,
-	0x0c180003,
-	0xb604bd00,
-	0xc5f008c4,
-	0xd607f1ff,
+	0xf008c4b6,
+	0x07f1ffc5,
+	0x03f00cd6,
+	0x000b1800,
+	0xb4b604bd,
+	0xd507f108,
 	0x0003f00c,
 	0xbd000b18,
 	0x08b4b604,
-	0x0cd507f1,
+	0x0cd407f1,
 	0x180003f0,
 	0x04bd000b,
 	0xf108b4b6,
-	0xf00cd407,
+	0xf00cd307,
 	0x0b180003,
-	0xb604bd00,
-	0x07f108b4,
-	0x03f00cd3,
-	0x000b1800,
-	0x0ef404bd,
-/* 0x0711: perf_recv_not_host */
-	0x3221f51e,
-	0xcc07f107,
-	0x0003f00c,
-	0xbd000e98,
-	0xeb21f504,
-	0x1721f501,
-	0x070ef402,
-/* 0x072c: perf_recv_host */
-	0x02e521f5,
-/* 0x0730: perf_recv_exit */
-/* 0x0732: perf_counter_readout */
-	0x10f900f8,
-	0x30f920f9,
-	0x50f940f9,
-	0x70f960f9,
-	0x17f180f9,
-	0x11cf0508,
-	0x1827f100,
-	0x0022cf05,
-	0x052837f1,
-	0xf10033cf,
-	0xcf053847,
-	0x57f10044,
-	0x55cf0548,
-	0x5867f100,
-	0x0066cf05,
-	0x056877f1,
-	0xf10077cf,
-	0xcf057887,
-	0xe7f10088,
-	0xe3f10000,
-	0x07f18000,
-	0x0ed00508,
-	0xf104bd00,
-	0xd0051807,
-	0x04bd000e,
-	0x052807f1,
+	0xf404bd00,
+/* 0x071e: perf_recv_set_slot */
+	0xc0f02b0e,
+	0x04c0b710,
+	0x00cbd005,
+/* 0x072b: perf_recv_not_host */
+	0xf5220ef4,
+	0xf1074c21,
+	0xf00ccc07,
+	0x0e980003,
+	0xf504bd00,
+	0xf501eb21,
+	0xf4021721,
+/* 0x0746: perf_recv_host */
+	0x21f5070e,
+/* 0x074a: perf_recv_exit */
+	0x00f802e5,
+/* 0x074c: perf_counter_readout */
+	0x20f910f9,
+	0x40f930f9,
+	0x60f950f9,
+	0x80f970f9,
+	0x050817f1,
+	0xf10011cf,
+	0xcf051827,
+	0x37f10022,
+	0x33cf0528,
+	0x3847f100,
+	0x0044cf05,
+	0x054857f1,
+	0xf10055cf,
+	0xcf055867,
+	0x77f10066,
+	0x77cf0568,
+	0x7887f100,
+	0x0088cf05,
+	0x0000e7f1,
+	0x8000e3f1,
+	0x050807f1,
 	0xbd000ed0,
-	0x3807f104,
+	0x1807f104,
 	0x000ed005,
 	0x07f104bd,
-	0x0ed00548,
+	0x0ed00528,
 	0xf104bd00,
-	0xd0055807,
+	0xd0053807,
 	0x04bd000e,
-	0x056807f1,
+	0x054807f1,
 	0xbd000ed0,
-	0x7807f104,
+	0x5807f104,
 	0x000ed005,
-	0x11cc04bd,
-	0x2c21ffff,
-	0xff3c31ff,
-	0x51ff4c41,
-	0x6c61ff5c,
-	0xff7c71ff,
-	0x07f18c81,
-	0x03f00cd0,
-	0x00020000,
-	0x07f104bd,
-	0x03f00cd1,
-	0x00030000,
-	0x07f104bd,
-	0x03f00cd2,
-	0x00040000,
-	0x07f104bd,
-	0x03f00cd3,
-	0x00050000,
-	0x07f104bd,
-	0x03f00cd4,
-	0x00060000,
-	0x07f104bd,
-	0x03f00cd5,
-	0x00070000,
 	0x07f104bd,
-	0x03f00cd6,
-	0x00080000,
-	0x80fc04bd,
-	0x60fc70fc,
-	0x40fc50fc,
-	0x20fc30fc,
-	0x00f810fc,
-/* 0x0848: perf_init */
-	0x0003e7f1,
-	0xf100e3f0,
-	0xd0050c07,
-	0x04bd000e,
-	0x0002e7f1,
-	0xf100e3f0,
-	0xd0051c07,
+	0x0ed00568,
+	0xf104bd00,
+	0xd0057807,
 	0x04bd000e,
-	0x052c07f1,
-	0xbd000ed0,
-	0x3c07f104,
+	0xffff11cc,
+	0x31ff2c21,
+	0x4c41ff3c,
+	0xff5c51ff,
+	0x71ff6c61,
+	0x8c81ff7c,
+	0x0cd007f1,
+	0x000003f0,
+	0x04bd0002,
+	0x0cd107f1,
+	0x000003f0,
+	0x04bd0003,
+	0x0cd207f1,
+	0x000003f0,
+	0x04bd0004,
+	0x0cd307f1,
+	0x000003f0,
+	0x04bd0005,
+	0x0cd407f1,
+	0x000003f0,
+	0x04bd0006,
+	0x0cd507f1,
+	0x000003f0,
+	0x04bd0007,
+	0x0cd607f1,
+	0x000003f0,
+	0x04bd0008,
+	0x70fc80fc,
+	0x50fc60fc,
+	0x30fc40fc,
+	0x10fc20fc,
+/* 0x0862: perf_init */
+	0xe7f100f8,
+	0xe3f00003,
+	0x0c07f100,
+	0x000ed005,
+	0xe7f104bd,
+	0xe3f00002,
+	0x1c07f100,
 	0x000ed005,
 	0x07f104bd,
-	0x0ed0054c,
+	0x0ed0052c,
 	0xf104bd00,
-	0xd0055c07,
+	0xd0053c07,
 	0x04bd000e,
-	0x056c07f1,
+	0x054c07f1,
 	0xbd000ed0,
-	0x7c07f104,
+	0x5c07f104,
 	0x000ed005,
-	0x21f504bd,
-	0x07f10732,
-	0x03f00ccc,
-	0x000e9800,
-	0x21f504bd,
-	0x21f501eb,
-	0x00f80217,
-/* 0x08b8: i2c_drive_scl */
-	0xf40036b0,
-	0x07f10e0b,
-	0x01d007e0,
-	0xf804bd00,
-/* 0x08c9: i2c_drive_scl_lo */
-	0xe407f100,
-	0x0001d007,
-	0x00f804bd,
-/* 0x08d4: i2c_drive_sda */
-	0xf40036b0,
-	0x07f10e0b,
-	0x02d007e0,
-	0xf804bd00,
-/* 0x08e5: i2c_drive_sda_lo */
-	0xe407f100,
-	0x0002d007,
-	0x00f804bd,
-/* 0x08f0: i2c_sense_scl */
-	0xf10132f4,
-	0xcf07c437,
-	0x31fd0033,
-	0x060bf404,
-/* 0x0903: i2c_sense_scl_done */
-	0xf80131f4,
-/* 0x0905: i2c_sense_sda */
-	0x0132f400,
-	0x07c437f1,
-	0xfd0033cf,
-	0x0bf40432,
-	0x0131f406,
-/* 0x0918: i2c_sense_sda_done */
-/* 0x091a: i2c_raise_scl */
-	0x40f900f8,
-	0x089847f1,
-	0xf50137f0,
-/* 0x0927: i2c_raise_scl_wait */
-	0xf108b821,
-	0xf403e8e7,
-	0x21f56621,
-	0x01f408f0,
-	0x0142b609,
-/* 0x093b: i2c_raise_scl_done */
-	0xfcef1bf4,
-/* 0x093f: i2c_start */
-	0xf500f840,
-	0xf408f021,
-	0x21f50d11,
-	0x11f40905,
-	0x300ef406,
-/* 0x0950: i2c_start_rep */
-	0xf50037f0,
-	0xf008b821,
-	0x21f50137,
-	0x76bb08d4,
-	0x0465b600,
-	0x659450f9,
-	0x0256bb04,
-	0x75fd50bd,
-	0xf550fc04,
-	0xb6091a21,
-	0x11f40464,
-/* 0x097d: i2c_start_send */
-	0x0037f01f,
-	0x08d421f5,
-	0x1388e7f1,
-	0xf06621f4,
-	0x21f50037,
-	0xe7f108b8,
-	0x21f41388,
-/* 0x0999: i2c_start_out */
-/* 0x099b: i2c_stop */
-	0xf000f866,
-	0x21f50037,
-	0x37f008b8,
-	0xd421f500,
+	0x07f104bd,
+	0x0ed0056c,
+	0xf104bd00,
+	0xd0057c07,
+	0x04bd000e,
+	0x074c21f5,
+	0x0ccc07f1,
+	0x980003f0,
+	0x04bd000e,
+	0x01eb21f5,
+	0x021721f5,
+/* 0x08d2: i2c_drive_scl */
+	0x36b000f8,
+	0x0e0bf400,
+	0x07e007f1,
+	0xbd0001d0,
+/* 0x08e3: i2c_drive_scl_lo */
+	0xf100f804,
+	0xd007e407,
+	0x04bd0001,
+/* 0x08ee: i2c_drive_sda */
+	0x36b000f8,
+	0x0e0bf400,
+	0x07e007f1,
+	0xbd0002d0,
+/* 0x08ff: i2c_drive_sda_lo */
+	0xf100f804,
+	0xd007e407,
+	0x04bd0002,
+/* 0x090a: i2c_sense_scl */
+	0x32f400f8,
+	0xc437f101,
+	0x0033cf07,
+	0xf40431fd,
+	0x31f4060b,
+/* 0x091d: i2c_sense_scl_done */
+/* 0x091f: i2c_sense_sda */
+	0xf400f801,
+	0x37f10132,
+	0x33cf07c4,
+	0x0432fd00,
+	0xf4060bf4,
+/* 0x0932: i2c_sense_sda_done */
+	0x00f80131,
+/* 0x0934: i2c_raise_scl */
+	0x47f140f9,
+	0x37f00898,
+	0xd221f501,
+/* 0x0941: i2c_raise_scl_wait */
 	0xe8e7f108,
 	0x6621f403,
-	0xf50137f0,
-	0xf108b821,
-	0xf41388e7,
-	0x37f06621,
-	0xd421f501,
-	0x88e7f108,
-	0x6621f413,
-/* 0x09ce: i2c_bitw */
-	0x21f500f8,
-	0xe7f108d4,
-	0x21f403e8,
-	0x0076bb66,
-	0xf90465b6,
-	0x04659450,
-	0xbd0256bb,
-	0x0475fd50,
-	0x21f550fc,
-	0x64b6091a,
-	0x1811f404,
-	0x1388e7f1,
-	0xf06621f4,
+	0x090a21f5,
+	0xb60901f4,
+	0x1bf40142,
+/* 0x0955: i2c_raise_scl_done */
+	0xf840fcef,
+/* 0x0959: i2c_start */
+	0x0a21f500,
+	0x0d11f409,
+	0x091f21f5,
+	0xf40611f4,
+/* 0x096a: i2c_start_rep */
+	0x37f0300e,
+	0xd221f500,
+	0x0137f008,
+	0x08ee21f5,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0x3421f550,
+	0x0464b609,
+/* 0x0997: i2c_start_send */
+	0xf01f11f4,
 	0x21f50037,
-	0xe7f108b8,
+	0xe7f108ee,
 	0x21f41388,
-/* 0x0a0d: i2c_bitw_out */
-/* 0x0a0f: i2c_bitr */
-	0xf000f866,
-	0x21f50137,
-	0xe7f108d4,
-	0x21f403e8,
-	0x0076bb66,
-	0xf90465b6,
-	0x04659450,
-	0xbd0256bb,
-	0x0475fd50,
-	0x21f550fc,
-	0x64b6091a,
-	0x1b11f404,
-	0x090521f5,
+	0x0037f066,
+	0x08d221f5,
+	0x1388e7f1,
+/* 0x09b3: i2c_start_out */
+	0xf86621f4,
+/* 0x09b5: i2c_stop */
+	0x0037f000,
+	0x08d221f5,
 	0xf50037f0,
-	0xf108b821,
+	0xf108ee21,
+	0xf403e8e7,
+	0x37f06621,
+	0xd221f501,
+	0x88e7f108,
+	0x6621f413,
+	0xf50137f0,
+	0xf108ee21,
 	0xf41388e7,
-	0x3cf06621,
-	0x0131f401,
-/* 0x0a54: i2c_bitr_done */
-/* 0x0a56: i2c_get_byte */
-	0x57f000f8,
-	0x0847f000,
-/* 0x0a5c: i2c_get_byte_next */
-	0xbb0154b6,
+	0x00f86621,
+/* 0x09e8: i2c_bitw */
+	0x08ee21f5,
+	0x03e8e7f1,
+	0xbb6621f4,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0a0f21f5,
+	0x093421f5,
 	0xf40464b6,
-	0x53fd2b11,
-	0x0142b605,
-	0xf0d81bf4,
-	0x76bb0137,
-	0x0465b600,
-	0x659450f9,
-	0x0256bb04,
-	0x75fd50bd,
-	0xf550fc04,
-	0xb609ce21,
-/* 0x0aa6: i2c_get_byte_done */
-	0x00f80464,
-/* 0x0aa8: i2c_put_byte */
-/* 0x0aab: i2c_put_byte_next */
-	0xb60847f0,
-	0x54ff0142,
-	0x0076bb38,
+	0xe7f11811,
+	0x21f41388,
+	0x0037f066,
+	0x08d221f5,
+	0x1388e7f1,
+/* 0x0a27: i2c_bitw_out */
+	0xf86621f4,
+/* 0x0a29: i2c_bitr */
+	0x0137f000,
+	0x08ee21f5,
+	0x03e8e7f1,
+	0xbb6621f4,
+	0x65b60076,
+	0x9450f904,
+	0x56bb0465,
+	0xfd50bd02,
+	0x50fc0475,
+	0x093421f5,
+	0xf40464b6,
+	0x21f51b11,
+	0x37f0091f,
+	0xd221f500,
+	0x88e7f108,
+	0x6621f413,
+	0xf4013cf0,
+/* 0x0a6e: i2c_bitr_done */
+	0x00f80131,
+/* 0x0a70: i2c_get_byte */
+	0xf00057f0,
+/* 0x0a76: i2c_get_byte_next */
+	0x54b60847,
+	0x0076bb01,
 	0xf90465b6,
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b609ce,
-	0x3411f404,
-	0xf40046b0,
-	0x76bbd81b,
-	0x0465b600,
-	0x659450f9,
-	0x0256bb04,
-	0x75fd50bd,
-	0xf550fc04,
-	0xb60a0f21,
-	0x11f40464,
-	0x0076bb0f,
-	0xf40136b0,
-	0x32f4061b,
-/* 0x0b01: i2c_put_byte_done */
-/* 0x0b03: i2c_addr */
-	0xbb00f801,
+	0x64b60a29,
+	0x2b11f404,
+	0xb60553fd,
+	0x1bf40142,
+	0x0137f0d8,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0xe821f550,
+	0x0464b609,
+/* 0x0ac0: i2c_get_byte_done */
+/* 0x0ac2: i2c_put_byte */
+	0x47f000f8,
+/* 0x0ac5: i2c_put_byte_next */
+	0x0142b608,
+	0xbb3854ff,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x093f21f5,
+	0x09e821f5,
 	0xf40464b6,
-	0xc3e72911,
-	0x34b6012e,
-	0x0553fd01,
+	0x46b03411,
+	0xd81bf400,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0xa821f550,
+	0x2921f550,
 	0x0464b60a,
-/* 0x0b48: i2c_addr_done */
-/* 0x0b4a: i2c_acquire_addr */
-	0xcec700f8,
-	0x05e4b6f8,
-	0xd014e0b7,
-/* 0x0b56: i2c_acquire */
-	0x21f500f8,
-	0x21f40b4a,
-	0x03d9f004,
-	0xf83421f4,
-/* 0x0b65: i2c_release */
-	0x4a21f500,
-	0x0421f40b,
-	0xf403daf0,
-	0x00f83421,
-/* 0x0b74: i2c_recv */
-	0xc70132f4,
-	0x14b6f8c1,
-	0x2816b002,
-	0x013a1ff5,
-	0x0d0013a0,
-	0xa0003298,
-	0x980cd813,
-	0x31f40031,
-	0xf9d0f902,
-	0xf1d0f9e0,
-	0xf1000067,
-	0x92100063,
-	0x76bb0167,
-	0x0465b600,
-	0x659450f9,
-	0x0256bb04,
-	0x75fd50bd,
-	0xf550fc04,
-	0xb60b5621,
-	0xd0fc0464,
-	0xf500d6b0,
-	0xf000b31b,
-	0x76bb0057,
-	0x0465b600,
-	0x659450f9,
-	0x0256bb04,
-	0x75fd50bd,
-	0xf550fc04,
-	0xb60b0321,
-	0x11f50464,
-	0xc5c700d0,
-	0x0076bbe0,
+	0xbb0f11f4,
+	0x36b00076,
+	0x061bf401,
+/* 0x0b1b: i2c_put_byte_done */
+	0xf80132f4,
+/* 0x0b1d: i2c_addr */
+	0x0076bb00,
 	0xf90465b6,
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b60aa8,
-	0xad11f504,
-	0x0157f000,
+	0x64b60959,
+	0x2911f404,
+	0x012ec3e7,
+	0xfd0134b6,
+	0x76bb0553,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0xf550fc04,
+	0xb60ac221,
+/* 0x0b62: i2c_addr_done */
+	0x00f80464,
+/* 0x0b64: i2c_acquire_addr */
+	0xb6f8cec7,
+	0xe0b705e4,
+	0x00f8d014,
+/* 0x0b70: i2c_acquire */
+	0x0b6421f5,
+	0xf00421f4,
+	0x21f403d9,
+/* 0x0b7f: i2c_release */
+	0xf500f834,
+	0xf40b6421,
+	0xdaf00421,
+	0x3421f403,
+/* 0x0b8e: i2c_recv */
+	0x32f400f8,
+	0xf8c1c701,
+	0xb00214b6,
+	0x1ff52816,
+	0x13a0013a,
+	0x32980d00,
+	0xd813a000,
+	0x0031980c,
+	0xf90231f4,
+	0xf9e0f9d0,
+	0x0067f1d0,
+	0x0063f100,
+	0x01679210,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x0321f550,
+	0x7021f550,
 	0x0464b60b,
-	0x008a11f5,
+	0xd6b0d0fc,
+	0xb31bf500,
+	0x0057f000,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x5621f550,
-	0x0464b60a,
-	0xcb6a11f4,
-	0x76bbe05b,
+	0x1d21f550,
+	0x0464b60b,
+	0x00d011f5,
+	0xbbe0c5c7,
+	0x65b60076,
+	0x9450f904,
+	0x56bb0465,
+	0xfd50bd02,
+	0x50fc0475,
+	0x0ac221f5,
+	0xf50464b6,
+	0xf000ad11,
+	0x76bb0157,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb6099b21,
-	0x5bb90464,
-	0xf474bd02,
-/* 0x0c7a: i2c_recv_not_rd08 */
-	0xd6b0430e,
-	0x3d1bf401,
-	0xf50057f0,
-	0xf40b0321,
-	0xc5c73311,
-	0xa821f5e0,
-	0x2911f40a,
-	0xf50057f0,
-	0xf40b0321,
-	0xb5c71f11,
-	0xa821f5e0,
-	0x1511f40a,
-	0x099b21f5,
-	0xc5c774bd,
-	0x091bf408,
-	0xf40232f4,
-/* 0x0cba: i2c_recv_not_wr08 */
-/* 0x0cba: i2c_recv_done */
-	0xcec7030e,
-	0x6521f5f8,
-	0xfce0fc0b,
-	0x0a12f4d0,
-	0xf5027cb9,
-/* 0x0ccf: i2c_recv_exit */
-	0xf802e521,
-/* 0x0cd1: i2c_init */
-/* 0x0cd3: test_recv */
-	0xf100f800,
-	0xcf05d817,
-	0x10b60011,
-	0xd807f101,
-	0x0001d005,
-	0xe7f104bd,
-	0xe3f1d900,
-	0x21f5134f,
-	0x00f80217,
-/* 0x0cf4: test_init */
-	0x0800e7f1,
+	0xb60b1d21,
+	0x11f50464,
+	0x76bb008a,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0xf550fc04,
+	0xb60a7021,
+	0x11f40464,
+	0xe05bcb6a,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0xb521f550,
+	0x0464b609,
+	0xbd025bb9,
+	0x430ef474,
+/* 0x0c94: i2c_recv_not_rd08 */
+	0xf401d6b0,
+	0x57f03d1b,
+	0x1d21f500,
+	0x3311f40b,
+	0xf5e0c5c7,
+	0xf40ac221,
+	0x57f02911,
+	0x1d21f500,
+	0x1f11f40b,
+	0xf5e0b5c7,
+	0xf40ac221,
+	0x21f51511,
+	0x74bd09b5,
+	0xf408c5c7,
+	0x32f4091b,
+	0x030ef402,
+/* 0x0cd4: i2c_recv_not_wr08 */
+/* 0x0cd4: i2c_recv_done */
+	0xf5f8cec7,
+	0xfc0b7f21,
+	0xf4d0fce0,
+	0x7cb90a12,
+	0xe521f502,
+/* 0x0ce9: i2c_recv_exit */
+/* 0x0ceb: i2c_init */
+	0xf800f802,
+/* 0x0ced: test_recv */
+	0xd817f100,
+	0x0011cf05,
+	0xf10110b6,
+	0xd005d807,
+	0x04bd0001,
+	0xd900e7f1,
+	0x134fe3f1,
 	0x021721f5,
-/* 0x0cfe: idle_recv */
-	0x00f800f8,
-/* 0x0d00: idle */
-	0xf10031f4,
-	0xcf05d417,
-	0x10b60011,
-	0xd407f101,
-	0x0001d005,
-/* 0x0d16: idle_loop */
-	0x17f004bd,
-	0x0232f458,
-/* 0x0d1c: idle_proc */
-/* 0x0d1c: idle_proc_exec */
-	0x1eb910f9,
-	0xee21f502,
-	0xf410fc02,
-	0x31f40911,
-	0xef0ef402,
-/* 0x0d30: idle_proc_next */
-	0xb85810b6,
-	0x1bf4061f,
-	0xdd02f4e6,
-	0xf40028f4,
-	0x0000c10e,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
+/* 0x0d0e: test_init */
+	0xe7f100f8,
+	0x21f50800,
+	0x00f80217,
+/* 0x0d18: idle_recv */
+/* 0x0d1a: idle */
+	0x31f400f8,
+	0xd417f100,
+	0x0011cf05,
+	0xf10110b6,
+	0xd005d407,
+	0x04bd0001,
+/* 0x0d30: idle_loop */
+	0xf45817f0,
+/* 0x0d36: idle_proc */
+/* 0x0d36: idle_proc_exec */
+	0x10f90232,
+	0xf5021eb9,
+	0xfc02ee21,
+	0x0911f410,
+	0xf40231f4,
+/* 0x0d4a: idle_proc_next */
+	0x10b6ef0e,
+	0x061fb858,
+	0xf4e61bf4,
+	0x28f4dd02,
+	0xc10ef400,
 	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 43dada42..a5f43b5d 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,
-	0x00000756,
+	0x0000076a,
 	0x000005f5,
 	0x00000000,
 	0x00000000,
@@ -90,8 +90,8 @@ uint32_t gk208_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x5f433249,
-	0x00000baf,
-	0x00000a59,
+	0x00000bc3,
+	0x00000a6d,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -112,8 +112,8 @@ uint32_t gk208_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x54534554,
-	0x00000bcd,
-	0x00000bb1,
+	0x00000be1,
+	0x00000bc5,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -134,8 +134,8 @@ uint32_t gk208_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x454c4449,
-	0x00000bd8,
-	0x00000bd6,
+	0x00000bec,
+	0x00000bea,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -1367,41 +1367,47 @@ uint32_t gk208_pmu_code[] = {
 /* 0x05f5: perf_recv */
 	0x4f48da00,
 	0xeaa65453,
-	0x0a5d1bf4,
+	0x0a711bf4,
 	0xf4daa601,
-	0x0ef4060b,
-/* 0x0609: perf_recv_get_slots */
-	0x0cd2406a,
-	0xbd000c18,
-	0x08c4b604,
-	0x180cd140,
+	0x020a0d0b,
+	0x0bf4daa6,
+	0x770ef456,
+/* 0x0610: perf_recv_get_slots */
+	0x180cd240,
 	0x04bd000c,
 	0x4008c4b6,
-	0x0c180cd0,
+	0x0c180cd1,
 	0xb604bd00,
-	0xc5f008c4,
-	0x0cd640ff,
-	0xbd000b18,
-	0x08b4b604,
-	0x180cd540,
+	0xd04008c4,
+	0x000c180c,
+	0xc4b604bd,
+	0xffc5f008,
+	0x180cd640,
 	0x04bd000b,
 	0x4008b4b6,
-	0x0b180cd4,
+	0x0b180cd5,
 	0xb604bd00,
-	0xd34008b4,
+	0xd44008b4,
 	0x000b180c,
-	0x0ef404bd,
-/* 0x0659: perf_recv_not_host */
-	0x06767e1a,
+	0xb4b604bd,
+	0x0cd34008,
+	0xbd000b18,
+	0x270ef404,
+/* 0x0660: perf_recv_set_slot */
+	0xb710c0f0,
+	0xf60504c0,
+	0x0ef400cb,
+/* 0x066d: perf_recv_not_host */
+	0x068a7e1e,
 	0x0ccc4000,
 	0xbd000e98,
 	0x01bb7e04,
 	0x01de7e00,
 	0x070ef400,
-/* 0x0670: perf_recv_host */
+/* 0x0684: perf_recv_host */
 	0x00029f7e,
-/* 0x0674: perf_recv_exit */
-/* 0x0676: perf_counter_readout */
+/* 0x0688: perf_recv_exit */
+/* 0x068a: perf_counter_readout */
 	0x10f900f8,
 	0x30f920f9,
 	0x50f940f9,
@@ -1458,7 +1464,7 @@ uint32_t gk208_pmu_code[] = {
 	0x50fc60fc,
 	0x30fc40fc,
 	0x10fc20fc,
-/* 0x0756: perf_init */
+/* 0x076a: perf_init */
 	0x030e00f8,
 	0xf6050c40,
 	0x04bd000e,
@@ -1476,95 +1482,95 @@ uint32_t gk208_pmu_code[] = {
 	0x000ef605,
 	0x7c4004bd,
 	0x000ef605,
-	0x767e04bd,
+	0x8a7e04bd,
 	0xcc400006,
 	0x000e980c,
 	0x21f504bd,
 	0xde7e01bb,
 	0x00f80001,
-/* 0x07b0: i2c_drive_scl */
+/* 0x07c4: i2c_drive_scl */
 	0xf40036b0,
 	0xe0400d0b,
 	0x0001f607,
 	0x00f804bd,
-/* 0x07c0: i2c_drive_scl_lo */
+/* 0x07d4: i2c_drive_scl_lo */
 	0xf607e440,
 	0x04bd0001,
-/* 0x07ca: i2c_drive_sda */
+/* 0x07de: i2c_drive_sda */
 	0x36b000f8,
 	0x0d0bf400,
 	0xf607e040,
 	0x04bd0002,
-/* 0x07da: i2c_drive_sda_lo */
+/* 0x07ee: i2c_drive_sda_lo */
 	0xe44000f8,
 	0x0002f607,
 	0x00f804bd,
-/* 0x07e4: i2c_sense_scl */
+/* 0x07f8: i2c_sense_scl */
 	0x430132f4,
 	0x33cf07c4,
 	0x0431fd00,
 	0xf4060bf4,
-/* 0x07f6: i2c_sense_scl_done */
+/* 0x080a: i2c_sense_scl_done */
 	0x00f80131,
-/* 0x07f8: i2c_sense_sda */
+/* 0x080c: i2c_sense_sda */
 	0x430132f4,
 	0x33cf07c4,
 	0x0432fd00,
 	0xf4060bf4,
-/* 0x080a: i2c_sense_sda_done */
+/* 0x081e: i2c_sense_sda_done */
 	0x00f80131,
-/* 0x080c: i2c_raise_scl */
+/* 0x0820: i2c_raise_scl */
 	0x984440f9,
 	0x7e010308,
-/* 0x0817: i2c_raise_scl_wait */
-	0x4e0007b0,
+/* 0x082b: i2c_raise_scl_wait */
+	0x4e0007c4,
 	0x587e03e8,
-	0xe47e0000,
+	0xf87e0000,
 	0x01f40007,
 	0x0142b609,
-/* 0x082b: i2c_raise_scl_done */
+/* 0x083f: i2c_raise_scl_done */
 	0xfcef1bf4,
-/* 0x082f: i2c_start */
+/* 0x0843: i2c_start */
 	0x7e00f840,
-	0xf40007e4,
-	0xf87e0d11,
-	0x11f40007,
+	0xf40007f8,
+	0x0c7e0d11,
+	0x11f40008,
 	0x2e0ef406,
-/* 0x0840: i2c_start_rep */
-	0xb07e0003,
+/* 0x0854: i2c_start_rep */
+	0xc47e0003,
 	0x01030007,
-	0x0007ca7e,
+	0x0007de7e,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x080c7e50,
+	0x08207e50,
 	0x0464b600,
-/* 0x086b: i2c_start_send */
+/* 0x087f: i2c_start_send */
 	0x031d11f4,
-	0x07ca7e00,
+	0x07de7e00,
 	0x13884e00,
 	0x0000587e,
-	0xb07e0003,
+	0xc47e0003,
 	0x884e0007,
 	0x00587e13,
-/* 0x0885: i2c_start_out */
-/* 0x0887: i2c_stop */
+/* 0x0899: i2c_start_out */
+/* 0x089b: i2c_stop */
 	0x0300f800,
-	0x07b07e00,
+	0x07c47e00,
 	0x7e000300,
-	0x4e0007ca,
+	0x4e0007de,
 	0x587e03e8,
 	0x01030000,
-	0x0007b07e,
+	0x0007c47e,
 	0x7e13884e,
 	0x03000058,
-	0x07ca7e01,
+	0x07de7e01,
 	0x13884e00,
 	0x0000587e,
-/* 0x08b6: i2c_bitw */
-	0xca7e00f8,
+/* 0x08ca: i2c_bitw */
+	0xde7e00f8,
 	0xe84e0007,
 	0x00587e03,
 	0x0076bb00,
@@ -1572,18 +1578,18 @@ uint32_t gk208_pmu_code[] = {
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
-	0x0c7e50fc,
+	0x207e50fc,
 	0x64b60008,
 	0x1711f404,
 	0x7e13884e,
 	0x03000058,
-	0x07b07e00,
+	0x07c47e00,
 	0x13884e00,
 	0x0000587e,
-/* 0x08f4: i2c_bitw_out */
-/* 0x08f6: i2c_bitr */
+/* 0x0908: i2c_bitw_out */
+/* 0x090a: i2c_bitr */
 	0x010300f8,
-	0x0007ca7e,
+	0x0007de7e,
 	0x7e03e84e,
 	0xbb000058,
 	0x65b60076,
@@ -1591,18 +1597,18 @@ uint32_t gk208_pmu_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x00080c7e,
+	0x0008207e,
 	0xf40464b6,
-	0xf87e1a11,
-	0x00030007,
-	0x0007b07e,
+	0x0c7e1a11,
+	0x00030008,
+	0x0007c47e,
 	0x7e13884e,
 	0xf0000058,
 	0x31f4013c,
-/* 0x0939: i2c_bitr_done */
-/* 0x093b: i2c_get_byte */
+/* 0x094d: i2c_bitr_done */
+/* 0x094f: i2c_get_byte */
 	0x0500f801,
-/* 0x093f: i2c_get_byte_next */
+/* 0x0953: i2c_get_byte_next */
 	0xb6080400,
 	0x76bb0154,
 	0x0465b600,
@@ -1610,7 +1616,7 @@ uint32_t gk208_pmu_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0x7e50fc04,
-	0xb60008f6,
+	0xb600090a,
 	0x11f40464,
 	0x0553fd2a,
 	0xf40142b6,
@@ -1620,12 +1626,12 @@ uint32_t gk208_pmu_code[] = {
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x08b67e50,
+	0x08ca7e50,
 	0x0464b600,
-/* 0x0988: i2c_get_byte_done */
-/* 0x098a: i2c_put_byte */
+/* 0x099c: i2c_get_byte_done */
+/* 0x099e: i2c_put_byte */
 	0x080400f8,
-/* 0x098c: i2c_put_byte_next */
+/* 0x09a0: i2c_put_byte_next */
 	0xff0142b6,
 	0x76bb3854,
 	0x0465b600,
@@ -1633,7 +1639,7 @@ uint32_t gk208_pmu_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0x7e50fc04,
-	0xb60008b6,
+	0xb60008ca,
 	0x11f40464,
 	0x0046b034,
 	0xbbd81bf4,
@@ -1642,20 +1648,20 @@ uint32_t gk208_pmu_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0008f67e,
+	0x00090a7e,
 	0xf40464b6,
 	0x76bb0f11,
 	0x0136b000,
 	0xf4061bf4,
-/* 0x09e2: i2c_put_byte_done */
+/* 0x09f6: i2c_put_byte_done */
 	0x00f80132,
-/* 0x09e4: i2c_addr */
+/* 0x09f8: i2c_addr */
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x082f7e50,
+	0x08437e50,
 	0x0464b600,
 	0xe72911f4,
 	0xb6012ec3,
@@ -1665,25 +1671,25 @@ uint32_t gk208_pmu_code[] = {
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
-	0x8a7e50fc,
+	0x9e7e50fc,
 	0x64b60009,
-/* 0x0a29: i2c_addr_done */
-/* 0x0a2b: i2c_acquire_addr */
+/* 0x0a3d: i2c_addr_done */
+/* 0x0a3f: i2c_acquire_addr */
 	0xc700f804,
 	0xe4b6f8ce,
 	0x14e0b705,
-/* 0x0a37: i2c_acquire */
+/* 0x0a4b: i2c_acquire */
 	0x7e00f8d0,
-	0x7e000a2b,
+	0x7e000a3f,
 	0xf0000004,
 	0x2d7e03d9,
 	0x00f80000,
-/* 0x0a48: i2c_release */
-	0x000a2b7e,
+/* 0x0a5c: i2c_release */
+	0x000a3f7e,
 	0x0000047e,
 	0x7e03daf0,
 	0xf800002d,
-/* 0x0a59: i2c_recv */
+/* 0x0a6d: i2c_recv */
 	0x0132f400,
 	0xb6f8c1c7,
 	0x16b00214,
@@ -1702,7 +1708,7 @@ uint32_t gk208_pmu_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0x7e50fc04,
-	0xb6000a37,
+	0xb6000a4b,
 	0xd0fc0464,
 	0xf500d6b0,
 	0x0500b01b,
@@ -1711,7 +1717,7 @@ uint32_t gk208_pmu_code[] = {
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
-	0xe47e50fc,
+	0xf87e50fc,
 	0x64b60009,
 	0xcc11f504,
 	0xe0c5c700,
@@ -1720,7 +1726,7 @@ uint32_t gk208_pmu_code[] = {
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x098a7e50,
+	0x099e7e50,
 	0x0464b600,
 	0x00a911f5,
 	0x76bb0105,
@@ -1729,7 +1735,7 @@ uint32_t gk208_pmu_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0x7e50fc04,
-	0xb60009e4,
+	0xb60009f8,
 	0x11f50464,
 	0x76bb0087,
 	0x0465b600,
@@ -1737,7 +1743,7 @@ uint32_t gk208_pmu_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0x7e50fc04,
-	0xb600093b,
+	0xb600094f,
 	0x11f40464,
 	0xe05bcb67,
 	0xb60076bb,
@@ -1745,37 +1751,37 @@ uint32_t gk208_pmu_code[] = {
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x08877e50,
+	0x089b7e50,
 	0x0464b600,
 	0x74bd5bb2,
-/* 0x0b5b: i2c_recv_not_rd08 */
+/* 0x0b6f: i2c_recv_not_rd08 */
 	0xb0410ef4,
 	0x1bf401d6,
 	0x7e00053b,
-	0xf40009e4,
+	0xf40009f8,
 	0xc5c73211,
-	0x098a7ee0,
+	0x099e7ee0,
 	0x2811f400,
-	0xe47e0005,
+	0xf87e0005,
 	0x11f40009,
 	0xe0b5c71f,
-	0x00098a7e,
+	0x00099e7e,
 	0x7e1511f4,
-	0xbd000887,
+	0xbd00089b,
 	0x08c5c774,
 	0xf4091bf4,
 	0x0ef40232,
-/* 0x0b99: i2c_recv_not_wr08 */
-/* 0x0b99: i2c_recv_done */
+/* 0x0bad: i2c_recv_not_wr08 */
+/* 0x0bad: i2c_recv_done */
 	0xf8cec703,
-	0x000a487e,
+	0x000a5c7e,
 	0xd0fce0fc,
 	0xb20912f4,
 	0x029f7e7c,
-/* 0x0bad: i2c_recv_exit */
-/* 0x0baf: i2c_init */
+/* 0x0bc1: i2c_recv_exit */
+/* 0x0bc3: i2c_init */
 	0xf800f800,
-/* 0x0bb1: test_recv */
+/* 0x0bc5: test_recv */
 	0x04584100,
 	0xb60011cf,
 	0x58400110,
@@ -1783,27 +1789,27 @@ uint32_t gk208_pmu_code[] = {
 	0x00de04bd,
 	0x7e134fd9,
 	0xf80001de,
-/* 0x0bcd: test_init */
+/* 0x0be1: test_init */
 	0x08004e00,
 	0x0001de7e,
-/* 0x0bd6: idle_recv */
+/* 0x0bea: idle_recv */
 	0x00f800f8,
-/* 0x0bd8: idle */
+/* 0x0bec: idle */
 	0x410031f4,
 	0x11cf0454,
 	0x0110b600,
 	0xf6045440,
 	0x04bd0001,
-/* 0x0bec: idle_loop */
+/* 0x0c00: idle_loop */
 	0x32f45801,
-/* 0x0bf1: idle_proc */
-/* 0x0bf1: idle_proc_exec */
+/* 0x0c05: idle_proc */
+/* 0x0c05: idle_proc_exec */
 	0xb210f902,
 	0x02a87e1e,
 	0xf410fc00,
 	0x31f40911,
 	0xf00ef402,
-/* 0x0c04: idle_proc_next */
+/* 0x0c18: idle_proc_next */
 	0xa65810b6,
 	0xe81bf41f,
 	0xf4e002f4,
@@ -1862,9 +1868,4 @@ uint32_t gk208_pmu_code[] = {
 	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 a86478e6..17be7cb9 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,
-	0x00000950,
+	0x0000096a,
 	0x0000083c,
 	0x00000000,
 	0x00000000,
@@ -90,8 +90,8 @@ uint32_t gt215_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x5f433249,
-	0x00000dd6,
-	0x00000c79,
+	0x00000df0,
+	0x00000c93,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -112,8 +112,8 @@ uint32_t gt215_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x54534554,
-	0x00000dff,
-	0x00000dd8,
+	0x00000e19,
+	0x00000df2,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -134,8 +134,8 @@ uint32_t gt215_pmu_data[] = {
 	0x00000000,
 	0x00000000,
 	0x454c4449,
-	0x00000e0b,
-	0x00000e09,
+	0x00000e25,
+	0x00000e23,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -1519,451 +1519,452 @@ uint32_t gt215_pmu_code[] = {
 	0x4f48a7f1,
 	0x5453a3f1,
 	0xf406eab8,
-	0xa7f1461b,
+	0xa7f1601b,
 	0xa3f00001,
 	0x06dab800,
-	0xf4060bf4,
-/* 0x085a: perf_recv_get_slots */
-	0x07f1510e,
-	0x03f00cd2,
+	0xf1130bf4,
+	0xf00002a7,
+	0xdab800a3,
+	0x390bf406,
+/* 0x0867: perf_recv_get_slots */
+	0xf15e0ef4,
+	0xf00cd207,
+	0x0c180003,
+	0xb604bd00,
+	0x07f108c4,
+	0x03f00cd1,
 	0x000c1800,
 	0xc4b604bd,
-	0xd107f108,
+	0xd007f108,
 	0x0003f00c,
 	0xbd000c18,
 	0x08c4b604,
+	0xf4ffc5f0,
+/* 0x089a: perf_recv_set_slot */
+	0xc0f02b0e,
+	0x04c0b710,
+	0x00cbd005,
+/* 0x08a7: perf_recv_not_host */
+	0xf5220ef4,
+	0xf108c821,
+	0xf00ccc07,
+	0x0e980003,
+	0xf504bd00,
+	0xf5022a21,
+	0xf4025621,
+/* 0x08c2: perf_recv_host */
+	0x21f5070e,
+/* 0x08c6: perf_recv_exit */
+	0x00f80336,
+/* 0x08c8: perf_counter_readout */
+	0x20f910f9,
+	0x40f930f9,
+	0x050817f1,
+	0xcf0614b6,
+	0x27f10011,
+	0x24b60518,
+	0x0022cf06,
+	0x052837f1,
+	0xcf0634b6,
+	0x47f10033,
+	0x44b60538,
+	0x0044cf06,
+	0x0000e7f1,
+	0x8000e3f1,
+	0x050807f1,
+	0xd00604b6,
+	0x04bd000e,
+	0x051807f1,
+	0xd00604b6,
+	0x04bd000e,
+	0x052807f1,
+	0xd00604b6,
+	0x04bd000e,
+	0x053807f1,
+	0xd00604b6,
+	0x04bd000e,
+	0xffff11cc,
+	0x31ff2c21,
+	0x4c41ff3c,
 	0x0cd007f1,
-	0x180003f0,
-	0x04bd000c,
-	0xf008c4b6,
-	0x0ef4ffc5,
-/* 0x088d: perf_recv_not_host */
-	0xae21f51e,
-	0xcc07f108,
-	0x0003f00c,
-	0xbd000e98,
-	0x2a21f504,
-	0x5621f502,
-	0x070ef402,
-/* 0x08a8: perf_recv_host */
-	0x033621f5,
-/* 0x08ac: perf_recv_exit */
-/* 0x08ae: perf_counter_readout */
-	0x10f900f8,
-	0x30f920f9,
-	0x17f140f9,
-	0x14b60508,
-	0x0011cf06,
-	0x051827f1,
-	0xcf0624b6,
-	0x37f10022,
-	0x34b60528,
-	0x0033cf06,
-	0x053847f1,
-	0xcf0644b6,
-	0xe7f10044,
-	0xe3f10000,
-	0x07f18000,
-	0x04b60508,
-	0x000ed006,
-	0x07f104bd,
-	0x04b60518,
-	0x000ed006,
-	0x07f104bd,
-	0x04b60528,
-	0x000ed006,
-	0x07f104bd,
-	0x04b60538,
-	0x000ed006,
-	0x11cc04bd,
-	0x2c21ffff,
-	0xff3c31ff,
-	0x07f14c41,
-	0x03f00cd0,
-	0x00020000,
-	0x07f104bd,
-	0x03f00cd1,
-	0x00030000,
-	0x07f104bd,
-	0x03f00cd2,
-	0x00040000,
-	0x40fc04bd,
-	0x20fc30fc,
-	0x00f810fc,
-/* 0x0950: perf_init */
-	0x0003e7f1,
-	0xf100e3f0,
-	0xb6050c07,
-	0x0ed00604,
-	0xf104bd00,
-	0xf00002e7,
-	0x07f100e3,
-	0x04b6051c,
-	0x000ed006,
-	0x07f104bd,
-	0x04b6052c,
-	0x000ed006,
-	0x07f104bd,
-	0x04b6053c,
-	0x000ed006,
-	0x21f504bd,
-	0x07f108ae,
-	0x03f00ccc,
-	0x000e9800,
-	0x21f504bd,
-	0x21f5022a,
-	0x00f80256,
-/* 0x09a8: i2c_drive_scl */
-	0xf40036b0,
-	0x07f1110b,
-	0x04b607e0,
-	0x0001d006,
-	0x00f804bd,
-/* 0x09bc: i2c_drive_scl_lo */
-	0x07e407f1,
+	0x000003f0,
+	0x04bd0002,
+	0x0cd107f1,
+	0x000003f0,
+	0x04bd0003,
+	0x0cd207f1,
+	0x000003f0,
+	0x04bd0004,
+	0x30fc40fc,
+	0x10fc20fc,
+/* 0x096a: perf_init */
+	0xe7f100f8,
+	0xe3f00003,
+	0x0c07f100,
+	0x0604b605,
+	0xbd000ed0,
+	0x02e7f104,
+	0x00e3f000,
+	0x051c07f1,
 	0xd00604b6,
-	0x04bd0001,
-/* 0x09ca: i2c_drive_sda */
+	0x04bd000e,
+	0x052c07f1,
+	0xd00604b6,
+	0x04bd000e,
+	0x053c07f1,
+	0xd00604b6,
+	0x04bd000e,
+	0x08c821f5,
+	0x0ccc07f1,
+	0x980003f0,
+	0x04bd000e,
+	0x022a21f5,
+	0x025621f5,
+/* 0x09c2: i2c_drive_scl */
 	0x36b000f8,
 	0x110bf400,
 	0x07e007f1,
 	0xd00604b6,
-	0x04bd0002,
-/* 0x09de: i2c_drive_sda_lo */
+	0x04bd0001,
+/* 0x09d6: i2c_drive_scl_lo */
 	0x07f100f8,
 	0x04b607e4,
+	0x0001d006,
+	0x00f804bd,
+/* 0x09e4: i2c_drive_sda */
+	0xf40036b0,
+	0x07f1110b,
+	0x04b607e0,
 	0x0002d006,
 	0x00f804bd,
-/* 0x09ec: i2c_sense_scl */
-	0xf10132f4,
-	0xb607c437,
-	0x33cf0634,
-	0x0431fd00,
-	0xf4060bf4,
-/* 0x0a02: i2c_sense_scl_done */
-	0x00f80131,
-/* 0x0a04: i2c_sense_sda */
-	0xf10132f4,
-	0xb607c437,
-	0x33cf0634,
-	0x0432fd00,
-	0xf4060bf4,
-/* 0x0a1a: i2c_sense_sda_done */
-	0x00f80131,
-/* 0x0a1c: i2c_raise_scl */
-	0x47f140f9,
-	0x37f00898,
-	0xa821f501,
-/* 0x0a29: i2c_raise_scl_wait */
-	0xe8e7f109,
-	0x7e21f403,
-	0x09ec21f5,
-	0xb60901f4,
-	0x1bf40142,
-/* 0x0a3d: i2c_raise_scl_done */
-	0xf840fcef,
-/* 0x0a41: i2c_start */
-	0xec21f500,
-	0x0d11f409,
-	0x0a0421f5,
-	0xf40611f4,
-/* 0x0a52: i2c_start_rep */
-	0x37f0300e,
-	0xa821f500,
-	0x0137f009,
-	0x09ca21f5,
-	0xb60076bb,
-	0x50f90465,
-	0xbb046594,
-	0x50bd0256,
-	0xfc0475fd,
-	0x1c21f550,
-	0x0464b60a,
-/* 0x0a7f: i2c_start_send */
-	0xf01f11f4,
+/* 0x09f8: i2c_drive_sda_lo */
+	0x07e407f1,
+	0xd00604b6,
+	0x04bd0002,
+/* 0x0a06: i2c_sense_scl */
+	0x32f400f8,
+	0xc437f101,
+	0x0634b607,
+	0xfd0033cf,
+	0x0bf40431,
+	0x0131f406,
+/* 0x0a1c: i2c_sense_scl_done */
+/* 0x0a1e: i2c_sense_sda */
+	0x32f400f8,
+	0xc437f101,
+	0x0634b607,
+	0xfd0033cf,
+	0x0bf40432,
+	0x0131f406,
+/* 0x0a34: i2c_sense_sda_done */
+/* 0x0a36: i2c_raise_scl */
+	0x40f900f8,
+	0x089847f1,
+	0xf50137f0,
+/* 0x0a43: i2c_raise_scl_wait */
+	0xf109c221,
+	0xf403e8e7,
+	0x21f57e21,
+	0x01f40a06,
+	0x0142b609,
+/* 0x0a57: i2c_raise_scl_done */
+	0xfcef1bf4,
+/* 0x0a5b: i2c_start */
+	0xf500f840,
+	0xf40a0621,
+	0x21f50d11,
+	0x11f40a1e,
+	0x300ef406,
+/* 0x0a6c: i2c_start_rep */
+	0xf50037f0,
+	0xf009c221,
+	0x21f50137,
+	0x76bb09e4,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0xf550fc04,
+	0xb60a3621,
+	0x11f40464,
+/* 0x0a99: i2c_start_send */
+	0x0037f01f,
+	0x09e421f5,
+	0x1388e7f1,
+	0xf07e21f4,
 	0x21f50037,
-	0xe7f109ca,
+	0xe7f109c2,
 	0x21f41388,
-	0x0037f07e,
-	0x09a821f5,
-	0x1388e7f1,
-/* 0x0a9b: i2c_start_out */
-	0xf87e21f4,
-/* 0x0a9d: i2c_stop */
-	0x0037f000,
-	0x09a821f5,
-	0xf50037f0,
-	0xf109ca21,
-	0xf403e8e7,
+/* 0x0ab5: i2c_start_out */
+/* 0x0ab7: i2c_stop */
+	0xf000f87e,
+	0x21f50037,
+	0x37f009c2,
+	0xe421f500,
+	0xe8e7f109,
+	0x7e21f403,
+	0xf50137f0,
+	0xf109c221,
+	0xf41388e7,
 	0x37f07e21,
-	0xa821f501,
+	0xe421f501,
 	0x88e7f109,
 	0x7e21f413,
-	0xf50137f0,
-	0xf109ca21,
-	0xf41388e7,
-	0x00f87e21,
-/* 0x0ad0: i2c_bitw */
-	0x09ca21f5,
-	0x03e8e7f1,
-	0xbb7e21f4,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x0a1c21f5,
-	0xf40464b6,
-	0xe7f11811,
-	0x21f41388,
-	0x0037f07e,
-	0x09a821f5,
+/* 0x0aea: i2c_bitw */
+	0x21f500f8,
+	0xe7f109e4,
+	0x21f403e8,
+	0x0076bb7e,
+	0xf90465b6,
+	0x04659450,
+	0xbd0256bb,
+	0x0475fd50,
+	0x21f550fc,
+	0x64b60a36,
+	0x1811f404,
 	0x1388e7f1,
-/* 0x0b0f: i2c_bitw_out */
-	0xf87e21f4,
-/* 0x0b11: i2c_bitr */
-	0x0137f000,
-	0x09ca21f5,
-	0x03e8e7f1,
-	0xbb7e21f4,
+	0xf07e21f4,
+	0x21f50037,
+	0xe7f109c2,
+	0x21f41388,
+/* 0x0b29: i2c_bitw_out */
+/* 0x0b2b: i2c_bitr */
+	0xf000f87e,
+	0x21f50137,
+	0xe7f109e4,
+	0x21f403e8,
+	0x0076bb7e,
+	0xf90465b6,
+	0x04659450,
+	0xbd0256bb,
+	0x0475fd50,
+	0x21f550fc,
+	0x64b60a36,
+	0x1b11f404,
+	0x0a1e21f5,
+	0xf50037f0,
+	0xf109c221,
+	0xf41388e7,
+	0x3cf07e21,
+	0x0131f401,
+/* 0x0b70: i2c_bitr_done */
+/* 0x0b72: i2c_get_byte */
+	0x57f000f8,
+	0x0847f000,
+/* 0x0b78: i2c_get_byte_next */
+	0xbb0154b6,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0a1c21f5,
+	0x0b2b21f5,
 	0xf40464b6,
-	0x21f51b11,
-	0x37f00a04,
-	0xa821f500,
-	0x88e7f109,
-	0x7e21f413,
-	0xf4013cf0,
-/* 0x0b56: i2c_bitr_done */
-	0x00f80131,
-/* 0x0b58: i2c_get_byte */
-	0xf00057f0,
-/* 0x0b5e: i2c_get_byte_next */
-	0x54b60847,
-	0x0076bb01,
+	0x53fd2b11,
+	0x0142b605,
+	0xf0d81bf4,
+	0x76bb0137,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0xf550fc04,
+	0xb60aea21,
+/* 0x0bc2: i2c_get_byte_done */
+	0x00f80464,
+/* 0x0bc4: i2c_put_byte */
+/* 0x0bc7: i2c_put_byte_next */
+	0xb60847f0,
+	0x54ff0142,
+	0x0076bb38,
 	0xf90465b6,
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b60b11,
-	0x2b11f404,
-	0xb60553fd,
-	0x1bf40142,
-	0x0137f0d8,
-	0xb60076bb,
-	0x50f90465,
-	0xbb046594,
-	0x50bd0256,
-	0xfc0475fd,
-	0xd021f550,
-	0x0464b60a,
-/* 0x0ba8: i2c_get_byte_done */
-/* 0x0baa: i2c_put_byte */
-	0x47f000f8,
-/* 0x0bad: i2c_put_byte_next */
-	0x0142b608,
-	0xbb3854ff,
+	0x64b60aea,
+	0x3411f404,
+	0xf40046b0,
+	0x76bbd81b,
+	0x0465b600,
+	0x659450f9,
+	0x0256bb04,
+	0x75fd50bd,
+	0xf550fc04,
+	0xb60b2b21,
+	0x11f40464,
+	0x0076bb0f,
+	0xf40136b0,
+	0x32f4061b,
+/* 0x0c1d: i2c_put_byte_done */
+/* 0x0c1f: i2c_addr */
+	0xbb00f801,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0ad021f5,
+	0x0a5b21f5,
 	0xf40464b6,
-	0x46b03411,
-	0xd81bf400,
+	0xc3e72911,
+	0x34b6012e,
+	0x0553fd01,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x1121f550,
+	0xc421f550,
 	0x0464b60b,
-	0xbb0f11f4,
-	0x36b00076,
-	0x061bf401,
-/* 0x0c03: i2c_put_byte_done */
-	0xf80132f4,
-/* 0x0c05: i2c_addr */
+/* 0x0c64: i2c_addr_done */
+/* 0x0c66: i2c_acquire_addr */
+	0xcec700f8,
+	0x02e4b6f8,
+	0x0d24e0b7,
+	0xf800ee98,
+/* 0x0c75: i2c_acquire */
+	0x6621f500,
+	0x0421f40c,
+	0xf403d9f0,
+	0x00f84021,
+/* 0x0c84: i2c_release */
+	0x0c6621f5,
+	0xf00421f4,
+	0x21f403da,
+/* 0x0c93: i2c_recv */
+	0xf400f840,
+	0xc1c70132,
+	0x0214b6f8,
+	0xf52816b0,
+	0xa0013a1f,
+	0x980cfc13,
+	0x13a00032,
+	0x31980cd4,
+	0x0231f400,
+	0xe0f9d0f9,
+	0x67f1d0f9,
+	0x63f10000,
+	0x67921000,
+	0x0076bb01,
+	0xf90465b6,
+	0x04659450,
+	0xbd0256bb,
+	0x0475fd50,
+	0x21f550fc,
+	0x64b60c75,
+	0xb0d0fc04,
+	0x1bf500d6,
+	0x57f000b3,
 	0x0076bb00,
 	0xf90465b6,
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b60a41,
-	0x2911f404,
-	0x012ec3e7,
-	0xfd0134b6,
-	0x76bb0553,
-	0x0465b600,
-	0x659450f9,
-	0x0256bb04,
-	0x75fd50bd,
-	0xf550fc04,
-	0xb60baa21,
-/* 0x0c4a: i2c_addr_done */
-	0x00f80464,
-/* 0x0c4c: i2c_acquire_addr */
-	0xb6f8cec7,
-	0xe0b702e4,
-	0xee980d24,
-/* 0x0c5b: i2c_acquire */
-	0xf500f800,
-	0xf40c4c21,
-	0xd9f00421,
-	0x4021f403,
-/* 0x0c6a: i2c_release */
-	0x21f500f8,
-	0x21f40c4c,
-	0x03daf004,
-	0xf84021f4,
-/* 0x0c79: i2c_recv */
-	0x0132f400,
-	0xb6f8c1c7,
-	0x16b00214,
-	0x3a1ff528,
-	0xfc13a001,
-	0x0032980c,
-	0x0cd413a0,
-	0xf4003198,
-	0xd0f90231,
-	0xd0f9e0f9,
-	0x000067f1,
-	0x100063f1,
-	0xbb016792,
+	0x64b60c1f,
+	0xd011f504,
+	0xe0c5c700,
+	0xb60076bb,
+	0x50f90465,
+	0xbb046594,
+	0x50bd0256,
+	0xfc0475fd,
+	0xc421f550,
+	0x0464b60b,
+	0x00ad11f5,
+	0xbb0157f0,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0c5b21f5,
-	0xfc0464b6,
-	0x00d6b0d0,
-	0x00b31bf5,
-	0xbb0057f0,
+	0x0c1f21f5,
+	0xf50464b6,
+	0xbb008a11,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0c0521f5,
-	0xf50464b6,
-	0xc700d011,
-	0x76bbe0c5,
-	0x0465b600,
-	0x659450f9,
-	0x0256bb04,
-	0x75fd50bd,
-	0xf550fc04,
-	0xb60baa21,
-	0x11f50464,
-	0x57f000ad,
-	0x0076bb01,
-	0xf90465b6,
-	0x04659450,
-	0xbd0256bb,
-	0x0475fd50,
-	0x21f550fc,
-	0x64b60c05,
-	0x8a11f504,
-	0x0076bb00,
+	0x0b7221f5,
+	0xf40464b6,
+	0x5bcb6a11,
+	0x0076bbe0,
 	0xf90465b6,
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b60b58,
-	0x6a11f404,
-	0xbbe05bcb,
-	0x65b60076,
-	0x9450f904,
-	0x56bb0465,
-	0xfd50bd02,
-	0x50fc0475,
-	0x0a9d21f5,
-	0xb90464b6,
-	0x74bd025b,
-/* 0x0d7f: i2c_recv_not_rd08 */
-	0xb0430ef4,
-	0x1bf401d6,
-	0x0057f03d,
-	0x0c0521f5,
-	0xc73311f4,
-	0x21f5e0c5,
-	0x11f40baa,
-	0x0057f029,
-	0x0c0521f5,
-	0xc71f11f4,
-	0x21f5e0b5,
-	0x11f40baa,
-	0x9d21f515,
-	0xc774bd0a,
-	0x1bf408c5,
-	0x0232f409,
-/* 0x0dbf: i2c_recv_not_wr08 */
-/* 0x0dbf: i2c_recv_done */
-	0xc7030ef4,
-	0x21f5f8ce,
-	0xe0fc0c6a,
-	0x12f4d0fc,
-	0x027cb90a,
-	0x033621f5,
-/* 0x0dd4: i2c_recv_exit */
-/* 0x0dd6: i2c_init */
-	0x00f800f8,
-/* 0x0dd8: test_recv */
-	0x05d817f1,
+	0x64b60ab7,
+	0x025bb904,
+	0x0ef474bd,
+/* 0x0d99: i2c_recv_not_rd08 */
+	0x01d6b043,
+	0xf03d1bf4,
+	0x21f50057,
+	0x11f40c1f,
+	0xe0c5c733,
+	0x0bc421f5,
+	0xf02911f4,
+	0x21f50057,
+	0x11f40c1f,
+	0xe0b5c71f,
+	0x0bc421f5,
+	0xf51511f4,
+	0xbd0ab721,
+	0x08c5c774,
+	0xf4091bf4,
+	0x0ef40232,
+/* 0x0dd9: i2c_recv_not_wr08 */
+/* 0x0dd9: i2c_recv_done */
+	0xf8cec703,
+	0x0c8421f5,
+	0xd0fce0fc,
+	0xb90a12f4,
+	0x21f5027c,
+/* 0x0dee: i2c_recv_exit */
+	0x00f80336,
+/* 0x0df0: i2c_init */
+/* 0x0df2: test_recv */
+	0x17f100f8,
+	0x14b605d8,
+	0x0011cf06,
+	0xf10110b6,
+	0xb605d807,
+	0x01d00604,
+	0xf104bd00,
+	0xf1d900e7,
+	0xf5134fe3,
+	0xf8025621,
+/* 0x0e19: test_init */
+	0x00e7f100,
+	0x5621f508,
+/* 0x0e23: idle_recv */
+	0xf800f802,
+/* 0x0e25: idle */
+	0x0031f400,
+	0x05d417f1,
 	0xcf0614b6,
 	0x10b60011,
-	0xd807f101,
+	0xd407f101,
 	0x0604b605,
 	0xbd0001d0,
-	0x00e7f104,
-	0x4fe3f1d9,
-	0x5621f513,
-/* 0x0dff: test_init */
-	0xf100f802,
-	0xf50800e7,
-	0xf8025621,
-/* 0x0e09: idle_recv */
-/* 0x0e0b: idle */
-	0xf400f800,
-	0x17f10031,
-	0x14b605d4,
-	0x0011cf06,
-	0xf10110b6,
-	0xb605d407,
-	0x01d00604,
-/* 0x0e27: idle_loop */
-	0xf004bd00,
-	0x32f45817,
-/* 0x0e2d: idle_proc */
-/* 0x0e2d: idle_proc_exec */
-	0xb910f902,
-	0x21f5021e,
-	0x10fc033f,
-	0xf40911f4,
-	0x0ef40231,
-/* 0x0e41: idle_proc_next */
-	0x5810b6ef,
-	0xf4061fb8,
-	0x02f4e61b,
-	0x0028f4dd,
-	0x00bb0ef4,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
+/* 0x0e41: idle_loop */
+	0x5817f004,
+/* 0x0e47: idle_proc */
+/* 0x0e47: idle_proc_exec */
+	0xf90232f4,
+	0x021eb910,
+	0x033f21f5,
+	0x11f410fc,
+	0x0231f409,
+/* 0x0e5b: idle_proc_next */
+	0xb6ef0ef4,
+	0x1fb85810,
+	0xe61bf406,
+	0xf4dd02f4,
+	0x0ef40028,
+	0x000000bb,
 	0x00000000,
 	0x00000000,
 	0x00000000,
diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/os.h b/drm/nouveau/nvkm/subdev/pmu/fuc/os.h
index 2d0a693a..f9991aab 100644
--- a/drm/nouveau/nvkm/subdev/pmu/fuc/os.h
+++ b/drm/nouveau/nvkm/subdev/pmu/fuc/os.h
@@ -51,5 +51,6 @@
 
 /* PERF: message identifiers */
 #define PERF_MSG_GET_SLOTS 1
+#define PERF_MSG_SET_SLOT  2
 
 #endif
diff --git a/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc b/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc
index d8e296a9..ade8eb9f 100644
--- a/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc
+++ b/drm/nouveau/nvkm/subdev/pmu/fuc/perf.fuc
@@ -64,6 +64,9 @@ perf_recv:
 		imm32($r10, PERF_MSG_GET_SLOTS)
 		cmp b32 $r13 $r10
 		bra e #perf_recv_get_slots
+		imm32($r10, PERF_MSG_SET_SLOT)
+		cmp b32 $r13 $r10
+		bra e #perf_recv_set_slot
 		bra   #perf_recv_host
 
 perf_recv_get_slots:
@@ -85,6 +88,12 @@ perf_recv_get_slots:
 #endif
 	bra #perf_recv_host
 
+perf_recv_set_slot:
+	mulu $r12 16
+	add b32 $r12 0x504
+	iowr I[$r12] $r11
+	bra #perf_recv_exit
+
 perf_recv_not_host:
 	call(perf_counter_readout)
 	ld(b32, $r14, #perf_polling_period_us)
-- 
2.12.2

_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/nouveau

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [RFC v2 5/6] nouveau/debugfs: add interface for current load
       [not found] ` <20170507224648.1182-1-karolherbst-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
                     ` (3 preceding siblings ...)
  2017-05-07 22:46   ` [RFC v2 4/6] pmu/fuc: implement SET_SLOT Karol Herbst
@ 2017-05-07 22:46   ` Karol Herbst
  2017-05-07 22:46   ` [RFC v2 6/6] pmu: setup counters Karol Herbst
  5 siblings, 0 replies; 7+ messages in thread
From: Karol Herbst @ 2017-05-07 22:46 UTC (permalink / raw)
  To: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

output of the file will be something like that:

core, mem,  vid,  pci
0xfd, 0x15, 0x00, 0xa2

v2: relayout the debugfs file

Signed-off-by: Karol Herbst <karolherbst@gmail.com>
---
 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    |  8 ++++++++
 drm/nouveau/nvkm/subdev/pmu/gf100.c   |  2 ++
 drm/nouveau/nvkm/subdev/pmu/gf119.c   |  2 ++
 drm/nouveau/nvkm/subdev/pmu/gk104.c   |  2 ++
 drm/nouveau/nvkm/subdev/pmu/gk110.c   |  2 ++
 drm/nouveau/nvkm/subdev/pmu/gk208.c   |  2 ++
 drm/nouveau/nvkm/subdev/pmu/gm107.c   |  2 ++
 drm/nouveau/nvkm/subdev/pmu/gt215.c   | 31 +++++++++++++++++++++++++++++++
 drm/nouveau/nvkm/subdev/pmu/priv.h    |  4 ++++
 12 files changed, 89 insertions(+)

diff --git a/drm/nouveau/include/nvif/device.h b/drm/nouveau/include/nvif/device.h
index bcb98171..2b9f725f 100644
--- a/drm/nouveau/include/nvif/device.h
+++ b/drm/nouveau/include/nvif/device.h
@@ -65,6 +65,7 @@ u64  nvif_device_time(struct nvif_device *);
 #define nvxx_iccsense(a) nvxx_device(a)->iccsense
 #define nvxx_therm(a) nvxx_device(a)->therm
 #define nvxx_volt(a) nvxx_device(a)->volt
+#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 e7f04732..4c8157df 100644
--- a/drm/nouveau/include/nvkm/subdev/pmu.h
+++ b/drm/nouveau/include/nvkm/subdev/pmu.h
@@ -26,6 +26,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);
@@ -54,4 +61,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 fd64dfdc..5c7fa89c 100644
--- a/drm/nouveau/nouveau_debugfs.c
+++ b/drm/nouveau/nouveau_debugfs.c
@@ -31,6 +31,8 @@
 #include <linux/debugfs.h>
 #include <nvif/class.h>
 #include <nvif/if0001.h>
+#include <nvkm/subdev/pmu.h>
+
 #include "nouveau_debugfs.h"
 #include "nouveau_drv.h"
 
@@ -180,8 +182,29 @@ static const struct file_operations nouveau_pstate_fops = {
 	.write = nouveau_debugfs_pstate_set,
 };
 
+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->client.device);
+	struct nvkm_pmu_load_data load_data = { 0 };
+
+	if (!pm_runtime_suspended(drm->dev->dev)) {
+		int ret = nvkm_pmu_get_perf_data(pmu, &load_data);
+		if (ret < 0)
+			return ret;
+	}
+
+	seq_printf(m, "core, mem,  vid,  pci\n");
+	seq_printf(m, "0x%2.2x, 0x%2.2x, 0x%2.2x, 0x%2.2x\n", load_data.core,
+		   load_data.mem, load_data.video, 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 3306f9fe..0ef97ddd 100644
--- a/drm/nouveau/nvkm/subdev/pmu/base.c
+++ b/drm/nouveau/nvkm/subdev/pmu/base.c
@@ -49,6 +49,14 @@ nvkm_pmu_send(struct nvkm_pmu *pmu, u32 reply[2],
 	return pmu->func->send(pmu, reply, process, message, data0, data1);
 }
 
+int
+nvkm_pmu_get_perf_data(struct nvkm_pmu *pmu, struct nvkm_pmu_load_data *data)
+{
+	if (!pmu || !pmu->func->get_perf_data)
+		return -ENODEV;
+	return pmu->func->get_perf_data(pmu, data);
+}
+
 static void
 nvkm_pmu_intr(struct nvkm_subdev *subdev)
 {
diff --git a/drm/nouveau/nvkm/subdev/pmu/gf100.c b/drm/nouveau/nvkm/subdev/pmu/gf100.c
index 0e36d4cb..1c4986cb 100644
--- a/drm/nouveau/nvkm/subdev/pmu/gf100.c
+++ b/drm/nouveau/nvkm/subdev/pmu/gf100.c
@@ -30,12 +30,14 @@ gf100_pmu = {
 	.code.size = sizeof(gf100_pmu_code),
 	.data.data = gf100_pmu_data,
 	.data.size = sizeof(gf100_pmu_data),
+	.counter_slots = 8,
 	.reset = gt215_pmu_reset,
 	.init = gt215_pmu_init,
 	.fini = gt215_pmu_fini,
 	.intr = gt215_pmu_intr,
 	.send = gt215_pmu_send,
 	.recv = gt215_pmu_recv,
+	.get_perf_data = gt215_pmu_get_perf_data,
 };
 
 int
diff --git a/drm/nouveau/nvkm/subdev/pmu/gf119.c b/drm/nouveau/nvkm/subdev/pmu/gf119.c
index 0e4ba424..49d8fb22 100644
--- a/drm/nouveau/nvkm/subdev/pmu/gf119.c
+++ b/drm/nouveau/nvkm/subdev/pmu/gf119.c
@@ -30,12 +30,14 @@ gf119_pmu = {
 	.code.size = sizeof(gf119_pmu_code),
 	.data.data = gf119_pmu_data,
 	.data.size = sizeof(gf119_pmu_data),
+	.counter_slots = 8,
 	.reset = gt215_pmu_reset,
 	.init = gt215_pmu_init,
 	.fini = gt215_pmu_fini,
 	.intr = gt215_pmu_intr,
 	.send = gt215_pmu_send,
 	.recv = gt215_pmu_recv,
+	.get_perf_data = gt215_pmu_get_perf_data,
 };
 
 int
diff --git a/drm/nouveau/nvkm/subdev/pmu/gk104.c b/drm/nouveau/nvkm/subdev/pmu/gk104.c
index 2ad858d8..7ae36a78 100644
--- a/drm/nouveau/nvkm/subdev/pmu/gk104.c
+++ b/drm/nouveau/nvkm/subdev/pmu/gk104.c
@@ -109,6 +109,7 @@ gk104_pmu = {
 	.code.size = sizeof(gk104_pmu_code),
 	.data.data = gk104_pmu_data,
 	.data.size = sizeof(gk104_pmu_data),
+	.counter_slots = 8,
 	.reset = gt215_pmu_reset,
 	.init = gt215_pmu_init,
 	.fini = gt215_pmu_fini,
@@ -116,6 +117,7 @@ gk104_pmu = {
 	.send = gt215_pmu_send,
 	.recv = gt215_pmu_recv,
 	.pgob = gk104_pmu_pgob,
+	.get_perf_data = gt215_pmu_get_perf_data,
 };
 
 int
diff --git a/drm/nouveau/nvkm/subdev/pmu/gk110.c b/drm/nouveau/nvkm/subdev/pmu/gk110.c
index fc4b8ecf..84001c27 100644
--- a/drm/nouveau/nvkm/subdev/pmu/gk110.c
+++ b/drm/nouveau/nvkm/subdev/pmu/gk110.c
@@ -88,6 +88,7 @@ gk110_pmu = {
 	.code.size = sizeof(gk110_pmu_code),
 	.data.data = gk110_pmu_data,
 	.data.size = sizeof(gk110_pmu_data),
+	.counter_slots = 8,
 	.reset = gt215_pmu_reset,
 	.init = gt215_pmu_init,
 	.fini = gt215_pmu_fini,
@@ -95,6 +96,7 @@ gk110_pmu = {
 	.send = gt215_pmu_send,
 	.recv = gt215_pmu_recv,
 	.pgob = gk110_pmu_pgob,
+	.get_perf_data = gt215_pmu_get_perf_data,
 };
 
 int
diff --git a/drm/nouveau/nvkm/subdev/pmu/gk208.c b/drm/nouveau/nvkm/subdev/pmu/gk208.c
index e9a91277..f2d743e6 100644
--- a/drm/nouveau/nvkm/subdev/pmu/gk208.c
+++ b/drm/nouveau/nvkm/subdev/pmu/gk208.c
@@ -30,6 +30,7 @@ gk208_pmu = {
 	.code.size = sizeof(gk208_pmu_code),
 	.data.data = gk208_pmu_data,
 	.data.size = sizeof(gk208_pmu_data),
+	.counter_slots = 8,
 	.reset = gt215_pmu_reset,
 	.init = gt215_pmu_init,
 	.fini = gt215_pmu_fini,
@@ -37,6 +38,7 @@ gk208_pmu = {
 	.send = gt215_pmu_send,
 	.recv = gt215_pmu_recv,
 	.pgob = gk110_pmu_pgob,
+	.get_perf_data = gt215_pmu_get_perf_data,
 };
 
 int
diff --git a/drm/nouveau/nvkm/subdev/pmu/gm107.c b/drm/nouveau/nvkm/subdev/pmu/gm107.c
index 9a248ed7..f0a964ff 100644
--- a/drm/nouveau/nvkm/subdev/pmu/gm107.c
+++ b/drm/nouveau/nvkm/subdev/pmu/gm107.c
@@ -32,12 +32,14 @@ gm107_pmu = {
 	.code.size = sizeof(gm107_pmu_code),
 	.data.data = gm107_pmu_data,
 	.data.size = sizeof(gm107_pmu_data),
+	.counter_slots = 8,
 	.reset = gt215_pmu_reset,
 	.init = gt215_pmu_init,
 	.fini = gt215_pmu_fini,
 	.intr = gt215_pmu_intr,
 	.send = gt215_pmu_send,
 	.recv = gt215_pmu_recv,
+	.get_perf_data = gt215_pmu_get_perf_data,
 };
 
 int
diff --git a/drm/nouveau/nvkm/subdev/pmu/gt215.c b/drm/nouveau/nvkm/subdev/pmu/gt215.c
index 43ca70df..6ffd3cba 100644
--- a/drm/nouveau/nvkm/subdev/pmu/gt215.c
+++ b/drm/nouveau/nvkm/subdev/pmu/gt215.c
@@ -56,6 +56,35 @@ wait_for_pmu_reply(struct nvkm_pmu *pmu, u32 reply[2])
 	return 0;
 }
 
+enum nvkm_pmu_counter_slot {
+	NVKM_PMU_COUNTER_SLOT_TOTAL = 0,
+	NVKM_PMU_COUNTER_SLOT_CORE = 1,
+	NVKM_PMU_COUNTER_SLOT_MEMORY = 2,
+	NVKM_PMU_COUNTER_SLOT_VIDEO = 3,
+	NVKM_PMU_COUNTER_SLOT_PCIE = 4,
+	NVKM_PMU_COUNTER_SLOT_LAST,
+};
+
+int
+gt215_pmu_get_perf_data(struct nvkm_pmu *pmu, struct nvkm_pmu_load_data *data)
+{
+	int ret;
+	union {
+		u32 raw[2];
+		u8 slots[8];
+	} d;
+
+	ret = nvkm_pmu_send(pmu, d.raw, PROC_PERF, PERF_MSG_GET_SLOTS, 0, 0);
+	if (ret < 0)
+		return ret;
+
+	data->core = d.slots[NVKM_PMU_COUNTER_SLOT_CORE];
+	data->video = d.slots[NVKM_PMU_COUNTER_SLOT_VIDEO];
+	data->mem = d.slots[NVKM_PMU_COUNTER_SLOT_MEMORY];
+	data->pcie = d.slots[NVKM_PMU_COUNTER_SLOT_PCIE];
+	return 0;
+}
+
 int
 gt215_pmu_send(struct nvkm_pmu *pmu, u32 reply[2],
 	       u32 process, u32 message, u32 data0, u32 data1)
@@ -274,12 +303,14 @@ gt215_pmu = {
 	.code.size = sizeof(gt215_pmu_code),
 	.data.data = gt215_pmu_data,
 	.data.size = sizeof(gt215_pmu_data),
+	.counter_slots = 4,
 	.reset = gt215_pmu_reset,
 	.init = gt215_pmu_init,
 	.fini = gt215_pmu_fini,
 	.intr = gt215_pmu_intr,
 	.send = gt215_pmu_send,
 	.recv = gt215_pmu_recv,
+	.get_perf_data = gt215_pmu_get_perf_data,
 };
 
 int
diff --git a/drm/nouveau/nvkm/subdev/pmu/priv.h b/drm/nouveau/nvkm/subdev/pmu/priv.h
index 096cba06..4cd38b80 100644
--- a/drm/nouveau/nvkm/subdev/pmu/priv.h
+++ b/drm/nouveau/nvkm/subdev/pmu/priv.h
@@ -20,6 +20,8 @@ struct nvkm_pmu_func {
 		u32  size;
 	} data;
 
+	uint8_t counter_slots;
+
 	void (*reset)(struct nvkm_pmu *);
 	int (*init)(struct nvkm_pmu *);
 	void (*fini)(struct nvkm_pmu *);
@@ -28,6 +30,7 @@ struct nvkm_pmu_func {
 		    u32 message, u32 data0, u32 data1);
 	void (*recv)(struct nvkm_pmu *);
 	void (*pgob)(struct nvkm_pmu *, bool);
+	int (*get_perf_data)(struct nvkm_pmu *, struct nvkm_pmu_load_data *);
 };
 
 void gt215_pmu_reset(struct nvkm_pmu *);
@@ -36,6 +39,7 @@ void gt215_pmu_fini(struct nvkm_pmu *);
 void gt215_pmu_intr(struct nvkm_pmu *);
 void gt215_pmu_recv(struct nvkm_pmu *);
 int gt215_pmu_send(struct nvkm_pmu *, u32[2], u32, u32, u32, u32);
+int gt215_pmu_get_perf_data(struct nvkm_pmu *, struct nvkm_pmu_load_data *);
 
 void gk110_pmu_pgob(struct nvkm_pmu *, bool);
 #endif
-- 
2.12.2

_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/nouveau

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [RFC v2 6/6] pmu: setup counters
       [not found] ` <20170507224648.1182-1-karolherbst-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
                     ` (4 preceding siblings ...)
  2017-05-07 22:46   ` [RFC v2 5/6] nouveau/debugfs: add interface for current load Karol Herbst
@ 2017-05-07 22:46   ` Karol Herbst
  5 siblings, 0 replies; 7+ messages in thread
From: Karol Herbst @ 2017-05-07 22:46 UTC (permalink / raw)
  To: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

Signed-off-by: Karol Herbst <karolherbst@gmail.com>
---
 drm/nouveau/nvkm/subdev/pmu/gt215.c | 39 +++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/drm/nouveau/nvkm/subdev/pmu/gt215.c b/drm/nouveau/nvkm/subdev/pmu/gt215.c
index 6ffd3cba..3e3c910f 100644
--- a/drm/nouveau/nvkm/subdev/pmu/gt215.c
+++ b/drm/nouveau/nvkm/subdev/pmu/gt215.c
@@ -85,6 +85,44 @@ gt215_pmu_get_perf_data(struct nvkm_pmu *pmu, struct nvkm_pmu_load_data *data)
 	return 0;
 }
 
+static void
+gt215_setup_pmu_counters(struct nvkm_pmu *pmu)
+{
+	struct nvkm_device *device = pmu->subdev.device;
+	u32 core_mask = 0;
+	u32 video_mask = 0;
+	u32 memory_mask = 0;
+
+	if (nvkm_device_engine(device, NVKM_ENGINE_GR))
+		core_mask |= 0x00000001;
+	if (nvkm_device_engine(device, NVKM_ENGINE_CE0))
+		core_mask |= 0x00080000;
+	if (nvkm_device_engine(device, NVKM_ENGINE_CE1))
+		core_mask |= 0x00100000;
+	if (nvkm_device_engine(device, NVKM_ENGINE_CE2))
+		core_mask |= 0x00200000;
+
+	if (nvkm_device_engine(device, NVKM_ENGINE_MSVLD))
+		video_mask |= 0x00000010;
+	if (nvkm_device_engine(device, NVKM_ENGINE_MSPDEC))
+		video_mask |= 0x00000020;
+	if (nvkm_device_engine(device, NVKM_ENGINE_MSPPP))
+		video_mask |= 0x00000040;
+	if (nvkm_device_engine(device, NVKM_ENGINE_NVENC0))
+		video_mask |= 0x00020000;
+
+	if (device->chipset < 0xc0)
+		memory_mask = 0x100;
+	else
+		memory_mask = 0x80;
+
+	nvkm_pmu_send(pmu, NULL, PROC_PERF, PERF_MSG_SET_SLOT, NVKM_PMU_COUNTER_SLOT_CORE, core_mask);
+	nvkm_pmu_send(pmu, NULL, PROC_PERF, PERF_MSG_SET_SLOT, NVKM_PMU_COUNTER_SLOT_VIDEO, video_mask);
+	nvkm_pmu_send(pmu, NULL, PROC_PERF, PERF_MSG_SET_SLOT, NVKM_PMU_COUNTER_SLOT_MEMORY, memory_mask);
+	if (NVKM_PMU_COUNTER_SLOT_PCIE <= pmu->func->counter_slots)
+		nvkm_pmu_send(pmu, NULL, PROC_PERF, PERF_MSG_SET_SLOT, NVKM_PMU_COUNTER_SLOT_PCIE, 0x20000000);
+}
+
 int
 gt215_pmu_send(struct nvkm_pmu *pmu, u32 reply[2],
 	       u32 process, u32 message, u32 data0, u32 data1)
@@ -294,6 +332,7 @@ gt215_pmu_init(struct nvkm_pmu *pmu)
 	pmu->recv.size = nvkm_rd32(device, 0x10a4dc) >> 16;
 
 	nvkm_wr32(device, 0x10a010, 0x000000e0);
+	gt215_setup_pmu_counters(pmu);
 	return 0;
 }
 
-- 
2.12.2

_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/nouveau

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-05-07 22:46 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-07 22:46 [RFC v2 0/6] PMU engine counters Karol Herbst
     [not found] ` <20170507224648.1182-1-karolherbst-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-05-07 22:46   ` [RFC v2 1/6] pmu/fuc: add macros for pdaemon pwr counters Karol Herbst
2017-05-07 22:46   ` [RFC v2 2/6] pmu/fuc: read out counters and store them Karol Herbst
2017-05-07 22:46   ` [RFC v2 3/6] pmu/fuc: implement GET_SLOTS Karol Herbst
2017-05-07 22:46   ` [RFC v2 4/6] pmu/fuc: implement SET_SLOT Karol Herbst
2017-05-07 22:46   ` [RFC v2 5/6] nouveau/debugfs: add interface for current load Karol Herbst
2017-05-07 22:46   ` [RFC v2 6/6] pmu: setup counters Karol Herbst

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.