diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hub.fuc b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hub.fuc
index c02f23ca28c6d07b694898f3d826ba180afd7fa4..c8ddb8d71b915c668c7b116f1b7f9cf9547289b3 100644
--- a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hub.fuc
+++ b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hub.fuc
@@ -87,8 +87,8 @@ init:
 	clear b32 $r2
 	nv_iowr(NV_PGRAPH_FECS_INTR_ROUTE, 0, $r2)
 
-	// route HUB_CHANNEL_SWITCH to fuc interrupt 8
-	mov $r2 0x2003		// { HUB_CHANNEL_SWITCH, ZERO } -> intr 8
+	// route HUB_CHSW_PULSE to fuc interrupt 8
+	mov $r2 0x2003		// { HUB_CHSW_PULSE, ZERO } -> intr 8
 	nv_iowr(NV_PGRAPH_FECS_IROUTE, 0, $r2)
 
 	// not sure what these are, route them because NVIDIA does, and
@@ -97,7 +97,7 @@ init:
 	//
 	mov $r2 0x2004		// { 0x04, ZERO } -> intr 9
 	nv_iowr(NV_PGRAPH_FECS_IROUTE, 1, $r2)
-	mov $r2 0x200b		// { 0x0b, ZERO } -> intr 10
+	mov $r2 0x200b		// { HUB_FIRMWARE_MTHD, ZERO } -> intr 10
 	nv_iowr(NV_PGRAPH_FECS_IROUTE, 2, $r2)
 	mov $r2 0x200c		// { 0x0c, ZERO } -> intr 15
 	nv_iowr(NV_PGRAPH_FECS_IROUTE, 7, $r2)
@@ -106,7 +106,7 @@ init:
 	sub b32 $r3 $r0 1
 	nv_iowr(NV_PGRAPH_FECS_INTR_UP_EN, 0, $r3)
 
-	// enable fifo, ctxsw, 9, 10, 15 interrupts
+	// enable fifo, ctxsw, 9, fwmthd, 15 interrupts
 	imm32($r2, 0x8704)
 	nv_iowr(NV_PGRAPH_FECS_INTR_EN_SET, 0, $r2)
 
@@ -339,8 +339,16 @@ ih:
 		mov $r14 0x4001
 		call(queue_put)
 
-	// anything we didn't handle, bring it to the host's attention
+	// firmware method?
 	ih_no_ctxsw:
+	and $r11 $r10 NV_PGRAPH_FECS_INTR_FWMTHD
+	bra e #ih_no_fwmthd
+		// none we handle, ack, and fall-through to unhandled
+		mov $r11 0x100
+		nv_wr32(0x400144, $r11)
+
+	// anything we didn't handle, bring it to the host's attention
+	ih_no_fwmthd:
 	mov $r11 0x104 // FIFO | CHSW
 	not b32 $r11
 	and $r11 $r10 $r11
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnv108.fuc5.h b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnv108.fuc5.h
index d8c911e9f24a7c01fb943a2cd3197459f1a33a89..4750984bf380a0dede5c0416330f448e1041ccd1 100644
--- a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnv108.fuc5.h
+++ b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnv108.fuc5.h
@@ -478,10 +478,10 @@ uint32_t nv108_grhub_code[] = {
 	0x01040080,
 	0xbd0001f6,
 	0x01004104,
-	0x4e7e020f,
-	0x5d7e0006,
+	0x627e020f,
+	0x717e0006,
 	0x100f0006,
-	0x00069f7e,
+	0x0006b37e,
 	0x98000e98,
 	0x207e010f,
 	0x14950001,
@@ -523,8 +523,8 @@ uint32_t nv108_grhub_code[] = {
 	0x800040b7,
 	0xf40132b6,
 	0x000fb41b,
-	0x00069f7e,
-	0x4e7e000f,
+	0x0006b37e,
+	0x627e000f,
 	0x00800006,
 	0x01f60201,
 	0xbd04bd00,
@@ -554,7 +554,7 @@ uint32_t nv108_grhub_code[] = {
 	0x0009f602,
 	0x32f404bd,
 	0x0231f401,
-	0x0008227e,
+	0x0008367e,
 	0x99f094bd,
 	0x17008007,
 	0x0009f602,
@@ -563,7 +563,7 @@ uint32_t nv108_grhub_code[] = {
 	0x37008006,
 	0x0009f602,
 	0x31f404bd,
-	0x08227e01,
+	0x08367e01,
 	0xf094bd00,
 	0x00800699,
 	0x09f60217,
@@ -572,7 +572,7 @@ uint32_t nv108_grhub_code[] = {
 	0x20f92f0e,
 	0x32f412b2,
 	0x0232f401,
-	0x0008227e,
+	0x0008367e,
 	0x008020fc,
 	0x02f602c0,
 	0xf404bd00,
@@ -580,7 +580,7 @@ uint32_t nv108_grhub_code[] = {
 	0x23c8130e,
 	0x0d0bf41f,
 	0xf40131f4,
-	0x227e0232,
+	0x367e0232,
 /* 0x054e: chsw_done */
 	0x01020008,
 	0x02c30080,
@@ -593,7 +593,7 @@ uint32_t nv108_grhub_code[] = {
 	0xb0ff2a0e,
 	0x1bf401e4,
 	0x7ef2b20c,
-	0xf40007c2,
+	0xf40007d6,
 /* 0x057a: main_not_ctx_chan */
 	0xe4b0400e,
 	0x2c1bf402,
@@ -602,7 +602,7 @@ uint32_t nv108_grhub_code[] = {
 	0x0009f602,
 	0x32f404bd,
 	0x0232f401,
-	0x0008227e,
+	0x0008367e,
 	0x99f094bd,
 	0x17008007,
 	0x0009f602,
@@ -640,12 +640,18 @@ uint32_t nv108_grhub_code[] = {
 	0x4e100d0c,
 	0x047e4001,
 /* 0x061a: ih_no_ctxsw */
+	0xabe40000,
+	0x0bf40400,
+	0x01004b10,
+	0x448ebfb2,
+	0x8f7e4001,
+/* 0x062e: ih_no_fwmthd */
 	0x044b0000,
 	0xffb0bd01,
 	0x0bf4b4ab,
 	0x0700800c,
 	0x000bf603,
-/* 0x062e: ih_no_other */
+/* 0x0642: ih_no_other */
 	0x004004bd,
 	0x000af601,
 	0xf0fc04bd,
@@ -654,31 +660,31 @@ uint32_t nv108_grhub_code[] = {
 	0x80fc90fc,
 	0xfc0088fe,
 	0x0032f480,
-/* 0x064e: ctx_4170s */
+/* 0x0662: ctx_4170s */
 	0xf5f001f8,
 	0x8effb210,
 	0x7e404170,
 	0xf800008f,
-/* 0x065d: ctx_4170w */
+/* 0x0671: ctx_4170w */
 	0x41708e00,
 	0x00657e40,
 	0xf0ffb200,
 	0x1bf410f4,
-/* 0x066f: ctx_redswitch */
+/* 0x0683: ctx_redswitch */
 	0x4e00f8f3,
 	0xe5f00200,
 	0x20e5f040,
 	0x8010e5f0,
 	0xf6018500,
 	0x04bd000e,
-/* 0x0686: ctx_redswitch_delay */
+/* 0x069a: ctx_redswitch_delay */
 	0xf2b6080f,
 	0xfd1bf401,
 	0x0400e5f1,
 	0x0100e5f1,
 	0x01850080,
 	0xbd000ef6,
-/* 0x069f: ctx_86c */
+/* 0x06b3: ctx_86c */
 	0x8000f804,
 	0xf6022300,
 	0x04bd000f,
@@ -687,15 +693,15 @@ uint32_t nv108_grhub_code[] = {
 	0xffb20000,
 	0x41a88c8e,
 	0x00008f7e,
-/* 0x06be: ctx_mem */
+/* 0x06d2: ctx_mem */
 	0x008000f8,
 	0x0ff60284,
-/* 0x06c7: ctx_mem_wait */
+/* 0x06db: ctx_mem_wait */
 	0x8f04bd00,
 	0xcf028400,
 	0xfffd00ff,
 	0xf61bf405,
-/* 0x06d6: ctx_load */
+/* 0x06ea: ctx_load */
 	0x94bd00f8,
 	0x800599f0,
 	0xf6023700,
@@ -709,7 +715,7 @@ uint32_t nv108_grhub_code[] = {
 	0x008004bd,
 	0x02f60283,
 	0x0f04bd00,
-	0x06be7e07,
+	0x06d27e07,
 	0xc0008000,
 	0x0002f602,
 	0x0bfe04bd,
@@ -755,28 +761,28 @@ uint32_t nv108_grhub_code[] = {
 	0x800599f0,
 	0xf6021700,
 	0x04bd0009,
-/* 0x07c2: ctx_chan */
-	0xd67e00f8,
+/* 0x07d6: ctx_chan */
+	0xea7e00f8,
 	0x0c0a0006,
 	0x0000b87e,
-	0xbe7e050f,
+	0xd27e050f,
 	0x00f80006,
-/* 0x07d4: ctx_mmio_exec */
+/* 0x07e8: ctx_mmio_exec */
 	0x80410398,
 	0xf6028100,
 	0x04bd0003,
-/* 0x07e2: ctx_mmio_loop */
+/* 0x07f6: ctx_mmio_loop */
 	0x34c434bd,
 	0x0e1bf4ff,
 	0xf0020045,
 	0x35fa0653,
-/* 0x07f3: ctx_mmio_pull */
+/* 0x0807: ctx_mmio_pull */
 	0x9803f805,
 	0x4f98804e,
 	0x008f7e81,
 	0x0830b600,
 	0xf40112b6,
-/* 0x0806: ctx_mmio_done */
+/* 0x081a: ctx_mmio_done */
 	0x0398df1b,
 	0x81008016,
 	0x0003f602,
@@ -784,27 +790,27 @@ uint32_t nv108_grhub_code[] = {
 	0x01004140,
 	0xfa0613f0,
 	0x03f80601,
-/* 0x0822: ctx_xfer */
+/* 0x0836: ctx_xfer */
 	0x040e00f8,
 	0x03020080,
 	0xbd000ef6,
-/* 0x082d: ctx_xfer_idle */
+/* 0x0841: ctx_xfer_idle */
 	0x00008e04,
 	0x00eecf03,
 	0x2000e4f1,
 	0xf4f51bf4,
 	0x02f40611,
-/* 0x0841: ctx_xfer_pre */
+/* 0x0855: ctx_xfer_pre */
 	0x7e100f0c,
-	0xf400069f,
-/* 0x084a: ctx_xfer_pre_load */
+	0xf40006b3,
+/* 0x085e: ctx_xfer_pre_load */
 	0x020f1b11,
-	0x00064e7e,
-	0x00065d7e,
-	0x00066f7e,
-	0x4e7ef4bd,
-	0xd67e0006,
-/* 0x0862: ctx_xfer_exec */
+	0x0006627e,
+	0x0006717e,
+	0x0006837e,
+	0x627ef4bd,
+	0xea7e0006,
+/* 0x0876: ctx_xfer_exec */
 	0x01980006,
 	0x8024bd16,
 	0xf6010500,
@@ -835,21 +841,21 @@ uint32_t nv108_grhub_code[] = {
 	0x0a1201f4,
 	0x00b87e0c,
 	0x7e050f00,
-	0xf40006be,
-/* 0x08de: ctx_xfer_post */
+	0xf40006d2,
+/* 0x08f2: ctx_xfer_post */
 	0x020f2d02,
-	0x00064e7e,
-	0x9f7ef4bd,
+	0x0006627e,
+	0xb37ef4bd,
 	0x277e0006,
-	0x5d7e0002,
+	0x717e0002,
 	0xf4bd0006,
-	0x00064e7e,
+	0x0006627e,
 	0x981011f4,
 	0x11fd4001,
 	0x070bf405,
-	0x0007d47e,
-/* 0x0908: ctx_xfer_no_post_mmio */
-/* 0x0908: ctx_xfer_done */
+	0x0007e87e,
+/* 0x091c: ctx_xfer_no_post_mmio */
+/* 0x091c: ctx_xfer_done */
 	0x000000f8,
 	0x00000000,
 	0x00000000,
@@ -907,9 +913,4 @@ uint32_t nv108_grhub_code[] = {
 	0x00000000,
 	0x00000000,
 	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
 };
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvc0.fuc.h b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvc0.fuc.h
index b061eef4c0b3df6fd89223b834d34c3a7088b340..132f684b1946a9357697eace024fa866af43b72f 100644
--- a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvc0.fuc.h
+++ b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvc0.fuc.h
@@ -528,10 +528,10 @@ uint32_t nvc0_grhub_code[] = {
 	0x0001d001,
 	0x17f104bd,
 	0xf7f00100,
-	0x9d21f502,
-	0xaf21f507,
+	0xb521f502,
+	0xc721f507,
 	0x10f7f007,
-	0x07fc21f5,
+	0x081421f5,
 	0x98000e98,
 	0x21f5010f,
 	0x14950150,
@@ -574,9 +574,9 @@ uint32_t nvc0_grhub_code[] = {
 	0xb6800040,
 	0x1bf40132,
 	0x00f7f0be,
-	0x07fc21f5,
+	0x081421f5,
 	0xf500f7f0,
-	0xf1079d21,
+	0xf107b521,
 	0xf0010007,
 	0x01d00203,
 	0xbd04bd00,
@@ -610,7 +610,7 @@ uint32_t nvc0_grhub_code[] = {
 	0x09d00203,
 	0xf404bd00,
 	0x31f40132,
-	0xd021f502,
+	0xe821f502,
 	0xf094bd09,
 	0x07f10799,
 	0x03f01700,
@@ -621,7 +621,7 @@ uint32_t nvc0_grhub_code[] = {
 	0x0203f00f,
 	0xbd0009d0,
 	0x0131f404,
-	0x09d021f5,
+	0x09e821f5,
 	0x99f094bd,
 	0x0007f106,
 	0x0203f017,
@@ -631,7 +631,7 @@ uint32_t nvc0_grhub_code[] = {
 	0x12b920f9,
 	0x0132f402,
 	0xf50232f4,
-	0xfc09d021,
+	0xfc09e821,
 	0x0007f120,
 	0x0203f0c0,
 	0xbd0002d0,
@@ -640,7 +640,7 @@ uint32_t nvc0_grhub_code[] = {
 	0xf41f23c8,
 	0x31f40d0b,
 	0x0232f401,
-	0x09d021f5,
+	0x09e821f5,
 /* 0x063c: chsw_done */
 	0xf10127f0,
 	0xf0c30007,
@@ -654,7 +654,7 @@ uint32_t nvc0_grhub_code[] = {
 /* 0x0660: main_not_ctx_switch */
 	0xf401e4b0,
 	0xf2b90d1b,
-	0x6021f502,
+	0x7821f502,
 	0x460ef409,
 /* 0x0670: main_not_ctx_chan */
 	0xf402e4b0,
@@ -664,7 +664,7 @@ uint32_t nvc0_grhub_code[] = {
 	0x09d00203,
 	0xf404bd00,
 	0x32f40132,
-	0xd021f502,
+	0xe821f502,
 	0xf094bd09,
 	0x07f10799,
 	0x03f01700,
@@ -708,13 +708,20 @@ uint32_t nvc0_grhub_code[] = {
 	0x10d7f00d,
 	0x4001e7f1,
 /* 0x072b: ih_no_ctxsw */
-	0xf10421f4,
+	0xe40421f4,
+	0xf40400ab,
+	0xb7f1140b,
+	0xbfb90100,
+	0x44e7f102,
+	0x40e3f001,
+/* 0x0743: ih_no_fwmthd */
+	0xf19d21f4,
 	0xbd0104b7,
 	0xb4abffb0,
 	0xf10f0bf4,
 	0xf0070007,
 	0x0bd00303,
-/* 0x0743: ih_no_other */
+/* 0x075b: ih_no_other */
 	0xf104bd00,
 	0xf0010007,
 	0x0ad00003,
@@ -724,36 +731,36 @@ uint32_t nvc0_grhub_code[] = {
 	0xfc90fca0,
 	0x0088fe80,
 	0x32f480fc,
-/* 0x0767: ctx_4160s */
+/* 0x077f: ctx_4160s */
 	0xf001f800,
 	0xffb901f7,
 	0x60e7f102,
 	0x40e3f041,
-/* 0x0777: ctx_4160s_wait */
+/* 0x078f: ctx_4160s_wait */
 	0xf19d21f4,
 	0xf04160e7,
 	0x21f440e3,
 	0x02ffb968,
 	0xf404ffc8,
 	0x00f8f00b,
-/* 0x078c: ctx_4160c */
+/* 0x07a4: ctx_4160c */
 	0xffb9f4bd,
 	0x60e7f102,
 	0x40e3f041,
 	0xf89d21f4,
-/* 0x079d: ctx_4170s */
+/* 0x07b5: ctx_4170s */
 	0x10f5f000,
 	0xf102ffb9,
 	0xf04170e7,
 	0x21f440e3,
-/* 0x07af: ctx_4170w */
+/* 0x07c7: ctx_4170w */
 	0xf100f89d,
 	0xf04170e7,
 	0x21f440e3,
 	0x02ffb968,
 	0xf410f4f0,
 	0x00f8f01b,
-/* 0x07c4: ctx_redswitch */
+/* 0x07dc: ctx_redswitch */
 	0x0200e7f1,
 	0xf040e5f0,
 	0xe5f020e5,
@@ -761,7 +768,7 @@ uint32_t nvc0_grhub_code[] = {
 	0x0103f085,
 	0xbd000ed0,
 	0x08f7f004,
-/* 0x07e0: ctx_redswitch_delay */
+/* 0x07f8: ctx_redswitch_delay */
 	0xf401f2b6,
 	0xe5f1fd1b,
 	0xe5f10400,
@@ -769,7 +776,7 @@ uint32_t nvc0_grhub_code[] = {
 	0x03f08500,
 	0x000ed001,
 	0x00f804bd,
-/* 0x07fc: ctx_86c */
+/* 0x0814: ctx_86c */
 	0x1b0007f1,
 	0xd00203f0,
 	0x04bd000f,
@@ -780,16 +787,16 @@ uint32_t nvc0_grhub_code[] = {
 	0xa86ce7f1,
 	0xf441e3f0,
 	0x00f89d21,
-/* 0x0824: ctx_mem */
+/* 0x083c: ctx_mem */
 	0x840007f1,
 	0xd00203f0,
 	0x04bd000f,
-/* 0x0830: ctx_mem_wait */
+/* 0x0848: ctx_mem_wait */
 	0x8400f7f1,
 	0xcf02f3f0,
 	0xfffd00ff,
 	0xf31bf405,
-/* 0x0842: ctx_load */
+/* 0x085a: ctx_load */
 	0x94bd00f8,
 	0xf10599f0,
 	0xf00f0007,
@@ -807,7 +814,7 @@ uint32_t nvc0_grhub_code[] = {
 	0x02d00203,
 	0xf004bd00,
 	0x21f507f7,
-	0x07f10824,
+	0x07f1083c,
 	0x03f0c000,
 	0x0002d002,
 	0x0bfe04bd,
@@ -862,31 +869,31 @@ uint32_t nvc0_grhub_code[] = {
 	0x03f01700,
 	0x0009d002,
 	0x00f804bd,
-/* 0x0960: ctx_chan */
-	0x076721f5,
-	0x084221f5,
+/* 0x0978: ctx_chan */
+	0x077f21f5,
+	0x085a21f5,
 	0xf40ca7f0,
 	0xf7f0d021,
-	0x2421f505,
-	0x8c21f508,
-/* 0x097b: ctx_mmio_exec */
+	0x3c21f505,
+	0xa421f508,
+/* 0x0993: ctx_mmio_exec */
 	0x9800f807,
 	0x07f14103,
 	0x03f08100,
 	0x0003d002,
 	0x34bd04bd,
-/* 0x098c: ctx_mmio_loop */
+/* 0x09a4: ctx_mmio_loop */
 	0xf4ff34c4,
 	0x57f10f1b,
 	0x53f00200,
 	0x0535fa06,
-/* 0x099e: ctx_mmio_pull */
+/* 0x09b6: ctx_mmio_pull */
 	0x4e9803f8,
 	0x814f9880,
 	0xb69d21f4,
 	0x12b60830,
 	0xdf1bf401,
-/* 0x09b0: ctx_mmio_done */
+/* 0x09c8: ctx_mmio_done */
 	0xf1160398,
 	0xf0810007,
 	0x03d00203,
@@ -895,30 +902,30 @@ uint32_t nvc0_grhub_code[] = {
 	0x13f00100,
 	0x0601fa06,
 	0x00f803f8,
-/* 0x09d0: ctx_xfer */
+/* 0x09e8: ctx_xfer */
 	0xf104e7f0,
 	0xf0020007,
 	0x0ed00303,
-/* 0x09df: ctx_xfer_idle */
+/* 0x09f7: ctx_xfer_idle */
 	0xf104bd00,
 	0xf00000e7,
 	0xeecf03e3,
 	0x00e4f100,
 	0xf21bf420,
 	0xf40611f4,
-/* 0x09f6: ctx_xfer_pre */
+/* 0x0a0e: ctx_xfer_pre */
 	0xf7f01102,
-	0xfc21f510,
-	0x6721f507,
+	0x1421f510,
+	0x7f21f508,
 	0x1c11f407,
-/* 0x0a04: ctx_xfer_pre_load */
+/* 0x0a1c: ctx_xfer_pre_load */
 	0xf502f7f0,
-	0xf5079d21,
-	0xf507af21,
-	0xbd07c421,
-	0x9d21f5f4,
-	0x4221f507,
-/* 0x0a1d: ctx_xfer_exec */
+	0xf507b521,
+	0xf507c721,
+	0xbd07dc21,
+	0xb521f5f4,
+	0x5a21f507,
+/* 0x0a35: ctx_xfer_exec */
 	0x16019808,
 	0x07f124bd,
 	0x03f00500,
@@ -953,29 +960,23 @@ uint32_t nvc0_grhub_code[] = {
 	0x1301f402,
 	0xf40ca7f0,
 	0xf7f0d021,
-	0x2421f505,
+	0x3c21f505,
 	0x3202f408,
-/* 0x0aac: ctx_xfer_post */
+/* 0x0ac4: ctx_xfer_post */
 	0xf502f7f0,
-	0xbd079d21,
-	0xfc21f5f4,
-	0x7f21f507,
-	0xaf21f502,
+	0xbd07b521,
+	0x1421f5f4,
+	0x7f21f508,
+	0xc721f502,
 	0xf5f4bd07,
-	0xf4079d21,
+	0xf407b521,
 	0x01981011,
 	0x0511fd40,
 	0xf5070bf4,
-/* 0x0ad7: ctx_xfer_no_post_mmio */
-	0xf5097b21,
-/* 0x0adb: ctx_xfer_done */
-	0xf8078c21,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
+/* 0x0aef: ctx_xfer_no_post_mmio */
+	0xf5099321,
+/* 0x0af3: ctx_xfer_done */
+	0xf807a421,
 	0x00000000,
 	0x00000000,
 	0x00000000,
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvd7.fuc.h b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvd7.fuc.h
index 469990713002edc214a13dc2136b73ab144fe18a..84af8241898764bfef6116d881c0425346684ee2 100644
--- a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvd7.fuc.h
+++ b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvd7.fuc.h
@@ -528,10 +528,10 @@ uint32_t nvd7_grhub_code[] = {
 	0x0001d001,
 	0x17f104bd,
 	0xf7f00100,
-	0x9d21f502,
-	0xaf21f507,
+	0xb521f502,
+	0xc721f507,
 	0x10f7f007,
-	0x07fc21f5,
+	0x081421f5,
 	0x98000e98,
 	0x21f5010f,
 	0x14950150,
@@ -574,9 +574,9 @@ uint32_t nvd7_grhub_code[] = {
 	0xb6800040,
 	0x1bf40132,
 	0x00f7f0be,
-	0x07fc21f5,
+	0x081421f5,
 	0xf500f7f0,
-	0xf1079d21,
+	0xf107b521,
 	0xf0010007,
 	0x01d00203,
 	0xbd04bd00,
@@ -610,7 +610,7 @@ uint32_t nvd7_grhub_code[] = {
 	0x09d00203,
 	0xf404bd00,
 	0x31f40132,
-	0xd021f502,
+	0xe821f502,
 	0xf094bd09,
 	0x07f10799,
 	0x03f01700,
@@ -621,7 +621,7 @@ uint32_t nvd7_grhub_code[] = {
 	0x0203f00f,
 	0xbd0009d0,
 	0x0131f404,
-	0x09d021f5,
+	0x09e821f5,
 	0x99f094bd,
 	0x0007f106,
 	0x0203f017,
@@ -631,7 +631,7 @@ uint32_t nvd7_grhub_code[] = {
 	0x12b920f9,
 	0x0132f402,
 	0xf50232f4,
-	0xfc09d021,
+	0xfc09e821,
 	0x0007f120,
 	0x0203f0c0,
 	0xbd0002d0,
@@ -640,7 +640,7 @@ uint32_t nvd7_grhub_code[] = {
 	0xf41f23c8,
 	0x31f40d0b,
 	0x0232f401,
-	0x09d021f5,
+	0x09e821f5,
 /* 0x063c: chsw_done */
 	0xf10127f0,
 	0xf0c30007,
@@ -654,7 +654,7 @@ uint32_t nvd7_grhub_code[] = {
 /* 0x0660: main_not_ctx_switch */
 	0xf401e4b0,
 	0xf2b90d1b,
-	0x6021f502,
+	0x7821f502,
 	0x460ef409,
 /* 0x0670: main_not_ctx_chan */
 	0xf402e4b0,
@@ -664,7 +664,7 @@ uint32_t nvd7_grhub_code[] = {
 	0x09d00203,
 	0xf404bd00,
 	0x32f40132,
-	0xd021f502,
+	0xe821f502,
 	0xf094bd09,
 	0x07f10799,
 	0x03f01700,
@@ -708,13 +708,20 @@ uint32_t nvd7_grhub_code[] = {
 	0x10d7f00d,
 	0x4001e7f1,
 /* 0x072b: ih_no_ctxsw */
-	0xf10421f4,
+	0xe40421f4,
+	0xf40400ab,
+	0xb7f1140b,
+	0xbfb90100,
+	0x44e7f102,
+	0x40e3f001,
+/* 0x0743: ih_no_fwmthd */
+	0xf19d21f4,
 	0xbd0104b7,
 	0xb4abffb0,
 	0xf10f0bf4,
 	0xf0070007,
 	0x0bd00303,
-/* 0x0743: ih_no_other */
+/* 0x075b: ih_no_other */
 	0xf104bd00,
 	0xf0010007,
 	0x0ad00003,
@@ -724,36 +731,36 @@ uint32_t nvd7_grhub_code[] = {
 	0xfc90fca0,
 	0x0088fe80,
 	0x32f480fc,
-/* 0x0767: ctx_4160s */
+/* 0x077f: ctx_4160s */
 	0xf001f800,
 	0xffb901f7,
 	0x60e7f102,
 	0x40e3f041,
-/* 0x0777: ctx_4160s_wait */
+/* 0x078f: ctx_4160s_wait */
 	0xf19d21f4,
 	0xf04160e7,
 	0x21f440e3,
 	0x02ffb968,
 	0xf404ffc8,
 	0x00f8f00b,
-/* 0x078c: ctx_4160c */
+/* 0x07a4: ctx_4160c */
 	0xffb9f4bd,
 	0x60e7f102,
 	0x40e3f041,
 	0xf89d21f4,
-/* 0x079d: ctx_4170s */
+/* 0x07b5: ctx_4170s */
 	0x10f5f000,
 	0xf102ffb9,
 	0xf04170e7,
 	0x21f440e3,
-/* 0x07af: ctx_4170w */
+/* 0x07c7: ctx_4170w */
 	0xf100f89d,
 	0xf04170e7,
 	0x21f440e3,
 	0x02ffb968,
 	0xf410f4f0,
 	0x00f8f01b,
-/* 0x07c4: ctx_redswitch */
+/* 0x07dc: ctx_redswitch */
 	0x0200e7f1,
 	0xf040e5f0,
 	0xe5f020e5,
@@ -761,7 +768,7 @@ uint32_t nvd7_grhub_code[] = {
 	0x0103f085,
 	0xbd000ed0,
 	0x08f7f004,
-/* 0x07e0: ctx_redswitch_delay */
+/* 0x07f8: ctx_redswitch_delay */
 	0xf401f2b6,
 	0xe5f1fd1b,
 	0xe5f10400,
@@ -769,7 +776,7 @@ uint32_t nvd7_grhub_code[] = {
 	0x03f08500,
 	0x000ed001,
 	0x00f804bd,
-/* 0x07fc: ctx_86c */
+/* 0x0814: ctx_86c */
 	0x1b0007f1,
 	0xd00203f0,
 	0x04bd000f,
@@ -780,16 +787,16 @@ uint32_t nvd7_grhub_code[] = {
 	0xa86ce7f1,
 	0xf441e3f0,
 	0x00f89d21,
-/* 0x0824: ctx_mem */
+/* 0x083c: ctx_mem */
 	0x840007f1,
 	0xd00203f0,
 	0x04bd000f,
-/* 0x0830: ctx_mem_wait */
+/* 0x0848: ctx_mem_wait */
 	0x8400f7f1,
 	0xcf02f3f0,
 	0xfffd00ff,
 	0xf31bf405,
-/* 0x0842: ctx_load */
+/* 0x085a: ctx_load */
 	0x94bd00f8,
 	0xf10599f0,
 	0xf00f0007,
@@ -807,7 +814,7 @@ uint32_t nvd7_grhub_code[] = {
 	0x02d00203,
 	0xf004bd00,
 	0x21f507f7,
-	0x07f10824,
+	0x07f1083c,
 	0x03f0c000,
 	0x0002d002,
 	0x0bfe04bd,
@@ -862,31 +869,31 @@ uint32_t nvd7_grhub_code[] = {
 	0x03f01700,
 	0x0009d002,
 	0x00f804bd,
-/* 0x0960: ctx_chan */
-	0x076721f5,
-	0x084221f5,
+/* 0x0978: ctx_chan */
+	0x077f21f5,
+	0x085a21f5,
 	0xf40ca7f0,
 	0xf7f0d021,
-	0x2421f505,
-	0x8c21f508,
-/* 0x097b: ctx_mmio_exec */
+	0x3c21f505,
+	0xa421f508,
+/* 0x0993: ctx_mmio_exec */
 	0x9800f807,
 	0x07f14103,
 	0x03f08100,
 	0x0003d002,
 	0x34bd04bd,
-/* 0x098c: ctx_mmio_loop */
+/* 0x09a4: ctx_mmio_loop */
 	0xf4ff34c4,
 	0x57f10f1b,
 	0x53f00200,
 	0x0535fa06,
-/* 0x099e: ctx_mmio_pull */
+/* 0x09b6: ctx_mmio_pull */
 	0x4e9803f8,
 	0x814f9880,
 	0xb69d21f4,
 	0x12b60830,
 	0xdf1bf401,
-/* 0x09b0: ctx_mmio_done */
+/* 0x09c8: ctx_mmio_done */
 	0xf1160398,
 	0xf0810007,
 	0x03d00203,
@@ -895,30 +902,30 @@ uint32_t nvd7_grhub_code[] = {
 	0x13f00100,
 	0x0601fa06,
 	0x00f803f8,
-/* 0x09d0: ctx_xfer */
+/* 0x09e8: ctx_xfer */
 	0xf104e7f0,
 	0xf0020007,
 	0x0ed00303,
-/* 0x09df: ctx_xfer_idle */
+/* 0x09f7: ctx_xfer_idle */
 	0xf104bd00,
 	0xf00000e7,
 	0xeecf03e3,
 	0x00e4f100,
 	0xf21bf420,
 	0xf40611f4,
-/* 0x09f6: ctx_xfer_pre */
+/* 0x0a0e: ctx_xfer_pre */
 	0xf7f01102,
-	0xfc21f510,
-	0x6721f507,
+	0x1421f510,
+	0x7f21f508,
 	0x1c11f407,
-/* 0x0a04: ctx_xfer_pre_load */
+/* 0x0a1c: ctx_xfer_pre_load */
 	0xf502f7f0,
-	0xf5079d21,
-	0xf507af21,
-	0xbd07c421,
-	0x9d21f5f4,
-	0x4221f507,
-/* 0x0a1d: ctx_xfer_exec */
+	0xf507b521,
+	0xf507c721,
+	0xbd07dc21,
+	0xb521f5f4,
+	0x5a21f507,
+/* 0x0a35: ctx_xfer_exec */
 	0x16019808,
 	0x07f124bd,
 	0x03f00500,
@@ -953,29 +960,23 @@ uint32_t nvd7_grhub_code[] = {
 	0x1301f402,
 	0xf40ca7f0,
 	0xf7f0d021,
-	0x2421f505,
+	0x3c21f505,
 	0x3202f408,
-/* 0x0aac: ctx_xfer_post */
+/* 0x0ac4: ctx_xfer_post */
 	0xf502f7f0,
-	0xbd079d21,
-	0xfc21f5f4,
-	0x7f21f507,
-	0xaf21f502,
+	0xbd07b521,
+	0x1421f5f4,
+	0x7f21f508,
+	0xc721f502,
 	0xf5f4bd07,
-	0xf4079d21,
+	0xf407b521,
 	0x01981011,
 	0x0511fd40,
 	0xf5070bf4,
-/* 0x0ad7: ctx_xfer_no_post_mmio */
-	0xf5097b21,
-/* 0x0adb: ctx_xfer_done */
-	0xf8078c21,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
+/* 0x0aef: ctx_xfer_no_post_mmio */
+	0xf5099321,
+/* 0x0af3: ctx_xfer_done */
+	0xf807a421,
 	0x00000000,
 	0x00000000,
 	0x00000000,
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnve0.fuc.h b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnve0.fuc.h
index 1fc990c5f85198ee587390ac3100c30fb7fda2dd..1c179bdd48cc2a0ddd3228a3e8bfc0005f1bf06a 100644
--- a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnve0.fuc.h
+++ b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnve0.fuc.h
@@ -528,10 +528,10 @@ uint32_t nve0_grhub_code[] = {
 	0x0001d001,
 	0x17f104bd,
 	0xf7f00100,
-	0x6721f502,
-	0x7921f507,
+	0x7f21f502,
+	0x9121f507,
 	0x10f7f007,
-	0x07c621f5,
+	0x07de21f5,
 	0x98000e98,
 	0x21f5010f,
 	0x14950150,
@@ -574,9 +574,9 @@ uint32_t nve0_grhub_code[] = {
 	0xb6800040,
 	0x1bf40132,
 	0x00f7f0be,
-	0x07c621f5,
+	0x07de21f5,
 	0xf500f7f0,
-	0xf1076721,
+	0xf1077f21,
 	0xf0010007,
 	0x01d00203,
 	0xbd04bd00,
@@ -610,7 +610,7 @@ uint32_t nve0_grhub_code[] = {
 	0x09d00203,
 	0xf404bd00,
 	0x31f40132,
-	0x9221f502,
+	0xaa21f502,
 	0xf094bd09,
 	0x07f10799,
 	0x03f01700,
@@ -621,7 +621,7 @@ uint32_t nve0_grhub_code[] = {
 	0x0203f00f,
 	0xbd0009d0,
 	0x0131f404,
-	0x099221f5,
+	0x09aa21f5,
 	0x99f094bd,
 	0x0007f106,
 	0x0203f017,
@@ -631,7 +631,7 @@ uint32_t nve0_grhub_code[] = {
 	0x12b920f9,
 	0x0132f402,
 	0xf50232f4,
-	0xfc099221,
+	0xfc09aa21,
 	0x0007f120,
 	0x0203f0c0,
 	0xbd0002d0,
@@ -640,7 +640,7 @@ uint32_t nve0_grhub_code[] = {
 	0xf41f23c8,
 	0x31f40d0b,
 	0x0232f401,
-	0x099221f5,
+	0x09aa21f5,
 /* 0x063c: chsw_done */
 	0xf10127f0,
 	0xf0c30007,
@@ -654,7 +654,7 @@ uint32_t nve0_grhub_code[] = {
 /* 0x0660: main_not_ctx_switch */
 	0xf401e4b0,
 	0xf2b90d1b,
-	0x2a21f502,
+	0x4221f502,
 	0x460ef409,
 /* 0x0670: main_not_ctx_chan */
 	0xf402e4b0,
@@ -664,7 +664,7 @@ uint32_t nve0_grhub_code[] = {
 	0x09d00203,
 	0xf404bd00,
 	0x32f40132,
-	0x9221f502,
+	0xaa21f502,
 	0xf094bd09,
 	0x07f10799,
 	0x03f01700,
@@ -708,13 +708,20 @@ uint32_t nve0_grhub_code[] = {
 	0x10d7f00d,
 	0x4001e7f1,
 /* 0x072b: ih_no_ctxsw */
-	0xf10421f4,
+	0xe40421f4,
+	0xf40400ab,
+	0xb7f1140b,
+	0xbfb90100,
+	0x44e7f102,
+	0x40e3f001,
+/* 0x0743: ih_no_fwmthd */
+	0xf19d21f4,
 	0xbd0104b7,
 	0xb4abffb0,
 	0xf10f0bf4,
 	0xf0070007,
 	0x0bd00303,
-/* 0x0743: ih_no_other */
+/* 0x075b: ih_no_other */
 	0xf104bd00,
 	0xf0010007,
 	0x0ad00003,
@@ -724,19 +731,19 @@ uint32_t nve0_grhub_code[] = {
 	0xfc90fca0,
 	0x0088fe80,
 	0x32f480fc,
-/* 0x0767: ctx_4170s */
+/* 0x077f: ctx_4170s */
 	0xf001f800,
 	0xffb910f5,
 	0x70e7f102,
 	0x40e3f041,
 	0xf89d21f4,
-/* 0x0779: ctx_4170w */
+/* 0x0791: ctx_4170w */
 	0x70e7f100,
 	0x40e3f041,
 	0xb96821f4,
 	0xf4f002ff,
 	0xf01bf410,
-/* 0x078e: ctx_redswitch */
+/* 0x07a6: ctx_redswitch */
 	0xe7f100f8,
 	0xe5f00200,
 	0x20e5f040,
@@ -744,7 +751,7 @@ uint32_t nve0_grhub_code[] = {
 	0xf0850007,
 	0x0ed00103,
 	0xf004bd00,
-/* 0x07aa: ctx_redswitch_delay */
+/* 0x07c2: ctx_redswitch_delay */
 	0xf2b608f7,
 	0xfd1bf401,
 	0x0400e5f1,
@@ -752,7 +759,7 @@ uint32_t nve0_grhub_code[] = {
 	0x850007f1,
 	0xd00103f0,
 	0x04bd000e,
-/* 0x07c6: ctx_86c */
+/* 0x07de: ctx_86c */
 	0x07f100f8,
 	0x03f01b00,
 	0x000fd002,
@@ -763,17 +770,17 @@ uint32_t nve0_grhub_code[] = {
 	0xe7f102ff,
 	0xe3f0a86c,
 	0x9d21f441,
-/* 0x07ee: ctx_mem */
+/* 0x0806: ctx_mem */
 	0x07f100f8,
 	0x03f08400,
 	0x000fd002,
-/* 0x07fa: ctx_mem_wait */
+/* 0x0812: ctx_mem_wait */
 	0xf7f104bd,
 	0xf3f08400,
 	0x00ffcf02,
 	0xf405fffd,
 	0x00f8f31b,
-/* 0x080c: ctx_load */
+/* 0x0824: ctx_load */
 	0x99f094bd,
 	0x0007f105,
 	0x0203f00f,
@@ -790,7 +797,7 @@ uint32_t nve0_grhub_code[] = {
 	0x0203f083,
 	0xbd0002d0,
 	0x07f7f004,
-	0x07ee21f5,
+	0x080621f5,
 	0xc00007f1,
 	0xd00203f0,
 	0x04bd0002,
@@ -845,29 +852,29 @@ uint32_t nve0_grhub_code[] = {
 	0x170007f1,
 	0xd00203f0,
 	0x04bd0009,
-/* 0x092a: ctx_chan */
+/* 0x0942: ctx_chan */
 	0x21f500f8,
-	0xa7f0080c,
+	0xa7f00824,
 	0xd021f40c,
 	0xf505f7f0,
-	0xf807ee21,
-/* 0x093d: ctx_mmio_exec */
+	0xf8080621,
+/* 0x0955: ctx_mmio_exec */
 	0x41039800,
 	0x810007f1,
 	0xd00203f0,
 	0x04bd0003,
-/* 0x094e: ctx_mmio_loop */
+/* 0x0966: ctx_mmio_loop */
 	0x34c434bd,
 	0x0f1bf4ff,
 	0x020057f1,
 	0xfa0653f0,
 	0x03f80535,
-/* 0x0960: ctx_mmio_pull */
+/* 0x0978: ctx_mmio_pull */
 	0x98804e98,
 	0x21f4814f,
 	0x0830b69d,
 	0xf40112b6,
-/* 0x0972: ctx_mmio_done */
+/* 0x098a: ctx_mmio_done */
 	0x0398df1b,
 	0x0007f116,
 	0x0203f081,
@@ -876,30 +883,30 @@ uint32_t nve0_grhub_code[] = {
 	0x010017f1,
 	0xfa0613f0,
 	0x03f80601,
-/* 0x0992: ctx_xfer */
+/* 0x09aa: ctx_xfer */
 	0xe7f000f8,
 	0x0007f104,
 	0x0303f002,
 	0xbd000ed0,
-/* 0x09a1: ctx_xfer_idle */
+/* 0x09b9: ctx_xfer_idle */
 	0x00e7f104,
 	0x03e3f000,
 	0xf100eecf,
 	0xf42000e4,
 	0x11f4f21b,
 	0x0d02f406,
-/* 0x09b8: ctx_xfer_pre */
+/* 0x09d0: ctx_xfer_pre */
 	0xf510f7f0,
-	0xf407c621,
-/* 0x09c2: ctx_xfer_pre_load */
+	0xf407de21,
+/* 0x09da: ctx_xfer_pre_load */
 	0xf7f01c11,
-	0x6721f502,
-	0x7921f507,
-	0x8e21f507,
+	0x7f21f502,
+	0x9121f507,
+	0xa621f507,
 	0xf5f4bd07,
-	0xf5076721,
-/* 0x09db: ctx_xfer_exec */
-	0x98080c21,
+	0xf5077f21,
+/* 0x09f3: ctx_xfer_exec */
+	0x98082421,
 	0x24bd1601,
 	0x050007f1,
 	0xd00103f0,
@@ -934,21 +941,21 @@ uint32_t nve0_grhub_code[] = {
 	0xa7f01301,
 	0xd021f40c,
 	0xf505f7f0,
-	0xf407ee21,
-/* 0x0a6a: ctx_xfer_post */
+	0xf4080621,
+/* 0x0a82: ctx_xfer_post */
 	0xf7f02e02,
-	0x6721f502,
+	0x7f21f502,
 	0xf5f4bd07,
-	0xf507c621,
+	0xf507de21,
 	0xf5027f21,
-	0xbd077921,
-	0x6721f5f4,
+	0xbd079121,
+	0x7f21f5f4,
 	0x1011f407,
 	0xfd400198,
 	0x0bf40511,
-	0x3d21f507,
-/* 0x0a95: ctx_xfer_no_post_mmio */
-/* 0x0a95: ctx_xfer_done */
+	0x5521f507,
+/* 0x0aad: ctx_xfer_no_post_mmio */
+/* 0x0aad: ctx_xfer_done */
 	0x0000f809,
 	0x00000000,
 	0x00000000,
@@ -970,10 +977,4 @@ uint32_t nve0_grhub_code[] = {
 	0x00000000,
 	0x00000000,
 	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
 };
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvf0.fuc.h b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvf0.fuc.h
index dc89e4005decc07943fbc935f3aae10331a681c8..229c0ae3722844c16d39e33fb669b677bcefa13c 100644
--- a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvf0.fuc.h
+++ b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvf0.fuc.h
@@ -528,10 +528,10 @@ uint32_t nvf0_grhub_code[] = {
 	0x0001d001,
 	0x17f104bd,
 	0xf7f00100,
-	0x6721f502,
-	0x7921f507,
+	0x7f21f502,
+	0x9121f507,
 	0x10f7f007,
-	0x07c621f5,
+	0x07de21f5,
 	0x98000e98,
 	0x21f5010f,
 	0x14950150,
@@ -574,9 +574,9 @@ uint32_t nvf0_grhub_code[] = {
 	0xb6800040,
 	0x1bf40132,
 	0x00f7f0be,
-	0x07c621f5,
+	0x07de21f5,
 	0xf500f7f0,
-	0xf1076721,
+	0xf1077f21,
 	0xf0010007,
 	0x01d00203,
 	0xbd04bd00,
@@ -610,7 +610,7 @@ uint32_t nvf0_grhub_code[] = {
 	0x09d00203,
 	0xf404bd00,
 	0x31f40132,
-	0x9221f502,
+	0xaa21f502,
 	0xf094bd09,
 	0x07f10799,
 	0x03f01700,
@@ -621,7 +621,7 @@ uint32_t nvf0_grhub_code[] = {
 	0x0203f037,
 	0xbd0009d0,
 	0x0131f404,
-	0x099221f5,
+	0x09aa21f5,
 	0x99f094bd,
 	0x0007f106,
 	0x0203f017,
@@ -631,7 +631,7 @@ uint32_t nvf0_grhub_code[] = {
 	0x12b920f9,
 	0x0132f402,
 	0xf50232f4,
-	0xfc099221,
+	0xfc09aa21,
 	0x0007f120,
 	0x0203f0c0,
 	0xbd0002d0,
@@ -640,7 +640,7 @@ uint32_t nvf0_grhub_code[] = {
 	0xf41f23c8,
 	0x31f40d0b,
 	0x0232f401,
-	0x099221f5,
+	0x09aa21f5,
 /* 0x063c: chsw_done */
 	0xf10127f0,
 	0xf0c30007,
@@ -654,7 +654,7 @@ uint32_t nvf0_grhub_code[] = {
 /* 0x0660: main_not_ctx_switch */
 	0xf401e4b0,
 	0xf2b90d1b,
-	0x2a21f502,
+	0x4221f502,
 	0x460ef409,
 /* 0x0670: main_not_ctx_chan */
 	0xf402e4b0,
@@ -664,7 +664,7 @@ uint32_t nvf0_grhub_code[] = {
 	0x09d00203,
 	0xf404bd00,
 	0x32f40132,
-	0x9221f502,
+	0xaa21f502,
 	0xf094bd09,
 	0x07f10799,
 	0x03f01700,
@@ -708,13 +708,20 @@ uint32_t nvf0_grhub_code[] = {
 	0x10d7f00d,
 	0x4001e7f1,
 /* 0x072b: ih_no_ctxsw */
-	0xf10421f4,
+	0xe40421f4,
+	0xf40400ab,
+	0xb7f1140b,
+	0xbfb90100,
+	0x44e7f102,
+	0x40e3f001,
+/* 0x0743: ih_no_fwmthd */
+	0xf19d21f4,
 	0xbd0104b7,
 	0xb4abffb0,
 	0xf10f0bf4,
 	0xf0070007,
 	0x0bd00303,
-/* 0x0743: ih_no_other */
+/* 0x075b: ih_no_other */
 	0xf104bd00,
 	0xf0010007,
 	0x0ad00003,
@@ -724,19 +731,19 @@ uint32_t nvf0_grhub_code[] = {
 	0xfc90fca0,
 	0x0088fe80,
 	0x32f480fc,
-/* 0x0767: ctx_4170s */
+/* 0x077f: ctx_4170s */
 	0xf001f800,
 	0xffb910f5,
 	0x70e7f102,
 	0x40e3f041,
 	0xf89d21f4,
-/* 0x0779: ctx_4170w */
+/* 0x0791: ctx_4170w */
 	0x70e7f100,
 	0x40e3f041,
 	0xb96821f4,
 	0xf4f002ff,
 	0xf01bf410,
-/* 0x078e: ctx_redswitch */
+/* 0x07a6: ctx_redswitch */
 	0xe7f100f8,
 	0xe5f00200,
 	0x20e5f040,
@@ -744,7 +751,7 @@ uint32_t nvf0_grhub_code[] = {
 	0xf0850007,
 	0x0ed00103,
 	0xf004bd00,
-/* 0x07aa: ctx_redswitch_delay */
+/* 0x07c2: ctx_redswitch_delay */
 	0xf2b608f7,
 	0xfd1bf401,
 	0x0400e5f1,
@@ -752,7 +759,7 @@ uint32_t nvf0_grhub_code[] = {
 	0x850007f1,
 	0xd00103f0,
 	0x04bd000e,
-/* 0x07c6: ctx_86c */
+/* 0x07de: ctx_86c */
 	0x07f100f8,
 	0x03f02300,
 	0x000fd002,
@@ -763,17 +770,17 @@ uint32_t nvf0_grhub_code[] = {
 	0xe7f102ff,
 	0xe3f0a88c,
 	0x9d21f441,
-/* 0x07ee: ctx_mem */
+/* 0x0806: ctx_mem */
 	0x07f100f8,
 	0x03f08400,
 	0x000fd002,
-/* 0x07fa: ctx_mem_wait */
+/* 0x0812: ctx_mem_wait */
 	0xf7f104bd,
 	0xf3f08400,
 	0x00ffcf02,
 	0xf405fffd,
 	0x00f8f31b,
-/* 0x080c: ctx_load */
+/* 0x0824: ctx_load */
 	0x99f094bd,
 	0x0007f105,
 	0x0203f037,
@@ -790,7 +797,7 @@ uint32_t nvf0_grhub_code[] = {
 	0x0203f083,
 	0xbd0002d0,
 	0x07f7f004,
-	0x07ee21f5,
+	0x080621f5,
 	0xc00007f1,
 	0xd00203f0,
 	0x04bd0002,
@@ -845,29 +852,29 @@ uint32_t nvf0_grhub_code[] = {
 	0x170007f1,
 	0xd00203f0,
 	0x04bd0009,
-/* 0x092a: ctx_chan */
+/* 0x0942: ctx_chan */
 	0x21f500f8,
-	0xa7f0080c,
+	0xa7f00824,
 	0xd021f40c,
 	0xf505f7f0,
-	0xf807ee21,
-/* 0x093d: ctx_mmio_exec */
+	0xf8080621,
+/* 0x0955: ctx_mmio_exec */
 	0x41039800,
 	0x810007f1,
 	0xd00203f0,
 	0x04bd0003,
-/* 0x094e: ctx_mmio_loop */
+/* 0x0966: ctx_mmio_loop */
 	0x34c434bd,
 	0x0f1bf4ff,
 	0x020057f1,
 	0xfa0653f0,
 	0x03f80535,
-/* 0x0960: ctx_mmio_pull */
+/* 0x0978: ctx_mmio_pull */
 	0x98804e98,
 	0x21f4814f,
 	0x0830b69d,
 	0xf40112b6,
-/* 0x0972: ctx_mmio_done */
+/* 0x098a: ctx_mmio_done */
 	0x0398df1b,
 	0x0007f116,
 	0x0203f081,
@@ -876,30 +883,30 @@ uint32_t nvf0_grhub_code[] = {
 	0x010017f1,
 	0xfa0613f0,
 	0x03f80601,
-/* 0x0992: ctx_xfer */
+/* 0x09aa: ctx_xfer */
 	0xe7f000f8,
 	0x0007f104,
 	0x0303f002,
 	0xbd000ed0,
-/* 0x09a1: ctx_xfer_idle */
+/* 0x09b9: ctx_xfer_idle */
 	0x00e7f104,
 	0x03e3f000,
 	0xf100eecf,
 	0xf42000e4,
 	0x11f4f21b,
 	0x0d02f406,
-/* 0x09b8: ctx_xfer_pre */
+/* 0x09d0: ctx_xfer_pre */
 	0xf510f7f0,
-	0xf407c621,
-/* 0x09c2: ctx_xfer_pre_load */
+	0xf407de21,
+/* 0x09da: ctx_xfer_pre_load */
 	0xf7f01c11,
-	0x6721f502,
-	0x7921f507,
-	0x8e21f507,
+	0x7f21f502,
+	0x9121f507,
+	0xa621f507,
 	0xf5f4bd07,
-	0xf5076721,
-/* 0x09db: ctx_xfer_exec */
-	0x98080c21,
+	0xf5077f21,
+/* 0x09f3: ctx_xfer_exec */
+	0x98082421,
 	0x24bd1601,
 	0x050007f1,
 	0xd00103f0,
@@ -934,21 +941,21 @@ uint32_t nvf0_grhub_code[] = {
 	0xa7f01301,
 	0xd021f40c,
 	0xf505f7f0,
-	0xf407ee21,
-/* 0x0a6a: ctx_xfer_post */
+	0xf4080621,
+/* 0x0a82: ctx_xfer_post */
 	0xf7f02e02,
-	0x6721f502,
+	0x7f21f502,
 	0xf5f4bd07,
-	0xf507c621,
+	0xf507de21,
 	0xf5027f21,
-	0xbd077921,
-	0x6721f5f4,
+	0xbd079121,
+	0x7f21f5f4,
 	0x1011f407,
 	0xfd400198,
 	0x0bf40511,
-	0x3d21f507,
-/* 0x0a95: ctx_xfer_no_post_mmio */
-/* 0x0a95: ctx_xfer_done */
+	0x5521f507,
+/* 0x0aad: ctx_xfer_no_post_mmio */
+/* 0x0aad: ctx_xfer_done */
 	0x0000f809,
 	0x00000000,
 	0x00000000,
@@ -970,10 +977,4 @@ uint32_t nvf0_grhub_code[] = {
 	0x00000000,
 	0x00000000,
 	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
-	0x00000000,
 };
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/macros.fuc b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/macros.fuc
index 7593fbcf00b91cbef302182256f8bd66c1f7abdb..6ffe28307dbd6e420a019d0e7dd4ac891f531fd7 100644
--- a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/macros.fuc
+++ b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/macros.fuc
@@ -32,6 +32,7 @@
 
 #define NV_PGRAPH_FECS_INTR_ACK                                        0x409004
 #define NV_PGRAPH_FECS_INTR                                            0x409008
+#define NV_PGRAPH_FECS_INTR_FWMTHD                                   0x00000400
 #define NV_PGRAPH_FECS_INTR_CHSW                                     0x00000100
 #define NV_PGRAPH_FECS_INTR_FIFO                                     0x00000004
 #define NV_PGRAPH_FECS_INTR_MODE                                       0x40900c