瀏覽代碼

drm/nouveau/pwr/fuc: make $r1-$r10 registers callee-saved in kernel.fuc

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Martin Peres 11 年之前
父節點
當前提交
4417be553c

+ 13 - 0
drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/kernel.fuc

@@ -98,12 +98,16 @@ wr32:
 // $r14 - ns
 // $r0  - zero
 nsec:
+	push $r9
+	push $r8
 	nv_iord($r8, NV_PPWR_TIMER_LOW)
 	nsec_loop:
 		nv_iord($r9, NV_PPWR_TIMER_LOW)
 		sub b32 $r9 $r8
 		cmp b32 $r9 $r14
 		bra l #nsec_loop
+	pop $r8
+	pop $r9
 	ret
 
 // busy-wait for a period of time
@@ -115,6 +119,8 @@ nsec:
 // $r11 - timeout (ns)
 // $r0  - zero
 wait:
+	push $r9
+	push $r8
 	nv_iord($r8, NV_PPWR_TIMER_LOW)
 	wait_loop:
 		nv_rd32($r10, $r14)
@@ -126,6 +132,8 @@ wait:
 		cmp b32 $r9 $r11
 		bra l #wait_loop
 	wait_done:
+	pop $r8
+	pop $r9
 	ret
 
 // $r15 - current (kern)
@@ -460,6 +468,9 @@ send:
 // $r14 - process
 // $r0  - zero
 recv:
+	push $r9
+	push $r8
+
 	ld b32 $r8 D[$r14 + #proc_qget]
 	ld b32 $r9 D[$r14 + #proc_qput]
 	bclr $flags $p1
@@ -492,6 +503,8 @@ recv:
 		bset $flags $p1
 		pop $r15
 	recv_done:
+	pop $r8
+	pop $r9
 	ret
 
 init:

+ 185 - 185
drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nv108.fuc.h

@@ -24,8 +24,8 @@ uint32_t nv108_pwr_data[] = {
 	0x00000000,
 /* 0x0058: proc_list_head */
 	0x54534f48,
-	0x0000043b,
-	0x000003ec,
+	0x00000453,
+	0x00000404,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -46,8 +46,8 @@ uint32_t nv108_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x584d454d,
-	0x00000526,
-	0x00000518,
+	0x0000053e,
+	0x00000530,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -68,8 +68,8 @@ uint32_t nv108_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x46524550,
-	0x0000052a,
-	0x00000528,
+	0x00000542,
+	0x00000540,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -90,8 +90,8 @@ uint32_t nv108_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x5f433249,
-	0x0000092e,
-	0x000007d5,
+	0x00000946,
+	0x000007ed,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -112,8 +112,8 @@ uint32_t nv108_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x54534554,
-	0x0000094f,
-	0x00000930,
+	0x00000967,
+	0x00000948,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -134,8 +134,8 @@ uint32_t nv108_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x454c4449,
-	0x0000095a,
-	0x00000958,
+	0x00000972,
+	0x00000970,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -229,20 +229,20 @@ uint32_t nv108_pwr_data[] = {
 /* 0x0370: memx_func_head */
 	0x00010000,
 	0x00000000,
-	0x0000046b,
+	0x00000483,
 /* 0x037c: memx_func_next */
 	0x00000001,
 	0x00000000,
-	0x00000489,
+	0x000004a1,
 	0x00000002,
 	0x00000002,
-	0x000004a1,
+	0x000004b9,
 	0x00040003,
 	0x00000000,
-	0x000004be,
+	0x000004d6,
 	0x00010004,
 	0x00000000,
-	0x000004d8,
+	0x000004f0,
 /* 0x03ac: memx_func_tail */
 /* 0x03ac: memx_data_head */
 	0x00000000,
@@ -784,7 +784,7 @@ uint32_t nv108_pwr_data[] = {
 };
 
 uint32_t nv108_pwr_code[] = {
-	0x03040ef5,
+	0x031c0ef5,
 /* 0x0004: rd32 */
 	0xf607a040,
 	0x04bd000e,
@@ -812,15 +812,18 @@ uint32_t nv108_pwr_code[] = {
 	0x7000d4f1,
 	0xf8f61bf4,
 /* 0x005d: nsec */
-	0xcf2c0800,
-/* 0x0062: nsec_loop */
+	0xf990f900,
+	0xcf2c0880,
+/* 0x0066: nsec_loop */
 	0x2c090088,
 	0xbb0099cf,
 	0x9ea60298,
-	0xf8f61ef4,
-/* 0x0071: wait */
-	0xcf2c0800,
-/* 0x0076: wait_loop */
+	0xfcf61ef4,
+	0xf890fc80,
+/* 0x0079: wait */
+	0xf990f900,
+	0xcf2c0880,
+/* 0x0082: wait_loop */
 	0xeeb20088,
 	0x0000047e,
 	0xadfddab2,
@@ -828,28 +831,29 @@ uint32_t nv108_pwr_code[] = {
 	0x2c09100b,
 	0xbb0099cf,
 	0x9ba60298,
-/* 0x0093: wait_done */
-	0xf8e61ef4,
-/* 0x0095: intr_watchdog */
+/* 0x009f: wait_done */
+	0xfce61ef4,
+	0xf890fc80,
+/* 0x00a5: intr_watchdog */
 	0x03e99800,
 	0xf40096b0,
 	0x0a98280b,
 	0x029abb9a,
 	0x0d0e1cf4,
-	0x02517e01,
+	0x02617e01,
 	0xf494bd00,
-/* 0x00b2: intr_watchdog_next_time */
+/* 0x00c2: intr_watchdog_next_time */
 	0x0a98140e,
 	0x00a6b09b,
 	0xa6080bf4,
 	0x061cf49a,
-/* 0x00c0: intr_watchdog_next_time_set */
-/* 0x00c3: intr_watchdog_next_proc */
+/* 0x00d0: intr_watchdog_next_time_set */
+/* 0x00d3: intr_watchdog_next_proc */
 	0xb59b09b5,
 	0xe0b603e9,
 	0x68e6b158,
 	0xc81bf402,
-/* 0x00d2: intr */
+/* 0x00e2: intr */
 	0x00f900f8,
 	0x80f904bd,
 	0xa0f990f9,
@@ -865,13 +869,13 @@ uint32_t nv108_pwr_code[] = {
 	0xc40088cf,
 	0x0bf40289,
 	0x9b00b51f,
-	0x957e580e,
+	0xa57e580e,
 	0x09980000,
 	0x0096b09b,
 	0x000d0bf4,
 	0x0009f634,
 	0x09b504bd,
-/* 0x0125: intr_skip_watchdog */
+/* 0x0135: intr_skip_watchdog */
 	0x0089e49a,
 	0x360bf408,
 	0xcf068849,
@@ -881,20 +885,20 @@ uint32_t nv108_pwr_code[] = {
 	0xc0f900cc,
 	0xf14f484e,
 	0x0d5453e3,
-	0x02b27e00,
+	0x02c27e00,
 	0x40c0fc00,
 	0x0cf604c0,
-/* 0x0157: intr_subintr_skip_fifo */
+/* 0x0167: intr_subintr_skip_fifo */
 	0x4004bd00,
 	0x09f60688,
-/* 0x015f: intr_skip_subintr */
+/* 0x016f: intr_skip_subintr */
 	0xc404bd00,
 	0x0bf42089,
 	0xbfa4f107,
-/* 0x0169: intr_skip_pause */
+/* 0x0179: intr_skip_pause */
 	0x4089c4ff,
 	0xf1070bf4,
-/* 0x0173: intr_skip_user0 */
+/* 0x0183: intr_skip_user0 */
 	0x00ffbfa4,
 	0x0008f604,
 	0x80fc04bd,
@@ -904,35 +908,35 @@ uint32_t nv108_pwr_code[] = {
 	0xfca0fcb0,
 	0xfc80fc90,
 	0x0032f400,
-/* 0x0196: ticks_from_ns */
+/* 0x01a6: ticks_from_ns */
 	0xc0f901f8,
 	0xd7f1b0f9,
 	0xd3f00144,
-	0x5f21f500,
+	0x7721f500,
 	0xe8ccec03,
 	0x00b4b003,
 	0xec120bf4,
 	0xf103e8ee,
 	0xf00144d7,
 	0x21f500d3,
-/* 0x01be: ticks_from_ns_quit */
-	0xceb2035f,
+/* 0x01ce: ticks_from_ns_quit */
+	0xceb20377,
 	0xc0fcb0fc,
-/* 0x01c6: ticks_from_us */
+/* 0x01d6: ticks_from_us */
 	0xc0f900f8,
 	0xd7f1b0f9,
 	0xd3f00144,
-	0x5f21f500,
+	0x7721f500,
 	0xb0ceb203,
 	0x0bf400b4,
-/* 0x01df: ticks_from_us_quit */
+/* 0x01ef: ticks_from_us_quit */
 	0xfce4bd05,
 	0xf8c0fcb0,
-/* 0x01e5: ticks_to_us */
+/* 0x01f5: ticks_to_us */
 	0x44d7f100,
 	0x00d3f001,
 	0xf8ecedff,
-/* 0x01f1: timer */
+/* 0x0201: timer */
 	0xf990f900,
 	0x1032f480,
 	0xb003f898,
@@ -950,17 +954,17 @@ uint32_t nv108_pwr_code[] = {
 	0xa60088cf,
 	0x080bf4e0,
 	0x1cf4e8a6,
-/* 0x0235: timer_reset */
+/* 0x0245: timer_reset */
 	0xf634000d,
 	0x04bd000e,
-/* 0x023f: timer_enable */
+/* 0x024f: timer_enable */
 	0x089a0eb5,
 	0xf6380001,
 	0x04bd0008,
-/* 0x0248: timer_done */
+/* 0x0258: timer_done */
 	0xfc1031f4,
 	0xf890fc80,
-/* 0x0251: send_proc */
+/* 0x0261: send_proc */
 	0xf980f900,
 	0x05e89890,
 	0xf004e998,
@@ -975,25 +979,26 @@ uint32_t nv108_pwr_code[] = {
 	0x90b6038b,
 	0x0794f001,
 	0xf404e9b5,
-/* 0x028a: send_done */
+/* 0x029a: send_done */
 	0x90fc0231,
 	0x00f880fc,
-/* 0x0290: find */
+/* 0x02a0: find */
 	0x580880f9,
-/* 0x0297: find_loop */
+/* 0x02a7: find_loop */
 	0x980131f4,
 	0xaea6008a,
 	0xb6100bf4,
 	0x86b15880,
 	0x1bf40268,
 	0x0132f4f1,
-/* 0x02ac: find_done */
+/* 0x02bc: find_done */
 	0x80fc8eb2,
-/* 0x02b2: send */
-	0x907e00f8,
+/* 0x02c2: send */
+	0xa07e00f8,
 	0x01f40002,
-/* 0x02bb: recv */
-	0x9800f89b,
+/* 0x02cb: recv */
+	0xf900f89b,
+	0x9880f990,
 	0xe99805e8,
 	0x0132f404,
 	0x0bf489a6,
@@ -1011,9 +1016,10 @@ uint32_t nv108_pwr_code[] = {
 	0xa5f900ee,
 	0xf8fef0fc,
 	0x0131f400,
-/* 0x0302: recv_done */
-	0x00f8f0fc,
-/* 0x0304: init */
+/* 0x0316: recv_done */
+	0x80fcf0fc,
+	0x00f890fc,
+/* 0x031c: init */
 	0xcf010841,
 	0x11e70011,
 	0x14b60109,
@@ -1027,17 +1033,17 @@ uint32_t nv108_pwr_code[] = {
 	0x080015f1,
 	0x01f61000,
 	0x4104bd00,
-	0x13f000d2,
+	0x13f000e2,
 	0x0010fe00,
 	0x011031f4,
 	0xf6380001,
 	0x04bd0001,
-/* 0x034e: init_proc */
+/* 0x0366: init_proc */
 	0xf198580f,
 	0x0016b001,
 	0xf9fa0bf4,
 	0x58f0b615,
-/* 0x035f: mulu32_32_64 */
+/* 0x0377: mulu32_32_64 */
 	0xf9f20ef4,
 	0xf920f910,
 	0x9540f930,
@@ -1058,7 +1064,7 @@ uint32_t nv108_pwr_code[] = {
 	0x00b3bb30,
 	0x30fc40fc,
 	0x10fc20fc,
-/* 0x03ae: host_send */
+/* 0x03c6: host_send */
 	0xb04100f8,
 	0x0011cf04,
 	0xcf04a042,
@@ -1069,18 +1075,18 @@ uint32_t nv108_pwr_code[] = {
 	0x03eb9802,
 	0x9802ec98,
 	0xee9801ed,
-	0x02b27e00,
+	0x02c27e00,
 	0x0110b600,
 	0x400f1ec4,
 	0x0ef604b0,
 	0xf404bd00,
-/* 0x03ea: host_send_done */
+/* 0x0402: host_send_done */
 	0x00f8c70e,
-/* 0x03ec: host_recv */
+/* 0x0404: host_recv */
 	0xf14e4941,
 	0xa6525413,
 	0xb90bf4e1,
-/* 0x03f8: host_recv_wait */
+/* 0x0410: host_recv_wait */
 	0xcf04cc41,
 	0xc8420011,
 	0x0022cf04,
@@ -1097,7 +1103,7 @@ uint32_t nv108_pwr_code[] = {
 	0x04bd0002,
 	0x00004002,
 	0xbd0002f6,
-/* 0x043b: host_init */
+/* 0x0453: host_init */
 	0x4100f804,
 	0x14b60080,
 	0x7015f110,
@@ -1110,25 +1116,25 @@ uint32_t nv108_pwr_code[] = {
 	0x0104bd00,
 	0x04c44001,
 	0xbd0001f6,
-/* 0x046b: memx_func_enter */
+/* 0x0483: memx_func_enter */
 	0x0600f804,
 	0x07e04004,
 	0xbd0006f6,
-/* 0x0475: memx_func_enter_wait */
+/* 0x048d: memx_func_enter_wait */
 	0x07c04604,
 	0xf00066cf,
 	0x0bf40464,
 	0x001698f7,
 	0xf80410b6,
-/* 0x0489: memx_func_leave */
+/* 0x04a1: memx_func_leave */
 	0x40040600,
 	0x06f607e4,
-/* 0x0493: memx_func_leave_wait */
+/* 0x04ab: memx_func_leave_wait */
 	0x4604bd00,
 	0x66cf07c0,
 	0x0464f000,
 	0xf8f71bf4,
-/* 0x04a1: memx_func_wr32 */
+/* 0x04b9: memx_func_wr32 */
 	0x00169800,
 	0xb6011598,
 	0x60f90810,
@@ -1136,126 +1142,126 @@ uint32_t nv108_pwr_code[] = {
 	0x2e7ee0fc,
 	0x42b60000,
 	0xe81bf402,
-/* 0x04be: memx_func_wait */
+/* 0x04d6: memx_func_wait */
 	0x2c0800f8,
 	0x980088cf,
 	0x1d98001e,
 	0x021c9801,
 	0xb6031b98,
-	0x717e1010,
+	0x797e1010,
 	0x00f80000,
-/* 0x04d8: memx_func_delay */
+/* 0x04f0: memx_func_delay */
 	0xb6001e98,
 	0x5d7e0410,
 	0x00f80000,
-/* 0x04e4: memx_exec */
+/* 0x04fc: memx_exec */
 	0xd0f9e0f9,
 	0xb2b2c1b2,
-/* 0x04ec: memx_exec_next */
+/* 0x0504: memx_exec_next */
 	0xb6001398,
 	0x34950410,
 	0x0c30f010,
 	0xf9de3598,
 	0xf412a655,
 	0xd0fced1e,
-	0xb27ee0fc,
+	0xc27ee0fc,
 	0x00f80002,
-/* 0x050c: memx_info */
+/* 0x0524: memx_info */
 	0x4b03ac4c,
-	0xb27e0800,
+	0xc27e0800,
 	0x00f80002,
-/* 0x0518: memx_recv */
+/* 0x0530: memx_recv */
 	0xf401d6b0,
 	0xd6b0c90b,
 	0xeb0bf400,
-/* 0x0526: memx_init */
+/* 0x053e: memx_init */
 	0x00f800f8,
-/* 0x0528: perf_recv */
-/* 0x052a: perf_init */
+/* 0x0540: perf_recv */
+/* 0x0542: perf_init */
 	0x00f800f8,
-/* 0x052c: i2c_drive_scl */
+/* 0x0544: i2c_drive_scl */
 	0xf40036b0,
 	0xe0400d0b,
 	0x0001f607,
 	0x00f804bd,
-/* 0x053c: i2c_drive_scl_lo */
+/* 0x0554: i2c_drive_scl_lo */
 	0xf607e440,
 	0x04bd0001,
-/* 0x0546: i2c_drive_sda */
+/* 0x055e: i2c_drive_sda */
 	0x36b000f8,
 	0x0d0bf400,
 	0xf607e040,
 	0x04bd0002,
-/* 0x0556: i2c_drive_sda_lo */
+/* 0x056e: i2c_drive_sda_lo */
 	0xe44000f8,
 	0x0002f607,
 	0x00f804bd,
-/* 0x0560: i2c_sense_scl */
+/* 0x0578: i2c_sense_scl */
 	0x430132f4,
 	0x33cf07c4,
 	0x0431fd00,
 	0xf4060bf4,
-/* 0x0572: i2c_sense_scl_done */
+/* 0x058a: i2c_sense_scl_done */
 	0x00f80131,
-/* 0x0574: i2c_sense_sda */
+/* 0x058c: i2c_sense_sda */
 	0x430132f4,
 	0x33cf07c4,
 	0x0432fd00,
 	0xf4060bf4,
-/* 0x0586: i2c_sense_sda_done */
+/* 0x059e: i2c_sense_sda_done */
 	0x00f80131,
-/* 0x0588: i2c_raise_scl */
+/* 0x05a0: i2c_raise_scl */
 	0x984440f9,
 	0x7e010308,
-/* 0x0593: i2c_raise_scl_wait */
-	0x4e00052c,
+/* 0x05ab: i2c_raise_scl_wait */
+	0x4e000544,
 	0x5d7e03e8,
-	0x607e0000,
+	0x787e0000,
 	0x01f40005,
 	0x0142b609,
-/* 0x05a7: i2c_raise_scl_done */
+/* 0x05bf: i2c_raise_scl_done */
 	0xfcef1bf4,
-/* 0x05ab: i2c_start */
+/* 0x05c3: i2c_start */
 	0x7e00f840,
-	0xf4000560,
-	0x747e0d11,
+	0xf4000578,
+	0x8c7e0d11,
 	0x11f40005,
 	0x2e0ef406,
-/* 0x05bc: i2c_start_rep */
-	0x2c7e0003,
+/* 0x05d4: i2c_start_rep */
+	0x447e0003,
 	0x01030005,
-	0x0005467e,
+	0x00055e7e,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x05887e50,
+	0x05a07e50,
 	0x0464b600,
-/* 0x05e7: i2c_start_send */
+/* 0x05ff: i2c_start_send */
 	0x031d11f4,
-	0x05467e00,
+	0x055e7e00,
 	0x13884e00,
 	0x00005d7e,
-	0x2c7e0003,
+	0x447e0003,
 	0x884e0005,
 	0x005d7e13,
-/* 0x0601: i2c_start_out */
-/* 0x0603: i2c_stop */
+/* 0x0619: i2c_start_out */
+/* 0x061b: i2c_stop */
 	0x0300f800,
-	0x052c7e00,
+	0x05447e00,
 	0x7e000300,
-	0x4e000546,
+	0x4e00055e,
 	0x5d7e03e8,
 	0x01030000,
-	0x00052c7e,
+	0x0005447e,
 	0x7e13884e,
 	0x0300005d,
-	0x05467e01,
+	0x055e7e01,
 	0x13884e00,
 	0x00005d7e,
-/* 0x0632: i2c_bitw */
-	0x467e00f8,
+/* 0x064a: i2c_bitw */
+	0x5e7e00f8,
 	0xe84e0005,
 	0x005d7e03,
 	0x0076bb00,
@@ -1263,18 +1269,18 @@ uint32_t nv108_pwr_code[] = {
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
-	0x887e50fc,
+	0xa07e50fc,
 	0x64b60005,
 	0x1711f404,
 	0x7e13884e,
 	0x0300005d,
-	0x052c7e00,
+	0x05447e00,
 	0x13884e00,
 	0x00005d7e,
-/* 0x0670: i2c_bitw_out */
-/* 0x0672: i2c_bitr */
+/* 0x0688: i2c_bitw_out */
+/* 0x068a: i2c_bitr */
 	0x010300f8,
-	0x0005467e,
+	0x00055e7e,
 	0x7e03e84e,
 	0xbb00005d,
 	0x65b60076,
@@ -1282,18 +1288,18 @@ uint32_t nv108_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0005887e,
+	0x0005a07e,
 	0xf40464b6,
-	0x747e1a11,
+	0x8c7e1a11,
 	0x00030005,
-	0x00052c7e,
+	0x0005447e,
 	0x7e13884e,
 	0xf000005d,
 	0x31f4013c,
-/* 0x06b5: i2c_bitr_done */
-/* 0x06b7: i2c_get_byte */
+/* 0x06cd: i2c_bitr_done */
+/* 0x06cf: i2c_get_byte */
 	0x0500f801,
-/* 0x06bb: i2c_get_byte_next */
+/* 0x06d3: i2c_get_byte_next */
 	0xb6080400,
 	0x76bb0154,
 	0x0465b600,
@@ -1301,7 +1307,7 @@ uint32_t nv108_pwr_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0x7e50fc04,
-	0xb6000672,
+	0xb600068a,
 	0x11f40464,
 	0x0553fd2a,
 	0xf40142b6,
@@ -1311,12 +1317,12 @@ uint32_t nv108_pwr_code[] = {
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x06327e50,
+	0x064a7e50,
 	0x0464b600,
-/* 0x0704: i2c_get_byte_done */
-/* 0x0706: i2c_put_byte */
+/* 0x071c: i2c_get_byte_done */
+/* 0x071e: i2c_put_byte */
 	0x080400f8,
-/* 0x0708: i2c_put_byte_next */
+/* 0x0720: i2c_put_byte_next */
 	0xff0142b6,
 	0x76bb3854,
 	0x0465b600,
@@ -1324,7 +1330,7 @@ uint32_t nv108_pwr_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0x7e50fc04,
-	0xb6000632,
+	0xb600064a,
 	0x11f40464,
 	0x0046b034,
 	0xbbd81bf4,
@@ -1333,20 +1339,20 @@ uint32_t nv108_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0006727e,
+	0x00068a7e,
 	0xf40464b6,
 	0x76bb0f11,
 	0x0136b000,
 	0xf4061bf4,
-/* 0x075e: i2c_put_byte_done */
+/* 0x0776: i2c_put_byte_done */
 	0x00f80132,
-/* 0x0760: i2c_addr */
+/* 0x0778: i2c_addr */
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x05ab7e50,
+	0x05c37e50,
 	0x0464b600,
 	0xe72911f4,
 	0xb6012ec3,
@@ -1356,25 +1362,25 @@ uint32_t nv108_pwr_code[] = {
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
-	0x067e50fc,
+	0x1e7e50fc,
 	0x64b60007,
-/* 0x07a5: i2c_addr_done */
-/* 0x07a7: i2c_acquire_addr */
+/* 0x07bd: i2c_addr_done */
+/* 0x07bf: i2c_acquire_addr */
 	0xc700f804,
 	0xe4b6f8ce,
 	0x14e0b705,
-/* 0x07b3: i2c_acquire */
+/* 0x07cb: i2c_acquire */
 	0x7e00f8d0,
-	0x7e0007a7,
+	0x7e0007bf,
 	0xf0000004,
 	0x2e7e03d9,
 	0x00f80000,
-/* 0x07c4: i2c_release */
-	0x0007a77e,
+/* 0x07dc: i2c_release */
+	0x0007bf7e,
 	0x0000047e,
 	0x7e03daf0,
 	0xf800002e,
-/* 0x07d5: i2c_recv */
+/* 0x07ed: i2c_recv */
 	0x0132f400,
 	0xb6f8c1c7,
 	0x16b00214,
@@ -1393,7 +1399,7 @@ uint32_t nv108_pwr_code[] = {
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
-	0xb37e50fc,
+	0xcb7e50fc,
 	0x64b60007,
 	0xb0d0fc04,
 	0x1bf500d6,
@@ -1403,7 +1409,7 @@ uint32_t nv108_pwr_code[] = {
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x07607e50,
+	0x07787e50,
 	0x0464b600,
 	0x00cc11f5,
 	0xbbe0c5c7,
@@ -1412,7 +1418,7 @@ uint32_t nv108_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0007067e,
+	0x00071e7e,
 	0xf50464b6,
 	0x0500a911,
 	0x0076bb01,
@@ -1420,7 +1426,7 @@ uint32_t nv108_pwr_code[] = {
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
-	0x607e50fc,
+	0x787e50fc,
 	0x64b60007,
 	0x8711f504,
 	0x0076bb00,
@@ -1428,7 +1434,7 @@ uint32_t nv108_pwr_code[] = {
 	0x04659450,
 	0xbd0256bb,
 	0x0475fd50,
-	0xb77e50fc,
+	0xcf7e50fc,
 	0x64b60006,
 	0x6711f404,
 	0xbbe05bcb,
@@ -1437,65 +1443,65 @@ uint32_t nv108_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x0006037e,
+	0x00061b7e,
 	0xb20464b6,
 	0xf474bd5b,
-/* 0x08da: i2c_recv_not_rd08 */
+/* 0x08f2: i2c_recv_not_rd08 */
 	0xd6b0410e,
 	0x3b1bf401,
-	0x607e0005,
+	0x787e0005,
 	0x11f40007,
 	0xe0c5c732,
-	0x0007067e,
+	0x00071e7e,
 	0x052811f4,
-	0x07607e00,
+	0x07787e00,
 	0x1f11f400,
 	0x7ee0b5c7,
-	0xf4000706,
-	0x037e1511,
+	0xf400071e,
+	0x1b7e1511,
 	0x74bd0006,
 	0xf408c5c7,
 	0x32f4091b,
 	0x030ef402,
-/* 0x0918: i2c_recv_not_wr08 */
-/* 0x0918: i2c_recv_done */
+/* 0x0930: i2c_recv_not_wr08 */
+/* 0x0930: i2c_recv_done */
 	0x7ef8cec7,
-	0xfc0007c4,
+	0xfc0007dc,
 	0xf4d0fce0,
 	0x7cb20912,
-	0x0002b27e,
-/* 0x092c: i2c_recv_exit */
-/* 0x092e: i2c_init */
+	0x0002c27e,
+/* 0x0944: i2c_recv_exit */
+/* 0x0946: i2c_init */
 	0x00f800f8,
-/* 0x0930: test_recv */
+/* 0x0948: test_recv */
 	0xcf045841,
 	0x10b60011,
 	0x04584001,
 	0xbd0001f6,
 	0x00e7f104,
 	0x4fe3f1d9,
-	0x01f17e13,
-/* 0x094f: test_init */
+	0x02017e13,
+/* 0x0967: test_init */
 	0x4e00f800,
-	0xf17e0800,
-	0x00f80001,
-/* 0x0958: idle_recv */
-/* 0x095a: idle */
+	0x017e0800,
+	0x00f80002,
+/* 0x0970: idle_recv */
+/* 0x0972: idle */
 	0x31f400f8,
 	0x04544100,
 	0xb60011cf,
 	0x54400110,
 	0x0001f604,
-/* 0x096e: idle_loop */
+/* 0x0986: idle_loop */
 	0x580104bd,
-/* 0x0973: idle_proc */
-/* 0x0973: idle_proc_exec */
+/* 0x098b: idle_proc */
+/* 0x098b: idle_proc_exec */
 	0xf90232f4,
 	0x7e1eb210,
-	0xfc0002bb,
+	0xfc0002cb,
 	0x0911f410,
 	0xf40231f4,
-/* 0x0986: idle_proc_next */
+/* 0x099e: idle_proc_next */
 	0x10b6f00e,
 	0xf41fa658,
 	0x02f4e81b,
@@ -1521,10 +1527,4 @@ uint32_t nv108_pwr_code[] = {
 	0x00000000,
 	0x00000000,
 	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
 };

+ 184 - 184
drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nva3.fuc.h

@@ -24,8 +24,8 @@ uint32_t nva3_pwr_data[] = {
 	0x00000000,
 /* 0x0058: proc_list_head */
 	0x54534f48,
-	0x000004fa,
-	0x00000497,
+	0x00000512,
+	0x000004af,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -46,8 +46,8 @@ uint32_t nva3_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x584d454d,
-	0x0000060c,
-	0x000005fe,
+	0x00000624,
+	0x00000616,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -68,8 +68,8 @@ uint32_t nva3_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x46524550,
-	0x00000610,
-	0x0000060e,
+	0x00000628,
+	0x00000626,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -90,8 +90,8 @@ uint32_t nva3_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x5f433249,
-	0x00000a40,
-	0x000008e3,
+	0x00000a58,
+	0x000008fb,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -112,8 +112,8 @@ uint32_t nva3_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x54534554,
-	0x00000a69,
-	0x00000a42,
+	0x00000a81,
+	0x00000a5a,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -134,8 +134,8 @@ uint32_t nva3_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x454c4449,
-	0x00000a75,
-	0x00000a73,
+	0x00000a8d,
+	0x00000a8b,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -229,20 +229,20 @@ uint32_t nva3_pwr_data[] = {
 /* 0x0370: memx_func_head */
 	0x00010000,
 	0x00000000,
-	0x00000539,
+	0x00000551,
 /* 0x037c: memx_func_next */
 	0x00000001,
 	0x00000000,
-	0x00000560,
+	0x00000578,
 	0x00000002,
 	0x00000002,
-	0x00000581,
+	0x00000599,
 	0x00040003,
 	0x00000000,
-	0x0000059d,
+	0x000005b5,
 	0x00010004,
 	0x00000000,
-	0x000005ba,
+	0x000005d2,
 /* 0x03ac: memx_func_tail */
 /* 0x03ac: memx_data_head */
 	0x00000000,
@@ -849,7 +849,7 @@ uint32_t nva3_pwr_data[] = {
 };
 
 uint32_t nva3_pwr_code[] = {
-	0x03860ef5,
+	0x039e0ef5,
 /* 0x0004: rd32 */
 	0x07a007f1,
 	0xd00604b6,
@@ -885,19 +885,22 @@ uint32_t nva3_pwr_code[] = {
 	0xd4f100dd,
 	0x1bf47000,
 /* 0x007f: nsec */
-	0xf000f8f2,
+	0xf900f8f2,
+	0xf080f990,
 	0x84b62c87,
 	0x0088cf06,
-/* 0x0088: nsec_loop */
+/* 0x008c: nsec_loop */
 	0xb62c97f0,
 	0x99cf0694,
 	0x0298bb00,
 	0xf4069eb8,
-	0x00f8f11e,
-/* 0x009c: wait */
+	0x80fcf11e,
+	0x00f890fc,
+/* 0x00a4: wait */
+	0x80f990f9,
 	0xb62c87f0,
 	0x88cf0684,
-/* 0x00a5: wait_loop */
+/* 0x00b1: wait_loop */
 	0x02eeb900,
 	0xb90421f4,
 	0xadfd02da,
@@ -907,28 +910,29 @@ uint32_t nva3_pwr_code[] = {
 	0x0099cf06,
 	0xb80298bb,
 	0x1ef4069b,
-/* 0x00c9: wait_done */
-/* 0x00cb: intr_watchdog */
-	0x9800f8df,
+/* 0x00d5: wait_done */
+	0xfc80fcdf,
+/* 0x00db: intr_watchdog */
+	0x9800f890,
 	0x96b003e9,
 	0x2a0bf400,
 	0xbb9a0a98,
 	0x1cf4029a,
 	0x01d7f00f,
-	0x02cd21f5,
+	0x02dd21f5,
 	0x0ef494bd,
-/* 0x00e9: intr_watchdog_next_time */
+/* 0x00f9: intr_watchdog_next_time */
 	0x9b0a9815,
 	0xf400a6b0,
 	0x9ab8090b,
 	0x061cf406,
-/* 0x00f8: intr_watchdog_next_time_set */
-/* 0x00fb: intr_watchdog_next_proc */
+/* 0x0108: intr_watchdog_next_time_set */
+/* 0x010b: intr_watchdog_next_proc */
 	0x809b0980,
 	0xe0b603e9,
 	0x68e6b158,
 	0xc61bf402,
-/* 0x010a: intr */
+/* 0x011a: intr */
 	0x00f900f8,
 	0x80f904bd,
 	0xa0f990f9,
@@ -948,13 +952,13 @@ uint32_t nva3_pwr_code[] = {
 	0xf40289c4,
 	0x0080230b,
 	0x58e7f09b,
-	0x98cb21f4,
+	0x98db21f4,
 	0x96b09b09,
 	0x110bf400,
 	0xb63407f0,
 	0x09d00604,
 	0x8004bd00,
-/* 0x016e: intr_skip_watchdog */
+/* 0x017e: intr_skip_watchdog */
 	0x89e49a09,
 	0x0bf40800,
 	0x8897f148,
@@ -967,22 +971,22 @@ uint32_t nva3_pwr_code[] = {
 	0x48e7f1c0,
 	0x53e3f14f,
 	0x00d7f054,
-	0x033221f5,
+	0x034221f5,
 	0x07f1c0fc,
 	0x04b604c0,
 	0x000cd006,
-/* 0x01ae: intr_subintr_skip_fifo */
+/* 0x01be: intr_subintr_skip_fifo */
 	0x07f104bd,
 	0x04b60688,
 	0x0009d006,
-/* 0x01ba: intr_skip_subintr */
+/* 0x01ca: intr_skip_subintr */
 	0x89c404bd,
 	0x070bf420,
 	0xffbfa4f1,
-/* 0x01c4: intr_skip_pause */
+/* 0x01d4: intr_skip_pause */
 	0xf44089c4,
 	0xa4f1070b,
-/* 0x01ce: intr_skip_user0 */
+/* 0x01de: intr_skip_user0 */
 	0x07f0ffbf,
 	0x0604b604,
 	0xbd0008d0,
@@ -993,35 +997,35 @@ uint32_t nva3_pwr_code[] = {
 	0x90fca0fc,
 	0x00fc80fc,
 	0xf80032f4,
-/* 0x01f5: ticks_from_ns */
+/* 0x0205: ticks_from_ns */
 	0xf9c0f901,
 	0xcbd7f1b0,
 	0x00d3f000,
-	0x03fb21f5,
+	0x041321f5,
 	0x03e8ccec,
 	0xf400b4b0,
 	0xeeec120b,
 	0xd7f103e8,
 	0xd3f000cb,
-	0xfb21f500,
-/* 0x021d: ticks_from_ns_quit */
-	0x02ceb903,
+	0x1321f500,
+/* 0x022d: ticks_from_ns_quit */
+	0x02ceb904,
 	0xc0fcb0fc,
-/* 0x0226: ticks_from_us */
+/* 0x0236: ticks_from_us */
 	0xc0f900f8,
 	0xd7f1b0f9,
 	0xd3f000cb,
-	0xfb21f500,
-	0x02ceb903,
+	0x1321f500,
+	0x02ceb904,
 	0xf400b4b0,
 	0xe4bd050b,
-/* 0x0240: ticks_from_us_quit */
+/* 0x0250: ticks_from_us_quit */
 	0xc0fcb0fc,
-/* 0x0246: ticks_to_us */
+/* 0x0256: ticks_to_us */
 	0xd7f100f8,
 	0xd3f000cb,
 	0xecedff00,
-/* 0x0252: timer */
+/* 0x0262: timer */
 	0x90f900f8,
 	0x32f480f9,
 	0x03f89810,
@@ -1044,19 +1048,19 @@ uint32_t nva3_pwr_code[] = {
 	0xf406e0b8,
 	0xe8b8090b,
 	0x111cf406,
-/* 0x02a8: timer_reset */
+/* 0x02b8: timer_reset */
 	0xb63407f0,
 	0x0ed00604,
 	0x8004bd00,
-/* 0x02b6: timer_enable */
+/* 0x02c6: timer_enable */
 	0x87f09a0e,
 	0x3807f001,
 	0xd00604b6,
 	0x04bd0008,
-/* 0x02c4: timer_done */
+/* 0x02d4: timer_done */
 	0xfc1031f4,
 	0xf890fc80,
-/* 0x02cd: send_proc */
+/* 0x02dd: send_proc */
 	0xf980f900,
 	0x05e89890,
 	0xf004e998,
@@ -1071,26 +1075,27 @@ uint32_t nva3_pwr_code[] = {
 	0xb6038b80,
 	0x94f00190,
 	0x04e98007,
-/* 0x0307: send_done */
+/* 0x0317: send_done */
 	0xfc0231f4,
 	0xf880fc90,
-/* 0x030d: find */
+/* 0x031d: find */
 	0xf080f900,
 	0x31f45887,
-/* 0x0315: find_loop */
+/* 0x0325: find_loop */
 	0x008a9801,
 	0xf406aeb8,
 	0x80b6100b,
 	0x6886b158,
 	0xf01bf402,
-/* 0x032b: find_done */
+/* 0x033b: find_done */
 	0xb90132f4,
 	0x80fc028e,
-/* 0x0332: send */
+/* 0x0342: send */
 	0x21f500f8,
-	0x01f4030d,
-/* 0x033b: recv */
-	0x9800f897,
+	0x01f4031d,
+/* 0x034b: recv */
+	0xf900f897,
+	0x9880f990,
 	0xe99805e8,
 	0x0132f404,
 	0xf40689b8,
@@ -1109,8 +1114,9 @@ uint32_t nva3_pwr_code[] = {
 	0xf0fca5f9,
 	0xf400f8fe,
 	0xf0fc0131,
-/* 0x0384: recv_done */
-/* 0x0386: init */
+/* 0x0398: recv_done */
+	0x90fc80fc,
+/* 0x039e: init */
 	0x17f100f8,
 	0x14b60108,
 	0x0011cf06,
@@ -1129,19 +1135,19 @@ uint32_t nva3_pwr_code[] = {
 	0x1007f008,
 	0xd00604b6,
 	0x04bd0001,
-	0x010a17f1,
+	0x011a17f1,
 	0xfe0013f0,
 	0x31f40010,
 	0x0117f010,
 	0xb63807f0,
 	0x01d00604,
 	0xf004bd00,
-/* 0x03ea: init_proc */
+/* 0x0402: init_proc */
 	0xf19858f7,
 	0x0016b001,
 	0xf9fa0bf4,
 	0x58f0b615,
-/* 0x03fb: mulu32_32_64 */
+/* 0x0413: mulu32_32_64 */
 	0xf9f20ef4,
 	0xf920f910,
 	0x9540f930,
@@ -1163,7 +1169,7 @@ uint32_t nva3_pwr_code[] = {
 	0x40fc00b3,
 	0x20fc30fc,
 	0x00f810fc,
-/* 0x044c: host_send */
+/* 0x0464: host_send */
 	0x04b017f1,
 	0xcf0614b6,
 	0x27f10011,
@@ -1176,19 +1182,19 @@ uint32_t nva3_pwr_code[] = {
 	0x9803eb98,
 	0xed9802ec,
 	0x00ee9801,
-	0x033221f5,
+	0x034221f5,
 	0xc40110b6,
 	0x07f10f1e,
 	0x04b604b0,
 	0x000ed006,
 	0x0ef404bd,
-/* 0x0495: host_send_done */
-/* 0x0497: host_recv */
+/* 0x04ad: host_send_done */
+/* 0x04af: host_recv */
 	0xf100f8ba,
 	0xf14e4917,
 	0xb8525413,
 	0x0bf406e1,
-/* 0x04a5: host_recv_wait */
+/* 0x04bd: host_recv_wait */
 	0xcc17f1aa,
 	0x0614b604,
 	0xf10011cf,
@@ -1210,7 +1216,7 @@ uint32_t nva3_pwr_code[] = {
 	0x0007f040,
 	0xd00604b6,
 	0x04bd0002,
-/* 0x04fa: host_init */
+/* 0x0512: host_init */
 	0x17f100f8,
 	0x14b60080,
 	0x7015f110,
@@ -1227,29 +1233,29 @@ uint32_t nva3_pwr_code[] = {
 	0xb604c407,
 	0x01d00604,
 	0xf804bd00,
-/* 0x0539: memx_func_enter */
+/* 0x0551: memx_func_enter */
 	0x0467f000,
 	0x07e007f1,
 	0xd00604b6,
 	0x04bd0006,
-/* 0x0548: memx_func_enter_wait */
+/* 0x0560: memx_func_enter_wait */
 	0x07c067f1,
 	0xcf0664b6,
 	0x64f00066,
 	0xf30bf404,
 	0xb6001698,
 	0x00f80410,
-/* 0x0560: memx_func_leave */
+/* 0x0578: memx_func_leave */
 	0xf10467f0,
 	0xb607e407,
 	0x06d00604,
-/* 0x056f: memx_func_leave_wait */
+/* 0x0587: memx_func_leave_wait */
 	0xf104bd00,
 	0xb607c067,
 	0x66cf0664,
 	0x0464f000,
 	0xf8f31bf4,
-/* 0x0581: memx_func_wr32 */
+/* 0x0599: memx_func_wr32 */
 	0x00169800,
 	0xb6011598,
 	0x60f90810,
@@ -1257,22 +1263,22 @@ uint32_t nva3_pwr_code[] = {
 	0x21f4e0fc,
 	0x0242b63f,
 	0xf8e91bf4,
-/* 0x059d: memx_func_wait */
+/* 0x05b5: memx_func_wait */
 	0x2c87f000,
 	0xcf0684b6,
 	0x1e980088,
 	0x011d9800,
 	0x98021c98,
 	0x10b6031b,
-	0x9c21f410,
-/* 0x05ba: memx_func_delay */
+	0xa421f410,
+/* 0x05d2: memx_func_delay */
 	0x1e9800f8,
 	0x0410b600,
 	0xf87f21f4,
-/* 0x05c5: memx_exec */
+/* 0x05dd: memx_exec */
 	0xf9e0f900,
 	0x02c1b9d0,
-/* 0x05cf: memx_exec_next */
+/* 0x05e7: memx_exec_next */
 	0x9802b2b9,
 	0x10b60013,
 	0x10349504,
@@ -1281,113 +1287,113 @@ uint32_t nva3_pwr_code[] = {
 	0xf40612b8,
 	0xd0fcec1e,
 	0x21f5e0fc,
-	0x00f80332,
-/* 0x05f0: memx_info */
+	0x00f80342,
+/* 0x0608: memx_info */
 	0x03acc7f1,
 	0x0800b7f1,
-	0x033221f5,
-/* 0x05fe: memx_recv */
+	0x034221f5,
+/* 0x0616: memx_recv */
 	0xd6b000f8,
 	0xc40bf401,
 	0xf400d6b0,
 	0x00f8e90b,
-/* 0x060c: memx_init */
-/* 0x060e: perf_recv */
+/* 0x0624: memx_init */
+/* 0x0626: perf_recv */
 	0x00f800f8,
-/* 0x0610: perf_init */
-/* 0x0612: i2c_drive_scl */
+/* 0x0628: perf_init */
+/* 0x062a: i2c_drive_scl */
 	0x36b000f8,
 	0x110bf400,
 	0x07e007f1,
 	0xd00604b6,
 	0x04bd0001,
-/* 0x0626: i2c_drive_scl_lo */
+/* 0x063e: i2c_drive_scl_lo */
 	0x07f100f8,
 	0x04b607e4,
 	0x0001d006,
 	0x00f804bd,
-/* 0x0634: i2c_drive_sda */
+/* 0x064c: i2c_drive_sda */
 	0xf40036b0,
 	0x07f1110b,
 	0x04b607e0,
 	0x0002d006,
 	0x00f804bd,
-/* 0x0648: i2c_drive_sda_lo */
+/* 0x0660: i2c_drive_sda_lo */
 	0x07e407f1,
 	0xd00604b6,
 	0x04bd0002,
-/* 0x0656: i2c_sense_scl */
+/* 0x066e: i2c_sense_scl */
 	0x32f400f8,
 	0xc437f101,
 	0x0634b607,
 	0xfd0033cf,
 	0x0bf40431,
 	0x0131f406,
-/* 0x066c: i2c_sense_scl_done */
-/* 0x066e: i2c_sense_sda */
+/* 0x0684: i2c_sense_scl_done */
+/* 0x0686: i2c_sense_sda */
 	0x32f400f8,
 	0xc437f101,
 	0x0634b607,
 	0xfd0033cf,
 	0x0bf40432,
 	0x0131f406,
-/* 0x0684: i2c_sense_sda_done */
-/* 0x0686: i2c_raise_scl */
+/* 0x069c: i2c_sense_sda_done */
+/* 0x069e: i2c_raise_scl */
 	0x40f900f8,
 	0x089847f1,
 	0xf50137f0,
-/* 0x0693: i2c_raise_scl_wait */
-	0xf1061221,
+/* 0x06ab: i2c_raise_scl_wait */
+	0xf1062a21,
 	0xf403e8e7,
 	0x21f57f21,
-	0x01f40656,
+	0x01f4066e,
 	0x0142b609,
-/* 0x06a7: i2c_raise_scl_done */
+/* 0x06bf: i2c_raise_scl_done */
 	0xfcef1bf4,
-/* 0x06ab: i2c_start */
+/* 0x06c3: i2c_start */
 	0xf500f840,
-	0xf4065621,
+	0xf4066e21,
 	0x21f50d11,
-	0x11f4066e,
+	0x11f40686,
 	0x300ef406,
-/* 0x06bc: i2c_start_rep */
+/* 0x06d4: i2c_start_rep */
 	0xf50037f0,
-	0xf0061221,
+	0xf0062a21,
 	0x21f50137,
-	0x76bb0634,
+	0x76bb064c,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb6068621,
+	0xb6069e21,
 	0x11f40464,
-/* 0x06e9: i2c_start_send */
+/* 0x0701: i2c_start_send */
 	0x0037f01f,
-	0x063421f5,
+	0x064c21f5,
 	0x1388e7f1,
 	0xf07f21f4,
 	0x21f50037,
-	0xe7f10612,
+	0xe7f1062a,
 	0x21f41388,
-/* 0x0705: i2c_start_out */
-/* 0x0707: i2c_stop */
+/* 0x071d: i2c_start_out */
+/* 0x071f: i2c_stop */
 	0xf000f87f,
 	0x21f50037,
-	0x37f00612,
-	0x3421f500,
+	0x37f0062a,
+	0x4c21f500,
 	0xe8e7f106,
 	0x7f21f403,
 	0xf50137f0,
-	0xf1061221,
+	0xf1062a21,
 	0xf41388e7,
 	0x37f07f21,
-	0x3421f501,
+	0x4c21f501,
 	0x88e7f106,
 	0x7f21f413,
-/* 0x073a: i2c_bitw */
+/* 0x0752: i2c_bitw */
 	0x21f500f8,
-	0xe7f10634,
+	0xe7f1064c,
 	0x21f403e8,
 	0x0076bb7f,
 	0xf90465b6,
@@ -1395,18 +1401,18 @@ uint32_t nva3_pwr_code[] = {
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b60686,
+	0x64b6069e,
 	0x1811f404,
 	0x1388e7f1,
 	0xf07f21f4,
 	0x21f50037,
-	0xe7f10612,
+	0xe7f1062a,
 	0x21f41388,
-/* 0x0779: i2c_bitw_out */
-/* 0x077b: i2c_bitr */
+/* 0x0791: i2c_bitw_out */
+/* 0x0793: i2c_bitr */
 	0xf000f87f,
 	0x21f50137,
-	0xe7f10634,
+	0xe7f1064c,
 	0x21f403e8,
 	0x0076bb7f,
 	0xf90465b6,
@@ -1414,26 +1420,26 @@ uint32_t nva3_pwr_code[] = {
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b60686,
+	0x64b6069e,
 	0x1b11f404,
-	0x066e21f5,
+	0x068621f5,
 	0xf50037f0,
-	0xf1061221,
+	0xf1062a21,
 	0xf41388e7,
 	0x3cf07f21,
 	0x0131f401,
-/* 0x07c0: i2c_bitr_done */
-/* 0x07c2: i2c_get_byte */
+/* 0x07d8: i2c_bitr_done */
+/* 0x07da: i2c_get_byte */
 	0x57f000f8,
 	0x0847f000,
-/* 0x07c8: i2c_get_byte_next */
+/* 0x07e0: i2c_get_byte_next */
 	0xbb0154b6,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x077b21f5,
+	0x079321f5,
 	0xf40464b6,
 	0x53fd2b11,
 	0x0142b605,
@@ -1444,11 +1450,11 @@ uint32_t nva3_pwr_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb6073a21,
-/* 0x0812: i2c_get_byte_done */
+	0xb6075221,
+/* 0x082a: i2c_get_byte_done */
 	0x00f80464,
-/* 0x0814: i2c_put_byte */
-/* 0x0817: i2c_put_byte_next */
+/* 0x082c: i2c_put_byte */
+/* 0x082f: i2c_put_byte_next */
 	0xb60847f0,
 	0x54ff0142,
 	0x0076bb38,
@@ -1457,7 +1463,7 @@ uint32_t nva3_pwr_code[] = {
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b6073a,
+	0x64b60752,
 	0x3411f404,
 	0xf40046b0,
 	0x76bbd81b,
@@ -1466,20 +1472,20 @@ uint32_t nva3_pwr_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb6077b21,
+	0xb6079321,
 	0x11f40464,
 	0x0076bb0f,
 	0xf40136b0,
 	0x32f4061b,
-/* 0x086d: i2c_put_byte_done */
-/* 0x086f: i2c_addr */
+/* 0x0885: i2c_put_byte_done */
+/* 0x0887: i2c_addr */
 	0xbb00f801,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x06ab21f5,
+	0x06c321f5,
 	0xf40464b6,
 	0xc3e72911,
 	0x34b6012e,
@@ -1489,24 +1495,24 @@ uint32_t nva3_pwr_code[] = {
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x1421f550,
+	0x2c21f550,
 	0x0464b608,
-/* 0x08b4: i2c_addr_done */
-/* 0x08b6: i2c_acquire_addr */
+/* 0x08cc: i2c_addr_done */
+/* 0x08ce: i2c_acquire_addr */
 	0xcec700f8,
 	0x02e4b6f8,
 	0x0bfce0b7,
 	0xf800ee98,
-/* 0x08c5: i2c_acquire */
-	0xb621f500,
+/* 0x08dd: i2c_acquire */
+	0xce21f500,
 	0x0421f408,
 	0xf403d9f0,
 	0x00f83f21,
-/* 0x08d4: i2c_release */
-	0x08b621f5,
+/* 0x08ec: i2c_release */
+	0x08ce21f5,
 	0xf00421f4,
 	0x21f403da,
-/* 0x08e3: i2c_recv */
+/* 0x08fb: i2c_recv */
 	0xf400f83f,
 	0xc1c70132,
 	0x0214b6f8,
@@ -1526,7 +1532,7 @@ uint32_t nva3_pwr_code[] = {
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b608c5,
+	0x64b608dd,
 	0xb0d0fc04,
 	0x1bf500d6,
 	0x57f000b3,
@@ -1536,7 +1542,7 @@ uint32_t nva3_pwr_code[] = {
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b6086f,
+	0x64b60887,
 	0xd011f504,
 	0xe0c5c700,
 	0xb60076bb,
@@ -1544,7 +1550,7 @@ uint32_t nva3_pwr_code[] = {
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x1421f550,
+	0x2c21f550,
 	0x0464b608,
 	0x00ad11f5,
 	0xbb0157f0,
@@ -1553,7 +1559,7 @@ uint32_t nva3_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x086f21f5,
+	0x088721f5,
 	0xf50464b6,
 	0xbb008a11,
 	0x65b60076,
@@ -1561,7 +1567,7 @@ uint32_t nva3_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x07c221f5,
+	0x07da21f5,
 	0xf40464b6,
 	0x5bcb6a11,
 	0x0076bbe0,
@@ -1570,37 +1576,37 @@ uint32_t nva3_pwr_code[] = {
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b60707,
+	0x64b6071f,
 	0x025bb904,
 	0x0ef474bd,
-/* 0x09e9: i2c_recv_not_rd08 */
+/* 0x0a01: i2c_recv_not_rd08 */
 	0x01d6b043,
 	0xf03d1bf4,
 	0x21f50057,
-	0x11f4086f,
+	0x11f40887,
 	0xe0c5c733,
-	0x081421f5,
+	0x082c21f5,
 	0xf02911f4,
 	0x21f50057,
-	0x11f4086f,
+	0x11f40887,
 	0xe0b5c71f,
-	0x081421f5,
+	0x082c21f5,
 	0xf51511f4,
-	0xbd070721,
+	0xbd071f21,
 	0x08c5c774,
 	0xf4091bf4,
 	0x0ef40232,
-/* 0x0a29: i2c_recv_not_wr08 */
-/* 0x0a29: i2c_recv_done */
+/* 0x0a41: i2c_recv_not_wr08 */
+/* 0x0a41: i2c_recv_done */
 	0xf8cec703,
-	0x08d421f5,
+	0x08ec21f5,
 	0xd0fce0fc,
 	0xb90a12f4,
 	0x21f5027c,
-/* 0x0a3e: i2c_recv_exit */
-	0x00f80332,
-/* 0x0a40: i2c_init */
-/* 0x0a42: test_recv */
+/* 0x0a56: i2c_recv_exit */
+	0x00f80342,
+/* 0x0a58: i2c_init */
+/* 0x0a5a: test_recv */
 	0x17f100f8,
 	0x14b605d8,
 	0x0011cf06,
@@ -1610,13 +1616,13 @@ uint32_t nva3_pwr_code[] = {
 	0xf104bd00,
 	0xf1d900e7,
 	0xf5134fe3,
-	0xf8025221,
-/* 0x0a69: test_init */
+	0xf8026221,
+/* 0x0a81: test_init */
 	0x00e7f100,
-	0x5221f508,
-/* 0x0a73: idle_recv */
+	0x6221f508,
+/* 0x0a8b: idle_recv */
 	0xf800f802,
-/* 0x0a75: idle */
+/* 0x0a8d: idle */
 	0x0031f400,
 	0x05d417f1,
 	0xcf0614b6,
@@ -1624,16 +1630,16 @@ uint32_t nva3_pwr_code[] = {
 	0xd407f101,
 	0x0604b605,
 	0xbd0001d0,
-/* 0x0a91: idle_loop */
+/* 0x0aa9: idle_loop */
 	0x5817f004,
-/* 0x0a97: idle_proc */
-/* 0x0a97: idle_proc_exec */
+/* 0x0aaf: idle_proc */
+/* 0x0aaf: idle_proc_exec */
 	0xf90232f4,
 	0x021eb910,
-	0x033b21f5,
+	0x034b21f5,
 	0x11f410fc,
 	0x0231f409,
-/* 0x0aab: idle_proc_next */
+/* 0x0ac3: idle_proc_next */
 	0xb6ef0ef4,
 	0x1fb85810,
 	0xe61bf406,
@@ -1650,10 +1656,4 @@ uint32_t nva3_pwr_code[] = {
 	0x00000000,
 	0x00000000,
 	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
 };

+ 184 - 184
drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvc0.fuc.h

@@ -24,8 +24,8 @@ uint32_t nvc0_pwr_data[] = {
 	0x00000000,
 /* 0x0058: proc_list_head */
 	0x54534f48,
-	0x000004fa,
-	0x00000497,
+	0x00000512,
+	0x000004af,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -46,8 +46,8 @@ uint32_t nvc0_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x584d454d,
-	0x0000060c,
-	0x000005fe,
+	0x00000624,
+	0x00000616,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -68,8 +68,8 @@ uint32_t nvc0_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x46524550,
-	0x00000610,
-	0x0000060e,
+	0x00000628,
+	0x00000626,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -90,8 +90,8 @@ uint32_t nvc0_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x5f433249,
-	0x00000a40,
-	0x000008e3,
+	0x00000a58,
+	0x000008fb,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -112,8 +112,8 @@ uint32_t nvc0_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x54534554,
-	0x00000a69,
-	0x00000a42,
+	0x00000a81,
+	0x00000a5a,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -134,8 +134,8 @@ uint32_t nvc0_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x454c4449,
-	0x00000a75,
-	0x00000a73,
+	0x00000a8d,
+	0x00000a8b,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -229,20 +229,20 @@ uint32_t nvc0_pwr_data[] = {
 /* 0x0370: memx_func_head */
 	0x00010000,
 	0x00000000,
-	0x00000539,
+	0x00000551,
 /* 0x037c: memx_func_next */
 	0x00000001,
 	0x00000000,
-	0x00000560,
+	0x00000578,
 	0x00000002,
 	0x00000002,
-	0x00000581,
+	0x00000599,
 	0x00040003,
 	0x00000000,
-	0x0000059d,
+	0x000005b5,
 	0x00010004,
 	0x00000000,
-	0x000005ba,
+	0x000005d2,
 /* 0x03ac: memx_func_tail */
 /* 0x03ac: memx_data_head */
 	0x00000000,
@@ -849,7 +849,7 @@ uint32_t nvc0_pwr_data[] = {
 };
 
 uint32_t nvc0_pwr_code[] = {
-	0x03860ef5,
+	0x039e0ef5,
 /* 0x0004: rd32 */
 	0x07a007f1,
 	0xd00604b6,
@@ -885,19 +885,22 @@ uint32_t nvc0_pwr_code[] = {
 	0xd4f100dd,
 	0x1bf47000,
 /* 0x007f: nsec */
-	0xf000f8f2,
+	0xf900f8f2,
+	0xf080f990,
 	0x84b62c87,
 	0x0088cf06,
-/* 0x0088: nsec_loop */
+/* 0x008c: nsec_loop */
 	0xb62c97f0,
 	0x99cf0694,
 	0x0298bb00,
 	0xf4069eb8,
-	0x00f8f11e,
-/* 0x009c: wait */
+	0x80fcf11e,
+	0x00f890fc,
+/* 0x00a4: wait */
+	0x80f990f9,
 	0xb62c87f0,
 	0x88cf0684,
-/* 0x00a5: wait_loop */
+/* 0x00b1: wait_loop */
 	0x02eeb900,
 	0xb90421f4,
 	0xadfd02da,
@@ -907,28 +910,29 @@ uint32_t nvc0_pwr_code[] = {
 	0x0099cf06,
 	0xb80298bb,
 	0x1ef4069b,
-/* 0x00c9: wait_done */
-/* 0x00cb: intr_watchdog */
-	0x9800f8df,
+/* 0x00d5: wait_done */
+	0xfc80fcdf,
+/* 0x00db: intr_watchdog */
+	0x9800f890,
 	0x96b003e9,
 	0x2a0bf400,
 	0xbb9a0a98,
 	0x1cf4029a,
 	0x01d7f00f,
-	0x02cd21f5,
+	0x02dd21f5,
 	0x0ef494bd,
-/* 0x00e9: intr_watchdog_next_time */
+/* 0x00f9: intr_watchdog_next_time */
 	0x9b0a9815,
 	0xf400a6b0,
 	0x9ab8090b,
 	0x061cf406,
-/* 0x00f8: intr_watchdog_next_time_set */
-/* 0x00fb: intr_watchdog_next_proc */
+/* 0x0108: intr_watchdog_next_time_set */
+/* 0x010b: intr_watchdog_next_proc */
 	0x809b0980,
 	0xe0b603e9,
 	0x68e6b158,
 	0xc61bf402,
-/* 0x010a: intr */
+/* 0x011a: intr */
 	0x00f900f8,
 	0x80f904bd,
 	0xa0f990f9,
@@ -948,13 +952,13 @@ uint32_t nvc0_pwr_code[] = {
 	0xf40289c4,
 	0x0080230b,
 	0x58e7f09b,
-	0x98cb21f4,
+	0x98db21f4,
 	0x96b09b09,
 	0x110bf400,
 	0xb63407f0,
 	0x09d00604,
 	0x8004bd00,
-/* 0x016e: intr_skip_watchdog */
+/* 0x017e: intr_skip_watchdog */
 	0x89e49a09,
 	0x0bf40800,
 	0x8897f148,
@@ -967,22 +971,22 @@ uint32_t nvc0_pwr_code[] = {
 	0x48e7f1c0,
 	0x53e3f14f,
 	0x00d7f054,
-	0x033221f5,
+	0x034221f5,
 	0x07f1c0fc,
 	0x04b604c0,
 	0x000cd006,
-/* 0x01ae: intr_subintr_skip_fifo */
+/* 0x01be: intr_subintr_skip_fifo */
 	0x07f104bd,
 	0x04b60688,
 	0x0009d006,
-/* 0x01ba: intr_skip_subintr */
+/* 0x01ca: intr_skip_subintr */
 	0x89c404bd,
 	0x070bf420,
 	0xffbfa4f1,
-/* 0x01c4: intr_skip_pause */
+/* 0x01d4: intr_skip_pause */
 	0xf44089c4,
 	0xa4f1070b,
-/* 0x01ce: intr_skip_user0 */
+/* 0x01de: intr_skip_user0 */
 	0x07f0ffbf,
 	0x0604b604,
 	0xbd0008d0,
@@ -993,35 +997,35 @@ uint32_t nvc0_pwr_code[] = {
 	0x90fca0fc,
 	0x00fc80fc,
 	0xf80032f4,
-/* 0x01f5: ticks_from_ns */
+/* 0x0205: ticks_from_ns */
 	0xf9c0f901,
 	0xcbd7f1b0,
 	0x00d3f000,
-	0x03fb21f5,
+	0x041321f5,
 	0x03e8ccec,
 	0xf400b4b0,
 	0xeeec120b,
 	0xd7f103e8,
 	0xd3f000cb,
-	0xfb21f500,
-/* 0x021d: ticks_from_ns_quit */
-	0x02ceb903,
+	0x1321f500,
+/* 0x022d: ticks_from_ns_quit */
+	0x02ceb904,
 	0xc0fcb0fc,
-/* 0x0226: ticks_from_us */
+/* 0x0236: ticks_from_us */
 	0xc0f900f8,
 	0xd7f1b0f9,
 	0xd3f000cb,
-	0xfb21f500,
-	0x02ceb903,
+	0x1321f500,
+	0x02ceb904,
 	0xf400b4b0,
 	0xe4bd050b,
-/* 0x0240: ticks_from_us_quit */
+/* 0x0250: ticks_from_us_quit */
 	0xc0fcb0fc,
-/* 0x0246: ticks_to_us */
+/* 0x0256: ticks_to_us */
 	0xd7f100f8,
 	0xd3f000cb,
 	0xecedff00,
-/* 0x0252: timer */
+/* 0x0262: timer */
 	0x90f900f8,
 	0x32f480f9,
 	0x03f89810,
@@ -1044,19 +1048,19 @@ uint32_t nvc0_pwr_code[] = {
 	0xf406e0b8,
 	0xe8b8090b,
 	0x111cf406,
-/* 0x02a8: timer_reset */
+/* 0x02b8: timer_reset */
 	0xb63407f0,
 	0x0ed00604,
 	0x8004bd00,
-/* 0x02b6: timer_enable */
+/* 0x02c6: timer_enable */
 	0x87f09a0e,
 	0x3807f001,
 	0xd00604b6,
 	0x04bd0008,
-/* 0x02c4: timer_done */
+/* 0x02d4: timer_done */
 	0xfc1031f4,
 	0xf890fc80,
-/* 0x02cd: send_proc */
+/* 0x02dd: send_proc */
 	0xf980f900,
 	0x05e89890,
 	0xf004e998,
@@ -1071,26 +1075,27 @@ uint32_t nvc0_pwr_code[] = {
 	0xb6038b80,
 	0x94f00190,
 	0x04e98007,
-/* 0x0307: send_done */
+/* 0x0317: send_done */
 	0xfc0231f4,
 	0xf880fc90,
-/* 0x030d: find */
+/* 0x031d: find */
 	0xf080f900,
 	0x31f45887,
-/* 0x0315: find_loop */
+/* 0x0325: find_loop */
 	0x008a9801,
 	0xf406aeb8,
 	0x80b6100b,
 	0x6886b158,
 	0xf01bf402,
-/* 0x032b: find_done */
+/* 0x033b: find_done */
 	0xb90132f4,
 	0x80fc028e,
-/* 0x0332: send */
+/* 0x0342: send */
 	0x21f500f8,
-	0x01f4030d,
-/* 0x033b: recv */
-	0x9800f897,
+	0x01f4031d,
+/* 0x034b: recv */
+	0xf900f897,
+	0x9880f990,
 	0xe99805e8,
 	0x0132f404,
 	0xf40689b8,
@@ -1109,8 +1114,9 @@ uint32_t nvc0_pwr_code[] = {
 	0xf0fca5f9,
 	0xf400f8fe,
 	0xf0fc0131,
-/* 0x0384: recv_done */
-/* 0x0386: init */
+/* 0x0398: recv_done */
+	0x90fc80fc,
+/* 0x039e: init */
 	0x17f100f8,
 	0x14b60108,
 	0x0011cf06,
@@ -1129,19 +1135,19 @@ uint32_t nvc0_pwr_code[] = {
 	0x1007f008,
 	0xd00604b6,
 	0x04bd0001,
-	0x010a17f1,
+	0x011a17f1,
 	0xfe0013f0,
 	0x31f40010,
 	0x0117f010,
 	0xb63807f0,
 	0x01d00604,
 	0xf004bd00,
-/* 0x03ea: init_proc */
+/* 0x0402: init_proc */
 	0xf19858f7,
 	0x0016b001,
 	0xf9fa0bf4,
 	0x58f0b615,
-/* 0x03fb: mulu32_32_64 */
+/* 0x0413: mulu32_32_64 */
 	0xf9f20ef4,
 	0xf920f910,
 	0x9540f930,
@@ -1163,7 +1169,7 @@ uint32_t nvc0_pwr_code[] = {
 	0x40fc00b3,
 	0x20fc30fc,
 	0x00f810fc,
-/* 0x044c: host_send */
+/* 0x0464: host_send */
 	0x04b017f1,
 	0xcf0614b6,
 	0x27f10011,
@@ -1176,19 +1182,19 @@ uint32_t nvc0_pwr_code[] = {
 	0x9803eb98,
 	0xed9802ec,
 	0x00ee9801,
-	0x033221f5,
+	0x034221f5,
 	0xc40110b6,
 	0x07f10f1e,
 	0x04b604b0,
 	0x000ed006,
 	0x0ef404bd,
-/* 0x0495: host_send_done */
-/* 0x0497: host_recv */
+/* 0x04ad: host_send_done */
+/* 0x04af: host_recv */
 	0xf100f8ba,
 	0xf14e4917,
 	0xb8525413,
 	0x0bf406e1,
-/* 0x04a5: host_recv_wait */
+/* 0x04bd: host_recv_wait */
 	0xcc17f1aa,
 	0x0614b604,
 	0xf10011cf,
@@ -1210,7 +1216,7 @@ uint32_t nvc0_pwr_code[] = {
 	0x0007f040,
 	0xd00604b6,
 	0x04bd0002,
-/* 0x04fa: host_init */
+/* 0x0512: host_init */
 	0x17f100f8,
 	0x14b60080,
 	0x7015f110,
@@ -1227,29 +1233,29 @@ uint32_t nvc0_pwr_code[] = {
 	0xb604c407,
 	0x01d00604,
 	0xf804bd00,
-/* 0x0539: memx_func_enter */
+/* 0x0551: memx_func_enter */
 	0x0467f000,
 	0x07e007f1,
 	0xd00604b6,
 	0x04bd0006,
-/* 0x0548: memx_func_enter_wait */
+/* 0x0560: memx_func_enter_wait */
 	0x07c067f1,
 	0xcf0664b6,
 	0x64f00066,
 	0xf30bf404,
 	0xb6001698,
 	0x00f80410,
-/* 0x0560: memx_func_leave */
+/* 0x0578: memx_func_leave */
 	0xf10467f0,
 	0xb607e407,
 	0x06d00604,
-/* 0x056f: memx_func_leave_wait */
+/* 0x0587: memx_func_leave_wait */
 	0xf104bd00,
 	0xb607c067,
 	0x66cf0664,
 	0x0464f000,
 	0xf8f31bf4,
-/* 0x0581: memx_func_wr32 */
+/* 0x0599: memx_func_wr32 */
 	0x00169800,
 	0xb6011598,
 	0x60f90810,
@@ -1257,22 +1263,22 @@ uint32_t nvc0_pwr_code[] = {
 	0x21f4e0fc,
 	0x0242b63f,
 	0xf8e91bf4,
-/* 0x059d: memx_func_wait */
+/* 0x05b5: memx_func_wait */
 	0x2c87f000,
 	0xcf0684b6,
 	0x1e980088,
 	0x011d9800,
 	0x98021c98,
 	0x10b6031b,
-	0x9c21f410,
-/* 0x05ba: memx_func_delay */
+	0xa421f410,
+/* 0x05d2: memx_func_delay */
 	0x1e9800f8,
 	0x0410b600,
 	0xf87f21f4,
-/* 0x05c5: memx_exec */
+/* 0x05dd: memx_exec */
 	0xf9e0f900,
 	0x02c1b9d0,
-/* 0x05cf: memx_exec_next */
+/* 0x05e7: memx_exec_next */
 	0x9802b2b9,
 	0x10b60013,
 	0x10349504,
@@ -1281,113 +1287,113 @@ uint32_t nvc0_pwr_code[] = {
 	0xf40612b8,
 	0xd0fcec1e,
 	0x21f5e0fc,
-	0x00f80332,
-/* 0x05f0: memx_info */
+	0x00f80342,
+/* 0x0608: memx_info */
 	0x03acc7f1,
 	0x0800b7f1,
-	0x033221f5,
-/* 0x05fe: memx_recv */
+	0x034221f5,
+/* 0x0616: memx_recv */
 	0xd6b000f8,
 	0xc40bf401,
 	0xf400d6b0,
 	0x00f8e90b,
-/* 0x060c: memx_init */
-/* 0x060e: perf_recv */
+/* 0x0624: memx_init */
+/* 0x0626: perf_recv */
 	0x00f800f8,
-/* 0x0610: perf_init */
-/* 0x0612: i2c_drive_scl */
+/* 0x0628: perf_init */
+/* 0x062a: i2c_drive_scl */
 	0x36b000f8,
 	0x110bf400,
 	0x07e007f1,
 	0xd00604b6,
 	0x04bd0001,
-/* 0x0626: i2c_drive_scl_lo */
+/* 0x063e: i2c_drive_scl_lo */
 	0x07f100f8,
 	0x04b607e4,
 	0x0001d006,
 	0x00f804bd,
-/* 0x0634: i2c_drive_sda */
+/* 0x064c: i2c_drive_sda */
 	0xf40036b0,
 	0x07f1110b,
 	0x04b607e0,
 	0x0002d006,
 	0x00f804bd,
-/* 0x0648: i2c_drive_sda_lo */
+/* 0x0660: i2c_drive_sda_lo */
 	0x07e407f1,
 	0xd00604b6,
 	0x04bd0002,
-/* 0x0656: i2c_sense_scl */
+/* 0x066e: i2c_sense_scl */
 	0x32f400f8,
 	0xc437f101,
 	0x0634b607,
 	0xfd0033cf,
 	0x0bf40431,
 	0x0131f406,
-/* 0x066c: i2c_sense_scl_done */
-/* 0x066e: i2c_sense_sda */
+/* 0x0684: i2c_sense_scl_done */
+/* 0x0686: i2c_sense_sda */
 	0x32f400f8,
 	0xc437f101,
 	0x0634b607,
 	0xfd0033cf,
 	0x0bf40432,
 	0x0131f406,
-/* 0x0684: i2c_sense_sda_done */
-/* 0x0686: i2c_raise_scl */
+/* 0x069c: i2c_sense_sda_done */
+/* 0x069e: i2c_raise_scl */
 	0x40f900f8,
 	0x089847f1,
 	0xf50137f0,
-/* 0x0693: i2c_raise_scl_wait */
-	0xf1061221,
+/* 0x06ab: i2c_raise_scl_wait */
+	0xf1062a21,
 	0xf403e8e7,
 	0x21f57f21,
-	0x01f40656,
+	0x01f4066e,
 	0x0142b609,
-/* 0x06a7: i2c_raise_scl_done */
+/* 0x06bf: i2c_raise_scl_done */
 	0xfcef1bf4,
-/* 0x06ab: i2c_start */
+/* 0x06c3: i2c_start */
 	0xf500f840,
-	0xf4065621,
+	0xf4066e21,
 	0x21f50d11,
-	0x11f4066e,
+	0x11f40686,
 	0x300ef406,
-/* 0x06bc: i2c_start_rep */
+/* 0x06d4: i2c_start_rep */
 	0xf50037f0,
-	0xf0061221,
+	0xf0062a21,
 	0x21f50137,
-	0x76bb0634,
+	0x76bb064c,
 	0x0465b600,
 	0x659450f9,
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb6068621,
+	0xb6069e21,
 	0x11f40464,
-/* 0x06e9: i2c_start_send */
+/* 0x0701: i2c_start_send */
 	0x0037f01f,
-	0x063421f5,
+	0x064c21f5,
 	0x1388e7f1,
 	0xf07f21f4,
 	0x21f50037,
-	0xe7f10612,
+	0xe7f1062a,
 	0x21f41388,
-/* 0x0705: i2c_start_out */
-/* 0x0707: i2c_stop */
+/* 0x071d: i2c_start_out */
+/* 0x071f: i2c_stop */
 	0xf000f87f,
 	0x21f50037,
-	0x37f00612,
-	0x3421f500,
+	0x37f0062a,
+	0x4c21f500,
 	0xe8e7f106,
 	0x7f21f403,
 	0xf50137f0,
-	0xf1061221,
+	0xf1062a21,
 	0xf41388e7,
 	0x37f07f21,
-	0x3421f501,
+	0x4c21f501,
 	0x88e7f106,
 	0x7f21f413,
-/* 0x073a: i2c_bitw */
+/* 0x0752: i2c_bitw */
 	0x21f500f8,
-	0xe7f10634,
+	0xe7f1064c,
 	0x21f403e8,
 	0x0076bb7f,
 	0xf90465b6,
@@ -1395,18 +1401,18 @@ uint32_t nvc0_pwr_code[] = {
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b60686,
+	0x64b6069e,
 	0x1811f404,
 	0x1388e7f1,
 	0xf07f21f4,
 	0x21f50037,
-	0xe7f10612,
+	0xe7f1062a,
 	0x21f41388,
-/* 0x0779: i2c_bitw_out */
-/* 0x077b: i2c_bitr */
+/* 0x0791: i2c_bitw_out */
+/* 0x0793: i2c_bitr */
 	0xf000f87f,
 	0x21f50137,
-	0xe7f10634,
+	0xe7f1064c,
 	0x21f403e8,
 	0x0076bb7f,
 	0xf90465b6,
@@ -1414,26 +1420,26 @@ uint32_t nvc0_pwr_code[] = {
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b60686,
+	0x64b6069e,
 	0x1b11f404,
-	0x066e21f5,
+	0x068621f5,
 	0xf50037f0,
-	0xf1061221,
+	0xf1062a21,
 	0xf41388e7,
 	0x3cf07f21,
 	0x0131f401,
-/* 0x07c0: i2c_bitr_done */
-/* 0x07c2: i2c_get_byte */
+/* 0x07d8: i2c_bitr_done */
+/* 0x07da: i2c_get_byte */
 	0x57f000f8,
 	0x0847f000,
-/* 0x07c8: i2c_get_byte_next */
+/* 0x07e0: i2c_get_byte_next */
 	0xbb0154b6,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x077b21f5,
+	0x079321f5,
 	0xf40464b6,
 	0x53fd2b11,
 	0x0142b605,
@@ -1444,11 +1450,11 @@ uint32_t nvc0_pwr_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb6073a21,
-/* 0x0812: i2c_get_byte_done */
+	0xb6075221,
+/* 0x082a: i2c_get_byte_done */
 	0x00f80464,
-/* 0x0814: i2c_put_byte */
-/* 0x0817: i2c_put_byte_next */
+/* 0x082c: i2c_put_byte */
+/* 0x082f: i2c_put_byte_next */
 	0xb60847f0,
 	0x54ff0142,
 	0x0076bb38,
@@ -1457,7 +1463,7 @@ uint32_t nvc0_pwr_code[] = {
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b6073a,
+	0x64b60752,
 	0x3411f404,
 	0xf40046b0,
 	0x76bbd81b,
@@ -1466,20 +1472,20 @@ uint32_t nvc0_pwr_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb6077b21,
+	0xb6079321,
 	0x11f40464,
 	0x0076bb0f,
 	0xf40136b0,
 	0x32f4061b,
-/* 0x086d: i2c_put_byte_done */
-/* 0x086f: i2c_addr */
+/* 0x0885: i2c_put_byte_done */
+/* 0x0887: i2c_addr */
 	0xbb00f801,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x06ab21f5,
+	0x06c321f5,
 	0xf40464b6,
 	0xc3e72911,
 	0x34b6012e,
@@ -1489,24 +1495,24 @@ uint32_t nvc0_pwr_code[] = {
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x1421f550,
+	0x2c21f550,
 	0x0464b608,
-/* 0x08b4: i2c_addr_done */
-/* 0x08b6: i2c_acquire_addr */
+/* 0x08cc: i2c_addr_done */
+/* 0x08ce: i2c_acquire_addr */
 	0xcec700f8,
 	0x02e4b6f8,
 	0x0bfce0b7,
 	0xf800ee98,
-/* 0x08c5: i2c_acquire */
-	0xb621f500,
+/* 0x08dd: i2c_acquire */
+	0xce21f500,
 	0x0421f408,
 	0xf403d9f0,
 	0x00f83f21,
-/* 0x08d4: i2c_release */
-	0x08b621f5,
+/* 0x08ec: i2c_release */
+	0x08ce21f5,
 	0xf00421f4,
 	0x21f403da,
-/* 0x08e3: i2c_recv */
+/* 0x08fb: i2c_recv */
 	0xf400f83f,
 	0xc1c70132,
 	0x0214b6f8,
@@ -1526,7 +1532,7 @@ uint32_t nvc0_pwr_code[] = {
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b608c5,
+	0x64b608dd,
 	0xb0d0fc04,
 	0x1bf500d6,
 	0x57f000b3,
@@ -1536,7 +1542,7 @@ uint32_t nvc0_pwr_code[] = {
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b6086f,
+	0x64b60887,
 	0xd011f504,
 	0xe0c5c700,
 	0xb60076bb,
@@ -1544,7 +1550,7 @@ uint32_t nvc0_pwr_code[] = {
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x1421f550,
+	0x2c21f550,
 	0x0464b608,
 	0x00ad11f5,
 	0xbb0157f0,
@@ -1553,7 +1559,7 @@ uint32_t nvc0_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x086f21f5,
+	0x088721f5,
 	0xf50464b6,
 	0xbb008a11,
 	0x65b60076,
@@ -1561,7 +1567,7 @@ uint32_t nvc0_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x07c221f5,
+	0x07da21f5,
 	0xf40464b6,
 	0x5bcb6a11,
 	0x0076bbe0,
@@ -1570,37 +1576,37 @@ uint32_t nvc0_pwr_code[] = {
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b60707,
+	0x64b6071f,
 	0x025bb904,
 	0x0ef474bd,
-/* 0x09e9: i2c_recv_not_rd08 */
+/* 0x0a01: i2c_recv_not_rd08 */
 	0x01d6b043,
 	0xf03d1bf4,
 	0x21f50057,
-	0x11f4086f,
+	0x11f40887,
 	0xe0c5c733,
-	0x081421f5,
+	0x082c21f5,
 	0xf02911f4,
 	0x21f50057,
-	0x11f4086f,
+	0x11f40887,
 	0xe0b5c71f,
-	0x081421f5,
+	0x082c21f5,
 	0xf51511f4,
-	0xbd070721,
+	0xbd071f21,
 	0x08c5c774,
 	0xf4091bf4,
 	0x0ef40232,
-/* 0x0a29: i2c_recv_not_wr08 */
-/* 0x0a29: i2c_recv_done */
+/* 0x0a41: i2c_recv_not_wr08 */
+/* 0x0a41: i2c_recv_done */
 	0xf8cec703,
-	0x08d421f5,
+	0x08ec21f5,
 	0xd0fce0fc,
 	0xb90a12f4,
 	0x21f5027c,
-/* 0x0a3e: i2c_recv_exit */
-	0x00f80332,
-/* 0x0a40: i2c_init */
-/* 0x0a42: test_recv */
+/* 0x0a56: i2c_recv_exit */
+	0x00f80342,
+/* 0x0a58: i2c_init */
+/* 0x0a5a: test_recv */
 	0x17f100f8,
 	0x14b605d8,
 	0x0011cf06,
@@ -1610,13 +1616,13 @@ uint32_t nvc0_pwr_code[] = {
 	0xf104bd00,
 	0xf1d900e7,
 	0xf5134fe3,
-	0xf8025221,
-/* 0x0a69: test_init */
+	0xf8026221,
+/* 0x0a81: test_init */
 	0x00e7f100,
-	0x5221f508,
-/* 0x0a73: idle_recv */
+	0x6221f508,
+/* 0x0a8b: idle_recv */
 	0xf800f802,
-/* 0x0a75: idle */
+/* 0x0a8d: idle */
 	0x0031f400,
 	0x05d417f1,
 	0xcf0614b6,
@@ -1624,16 +1630,16 @@ uint32_t nvc0_pwr_code[] = {
 	0xd407f101,
 	0x0604b605,
 	0xbd0001d0,
-/* 0x0a91: idle_loop */
+/* 0x0aa9: idle_loop */
 	0x5817f004,
-/* 0x0a97: idle_proc */
-/* 0x0a97: idle_proc_exec */
+/* 0x0aaf: idle_proc */
+/* 0x0aaf: idle_proc_exec */
 	0xf90232f4,
 	0x021eb910,
-	0x033b21f5,
+	0x034b21f5,
 	0x11f410fc,
 	0x0231f409,
-/* 0x0aab: idle_proc_next */
+/* 0x0ac3: idle_proc_next */
 	0xb6ef0ef4,
 	0x1fb85810,
 	0xe61bf406,
@@ -1650,10 +1656,4 @@ uint32_t nvc0_pwr_code[] = {
 	0x00000000,
 	0x00000000,
 	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
 };

+ 183 - 183
drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvd0.fuc.h

@@ -24,8 +24,8 @@ uint32_t nvd0_pwr_data[] = {
 	0x00000000,
 /* 0x0058: proc_list_head */
 	0x54534f48,
-	0x00000485,
-	0x0000042e,
+	0x0000049d,
+	0x00000446,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -46,8 +46,8 @@ uint32_t nvd0_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x584d454d,
-	0x0000057f,
-	0x00000571,
+	0x00000597,
+	0x00000589,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -68,8 +68,8 @@ uint32_t nvd0_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x46524550,
-	0x00000583,
-	0x00000581,
+	0x0000059b,
+	0x00000599,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -90,8 +90,8 @@ uint32_t nvd0_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x5f433249,
-	0x0000099e,
-	0x00000841,
+	0x000009b6,
+	0x00000859,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -112,8 +112,8 @@ uint32_t nvd0_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x54534554,
-	0x000009c1,
-	0x000009a0,
+	0x000009d9,
+	0x000009b8,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -134,8 +134,8 @@ uint32_t nvd0_pwr_data[] = {
 	0x00000000,
 	0x00000000,
 	0x454c4449,
-	0x000009cd,
-	0x000009cb,
+	0x000009e5,
+	0x000009e3,
 	0x00000000,
 	0x00000000,
 	0x00000000,
@@ -229,20 +229,20 @@ uint32_t nvd0_pwr_data[] = {
 /* 0x0370: memx_func_head */
 	0x00010000,
 	0x00000000,
-	0x000004bb,
+	0x000004d3,
 /* 0x037c: memx_func_next */
 	0x00000001,
 	0x00000000,
-	0x000004dc,
+	0x000004f4,
 	0x00000002,
 	0x00000002,
-	0x000004f7,
+	0x0000050f,
 	0x00040003,
 	0x00000000,
-	0x00000513,
+	0x0000052b,
 	0x00010004,
 	0x00000000,
-	0x0000052d,
+	0x00000545,
 /* 0x03ac: memx_func_tail */
 /* 0x03ac: memx_data_head */
 	0x00000000,
@@ -784,7 +784,7 @@ uint32_t nvd0_pwr_data[] = {
 };
 
 uint32_t nvd0_pwr_code[] = {
-	0x03350ef5,
+	0x034d0ef5,
 /* 0x0004: rd32 */
 	0x07a007f1,
 	0xbd000ed0,
@@ -814,17 +814,20 @@ uint32_t nvd0_pwr_code[] = {
 	0xd4f100dd,
 	0x1bf47000,
 /* 0x0067: nsec */
-	0xf000f8f5,
+	0xf900f8f5,
+	0xf080f990,
 	0x88cf2c87,
-/* 0x006d: nsec_loop */
+/* 0x0071: nsec_loop */
 	0x2c97f000,
 	0xbb0099cf,
 	0x9eb80298,
 	0xf41ef406,
-/* 0x007e: wait */
-	0x87f000f8,
+	0x90fc80fc,
+/* 0x0086: wait */
+	0x90f900f8,
+	0x87f080f9,
 	0x0088cf2c,
-/* 0x0084: wait_loop */
+/* 0x0090: wait_loop */
 	0xf402eeb9,
 	0xdab90421,
 	0x04adfd02,
@@ -833,28 +836,29 @@ uint32_t nvd0_pwr_code[] = {
 	0x0099cf2c,
 	0xb80298bb,
 	0x1ef4069b,
-/* 0x00a5: wait_done */
-/* 0x00a7: intr_watchdog */
-	0x9800f8e2,
+/* 0x00b1: wait_done */
+	0xfc80fce2,
+/* 0x00b7: intr_watchdog */
+	0x9800f890,
 	0x96b003e9,
 	0x2a0bf400,
 	0xbb9a0a98,
 	0x1cf4029a,
 	0x01d7f00f,
-	0x027c21f5,
+	0x028c21f5,
 	0x0ef494bd,
-/* 0x00c5: intr_watchdog_next_time */
+/* 0x00d5: intr_watchdog_next_time */
 	0x9b0a9815,
 	0xf400a6b0,
 	0x9ab8090b,
 	0x061cf406,
-/* 0x00d4: intr_watchdog_next_time_set */
-/* 0x00d7: intr_watchdog_next_proc */
+/* 0x00e4: intr_watchdog_next_time_set */
+/* 0x00e7: intr_watchdog_next_proc */
 	0x809b0980,
 	0xe0b603e9,
 	0x68e6b158,
 	0xc61bf402,
-/* 0x00e6: intr */
+/* 0x00f6: intr */
 	0x00f900f8,
 	0x80f904bd,
 	0xa0f990f9,
@@ -872,12 +876,12 @@ uint32_t nvd0_pwr_code[] = {
 	0x0bf40289,
 	0x9b008020,
 	0xf458e7f0,
-	0x0998a721,
+	0x0998b721,
 	0x0096b09b,
 	0xf00e0bf4,
 	0x09d03407,
 	0x8004bd00,
-/* 0x013e: intr_skip_watchdog */
+/* 0x014e: intr_skip_watchdog */
 	0x89e49a09,
 	0x0bf40800,
 	0x8897f13c,
@@ -889,20 +893,20 @@ uint32_t nvd0_pwr_code[] = {
 	0xf14f48e7,
 	0xf05453e3,
 	0x21f500d7,
-	0xc0fc02e1,
+	0xc0fc02f1,
 	0x04c007f1,
 	0xbd000cd0,
-/* 0x0175: intr_subintr_skip_fifo */
+/* 0x0185: intr_subintr_skip_fifo */
 	0x8807f104,
 	0x0009d006,
-/* 0x017e: intr_skip_subintr */
+/* 0x018e: intr_skip_subintr */
 	0x89c404bd,
 	0x070bf420,
 	0xffbfa4f1,
-/* 0x0188: intr_skip_pause */
+/* 0x0198: intr_skip_pause */
 	0xf44089c4,
 	0xa4f1070b,
-/* 0x0192: intr_skip_user0 */
+/* 0x01a2: intr_skip_user0 */
 	0x07f0ffbf,
 	0x0008d004,
 	0x80fc04bd,
@@ -912,35 +916,35 @@ uint32_t nvd0_pwr_code[] = {
 	0xfca0fcb0,
 	0xfc80fc90,
 	0x0032f400,
-/* 0x01b6: ticks_from_ns */
+/* 0x01c6: ticks_from_ns */
 	0xc0f901f8,
 	0xd7f1b0f9,
 	0xd3f00144,
-	0x9b21f500,
+	0xb321f500,
 	0xe8ccec03,
 	0x00b4b003,
 	0xec120bf4,
 	0xf103e8ee,
 	0xf00144d7,
 	0x21f500d3,
-/* 0x01de: ticks_from_ns_quit */
-	0xceb9039b,
+/* 0x01ee: ticks_from_ns_quit */
+	0xceb903b3,
 	0xfcb0fc02,
-/* 0x01e7: ticks_from_us */
+/* 0x01f7: ticks_from_us */
 	0xf900f8c0,
 	0xf1b0f9c0,
 	0xf00144d7,
 	0x21f500d3,
-	0xceb9039b,
+	0xceb903b3,
 	0x00b4b002,
 	0xbd050bf4,
-/* 0x0201: ticks_from_us_quit */
+/* 0x0211: ticks_from_us_quit */
 	0xfcb0fce4,
-/* 0x0207: ticks_to_us */
+/* 0x0217: ticks_to_us */
 	0xf100f8c0,
 	0xf00144d7,
 	0xedff00d3,
-/* 0x0213: timer */
+/* 0x0223: timer */
 	0xf900f8ec,
 	0xf480f990,
 	0xf8981032,
@@ -960,18 +964,18 @@ uint32_t nvd0_pwr_code[] = {
 	0x06e0b800,
 	0xb8090bf4,
 	0x1cf406e8,
-/* 0x025d: timer_reset */
+/* 0x026d: timer_reset */
 	0x3407f00e,
 	0xbd000ed0,
 	0x9a0e8004,
-/* 0x0268: timer_enable */
+/* 0x0278: timer_enable */
 	0xf00187f0,
 	0x08d03807,
-/* 0x0273: timer_done */
+/* 0x0283: timer_done */
 	0xf404bd00,
 	0x80fc1031,
 	0x00f890fc,
-/* 0x027c: send_proc */
+/* 0x028c: send_proc */
 	0x90f980f9,
 	0x9805e898,
 	0x86f004e9,
@@ -986,26 +990,27 @@ uint32_t nvd0_pwr_code[] = {
 	0x90b6038b,
 	0x0794f001,
 	0xf404e980,
-/* 0x02b6: send_done */
+/* 0x02c6: send_done */
 	0x90fc0231,
 	0x00f880fc,
-/* 0x02bc: find */
+/* 0x02cc: find */
 	0x87f080f9,
 	0x0131f458,
-/* 0x02c4: find_loop */
+/* 0x02d4: find_loop */
 	0xb8008a98,
 	0x0bf406ae,
 	0x5880b610,
 	0x026886b1,
 	0xf4f01bf4,
-/* 0x02da: find_done */
+/* 0x02ea: find_done */
 	0x8eb90132,
 	0xf880fc02,
-/* 0x02e1: send */
-	0xbc21f500,
+/* 0x02f1: send */
+	0xcc21f500,
 	0x9701f402,
-/* 0x02ea: recv */
-	0xe89800f8,
+/* 0x02fa: recv */
+	0x90f900f8,
+	0xe89880f9,
 	0x04e99805,
 	0xb80132f4,
 	0x0bf40689,
@@ -1023,9 +1028,10 @@ uint32_t nvd0_pwr_code[] = {
 	0xf900ee98,
 	0xfef0fca5,
 	0x31f400f8,
-/* 0x0333: recv_done */
-	0xf8f0fc01,
-/* 0x0335: init */
+/* 0x0347: recv_done */
+	0xfcf0fc01,
+	0xf890fc80,
+/* 0x034d: init */
 	0x0817f100,
 	0x0011cf01,
 	0x010911e7,
@@ -1041,18 +1047,18 @@ uint32_t nvd0_pwr_code[] = {
 	0xf0080015,
 	0x01d01007,
 	0xf104bd00,
-	0xf000e617,
+	0xf000f617,
 	0x10fe0013,
 	0x1031f400,
 	0xf00117f0,
 	0x01d03807,
 	0xf004bd00,
-/* 0x038a: init_proc */
+/* 0x03a2: init_proc */
 	0xf19858f7,
 	0x0016b001,
 	0xf9fa0bf4,
 	0x58f0b615,
-/* 0x039b: mulu32_32_64 */
+/* 0x03b3: mulu32_32_64 */
 	0xf9f20ef4,
 	0xf920f910,
 	0x9540f930,
@@ -1074,7 +1080,7 @@ uint32_t nvd0_pwr_code[] = {
 	0x40fc00b3,
 	0x20fc30fc,
 	0x00f810fc,
-/* 0x03ec: host_send */
+/* 0x0404: host_send */
 	0x04b017f1,
 	0xf10011cf,
 	0xcf04a027,
@@ -1086,18 +1092,18 @@ uint32_t nvd0_pwr_code[] = {
 	0x02ec9803,
 	0x9801ed98,
 	0x21f500ee,
-	0x10b602e1,
+	0x10b602f1,
 	0x0f1ec401,
 	0x04b007f1,
 	0xbd000ed0,
 	0xc30ef404,
-/* 0x042c: host_send_done */
-/* 0x042e: host_recv */
+/* 0x0444: host_send_done */
+/* 0x0446: host_recv */
 	0x17f100f8,
 	0x13f14e49,
 	0xe1b85254,
 	0xb30bf406,
-/* 0x043c: host_recv_wait */
+/* 0x0454: host_recv_wait */
 	0x04cc17f1,
 	0xf10011cf,
 	0xcf04c827,
@@ -1116,7 +1122,7 @@ uint32_t nvd0_pwr_code[] = {
 	0xf04027f0,
 	0x02d00007,
 	0xf804bd00,
-/* 0x0485: host_init */
+/* 0x049d: host_init */
 	0x8017f100,
 	0x1014b600,
 	0x027015f1,
@@ -1130,26 +1136,26 @@ uint32_t nvd0_pwr_code[] = {
 	0x0117f004,
 	0x04c407f1,
 	0xbd0001d0,
-/* 0x04bb: memx_func_enter */
+/* 0x04d3: memx_func_enter */
 	0xf000f804,
 	0x07f10467,
 	0x06d007e0,
-/* 0x04c7: memx_func_enter_wait */
+/* 0x04df: memx_func_enter_wait */
 	0xf104bd00,
 	0xcf07c067,
 	0x64f00066,
 	0xf60bf404,
 	0xb6001698,
 	0x00f80410,
-/* 0x04dc: memx_func_leave */
+/* 0x04f4: memx_func_leave */
 	0xf10467f0,
 	0xd007e407,
 	0x04bd0006,
-/* 0x04e8: memx_func_leave_wait */
+/* 0x0500: memx_func_leave_wait */
 	0x07c067f1,
 	0xf00066cf,
 	0x1bf40464,
-/* 0x04f7: memx_func_wr32 */
+/* 0x050f: memx_func_wr32 */
 	0x9800f8f6,
 	0x15980016,
 	0x0810b601,
@@ -1157,22 +1163,22 @@ uint32_t nvd0_pwr_code[] = {
 	0xe0fcd0fc,
 	0xb63321f4,
 	0x1bf40242,
-/* 0x0513: memx_func_wait */
+/* 0x052b: memx_func_wait */
 	0xf000f8e9,
 	0x88cf2c87,
 	0x001e9800,
 	0x98011d98,
 	0x1b98021c,
 	0x1010b603,
-	0xf87e21f4,
-/* 0x052d: memx_func_delay */
+	0xf88621f4,
+/* 0x0545: memx_func_delay */
 	0x001e9800,
 	0xf40410b6,
 	0x00f86721,
-/* 0x0538: memx_exec */
+/* 0x0550: memx_exec */
 	0xd0f9e0f9,
 	0xb902c1b9,
-/* 0x0542: memx_exec_next */
+/* 0x055a: memx_exec_next */
 	0x139802b2,
 	0x0410b600,
 	0xf0103495,
@@ -1180,109 +1186,109 @@ uint32_t nvd0_pwr_code[] = {
 	0xb855f9de,
 	0x1ef40612,
 	0xfcd0fcec,
-	0xe121f5e0,
-/* 0x0563: memx_info */
+	0xf121f5e0,
+/* 0x057b: memx_info */
 	0xf100f802,
 	0xf103acc7,
 	0xf50800b7,
-	0xf802e121,
-/* 0x0571: memx_recv */
+	0xf802f121,
+/* 0x0589: memx_recv */
 	0x01d6b000,
 	0xb0c40bf4,
 	0x0bf400d6,
-/* 0x057f: memx_init */
+/* 0x0597: memx_init */
 	0xf800f8e9,
-/* 0x0581: perf_recv */
-/* 0x0583: perf_init */
+/* 0x0599: perf_recv */
+/* 0x059b: perf_init */
 	0xf800f800,
-/* 0x0585: i2c_drive_scl */
+/* 0x059d: i2c_drive_scl */
 	0x0036b000,
 	0xf10e0bf4,
 	0xd007e007,
 	0x04bd0001,
-/* 0x0596: i2c_drive_scl_lo */
+/* 0x05ae: i2c_drive_scl_lo */
 	0x07f100f8,
 	0x01d007e4,
 	0xf804bd00,
-/* 0x05a1: i2c_drive_sda */
+/* 0x05b9: i2c_drive_sda */
 	0x0036b000,
 	0xf10e0bf4,
 	0xd007e007,
 	0x04bd0002,
-/* 0x05b2: i2c_drive_sda_lo */
+/* 0x05ca: i2c_drive_sda_lo */
 	0x07f100f8,
 	0x02d007e4,
 	0xf804bd00,
-/* 0x05bd: i2c_sense_scl */
+/* 0x05d5: i2c_sense_scl */
 	0x0132f400,
 	0x07c437f1,
 	0xfd0033cf,
 	0x0bf40431,
 	0x0131f406,
-/* 0x05d0: i2c_sense_scl_done */
-/* 0x05d2: i2c_sense_sda */
+/* 0x05e8: i2c_sense_scl_done */
+/* 0x05ea: i2c_sense_sda */
 	0x32f400f8,
 	0xc437f101,
 	0x0033cf07,
 	0xf40432fd,
 	0x31f4060b,
-/* 0x05e5: i2c_sense_sda_done */
-/* 0x05e7: i2c_raise_scl */
+/* 0x05fd: i2c_sense_sda_done */
+/* 0x05ff: i2c_raise_scl */
 	0xf900f801,
 	0x9847f140,
 	0x0137f008,
-	0x058521f5,
-/* 0x05f4: i2c_raise_scl_wait */
+	0x059d21f5,
+/* 0x060c: i2c_raise_scl_wait */
 	0x03e8e7f1,
 	0xf56721f4,
-	0xf405bd21,
+	0xf405d521,
 	0x42b60901,
 	0xef1bf401,
-/* 0x0608: i2c_raise_scl_done */
+/* 0x0620: i2c_raise_scl_done */
 	0x00f840fc,
-/* 0x060c: i2c_start */
-	0x05bd21f5,
+/* 0x0624: i2c_start */
+	0x05d521f5,
 	0xf50d11f4,
-	0xf405d221,
+	0xf405ea21,
 	0x0ef40611,
-/* 0x061d: i2c_start_rep */
+/* 0x0635: i2c_start_rep */
 	0x0037f030,
-	0x058521f5,
+	0x059d21f5,
 	0xf50137f0,
-	0xbb05a121,
+	0xbb05b921,
 	0x65b60076,
 	0x9450f904,
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x05e721f5,
+	0x05ff21f5,
 	0xf40464b6,
-/* 0x064a: i2c_start_send */
+/* 0x0662: i2c_start_send */
 	0x37f01f11,
-	0xa121f500,
+	0xb921f500,
 	0x88e7f105,
 	0x6721f413,
 	0xf50037f0,
-	0xf1058521,
+	0xf1059d21,
 	0xf41388e7,
-/* 0x0666: i2c_start_out */
+/* 0x067e: i2c_start_out */
 	0x00f86721,
-/* 0x0668: i2c_stop */
+/* 0x0680: i2c_stop */
 	0xf50037f0,
-	0xf0058521,
+	0xf0059d21,
 	0x21f50037,
-	0xe7f105a1,
+	0xe7f105b9,
 	0x21f403e8,
 	0x0137f067,
-	0x058521f5,
+	0x059d21f5,
 	0x1388e7f1,
 	0xf06721f4,
 	0x21f50137,
-	0xe7f105a1,
+	0xe7f105b9,
 	0x21f41388,
-/* 0x069b: i2c_bitw */
+/* 0x06b3: i2c_bitw */
 	0xf500f867,
-	0xf105a121,
+	0xf105b921,
 	0xf403e8e7,
 	0x76bb6721,
 	0x0465b600,
@@ -1290,18 +1296,18 @@ uint32_t nvd0_pwr_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb605e721,
+	0xb605ff21,
 	0x11f40464,
 	0x88e7f118,
 	0x6721f413,
 	0xf50037f0,
-	0xf1058521,
+	0xf1059d21,
 	0xf41388e7,
-/* 0x06da: i2c_bitw_out */
+/* 0x06f2: i2c_bitw_out */
 	0x00f86721,
-/* 0x06dc: i2c_bitr */
+/* 0x06f4: i2c_bitr */
 	0xf50137f0,
-	0xf105a121,
+	0xf105b921,
 	0xf403e8e7,
 	0x76bb6721,
 	0x0465b600,
@@ -1309,26 +1315,26 @@ uint32_t nvd0_pwr_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb605e721,
+	0xb605ff21,
 	0x11f40464,
-	0xd221f51b,
+	0xea21f51b,
 	0x0037f005,
-	0x058521f5,
+	0x059d21f5,
 	0x1388e7f1,
 	0xf06721f4,
 	0x31f4013c,
-/* 0x0721: i2c_bitr_done */
-/* 0x0723: i2c_get_byte */
+/* 0x0739: i2c_bitr_done */
+/* 0x073b: i2c_get_byte */
 	0xf000f801,
 	0x47f00057,
-/* 0x0729: i2c_get_byte_next */
+/* 0x0741: i2c_get_byte_next */
 	0x0154b608,
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0xdc21f550,
+	0xf421f550,
 	0x0464b606,
 	0xfd2b11f4,
 	0x42b60553,
@@ -1339,12 +1345,12 @@ uint32_t nvd0_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x069b21f5,
-/* 0x0773: i2c_get_byte_done */
+	0x06b321f5,
+/* 0x078b: i2c_get_byte_done */
 	0xf80464b6,
-/* 0x0775: i2c_put_byte */
+/* 0x078d: i2c_put_byte */
 	0x0847f000,
-/* 0x0778: i2c_put_byte_next */
+/* 0x0790: i2c_put_byte_next */
 	0xff0142b6,
 	0x76bb3854,
 	0x0465b600,
@@ -1352,7 +1358,7 @@ uint32_t nvd0_pwr_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb6069b21,
+	0xb606b321,
 	0x11f40464,
 	0x0046b034,
 	0xbbd81bf4,
@@ -1361,20 +1367,20 @@ uint32_t nvd0_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x06dc21f5,
+	0x06f421f5,
 	0xf40464b6,
 	0x76bb0f11,
 	0x0136b000,
 	0xf4061bf4,
-/* 0x07ce: i2c_put_byte_done */
+/* 0x07e6: i2c_put_byte_done */
 	0x00f80132,
-/* 0x07d0: i2c_addr */
+/* 0x07e8: i2c_addr */
 	0xb60076bb,
 	0x50f90465,
 	0xbb046594,
 	0x50bd0256,
 	0xfc0475fd,
-	0x0c21f550,
+	0x2421f550,
 	0x0464b606,
 	0xe72911f4,
 	0xb6012ec3,
@@ -1385,23 +1391,23 @@ uint32_t nvd0_pwr_code[] = {
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b60775,
-/* 0x0815: i2c_addr_done */
-/* 0x0817: i2c_acquire_addr */
+	0x64b6078d,
+/* 0x082d: i2c_addr_done */
+/* 0x082f: i2c_acquire_addr */
 	0xc700f804,
 	0xe4b6f8ce,
 	0x14e0b705,
-/* 0x0823: i2c_acquire */
+/* 0x083b: i2c_acquire */
 	0xf500f8d0,
-	0xf4081721,
+	0xf4082f21,
 	0xd9f00421,
 	0x3321f403,
-/* 0x0832: i2c_release */
+/* 0x084a: i2c_release */
 	0x21f500f8,
-	0x21f40817,
+	0x21f4082f,
 	0x03daf004,
 	0xf83321f4,
-/* 0x0841: i2c_recv */
+/* 0x0859: i2c_recv */
 	0x0132f400,
 	0xb6f8c1c7,
 	0x16b00214,
@@ -1420,7 +1426,7 @@ uint32_t nvd0_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x082321f5,
+	0x083b21f5,
 	0xfc0464b6,
 	0x00d6b0d0,
 	0x00b31bf5,
@@ -1430,7 +1436,7 @@ uint32_t nvd0_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x07d021f5,
+	0x07e821f5,
 	0xf50464b6,
 	0xc700d011,
 	0x76bbe0c5,
@@ -1439,7 +1445,7 @@ uint32_t nvd0_pwr_code[] = {
 	0x0256bb04,
 	0x75fd50bd,
 	0xf550fc04,
-	0xb6077521,
+	0xb6078d21,
 	0x11f50464,
 	0x57f000ad,
 	0x0076bb01,
@@ -1448,7 +1454,7 @@ uint32_t nvd0_pwr_code[] = {
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b607d0,
+	0x64b607e8,
 	0x8a11f504,
 	0x0076bb00,
 	0xf90465b6,
@@ -1456,7 +1462,7 @@ uint32_t nvd0_pwr_code[] = {
 	0xbd0256bb,
 	0x0475fd50,
 	0x21f550fc,
-	0x64b60723,
+	0x64b6073b,
 	0x6a11f404,
 	0xbbe05bcb,
 	0x65b60076,
@@ -1464,38 +1470,38 @@ uint32_t nvd0_pwr_code[] = {
 	0x56bb0465,
 	0xfd50bd02,
 	0x50fc0475,
-	0x066821f5,
+	0x068021f5,
 	0xb90464b6,
 	0x74bd025b,
-/* 0x0947: i2c_recv_not_rd08 */
+/* 0x095f: i2c_recv_not_rd08 */
 	0xb0430ef4,
 	0x1bf401d6,
 	0x0057f03d,
-	0x07d021f5,
+	0x07e821f5,
 	0xc73311f4,
 	0x21f5e0c5,
-	0x11f40775,
+	0x11f4078d,
 	0x0057f029,
-	0x07d021f5,
+	0x07e821f5,
 	0xc71f11f4,
 	0x21f5e0b5,
-	0x11f40775,
-	0x6821f515,
+	0x11f4078d,
+	0x8021f515,
 	0xc774bd06,
 	0x1bf408c5,
 	0x0232f409,
-/* 0x0987: i2c_recv_not_wr08 */
-/* 0x0987: i2c_recv_done */
+/* 0x099f: i2c_recv_not_wr08 */
+/* 0x099f: i2c_recv_done */
 	0xc7030ef4,
 	0x21f5f8ce,
-	0xe0fc0832,
+	0xe0fc084a,
 	0x12f4d0fc,
 	0x027cb90a,
-	0x02e121f5,
-/* 0x099c: i2c_recv_exit */
-/* 0x099e: i2c_init */
+	0x02f121f5,
+/* 0x09b4: i2c_recv_exit */
+/* 0x09b6: i2c_init */
 	0x00f800f8,
-/* 0x09a0: test_recv */
+/* 0x09b8: test_recv */
 	0x05d817f1,
 	0xb60011cf,
 	0x07f10110,
@@ -1503,29 +1509,29 @@ uint32_t nvd0_pwr_code[] = {
 	0xf104bd00,
 	0xf1d900e7,
 	0xf5134fe3,
-	0xf8021321,
-/* 0x09c1: test_init */
+	0xf8022321,
+/* 0x09d9: test_init */
 	0x00e7f100,
-	0x1321f508,
-/* 0x09cb: idle_recv */
+	0x2321f508,
+/* 0x09e3: idle_recv */
 	0xf800f802,
-/* 0x09cd: idle */
+/* 0x09e5: idle */
 	0x0031f400,
 	0x05d417f1,
 	0xb60011cf,
 	0x07f10110,
 	0x01d005d4,
-/* 0x09e3: idle_loop */
+/* 0x09fb: idle_loop */
 	0xf004bd00,
 	0x32f45817,
-/* 0x09e9: idle_proc */
-/* 0x09e9: idle_proc_exec */
+/* 0x0a01: idle_proc */
+/* 0x0a01: idle_proc_exec */
 	0xb910f902,
 	0x21f5021e,
-	0x10fc02ea,
+	0x10fc02fa,
 	0xf40911f4,
 	0x0ef40231,
-/* 0x09fd: idle_proc_next */
+/* 0x0a15: idle_proc_next */
 	0x5810b6ef,
 	0xf4061fb8,
 	0x02f4e61b,
@@ -1585,10 +1591,4 @@ uint32_t nvd0_pwr_code[] = {
 	0x00000000,
 	0x00000000,
 	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
 };