summary refs log tree commit diff
path: root/drivers
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2014-09-11 23:32:20 +1000
committerBen Skeggs <bskeggs@redhat.com>2014-09-15 22:25:13 +1000
commit7a2f9743eab19b67688ff8cd491cf531e7516b8d (patch)
tree880790e0688f2905e0a93f42c8287d65dcafc136 /drivers
parent30da08069726fc4ca0ef5590b897dc5a017edbc9 (diff)
downloadlinux-7a2f9743eab19b67688ff8cd491cf531e7516b8d.tar.gz
drm/gf100-/pwr/memx: block host and fifo around reclock
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/memx.fuc34
-rw-r--r--drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nv108.fuc.h340
-rw-r--r--drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvc0.fuc.h394
-rw-r--r--drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvd0.fuc.h338
4 files changed, 632 insertions, 474 deletions
diff --git a/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/memx.fuc b/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/memx.fuc
index bd639fbaadfa..e89789a53b80 100644
--- a/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/memx.fuc
+++ b/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/memx.fuc
@@ -84,6 +84,22 @@ memx_func_enter:
 	movw $r6 0x2
 	or $r7 $r6
 	nv_wr32($r8, $r7)
+#else
+	movw $r6 0x001620
+	imm32($r7, ~0x00000aa2);
+	nv_rd32($r8, $r6)
+	and $r8 $r7
+	nv_wr32($r6, $r8)
+
+	imm32($r7, ~0x00000001)
+	nv_rd32($r8, $r6)
+	and $r8 $r7
+	nv_wr32($r6, $r8)
+
+	movw $r6 0x0026f0
+	nv_rd32($r8, $r6)
+	and $r8 $r7
+	nv_wr32($r6, $r8)
 #endif
 
 	mov $r6 NV_PPWR_OUTPUT_SET_FB_PAUSE
@@ -95,7 +111,6 @@ memx_func_enter:
 
 	nv_iord($r6, NV_PPWR_TIMER_LOW)
 	st b32 D[$r0 + #memx_ts_start] $r6
-
 	ret
 
 // description
@@ -121,8 +136,23 @@ memx_func_leave:
 	imm32($r6, 0xffffffcc)
 	and $r7 $r6
 	nv_wr32($r8, $r7)
+#else
+	movw $r6 0x0026f0
+	imm32($r7, 0x00000001)
+	nv_rd32($r8, $r6)
+	or $r8 $r7
+	nv_wr32($r6, $r8)
+
+	movw $r6 0x001620
+	nv_rd32($r8, $r6)
+	or $r8 $r7
+	nv_wr32($r6, $r8)
+
+	imm32($r7, 0x00000aa2);
+	nv_rd32($r8, $r6)
+	or $r8 $r7
+	nv_wr32($r6, $r8)
 #endif
-
 	ret
 
 #if NVKM_PPWR_CHIPSET < GF119
diff --git a/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nv108.fuc.h b/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nv108.fuc.h
index 62ca2e1a9b96..4d278a96b2bb 100644
--- a/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nv108.fuc.h
+++ b/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nv108.fuc.h
@@ -46,8 +46,8 @@ uint32_t nv108_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x584d454d,
-	0x00000564,
-	0x00000556,
+	0x0000061c,
+	0x0000060e,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -68,8 +68,8 @@ uint32_t nv108_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x46524550,
-	0x00000568,
-	0x00000566,
+	0x00000620,
+	0x0000061e,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -90,8 +90,8 @@ uint32_t nv108_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x5f433249,
-	0x0000096c,
-	0x00000813,
+	0x00000a24,
+	0x000008cb,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -112,8 +112,8 @@ uint32_t nv108_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x54534554,
-	0x0000098d,
-	0x0000096e,
+	0x00000a45,
+	0x00000a26,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -134,8 +134,8 @@ uint32_t nv108_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x454c4449,
-	0x00000998,
-	0x00000996,
+	0x00000a50,
+	0x00000a4e,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -233,19 +233,19 @@ uint32_t nv108_pwr_data[] = {
 /* 0x037c: memx_func_next */
 	0x00000002,
 	0x00000000,
-	0x000004a3,
+	0x00000500,
 	0x00000003,
 	0x00000002,
-	0x000004c8,
+	0x00000580,
 	0x00040004,
 	0x00000000,
-	0x000004e5,
+	0x0000059d,
 	0x00010005,
 	0x00000000,
-	0x000004ff,
+	0x000005b7,
 	0x00010006,
 	0x00000000,
-	0x000004c3,
+	0x0000057b,
 /* 0x03b8: memx_func_tail */
 /* 0x03b8: memx_ts_start */
 	0x00000000,
@@ -1183,29 +1183,75 @@ uint32_t nv108_pwr_code[] = {
 	0x04c44001,
 	0xbd0001f6,
 /* 0x0483: memx_func_enter */
-	0x0600f804,
-	0x07e04004,
-	0xbd0006f6,
-/* 0x048d: memx_func_enter_wait */
-	0x07c04604,
-	0xf00066cf,
-	0x0bf40464,
-	0xcf2c06f7,
-	0x06b50066,
-/* 0x04a3: memx_func_leave */
-	0x0600f8ee,
-	0x0066cf2c,
-	0x06ef06b5,
-	0x07e44004,
-	0xbd0006f6,
-/* 0x04b5: memx_func_leave_wait */
-	0x07c04604,
-	0xf00066cf,
-	0x1bf40464,
-/* 0x04c3: memx_func_wait_vblank */
-	0xb600f8f7,
+	0xf100f804,
+	0xf1162067,
+	0xf1f55d77,
+	0xb2ffff73,
+	0x00047e6e,
+	0xfdd8b200,
+	0x60f90487,
+	0xd0fc80f9,
+	0x2e7ee0fc,
+	0x77f10000,
+	0x73f1fffe,
+	0x6eb2ffff,
+	0x0000047e,
+	0x87fdd8b2,
+	0xf960f904,
+	0xfcd0fc80,
+	0x002e7ee0,
+	0xf067f100,
+	0x7e6eb226,
+	0xb2000004,
+	0x0487fdd8,
+	0x80f960f9,
+	0xe0fcd0fc,
+	0x00002e7e,
+	0xe0400406,
+	0x0006f607,
+/* 0x04ea: memx_func_enter_wait */
+	0xc04604bd,
+	0x0066cf07,
+	0xf40464f0,
+	0x2c06f70b,
+	0xb50066cf,
+	0x00f8ee06,
+/* 0x0500: memx_func_leave */
+	0x66cf2c06,
+	0xef06b500,
+	0xe4400406,
+	0x0006f607,
+/* 0x0512: memx_func_leave_wait */
+	0xc04604bd,
+	0x0066cf07,
+	0xf40464f0,
+	0x67f1f71b,
+	0x77f126f0,
+	0x73f00001,
+	0x7e6eb200,
+	0xb2000004,
+	0x0587fdd8,
+	0x80f960f9,
+	0xe0fcd0fc,
+	0x00002e7e,
+	0x162067f1,
+	0x047e6eb2,
+	0xd8b20000,
+	0xf90587fd,
+	0xfc80f960,
+	0x7ee0fcd0,
+	0xf100002e,
+	0xf00aa277,
+	0x6eb20073,
+	0x0000047e,
+	0x87fdd8b2,
+	0xf960f905,
+	0xfcd0fc80,
+	0x002e7ee0,
+/* 0x057b: memx_func_wait_vblank */
+	0xb600f800,
 	0x00f80410,
-/* 0x04c8: memx_func_wr32 */
+/* 0x0580: memx_func_wr32 */
 	0x98001698,
 	0x10b60115,
 	0xf960f908,
@@ -1213,21 +1259,21 @@ uint32_t nv108_pwr_code[] = {
 	0x002e7ee0,
 	0x0242b600,
 	0xf8e81bf4,
-/* 0x04e5: memx_func_wait */
+/* 0x059d: memx_func_wait */
 	0xcf2c0800,
 	0x1e980088,
 	0x011d9800,
 	0x98021c98,
 	0x10b6031b,
 	0x00797e10,
-/* 0x04ff: memx_func_delay */
+/* 0x05b7: memx_func_delay */
 	0x9800f800,
 	0x10b6001e,
 	0x005d7e04,
-/* 0x050b: memx_exec */
+/* 0x05c3: memx_exec */
 	0xf900f800,
 	0xb2d0f9e0,
-/* 0x0513: memx_exec_next */
+/* 0x05cb: memx_exec_next */
 	0x98b2b2c1,
 	0x10b60013,
 	0xf034e704,
@@ -1242,103 +1288,103 @@ uint32_t nv108_pwr_code[] = {
 	0x00bbcf07,
 	0xe0fcd0fc,
 	0x0002c27e,
-/* 0x054a: memx_info */
+/* 0x0602: memx_info */
 	0xc04c00f8,
 	0x08004b03,
 	0x0002c27e,
-/* 0x0556: memx_recv */
+/* 0x060e: memx_recv */
 	0xd6b000f8,
 	0xb20bf401,
 	0xf400d6b0,
 	0x00f8eb0b,
-/* 0x0564: memx_init */
-/* 0x0566: perf_recv */
+/* 0x061c: memx_init */
+/* 0x061e: perf_recv */
 	0x00f800f8,
-/* 0x0568: perf_init */
-/* 0x056a: i2c_drive_scl */
+/* 0x0620: perf_init */
+/* 0x0622: i2c_drive_scl */
 	0x36b000f8,
 	0x0d0bf400,
 	0xf607e040,
 	0x04bd0001,
-/* 0x057a: i2c_drive_scl_lo */
+/* 0x0632: i2c_drive_scl_lo */
 	0xe44000f8,
 	0x0001f607,
 	0x00f804bd,
-/* 0x0584: i2c_drive_sda */
+/* 0x063c: i2c_drive_sda */
 	0xf40036b0,
 	0xe0400d0b,
 	0x0002f607,
 	0x00f804bd,
-/* 0x0594: i2c_drive_sda_lo */
+/* 0x064c: i2c_drive_sda_lo */
 	0xf607e440,
 	0x04bd0002,
-/* 0x059e: i2c_sense_scl */
+/* 0x0656: i2c_sense_scl */
 	0x32f400f8,
 	0x07c44301,
 	0xfd0033cf,
 	0x0bf40431,
 	0x0131f406,
-/* 0x05b0: i2c_sense_scl_done */
-/* 0x05b2: i2c_sense_sda */
+/* 0x0668: i2c_sense_scl_done */
+/* 0x066a: i2c_sense_sda */
 	0x32f400f8,
 	0x07c44301,
 	0xfd0033cf,
 	0x0bf40432,
 	0x0131f406,
-/* 0x05c4: i2c_sense_sda_done */
-/* 0x05c6: i2c_raise_scl */
+/* 0x067c: i2c_sense_sda_done */
+/* 0x067e: i2c_raise_scl */
 	0x40f900f8,
 	0x03089844,
-	0x056a7e01,
-/* 0x05d1: i2c_raise_scl_wait */
+	0x06227e01,
+/* 0x0689: i2c_raise_scl_wait */
 	0x03e84e00,
 	0x00005d7e,
-	0x00059e7e,
+	0x0006567e,
 	0xb60901f4,
 	0x1bf40142,
-/* 0x05e5: i2c_raise_scl_done */
+/* 0x069d: i2c_raise_scl_done */
 	0xf840fcef,
-/* 0x05e9: i2c_start */
-	0x059e7e00,
+/* 0x06a1: i2c_start */
+	0x06567e00,
 	0x0d11f400,
-	0x0005b27e,
+	0x00066a7e,
 	0xf40611f4,
-/* 0x05fa: i2c_start_rep */
+/* 0x06b2: i2c_start_rep */
 	0x00032e0e,
-	0x00056a7e,
-	0x847e0103,
-	0x76bb0005,
+	0x0006227e,
+	0x3c7e0103,
+	0x76bb0006,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0x7e50fc04,
-	0xb60005c6,
+	0xb600067e,
 	0x11f40464,
-/* 0x0625: i2c_start_send */
+/* 0x06dd: i2c_start_send */
 	0x7e00031d,
-	0x4e000584,
+	0x4e00063c,
 	0x5d7e1388,
 	0x00030000,
-	0x00056a7e,
+	0x0006227e,
 	0x7e13884e,
-/* 0x063f: i2c_start_out */
+/* 0x06f7: i2c_start_out */
 	0xf800005d,
-/* 0x0641: i2c_stop */
+/* 0x06f9: i2c_stop */
 	0x7e000300,
-	0x0300056a,
-	0x05847e00,
+	0x03000622,
+	0x063c7e00,
 	0x03e84e00,
 	0x00005d7e,
-	0x6a7e0103,
-	0x884e0005,
+	0x227e0103,
+	0x884e0006,
 	0x005d7e13,
 	0x7e010300,
-	0x4e000584,
+	0x4e00063c,
 	0x5d7e1388,
 	0x00f80000,
-/* 0x0670: i2c_bitw */
-	0x0005847e,
+/* 0x0728: i2c_bitw */
+	0x00063c7e,
 	0x7e03e84e,
 	0xbb00005d,
 	0x65b60076,
@@ -1346,44 +1392,44 @@ uint32_t nv108_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0005c67e,
+	0x00067e7e,
 	0xf40464b6,
 	0x884e1711,
 	0x005d7e13,
 	0x7e000300,
-	0x4e00056a,
+	0x4e000622,
 	0x5d7e1388,
-/* 0x06ae: i2c_bitw_out */
+/* 0x0766: i2c_bitw_out */
 	0x00f80000,
-/* 0x06b0: i2c_bitr */
-	0x847e0103,
-	0xe84e0005,
+/* 0x0768: i2c_bitr */
+	0x3c7e0103,
+	0xe84e0006,
 	0x005d7e03,
 	0x0076bb00,
 	0xf90465b6,
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
-	0xc67e50fc,
-	0x64b60005,
+	0x7e7e50fc,
+	0x64b60006,
 	0x1a11f404,
-	0x0005b27e,
-	0x6a7e0003,
-	0x884e0005,
+	0x00066a7e,
+	0x227e0003,
+	0x884e0006,
 	0x005d7e13,
 	0x013cf000,
-/* 0x06f3: i2c_bitr_done */
+/* 0x07ab: i2c_bitr_done */
 	0xf80131f4,
-/* 0x06f5: i2c_get_byte */
+/* 0x07ad: i2c_get_byte */
 	0x04000500,
-/* 0x06f9: i2c_get_byte_next */
+/* 0x07b1: i2c_get_byte_next */
 	0x0154b608,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x06b07e50,
+	0x07687e50,
 	0x0464b600,
 	0xfd2a11f4,
 	0x42b60553,
@@ -1394,11 +1440,11 @@ uint32_t nv108_pwr_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0x7e50fc04,
-	0xb6000670,
-/* 0x0742: i2c_get_byte_done */
+	0xb6000728,
+/* 0x07fa: i2c_get_byte_done */
 	0x00f80464,
-/* 0x0744: i2c_put_byte */
-/* 0x0746: i2c_put_byte_next */
+/* 0x07fc: i2c_put_byte */
+/* 0x07fe: i2c_put_byte_next */
 	0x42b60804,
 	0x3854ff01,
 	0xb60076bb,
@@ -1406,7 +1452,7 @@ uint32_t nv108_pwr_code[] = {
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x06707e50,
+	0x07287e50,
 	0x0464b600,
 	0xb03411f4,
 	0x1bf40046,
@@ -1415,21 +1461,21 @@ uint32_t nv108_pwr_code[] = {
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
-	0xb07e50fc,
-	0x64b60006,
+	0x687e50fc,
+	0x64b60007,
 	0x0f11f404,
 	0xb00076bb,
 	0x1bf40136,
 	0x0132f406,
-/* 0x079c: i2c_put_byte_done */
-/* 0x079e: i2c_addr */
+/* 0x0854: i2c_put_byte_done */
+/* 0x0856: i2c_addr */
 	0x76bb00f8,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0x7e50fc04,
-	0xb60005e9,
+	0xb60006a1,
 	0x11f40464,
 	0x2ec3e729,
 	0x0134b601,
@@ -1439,24 +1485,24 @@ uint32_t nv108_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0007447e,
-/* 0x07e3: i2c_addr_done */
+	0x0007fc7e,
+/* 0x089b: i2c_addr_done */
 	0xf80464b6,
-/* 0x07e5: i2c_acquire_addr */
+/* 0x089d: i2c_acquire_addr */
 	0xf8cec700,
 	0xb705e4b6,
 	0xf8d014e0,
-/* 0x07f1: i2c_acquire */
-	0x07e57e00,
+/* 0x08a9: i2c_acquire */
+	0x089d7e00,
 	0x00047e00,
 	0x03d9f000,
 	0x00002e7e,
-/* 0x0802: i2c_release */
-	0xe57e00f8,
-	0x047e0007,
+/* 0x08ba: i2c_release */
+	0x9d7e00f8,
+	0x047e0008,
 	0xdaf00000,
 	0x002e7e03,
-/* 0x0813: i2c_recv */
+/* 0x08cb: i2c_recv */
 	0xf400f800,
 	0xc1c70132,
 	0x0214b6f8,
@@ -1476,7 +1522,7 @@ uint32_t nv108_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0007f17e,
+	0x0008a97e,
 	0xfc0464b6,
 	0x00d6b0d0,
 	0x00b01bf5,
@@ -1486,7 +1532,7 @@ uint32_t nv108_pwr_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0x7e50fc04,
-	0xb600079e,
+	0xb6000856,
 	0x11f50464,
 	0xc5c700cc,
 	0x0076bbe0,
@@ -1494,7 +1540,7 @@ uint32_t nv108_pwr_code[] = {
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
-	0x447e50fc,
+	0xfc7e50fc,
 	0x64b60007,
 	0xa911f504,
 	0xbb010500,
@@ -1503,7 +1549,7 @@ uint32_t nv108_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x00079e7e,
+	0x0008567e,
 	0xf50464b6,
 	0xbb008711,
 	0x65b60076,
@@ -1511,7 +1557,7 @@ uint32_t nv108_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0006f57e,
+	0x0007ad7e,
 	0xf40464b6,
 	0x5bcb6711,
 	0x0076bbe0,
@@ -1519,37 +1565,37 @@ uint32_t nv108_pwr_code[] = {
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
-	0x417e50fc,
+	0xf97e50fc,
 	0x64b60006,
 	0xbd5bb204,
 	0x410ef474,
-/* 0x0918: i2c_recv_not_rd08 */
+/* 0x09d0: i2c_recv_not_rd08 */
 	0xf401d6b0,
 	0x00053b1b,
-	0x00079e7e,
+	0x0008567e,
 	0xc73211f4,
-	0x447ee0c5,
+	0xfc7ee0c5,
 	0x11f40007,
 	0x7e000528,
-	0xf400079e,
+	0xf4000856,
 	0xb5c71f11,
-	0x07447ee0,
+	0x07fc7ee0,
 	0x1511f400,
-	0x0006417e,
+	0x0006f97e,
 	0xc5c774bd,
 	0x091bf408,
 	0xf40232f4,
-/* 0x0956: i2c_recv_not_wr08 */
-/* 0x0956: i2c_recv_done */
+/* 0x0a0e: i2c_recv_not_wr08 */
+/* 0x0a0e: i2c_recv_done */
 	0xcec7030e,
-	0x08027ef8,
+	0x08ba7ef8,
 	0xfce0fc00,
 	0x0912f4d0,
 	0xc27e7cb2,
-/* 0x096a: i2c_recv_exit */
+/* 0x0a22: i2c_recv_exit */
 	0x00f80002,
-/* 0x096c: i2c_init */
-/* 0x096e: test_recv */
+/* 0x0a24: i2c_init */
+/* 0x0a26: test_recv */
 	0x584100f8,
 	0x0011cf04,
 	0x400110b6,
@@ -1558,27 +1604,27 @@ uint32_t nv108_pwr_code[] = {
 	0xf1d900e7,
 	0x7e134fe3,
 	0xf8000201,
-/* 0x098d: test_init */
+/* 0x0a45: test_init */
 	0x08004e00,
 	0x0002017e,
-/* 0x0996: idle_recv */
+/* 0x0a4e: idle_recv */
 	0x00f800f8,
-/* 0x0998: idle */
+/* 0x0a50: idle */
 	0x410031f4,
 	0x11cf0454,
 	0x0110b600,
 	0xf6045440,
 	0x04bd0001,
-/* 0x09ac: idle_loop */
+/* 0x0a64: idle_loop */
 	0x32f45801,
-/* 0x09b1: idle_proc */
-/* 0x09b1: idle_proc_exec */
+/* 0x0a69: idle_proc */
+/* 0x0a69: idle_proc_exec */
 	0xb210f902,
 	0x02cb7e1e,
 	0xf410fc00,
 	0x31f40911,
 	0xf00ef402,
-/* 0x09c4: idle_proc_next */
+/* 0x0a7c: idle_proc_next */
 	0xa65810b6,
 	0xe81bf41f,
 	0xf4e002f4,
@@ -1594,4 +1640,22 @@ uint32_t nv108_pwr_code[] = {
 	0x00000000,
 	0x00000000,
 	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
 };
diff --git a/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvc0.fuc.h b/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvc0.fuc.h
index c3b288a4ed6a..ca30fa4011b5 100644
--- a/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvc0.fuc.h
+++ b/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvc0.fuc.h
@@ -46,8 +46,8 @@ uint32_t nvc0_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x584d454d,
-	0x00000693,
-	0x00000685,
+	0x0000074b,
+	0x0000073d,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -68,8 +68,8 @@ uint32_t nvc0_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x46524550,
-	0x00000697,
-	0x00000695,
+	0x0000074f,
+	0x0000074d,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -90,8 +90,8 @@ uint32_t nvc0_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x5f433249,
-	0x00000ac7,
-	0x0000096a,
+	0x00000b7f,
+	0x00000a22,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -112,8 +112,8 @@ uint32_t nvc0_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x54534554,
-	0x00000af0,
-	0x00000ac9,
+	0x00000ba8,
+	0x00000b81,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -134,8 +134,8 @@ uint32_t nvc0_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x454c4449,
-	0x00000afc,
-	0x00000afa,
+	0x00000bb4,
+	0x00000bb2,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -233,19 +233,19 @@ uint32_t nvc0_pwr_data[] = {
 /* 0x037c: memx_func_next */
 	0x00000002,
 	0x00000000,
-	0x0000057e,
+	0x000005db,
 	0x00000003,
 	0x00000002,
-	0x000005ed,
+	0x000006a5,
 	0x00040004,
 	0x00000000,
-	0x00000609,
+	0x000006c1,
 	0x00010005,
 	0x00000000,
-	0x00000626,
+	0x000006de,
 	0x00010006,
 	0x00000000,
-	0x000005ab,
+	0x00000663,
 /* 0x03b8: memx_func_tail */
 /* 0x03b8: memx_ts_start */
 	0x00000000,
@@ -1236,55 +1236,101 @@ uint32_t nvc0_pwr_code[] = {
 	0x01d00604,
 	0xf804bd00,
 /* 0x0551: memx_func_enter */
-	0x0467f000,
-	0x07e007f1,
-	0xd00604b6,
-	0x04bd0006,
-/* 0x0560: memx_func_enter_wait */
-	0x07c067f1,
-	0xcf0664b6,
-	0x64f00066,
-	0xf30bf404,
-	0xb62c67f0,
-	0x66cf0664,
-	0xee068000,
-/* 0x057e: memx_func_leave */
-	0x67f000f8,
-	0x0664b62c,
-	0x800066cf,
-	0x67f0ef06,
-	0xe407f104,
+	0x2067f100,
+	0x5d77f116,
+	0xff73f1f5,
+	0x026eb9ff,
+	0xb90421f4,
+	0x87fd02d8,
+	0xf960f904,
+	0xfcd0fc80,
+	0x3f21f4e0,
+	0xfffe77f1,
+	0xffff73f1,
+	0xf4026eb9,
+	0xd8b90421,
+	0x0487fd02,
+	0x80f960f9,
+	0xe0fcd0fc,
+	0xf13f21f4,
+	0xb926f067,
+	0x21f4026e,
+	0x02d8b904,
+	0xf90487fd,
+	0xfc80f960,
+	0xf4e0fcd0,
+	0x67f03f21,
+	0xe007f104,
 	0x0604b607,
 	0xbd0006d0,
-/* 0x0599: memx_func_leave_wait */
+/* 0x05bd: memx_func_enter_wait */
 	0xc067f104,
 	0x0664b607,
 	0xf00066cf,
-	0x1bf40464,
-/* 0x05ab: memx_func_wait_vblank */
-	0x9800f8f3,
+	0x0bf40464,
+	0x2c67f0f3,
+	0xcf0664b6,
+	0x06800066,
+/* 0x05db: memx_func_leave */
+	0xf000f8ee,
+	0x64b62c67,
+	0x0066cf06,
+	0xf0ef0680,
+	0x07f10467,
+	0x04b607e4,
+	0x0006d006,
+/* 0x05f6: memx_func_leave_wait */
+	0x67f104bd,
+	0x64b607c0,
+	0x0066cf06,
+	0xf40464f0,
+	0x67f1f31b,
+	0x77f126f0,
+	0x73f00001,
+	0x026eb900,
+	0xb90421f4,
+	0x87fd02d8,
+	0xf960f905,
+	0xfcd0fc80,
+	0x3f21f4e0,
+	0x162067f1,
+	0xf4026eb9,
+	0xd8b90421,
+	0x0587fd02,
+	0x80f960f9,
+	0xe0fcd0fc,
+	0xf13f21f4,
+	0xf00aa277,
+	0x6eb90073,
+	0x0421f402,
+	0xfd02d8b9,
+	0x60f90587,
+	0xd0fc80f9,
+	0x21f4e0fc,
+/* 0x0663: memx_func_wait_vblank */
+	0x9800f83f,
 	0x66b00016,
 	0x130bf400,
 	0xf40166b0,
 	0x0ef4060b,
-/* 0x05bd: memx_func_wait_vblank_head1 */
+/* 0x0675: memx_func_wait_vblank_head1 */
 	0x2077f12e,
 	0x070ef400,
-/* 0x05c4: memx_func_wait_vblank_head0 */
+/* 0x067c: memx_func_wait_vblank_head0 */
 	0x000877f1,
-/* 0x05c8: memx_func_wait_vblank_0 */
+/* 0x0680: memx_func_wait_vblank_0 */
 	0x07c467f1,
 	0xcf0664b6,
 	0x67fd0066,
 	0xf31bf404,
-/* 0x05d8: memx_func_wait_vblank_1 */
+/* 0x0690: memx_func_wait_vblank_1 */
 	0x07c467f1,
 	0xcf0664b6,
 	0x67fd0066,
 	0xf30bf404,
-/* 0x05e8: memx_func_wait_vblank_fini */
+/* 0x06a0: memx_func_wait_vblank_fini */
 	0xf80410b6,
-/* 0x05ed: memx_func_wr32 */
+/* 0x06a5: memx_func_wr32 */
 	0x00169800,
 	0xb6011598,
 	0x60f90810,
@@ -1292,7 +1338,7 @@ uint32_t nvc0_pwr_code[] = {
 	0x21f4e0fc,
 	0x0242b63f,
 	0xf8e91bf4,
-/* 0x0609: memx_func_wait */
+/* 0x06c1: memx_func_wait */
 	0x2c87f000,
 	0xcf0684b6,
 	0x1e980088,
@@ -1300,14 +1346,14 @@ uint32_t nvc0_pwr_code[] = {
 	0x98021c98,
 	0x10b6031b,
 	0xa421f410,
-/* 0x0626: memx_func_delay */
+/* 0x06de: memx_func_delay */
 	0x1e9800f8,
 	0x0410b600,
 	0xf87f21f4,
-/* 0x0631: memx_exec */
+/* 0x06e9: memx_exec */
 	0xf9e0f900,
 	0x02c1b9d0,
-/* 0x063b: memx_exec_next */
+/* 0x06f3: memx_exec_next */
 	0x9802b2b9,
 	0x10b60013,
 	0xf034e704,
@@ -1323,151 +1369,151 @@ uint32_t nvc0_pwr_code[] = {
 	0xbbcf06b4,
 	0xfcd0fc00,
 	0x4221f5e0,
-/* 0x0677: memx_info */
+/* 0x072f: memx_info */
 	0xf100f803,
 	0xf103c0c7,
 	0xf50800b7,
 	0xf8034221,
-/* 0x0685: memx_recv */
+/* 0x073d: memx_recv */
 	0x01d6b000,
 	0xb0a90bf4,
 	0x0bf400d6,
-/* 0x0693: memx_init */
+/* 0x074b: memx_init */
 	0xf800f8e9,
-/* 0x0695: perf_recv */
-/* 0x0697: perf_init */
+/* 0x074d: perf_recv */
+/* 0x074f: perf_init */
 	0xf800f800,
-/* 0x0699: i2c_drive_scl */
+/* 0x0751: i2c_drive_scl */
 	0x0036b000,
 	0xf1110bf4,
 	0xb607e007,
 	0x01d00604,
 	0xf804bd00,
-/* 0x06ad: i2c_drive_scl_lo */
+/* 0x0765: i2c_drive_scl_lo */
 	0xe407f100,
 	0x0604b607,
 	0xbd0001d0,
-/* 0x06bb: i2c_drive_sda */
+/* 0x0773: i2c_drive_sda */
 	0xb000f804,
 	0x0bf40036,
 	0xe007f111,
 	0x0604b607,
 	0xbd0002d0,
-/* 0x06cf: i2c_drive_sda_lo */
+/* 0x0787: i2c_drive_sda_lo */
 	0xf100f804,
 	0xb607e407,
 	0x02d00604,
 	0xf804bd00,
-/* 0x06dd: i2c_sense_scl */
+/* 0x0795: i2c_sense_scl */
 	0x0132f400,
 	0x07c437f1,
 	0xcf0634b6,
 	0x31fd0033,
 	0x060bf404,
-/* 0x06f3: i2c_sense_scl_done */
+/* 0x07ab: i2c_sense_scl_done */
 	0xf80131f4,
-/* 0x06f5: i2c_sense_sda */
+/* 0x07ad: i2c_sense_sda */
 	0x0132f400,
 	0x07c437f1,
 	0xcf0634b6,
 	0x32fd0033,
 	0x060bf404,
-/* 0x070b: i2c_sense_sda_done */
+/* 0x07c3: i2c_sense_sda_done */
 	0xf80131f4,
-/* 0x070d: i2c_raise_scl */
+/* 0x07c5: i2c_raise_scl */
 	0xf140f900,
 	0xf0089847,
 	0x21f50137,
-/* 0x071a: i2c_raise_scl_wait */
-	0xe7f10699,
+/* 0x07d2: i2c_raise_scl_wait */
+	0xe7f10751,
 	0x21f403e8,
-	0xdd21f57f,
-	0x0901f406,
+	0x9521f57f,
+	0x0901f407,
 	0xf40142b6,
-/* 0x072e: i2c_raise_scl_done */
+/* 0x07e6: i2c_raise_scl_done */
 	0x40fcef1b,
-/* 0x0732: i2c_start */
+/* 0x07ea: i2c_start */
 	0x21f500f8,
-	0x11f406dd,
-	0xf521f50d,
-	0x0611f406,
-/* 0x0743: i2c_start_rep */
+	0x11f40795,
+	0xad21f50d,
+	0x0611f407,
+/* 0x07fb: i2c_start_rep */
 	0xf0300ef4,
 	0x21f50037,
-	0x37f00699,
-	0xbb21f501,
-	0x0076bb06,
+	0x37f00751,
+	0x7321f501,
+	0x0076bb07,
 	0xf90465b6,
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b6070d,
+	0x64b607c5,
 	0x1f11f404,
-/* 0x0770: i2c_start_send */
+/* 0x0828: i2c_start_send */
 	0xf50037f0,
-	0xf106bb21,
+	0xf1077321,
 	0xf41388e7,
 	0x37f07f21,
-	0x9921f500,
-	0x88e7f106,
+	0x5121f500,
+	0x88e7f107,
 	0x7f21f413,
-/* 0x078c: i2c_start_out */
-/* 0x078e: i2c_stop */
+/* 0x0844: i2c_start_out */
+/* 0x0846: i2c_stop */
 	0x37f000f8,
-	0x9921f500,
-	0x0037f006,
-	0x06bb21f5,
+	0x5121f500,
+	0x0037f007,
+	0x077321f5,
 	0x03e8e7f1,
 	0xf07f21f4,
 	0x21f50137,
-	0xe7f10699,
+	0xe7f10751,
 	0x21f41388,
 	0x0137f07f,
-	0x06bb21f5,
+	0x077321f5,
 	0x1388e7f1,
 	0xf87f21f4,
-/* 0x07c1: i2c_bitw */
-	0xbb21f500,
-	0xe8e7f106,
+/* 0x0879: i2c_bitw */
+	0x7321f500,
+	0xe8e7f107,
 	0x7f21f403,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x0d21f550,
+	0xc521f550,
 	0x0464b607,
 	0xf11811f4,
 	0xf41388e7,
 	0x37f07f21,
-	0x9921f500,
-	0x88e7f106,
+	0x5121f500,
+	0x88e7f107,
 	0x7f21f413,
-/* 0x0800: i2c_bitw_out */
-/* 0x0802: i2c_bitr */
+/* 0x08b8: i2c_bitw_out */
+/* 0x08ba: i2c_bitr */
 	0x37f000f8,
-	0xbb21f501,
-	0xe8e7f106,
+	0x7321f501,
+	0xe8e7f107,
 	0x7f21f403,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x0d21f550,
+	0xc521f550,
 	0x0464b607,
 	0xf51b11f4,
-	0xf006f521,
+	0xf007ad21,
 	0x21f50037,
-	0xe7f10699,
+	0xe7f10751,
 	0x21f41388,
 	0x013cf07f,
-/* 0x0847: i2c_bitr_done */
+/* 0x08ff: i2c_bitr_done */
 	0xf80131f4,
-/* 0x0849: i2c_get_byte */
+/* 0x0901: i2c_get_byte */
 	0x0057f000,
-/* 0x084f: i2c_get_byte_next */
+/* 0x0907: i2c_get_byte_next */
 	0xb60847f0,
 	0x76bb0154,
 	0x0465b600,
@@ -1475,7 +1521,7 @@ uint32_t nvc0_pwr_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb6080221,
+	0xb608ba21,
 	0x11f40464,
 	0x0553fd2b,
 	0xf40142b6,
@@ -1486,11 +1532,11 @@ uint32_t nvc0_pwr_code[] = {
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b607c1,
-/* 0x0899: i2c_get_byte_done */
-/* 0x089b: i2c_put_byte */
+	0x64b60879,
+/* 0x0951: i2c_get_byte_done */
+/* 0x0953: i2c_put_byte */
 	0xf000f804,
-/* 0x089e: i2c_put_byte_next */
+/* 0x0956: i2c_put_byte_next */
 	0x42b60847,
 	0x3854ff01,
 	0xb60076bb,
@@ -1498,8 +1544,8 @@ uint32_t nvc0_pwr_code[] = {
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0xc121f550,
-	0x0464b607,
+	0x7921f550,
+	0x0464b608,
 	0xb03411f4,
 	0x1bf40046,
 	0x0076bbd8,
@@ -1508,20 +1554,20 @@ uint32_t nvc0_pwr_code[] = {
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b60802,
+	0x64b608ba,
 	0x0f11f404,
 	0xb00076bb,
 	0x1bf40136,
 	0x0132f406,
-/* 0x08f4: i2c_put_byte_done */
-/* 0x08f6: i2c_addr */
+/* 0x09ac: i2c_put_byte_done */
+/* 0x09ae: i2c_addr */
 	0x76bb00f8,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb6073221,
+	0xb607ea21,
 	0x11f40464,
 	0x2ec3e729,
 	0x0134b601,
@@ -1531,24 +1577,24 @@ uint32_t nvc0_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x089b21f5,
-/* 0x093b: i2c_addr_done */
+	0x095321f5,
+/* 0x09f3: i2c_addr_done */
 	0xf80464b6,
-/* 0x093d: i2c_acquire_addr */
+/* 0x09f5: i2c_acquire_addr */
 	0xf8cec700,
 	0xb702e4b6,
 	0x980c10e0,
 	0x00f800ee,
-/* 0x094c: i2c_acquire */
-	0x093d21f5,
+/* 0x0a04: i2c_acquire */
+	0x09f521f5,
 	0xf00421f4,
 	0x21f403d9,
-/* 0x095b: i2c_release */
+/* 0x0a13: i2c_release */
 	0xf500f83f,
-	0xf4093d21,
+	0xf409f521,
 	0xdaf00421,
 	0x3f21f403,
-/* 0x096a: i2c_recv */
+/* 0x0a22: i2c_recv */
 	0x32f400f8,
 	0xf8c1c701,
 	0xb00214b6,
@@ -1567,8 +1613,8 @@ uint32_t nvc0_pwr_code[] = {
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x4c21f550,
-	0x0464b609,
+	0x0421f550,
+	0x0464b60a,
 	0xd6b0d0fc,
 	0xb31bf500,
 	0x0057f000,
@@ -1577,8 +1623,8 @@ uint32_t nvc0_pwr_code[] = {
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0xf621f550,
-	0x0464b608,
+	0xae21f550,
+	0x0464b609,
 	0x00d011f5,
 	0xbbe0c5c7,
 	0x65b60076,
@@ -1586,7 +1632,7 @@ uint32_t nvc0_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x089b21f5,
+	0x095321f5,
 	0xf50464b6,
 	0xf000ad11,
 	0x76bb0157,
@@ -1595,7 +1641,7 @@ uint32_t nvc0_pwr_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb608f621,
+	0xb609ae21,
 	0x11f50464,
 	0x76bb008a,
 	0x0465b600,
@@ -1603,7 +1649,7 @@ uint32_t nvc0_pwr_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb6084921,
+	0xb6090121,
 	0x11f40464,
 	0xe05bcb6a,
 	0xb60076bb,
@@ -1611,38 +1657,38 @@ uint32_t nvc0_pwr_code[] = {
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x8e21f550,
-	0x0464b607,
+	0x4621f550,
+	0x0464b608,
 	0xbd025bb9,
 	0x430ef474,
-/* 0x0a70: i2c_recv_not_rd08 */
+/* 0x0b28: i2c_recv_not_rd08 */
 	0xf401d6b0,
 	0x57f03d1b,
-	0xf621f500,
-	0x3311f408,
+	0xae21f500,
+	0x3311f409,
 	0xf5e0c5c7,
-	0xf4089b21,
+	0xf4095321,
 	0x57f02911,
-	0xf621f500,
-	0x1f11f408,
+	0xae21f500,
+	0x1f11f409,
 	0xf5e0b5c7,
-	0xf4089b21,
+	0xf4095321,
 	0x21f51511,
-	0x74bd078e,
+	0x74bd0846,
 	0xf408c5c7,
 	0x32f4091b,
 	0x030ef402,
-/* 0x0ab0: i2c_recv_not_wr08 */
-/* 0x0ab0: i2c_recv_done */
+/* 0x0b68: i2c_recv_not_wr08 */
+/* 0x0b68: i2c_recv_done */
 	0xf5f8cec7,
-	0xfc095b21,
+	0xfc0a1321,
 	0xf4d0fce0,
 	0x7cb90a12,
 	0x4221f502,
-/* 0x0ac5: i2c_recv_exit */
-/* 0x0ac7: i2c_init */
+/* 0x0b7d: i2c_recv_exit */
+/* 0x0b7f: i2c_init */
 	0xf800f803,
-/* 0x0ac9: test_recv */
+/* 0x0b81: test_recv */
 	0xd817f100,
 	0x0614b605,
 	0xb60011cf,
@@ -1653,12 +1699,12 @@ uint32_t nvc0_pwr_code[] = {
 	0xe3f1d900,
 	0x21f5134f,
 	0x00f80262,
-/* 0x0af0: test_init */
+/* 0x0ba8: test_init */
 	0x0800e7f1,
 	0x026221f5,
-/* 0x0afa: idle_recv */
+/* 0x0bb2: idle_recv */
 	0x00f800f8,
-/* 0x0afc: idle */
+/* 0x0bb4: idle */
 	0xf10031f4,
 	0xb605d417,
 	0x11cf0614,
@@ -1666,66 +1712,20 @@ uint32_t nvc0_pwr_code[] = {
 	0x05d407f1,
 	0xd00604b6,
 	0x04bd0001,
-/* 0x0b18: idle_loop */
+/* 0x0bd0: idle_loop */
 	0xf45817f0,
-/* 0x0b1e: idle_proc */
-/* 0x0b1e: idle_proc_exec */
+/* 0x0bd6: idle_proc */
+/* 0x0bd6: idle_proc_exec */
 	0x10f90232,
 	0xf5021eb9,
 	0xfc034b21,
 	0x0911f410,
 	0xf40231f4,
-/* 0x0b32: idle_proc_next */
+/* 0x0bea: 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,
 };
diff --git a/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvd0.fuc.h b/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvd0.fuc.h
index d4810fc3e90f..12d86f72ad10 100644
--- a/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvd0.fuc.h
+++ b/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvd0.fuc.h
@@ -46,8 +46,8 @@ uint32_t nvd0_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x584d454d,
-	0x000005c0,
-	0x000005b2,
+	0x00000678,
+	0x0000066a,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -68,8 +68,8 @@ uint32_t nvd0_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x46524550,
-	0x000005c4,
-	0x000005c2,
+	0x0000067c,
+	0x0000067a,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -90,8 +90,8 @@ uint32_t nvd0_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x5f433249,
-	0x000009df,
-	0x00000882,
+	0x00000a97,
+	0x0000093a,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -112,8 +112,8 @@ uint32_t nvd0_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x54534554,
-	0x00000a02,
-	0x000009e1,
+	0x00000aba,
+	0x00000a99,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -134,8 +134,8 @@ uint32_t nvd0_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x454c4449,
-	0x00000a0e,
-	0x00000a0c,
+	0x00000ac6,
+	0x00000ac4,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -233,19 +233,19 @@ uint32_t nvd0_pwr_data[] = {
 /* 0x037c: memx_func_next */
 	0x00000002,
 	0x00000000,
-	0x000004f7,
+	0x00000554,
 	0x00000003,
 	0x00000002,
-	0x00000520,
+	0x000005d8,
 	0x00040004,
 	0x00000000,
-	0x0000053c,
+	0x000005f4,
 	0x00010005,
 	0x00000000,
-	0x00000556,
+	0x0000060e,
 	0x00010006,
 	0x00000000,
-	0x0000051b,
+	0x000005d3,
 /* 0x03b8: memx_func_tail */
 /* 0x03b8: memx_ts_start */
 	0x00000000,
@@ -1203,31 +1203,77 @@ uint32_t nvd0_pwr_code[] = {
 	0x04c407f1,
 	0xbd0001d0,
 /* 0x04d3: memx_func_enter */
-	0xf000f804,
-	0x07f10467,
-	0x06d007e0,
-/* 0x04df: memx_func_enter_wait */
-	0xf104bd00,
-	0xcf07c067,
-	0x64f00066,
-	0xf60bf404,
-	0xcf2c67f0,
-	0x06800066,
-/* 0x04f7: memx_func_leave */
-	0xf000f8ee,
-	0x66cf2c67,
-	0xef068000,
+	0xf100f804,
+	0xf1162067,
+	0xf1f55d77,
+	0xb9ffff73,
+	0x21f4026e,
+	0x02d8b904,
+	0xf90487fd,
+	0xfc80f960,
+	0xf4e0fcd0,
+	0x77f13321,
+	0x73f1fffe,
+	0x6eb9ffff,
+	0x0421f402,
+	0xfd02d8b9,
+	0x60f90487,
+	0xd0fc80f9,
+	0x21f4e0fc,
+	0xf067f133,
+	0x026eb926,
+	0xb90421f4,
+	0x87fd02d8,
+	0xf960f904,
+	0xfcd0fc80,
+	0x3321f4e0,
 	0xf10467f0,
-	0xd007e407,
+	0xd007e007,
 	0x04bd0006,
-/* 0x050c: memx_func_leave_wait */
+/* 0x053c: memx_func_enter_wait */
 	0x07c067f1,
 	0xf00066cf,
-	0x1bf40464,
-/* 0x051b: memx_func_wait_vblank */
-	0xb600f8f6,
+	0x0bf40464,
+	0x2c67f0f6,
+	0x800066cf,
+	0x00f8ee06,
+/* 0x0554: memx_func_leave */
+	0xcf2c67f0,
+	0x06800066,
+	0x0467f0ef,
+	0x07e407f1,
+	0xbd0006d0,
+/* 0x0569: memx_func_leave_wait */
+	0xc067f104,
+	0x0066cf07,
+	0xf40464f0,
+	0x67f1f61b,
+	0x77f126f0,
+	0x73f00001,
+	0x026eb900,
+	0xb90421f4,
+	0x87fd02d8,
+	0xf960f905,
+	0xfcd0fc80,
+	0x3321f4e0,
+	0x162067f1,
+	0xf4026eb9,
+	0xd8b90421,
+	0x0587fd02,
+	0x80f960f9,
+	0xe0fcd0fc,
+	0xf13321f4,
+	0xf00aa277,
+	0x6eb90073,
+	0x0421f402,
+	0xfd02d8b9,
+	0x60f90587,
+	0xd0fc80f9,
+	0x21f4e0fc,
+/* 0x05d3: memx_func_wait_vblank */
+	0xb600f833,
 	0x00f80410,
-/* 0x0520: memx_func_wr32 */
+/* 0x05d8: memx_func_wr32 */
 	0x98001698,
 	0x10b60115,
 	0xf960f908,
@@ -1235,21 +1281,21 @@ uint32_t nvd0_pwr_code[] = {
 	0x3321f4e0,
 	0xf40242b6,
 	0x00f8e91b,
-/* 0x053c: memx_func_wait */
+/* 0x05f4: memx_func_wait */
 	0xcf2c87f0,
 	0x1e980088,
 	0x011d9800,
 	0x98021c98,
 	0x10b6031b,
 	0x8621f410,
-/* 0x0556: memx_func_delay */
+/* 0x060e: memx_func_delay */
 	0x1e9800f8,
 	0x0410b600,
 	0xf86721f4,
-/* 0x0561: memx_exec */
+/* 0x0619: memx_exec */
 	0xf9e0f900,
 	0x02c1b9d0,
-/* 0x056b: memx_exec_next */
+/* 0x0623: memx_exec_next */
 	0x9802b2b9,
 	0x10b60013,
 	0xf034e704,
@@ -1265,107 +1311,107 @@ uint32_t nvd0_pwr_code[] = {
 	0xd0fc00bb,
 	0x21f5e0fc,
 	0x00f802f1,
-/* 0x05a4: memx_info */
+/* 0x065c: memx_info */
 	0x03c0c7f1,
 	0x0800b7f1,
 	0x02f121f5,
-/* 0x05b2: memx_recv */
+/* 0x066a: memx_recv */
 	0xd6b000f8,
 	0xac0bf401,
 	0xf400d6b0,
 	0x00f8e90b,
-/* 0x05c0: memx_init */
-/* 0x05c2: perf_recv */
+/* 0x0678: memx_init */
+/* 0x067a: perf_recv */
 	0x00f800f8,
-/* 0x05c4: perf_init */
-/* 0x05c6: i2c_drive_scl */
+/* 0x067c: perf_init */
+/* 0x067e: i2c_drive_scl */
 	0x36b000f8,
 	0x0e0bf400,
 	0x07e007f1,
 	0xbd0001d0,
-/* 0x05d7: i2c_drive_scl_lo */
+/* 0x068f: i2c_drive_scl_lo */
 	0xf100f804,
 	0xd007e407,
 	0x04bd0001,
-/* 0x05e2: i2c_drive_sda */
+/* 0x069a: i2c_drive_sda */
 	0x36b000f8,
 	0x0e0bf400,
 	0x07e007f1,
 	0xbd0002d0,
-/* 0x05f3: i2c_drive_sda_lo */
+/* 0x06ab: i2c_drive_sda_lo */
 	0xf100f804,
 	0xd007e407,
 	0x04bd0002,
-/* 0x05fe: i2c_sense_scl */
+/* 0x06b6: i2c_sense_scl */
 	0x32f400f8,
 	0xc437f101,
 	0x0033cf07,
 	0xf40431fd,
 	0x31f4060b,
-/* 0x0611: i2c_sense_scl_done */
-/* 0x0613: i2c_sense_sda */
+/* 0x06c9: i2c_sense_scl_done */
+/* 0x06cb: i2c_sense_sda */
 	0xf400f801,
 	0x37f10132,
 	0x33cf07c4,
 	0x0432fd00,
 	0xf4060bf4,
-/* 0x0626: i2c_sense_sda_done */
+/* 0x06de: i2c_sense_sda_done */
 	0x00f80131,
-/* 0x0628: i2c_raise_scl */
+/* 0x06e0: i2c_raise_scl */
 	0x47f140f9,
 	0x37f00898,
-	0xc621f501,
-/* 0x0635: i2c_raise_scl_wait */
-	0xe8e7f105,
+	0x7e21f501,
+/* 0x06ed: i2c_raise_scl_wait */
+	0xe8e7f106,
 	0x6721f403,
-	0x05fe21f5,
+	0x06b621f5,
 	0xb60901f4,
 	0x1bf40142,
-/* 0x0649: i2c_raise_scl_done */
+/* 0x0701: i2c_raise_scl_done */
 	0xf840fcef,
-/* 0x064d: i2c_start */
-	0xfe21f500,
-	0x0d11f405,
-	0x061321f5,
+/* 0x0705: i2c_start */
+	0xb621f500,
+	0x0d11f406,
+	0x06cb21f5,
 	0xf40611f4,
-/* 0x065e: i2c_start_rep */
+/* 0x0716: i2c_start_rep */
 	0x37f0300e,
-	0xc621f500,
-	0x0137f005,
-	0x05e221f5,
+	0x7e21f500,
+	0x0137f006,
+	0x069a21f5,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x2821f550,
+	0xe021f550,
 	0x0464b606,
-/* 0x068b: i2c_start_send */
+/* 0x0743: i2c_start_send */
 	0xf01f11f4,
 	0x21f50037,
-	0xe7f105e2,
+	0xe7f1069a,
 	0x21f41388,
 	0x0037f067,
-	0x05c621f5,
+	0x067e21f5,
 	0x1388e7f1,
-/* 0x06a7: i2c_start_out */
+/* 0x075f: i2c_start_out */
 	0xf86721f4,
-/* 0x06a9: i2c_stop */
+/* 0x0761: i2c_stop */
 	0x0037f000,
-	0x05c621f5,
+	0x067e21f5,
 	0xf50037f0,
-	0xf105e221,
+	0xf1069a21,
 	0xf403e8e7,
 	0x37f06721,
-	0xc621f501,
-	0x88e7f105,
+	0x7e21f501,
+	0x88e7f106,
 	0x6721f413,
 	0xf50137f0,
-	0xf105e221,
+	0xf1069a21,
 	0xf41388e7,
 	0x00f86721,
-/* 0x06dc: i2c_bitw */
-	0x05e221f5,
+/* 0x0794: i2c_bitw */
+	0x069a21f5,
 	0x03e8e7f1,
 	0xbb6721f4,
 	0x65b60076,
@@ -1373,18 +1419,18 @@ uint32_t nvd0_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x062821f5,
+	0x06e021f5,
 	0xf40464b6,
 	0xe7f11811,
 	0x21f41388,
 	0x0037f067,
-	0x05c621f5,
+	0x067e21f5,
 	0x1388e7f1,
-/* 0x071b: i2c_bitw_out */
+/* 0x07d3: i2c_bitw_out */
 	0xf86721f4,
-/* 0x071d: i2c_bitr */
+/* 0x07d5: i2c_bitr */
 	0x0137f000,
-	0x05e221f5,
+	0x069a21f5,
 	0x03e8e7f1,
 	0xbb6721f4,
 	0x65b60076,
@@ -1392,19 +1438,19 @@ uint32_t nvd0_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x062821f5,
+	0x06e021f5,
 	0xf40464b6,
 	0x21f51b11,
-	0x37f00613,
-	0xc621f500,
-	0x88e7f105,
+	0x37f006cb,
+	0x7e21f500,
+	0x88e7f106,
 	0x6721f413,
 	0xf4013cf0,
-/* 0x0762: i2c_bitr_done */
+/* 0x081a: i2c_bitr_done */
 	0x00f80131,
-/* 0x0764: i2c_get_byte */
+/* 0x081c: i2c_get_byte */
 	0xf00057f0,
-/* 0x076a: i2c_get_byte_next */
+/* 0x0822: i2c_get_byte_next */
 	0x54b60847,
 	0x0076bb01,
 	0xf90465b6,
@@ -1412,7 +1458,7 @@ uint32_t nvd0_pwr_code[] = {
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b6071d,
+	0x64b607d5,
 	0x2b11f404,
 	0xb60553fd,
 	0x1bf40142,
@@ -1422,12 +1468,12 @@ uint32_t nvd0_pwr_code[] = {
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0xdc21f550,
-	0x0464b606,
-/* 0x07b4: i2c_get_byte_done */
-/* 0x07b6: i2c_put_byte */
+	0x9421f550,
+	0x0464b607,
+/* 0x086c: i2c_get_byte_done */
+/* 0x086e: i2c_put_byte */
 	0x47f000f8,
-/* 0x07b9: i2c_put_byte_next */
+/* 0x0871: i2c_put_byte_next */
 	0x0142b608,
 	0xbb3854ff,
 	0x65b60076,
@@ -1435,7 +1481,7 @@ uint32_t nvd0_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x06dc21f5,
+	0x079421f5,
 	0xf40464b6,
 	0x46b03411,
 	0xd81bf400,
@@ -1444,21 +1490,21 @@ uint32_t nvd0_pwr_code[] = {
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x1d21f550,
+	0xd521f550,
 	0x0464b607,
 	0xbb0f11f4,
 	0x36b00076,
 	0x061bf401,
-/* 0x080f: i2c_put_byte_done */
+/* 0x08c7: i2c_put_byte_done */
 	0xf80132f4,
-/* 0x0811: i2c_addr */
+/* 0x08c9: i2c_addr */
 	0x0076bb00,
 	0xf90465b6,
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b6064d,
+	0x64b60705,
 	0x2911f404,
 	0x012ec3e7,
 	0xfd0134b6,
@@ -1468,23 +1514,23 @@ uint32_t nvd0_pwr_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb607b621,
-/* 0x0856: i2c_addr_done */
+	0xb6086e21,
+/* 0x090e: i2c_addr_done */
 	0x00f80464,
-/* 0x0858: i2c_acquire_addr */
+/* 0x0910: i2c_acquire_addr */
 	0xb6f8cec7,
 	0xe0b705e4,
 	0x00f8d014,
-/* 0x0864: i2c_acquire */
-	0x085821f5,
+/* 0x091c: i2c_acquire */
+	0x091021f5,
 	0xf00421f4,
 	0x21f403d9,
-/* 0x0873: i2c_release */
+/* 0x092b: i2c_release */
 	0xf500f833,
-	0xf4085821,
+	0xf4091021,
 	0xdaf00421,
 	0x3321f403,
-/* 0x0882: i2c_recv */
+/* 0x093a: i2c_recv */
 	0x32f400f8,
 	0xf8c1c701,
 	0xb00214b6,
@@ -1503,8 +1549,8 @@ uint32_t nvd0_pwr_code[] = {
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x6421f550,
-	0x0464b608,
+	0x1c21f550,
+	0x0464b609,
 	0xd6b0d0fc,
 	0xb31bf500,
 	0x0057f000,
@@ -1513,7 +1559,7 @@ uint32_t nvd0_pwr_code[] = {
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x1121f550,
+	0xc921f550,
 	0x0464b608,
 	0x00d011f5,
 	0xbbe0c5c7,
@@ -1522,7 +1568,7 @@ uint32_t nvd0_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x07b621f5,
+	0x086e21f5,
 	0xf50464b6,
 	0xf000ad11,
 	0x76bb0157,
@@ -1531,7 +1577,7 @@ uint32_t nvd0_pwr_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb6081121,
+	0xb608c921,
 	0x11f50464,
 	0x76bb008a,
 	0x0465b600,
@@ -1539,7 +1585,7 @@ uint32_t nvd0_pwr_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb6076421,
+	0xb6081c21,
 	0x11f40464,
 	0xe05bcb6a,
 	0xb60076bb,
@@ -1547,38 +1593,38 @@ uint32_t nvd0_pwr_code[] = {
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0xa921f550,
-	0x0464b606,
+	0x6121f550,
+	0x0464b607,
 	0xbd025bb9,
 	0x430ef474,
-/* 0x0988: i2c_recv_not_rd08 */
+/* 0x0a40: i2c_recv_not_rd08 */
 	0xf401d6b0,
 	0x57f03d1b,
-	0x1121f500,
+	0xc921f500,
 	0x3311f408,
 	0xf5e0c5c7,
-	0xf407b621,
+	0xf4086e21,
 	0x57f02911,
-	0x1121f500,
+	0xc921f500,
 	0x1f11f408,
 	0xf5e0b5c7,
-	0xf407b621,
+	0xf4086e21,
 	0x21f51511,
-	0x74bd06a9,
+	0x74bd0761,
 	0xf408c5c7,
 	0x32f4091b,
 	0x030ef402,
-/* 0x09c8: i2c_recv_not_wr08 */
-/* 0x09c8: i2c_recv_done */
+/* 0x0a80: i2c_recv_not_wr08 */
+/* 0x0a80: i2c_recv_done */
 	0xf5f8cec7,
-	0xfc087321,
+	0xfc092b21,
 	0xf4d0fce0,
 	0x7cb90a12,
 	0xf121f502,
-/* 0x09dd: i2c_recv_exit */
-/* 0x09df: i2c_init */
+/* 0x0a95: i2c_recv_exit */
+/* 0x0a97: i2c_init */
 	0xf800f802,
-/* 0x09e1: test_recv */
+/* 0x0a99: test_recv */
 	0xd817f100,
 	0x0011cf05,
 	0xf10110b6,
@@ -1587,28 +1633,28 @@ uint32_t nvd0_pwr_code[] = {
 	0xd900e7f1,
 	0x134fe3f1,
 	0x022321f5,
-/* 0x0a02: test_init */
+/* 0x0aba: test_init */
 	0xe7f100f8,
 	0x21f50800,
 	0x00f80223,
-/* 0x0a0c: idle_recv */
-/* 0x0a0e: idle */
+/* 0x0ac4: idle_recv */
+/* 0x0ac6: idle */
 	0x31f400f8,
 	0xd417f100,
 	0x0011cf05,
 	0xf10110b6,
 	0xd005d407,
 	0x04bd0001,
-/* 0x0a24: idle_loop */
+/* 0x0adc: idle_loop */
 	0xf45817f0,
-/* 0x0a2a: idle_proc */
-/* 0x0a2a: idle_proc_exec */
+/* 0x0ae2: idle_proc */
+/* 0x0ae2: idle_proc_exec */
 	0x10f90232,
 	0xf5021eb9,
 	0xfc02fa21,
 	0x0911f410,
 	0xf40231f4,
-/* 0x0a3e: idle_proc_next */
+/* 0x0af6: idle_proc_next */
 	0x10b6ef0e,
 	0x061fb858,
 	0xf4e61bf4,
@@ -1658,4 +1704,22 @@ uint32_t nvd0_pwr_code[] = {
 	0x00000000,
 	0x00000000,
 	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
+	0x00000000,
 };