From e1a6f7da9a8ec981c644e31de4a354cd95924df0 Mon Sep 17 00:00:00 2001 From: Roy Spliet Date: Thu, 4 Sep 2014 16:58:49 +0200 Subject: [PATCH] drm/nva3/pwr/memx: Implement "wait for VBLANK" Signed-off-by: Roy Spliet Signed-off-by: Ben Skeggs --- drivers/gpu/drm/nouveau/core/include/subdev/pwr.h | 1 + drivers/gpu/drm/nouveau/core/subdev/fb/ramfuc.h | 25 +- .../gpu/drm/nouveau/core/subdev/pwr/fuc/memx.fuc | 60 +- .../drm/nouveau/core/subdev/pwr/fuc/nv108.fuc.h | 765 +++++++++++--------- .../gpu/drm/nouveau/core/subdev/pwr/fuc/nva3.fuc.h | 342 +++++---- .../gpu/drm/nouveau/core/subdev/pwr/fuc/nvc0.fuc.h | 342 +++++---- .../gpu/drm/nouveau/core/subdev/pwr/fuc/nvd0.fuc.h | 779 +++++++++++---------- drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/os.h | 1 + drivers/gpu/drm/nouveau/core/subdev/pwr/memx.c | 35 +- 9 files changed, 1356 insertions(+), 994 deletions(-) diff --git a/drivers/gpu/drm/nouveau/core/include/subdev/pwr.h b/drivers/gpu/drm/nouveau/core/include/subdev/pwr.h index f73feec..209e2e4 100644 --- a/drivers/gpu/drm/nouveau/core/include/subdev/pwr.h +++ b/drivers/gpu/drm/nouveau/core/include/subdev/pwr.h @@ -47,5 +47,6 @@ void nouveau_memx_wr32(struct nouveau_memx *, u32 addr, u32 data); void nouveau_memx_wait(struct nouveau_memx *, u32 addr, u32 mask, u32 data, u32 nsec); void nouveau_memx_nsec(struct nouveau_memx *, u32 nsec); +void nouveau_memx_wait_vblank(struct nouveau_memx *); #endif diff --git a/drivers/gpu/drm/nouveau/core/subdev/fb/ramfuc.h b/drivers/gpu/drm/nouveau/core/subdev/fb/ramfuc.h index 2af9cfd..76290bb 100644 --- a/drivers/gpu/drm/nouveau/core/subdev/fb/ramfuc.h +++ b/drivers/gpu/drm/nouveau/core/subdev/fb/ramfuc.h @@ -105,14 +105,21 @@ ramfuc_nsec(struct ramfuc *ram, u32 nsec) nouveau_memx_nsec(ram->memx, nsec); } -#define ram_init(s,p) ramfuc_init(&(s)->base, (p)) -#define ram_exec(s,e) ramfuc_exec(&(s)->base, (e)) -#define ram_have(s,r) ((s)->r_##r.addr[0] != 0x000000) -#define ram_rd32(s,r) ramfuc_rd32(&(s)->base, &(s)->r_##r) -#define ram_wr32(s,r,d) ramfuc_wr32(&(s)->base, &(s)->r_##r, (d)) -#define ram_nuke(s,r) ramfuc_nuke(&(s)->base, &(s)->r_##r) -#define ram_mask(s,r,m,d) ramfuc_mask(&(s)->base, &(s)->r_##r, (m), (d)) -#define ram_wait(s,r,m,d,n) ramfuc_wait(&(s)->base, (r), (m), (d), (n)) -#define ram_nsec(s,n) ramfuc_nsec(&(s)->base, (n)) +static inline void +ramfuc_wait_vblank(struct ramfuc *ram) +{ + nouveau_memx_wait_vblank(ram->memx); +} + +#define ram_init(s,p) ramfuc_init(&(s)->base, (p)) +#define ram_exec(s,e) ramfuc_exec(&(s)->base, (e)) +#define ram_have(s,r) ((s)->r_##r.addr[0] != 0x000000) +#define ram_rd32(s,r) ramfuc_rd32(&(s)->base, &(s)->r_##r) +#define ram_wr32(s,r,d) ramfuc_wr32(&(s)->base, &(s)->r_##r, (d)) +#define ram_nuke(s,r) ramfuc_nuke(&(s)->base, &(s)->r_##r) +#define ram_mask(s,r,m,d) ramfuc_mask(&(s)->base, &(s)->r_##r, (m), (d)) +#define ram_wait(s,r,m,d,n) ramfuc_wait(&(s)->base, (r), (m), (d), (n)) +#define ram_nsec(s,n) ramfuc_nsec(&(s)->base, (n)) +#define ram_wait_vblank(s) ramfuc_wait_vblank(&(s)->base) #endif diff --git a/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/memx.fuc b/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/memx.fuc index d43741e..228ee0d 100644 --- a/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/memx.fuc +++ b/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/memx.fuc @@ -43,12 +43,13 @@ process(PROC_MEMX, #memx_init, #memx_recv) */ .b32 func memx_func_head: -handler(ENTER , 0x0001, 0x0000, #memx_func_enter) +handler(ENTER , 0x0000, 0x0000, #memx_func_enter) memx_func_next: handler(LEAVE , 0x0000, 0x0000, #memx_func_leave) handler(WR32 , 0x0000, 0x0002, #memx_func_wr32) handler(WAIT , 0x0004, 0x0000, #memx_func_wait) handler(DELAY , 0x0001, 0x0000, #memx_func_delay) +handler(VBLANK, 0x0001, 0x0000, #memx_func_wait_vblank) memx_func_tail: .equ #memx_func_size #memx_func_next - #memx_func_head @@ -67,7 +68,6 @@ memx_data_tail: // // $r15 - current (memx) // $r4 - packet length -// +00: bitmask of heads to wait for vblank on // $r3 - opcode desciption // $r0 - zero memx_func_enter: @@ -77,9 +77,7 @@ memx_func_enter: nv_iord($r6, NV_PPWR_OUTPUT) and $r6 NV_PPWR_OUTPUT_FB_PAUSE bra z #memx_func_enter_wait - //XXX: TODO - ld b32 $r6 D[$r1 + 0x00] - add b32 $r1 0x04 + ret // description @@ -97,6 +95,58 @@ memx_func_leave: bra nz #memx_func_leave_wait ret +#if NVKM_PPWR_CHIPSET < GF119 +// description +// +// $r15 - current (memx) +// $r4 - packet length +// +00: head to wait for vblank on +// $r3 - opcode desciption +// $r0 - zero +memx_func_wait_vblank: + ld b32 $r6 D[$r1 + 0x00] + cmp b32 $r6 0x0 + bra z #memx_func_wait_vblank_head0 + cmp b32 $r6 0x1 + bra z #memx_func_wait_vblank_head1 + bra #memx_func_wait_vblank_fini + + memx_func_wait_vblank_head1: + movw $r7 0x20 + bra #memx_func_wait_vblank_0 + + memx_func_wait_vblank_head0: + movw $r7 0x8 + + memx_func_wait_vblank_0: + nv_iord($r6, NV_PPWR_INPUT) + and $r6 $r7 + bra nz #memx_func_wait_vblank_0 + + memx_func_wait_vblank_1: + nv_iord($r6, NV_PPWR_INPUT) + and $r6 $r7 + bra z #memx_func_wait_vblank_1 + + memx_func_wait_vblank_fini: + add b32 $r1 0x4 + ret + +#else + +// XXX: currently no-op +// +// $r15 - current (memx) +// $r4 - packet length +// +00: head to wait for vblank on +// $r3 - opcode desciption +// $r0 - zero +memx_func_wait_vblank: + add b32 $r1 0x4 + ret + +#endif + // description // // $r15 - current (memx) diff --git a/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nv108.fuc.h b/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nv108.fuc.h index a9d8ba6..6d8701c 100644 --- a/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nv108.fuc.h +++ b/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nv108.fuc.h @@ -46,8 +46,8 @@ uint32_t nv108_pwr_data[] = { 0x00000000, 0x00000000, 0x584d454d, - 0x0000053e, - 0x00000530, + 0x0000053d, + 0x0000052f, 0x00000000, 0x00000000, 0x00000000, @@ -68,8 +68,8 @@ uint32_t nv108_pwr_data[] = { 0x00000000, 0x00000000, 0x46524550, - 0x00000542, - 0x00000540, + 0x00000541, + 0x0000053f, 0x00000000, 0x00000000, 0x00000000, @@ -90,8 +90,8 @@ uint32_t nv108_pwr_data[] = { 0x00000000, 0x00000000, 0x5f433249, - 0x00000946, - 0x000007ed, + 0x00000945, + 0x000007ec, 0x00000000, 0x00000000, 0x00000000, @@ -112,8 +112,8 @@ uint32_t nv108_pwr_data[] = { 0x00000000, 0x00000000, 0x54534554, - 0x00000967, - 0x00000948, + 0x00000966, + 0x00000947, 0x00000000, 0x00000000, 0x00000000, @@ -134,8 +134,8 @@ uint32_t nv108_pwr_data[] = { 0x00000000, 0x00000000, 0x454c4449, - 0x00000972, - 0x00000970, + 0x00000971, + 0x0000096f, 0x00000000, 0x00000000, 0x00000000, @@ -227,24 +227,27 @@ uint32_t nv108_pwr_data[] = { 0x00000000, 0x00000000, /* 0x0370: memx_func_head */ - 0x00010000, + 0x00000000, 0x00000000, 0x00000483, /* 0x037c: memx_func_next */ 0x00000001, 0x00000000, - 0x000004a1, + 0x0000049b, 0x00000002, 0x00000002, - 0x000004b9, + 0x000004b8, 0x00040003, 0x00000000, - 0x000004d6, + 0x000004d5, 0x00010004, 0x00000000, - 0x000004f0, -/* 0x03ac: memx_func_tail */ -/* 0x03ac: memx_data_head */ + 0x000004ef, + 0x00010005, + 0x00000000, + 0x000004b3, +/* 0x03b8: memx_func_tail */ +/* 0x03b8: memx_data_head */ 0x00000000, 0x00000000, 0x00000000, @@ -757,8 +760,8 @@ uint32_t nv108_pwr_data[] = { 0x00000000, 0x00000000, 0x00000000, -/* 0x0bac: memx_data_tail */ -/* 0x0bac: i2c_scl_map */ +/* 0x0bb8: memx_data_tail */ +/* 0x0bb8: i2c_scl_map */ 0x00000400, 0x00000800, 0x00001000, @@ -769,7 +772,7 @@ uint32_t nv108_pwr_data[] = { 0x00020000, 0x00040000, 0x00080000, -/* 0x0bd4: i2c_sda_map */ +/* 0x0be0: i2c_sda_map */ 0x00100000, 0x00200000, 0x00400000, @@ -781,6 +784,67 @@ uint32_t nv108_pwr_data[] = { 0x10000000, 0x20000000, 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, }; uint32_t nv108_pwr_code[] = { @@ -1124,389 +1188,390 @@ uint32_t nv108_pwr_code[] = { 0x07c04604, 0xf00066cf, 0x0bf40464, - 0x001698f7, - 0xf80410b6, -/* 0x04a1: memx_func_leave */ - 0x40040600, - 0x06f607e4, -/* 0x04ab: memx_func_leave_wait */ - 0x4604bd00, - 0x66cf07c0, - 0x0464f000, - 0xf8f71bf4, -/* 0x04b9: memx_func_wr32 */ - 0x00169800, - 0xb6011598, - 0x60f90810, - 0xd0fc50f9, - 0x2e7ee0fc, - 0x42b60000, - 0xe81bf402, -/* 0x04d6: memx_func_wait */ - 0x2c0800f8, - 0x980088cf, - 0x1d98001e, - 0x021c9801, - 0xb6031b98, - 0x797e1010, - 0x00f80000, -/* 0x04f0: memx_func_delay */ - 0xb6001e98, - 0x5d7e0410, - 0x00f80000, -/* 0x04fc: memx_exec */ - 0xd0f9e0f9, - 0xb2b2c1b2, -/* 0x0504: memx_exec_next */ - 0xb6001398, - 0x34950410, - 0x0c30f010, - 0xf9de3598, - 0xf412a655, - 0xd0fced1e, - 0xc27ee0fc, - 0x00f80002, -/* 0x0524: memx_info */ - 0x4b03ac4c, - 0xc27e0800, - 0x00f80002, -/* 0x0530: memx_recv */ - 0xf401d6b0, - 0xd6b0c90b, - 0xeb0bf400, -/* 0x053e: memx_init */ - 0x00f800f8, -/* 0x0540: perf_recv */ -/* 0x0542: perf_init */ - 0x00f800f8, -/* 0x0544: i2c_drive_scl */ - 0xf40036b0, - 0xe0400d0b, - 0x0001f607, - 0x00f804bd, -/* 0x0554: i2c_drive_scl_lo */ - 0xf607e440, - 0x04bd0001, -/* 0x055e: i2c_drive_sda */ - 0x36b000f8, - 0x0d0bf400, - 0xf607e040, - 0x04bd0002, -/* 0x056e: i2c_drive_sda_lo */ - 0xe44000f8, - 0x0002f607, - 0x00f804bd, -/* 0x0578: i2c_sense_scl */ - 0x430132f4, - 0x33cf07c4, - 0x0431fd00, - 0xf4060bf4, -/* 0x058a: i2c_sense_scl_done */ - 0x00f80131, -/* 0x058c: i2c_sense_sda */ - 0x430132f4, - 0x33cf07c4, - 0x0432fd00, - 0xf4060bf4, -/* 0x059e: i2c_sense_sda_done */ - 0x00f80131, -/* 0x05a0: i2c_raise_scl */ - 0x984440f9, - 0x7e010308, -/* 0x05ab: i2c_raise_scl_wait */ - 0x4e000544, - 0x5d7e03e8, - 0x787e0000, - 0x01f40005, - 0x0142b609, -/* 0x05bf: i2c_raise_scl_done */ - 0xfcef1bf4, -/* 0x05c3: i2c_start */ - 0x7e00f840, - 0xf4000578, - 0x8c7e0d11, +/* 0x049b: memx_func_leave */ + 0x0600f8f7, + 0x07e44004, + 0xbd0006f6, +/* 0x04a5: memx_func_leave_wait */ + 0x07c04604, + 0xf00066cf, + 0x1bf40464, +/* 0x04b3: memx_func_wait_vblank */ + 0xb600f8f7, + 0x00f80410, +/* 0x04b8: memx_func_wr32 */ + 0x98001698, + 0x10b60115, + 0xf960f908, + 0xfcd0fc50, + 0x002e7ee0, + 0x0242b600, + 0xf8e81bf4, +/* 0x04d5: memx_func_wait */ + 0xcf2c0800, + 0x1e980088, + 0x011d9800, + 0x98021c98, + 0x10b6031b, + 0x00797e10, +/* 0x04ef: memx_func_delay */ + 0x9800f800, + 0x10b6001e, + 0x005d7e04, +/* 0x04fb: memx_exec */ + 0xf900f800, + 0xb2d0f9e0, +/* 0x0503: memx_exec_next */ + 0x98b2b2c1, + 0x10b60013, + 0x10349504, + 0x980c30f0, + 0x55f9de35, + 0x1ef412a6, + 0xfcd0fced, + 0x02c27ee0, +/* 0x0523: memx_info */ + 0x4c00f800, + 0x004b03b8, + 0x02c27e08, +/* 0x052f: memx_recv */ + 0xb000f800, + 0x0bf401d6, + 0x00d6b0c9, + 0xf8eb0bf4, +/* 0x053d: memx_init */ +/* 0x053f: perf_recv */ + 0xf800f800, +/* 0x0541: perf_init */ +/* 0x0543: i2c_drive_scl */ + 0xb000f800, + 0x0bf40036, + 0x07e0400d, + 0xbd0001f6, +/* 0x0553: i2c_drive_scl_lo */ + 0x4000f804, + 0x01f607e4, + 0xf804bd00, +/* 0x055d: i2c_drive_sda */ + 0x0036b000, + 0x400d0bf4, + 0x02f607e0, + 0xf804bd00, +/* 0x056d: i2c_drive_sda_lo */ + 0x07e44000, + 0xbd0002f6, +/* 0x0577: i2c_sense_scl */ + 0xf400f804, + 0xc4430132, + 0x0033cf07, + 0xf40431fd, + 0x31f4060b, +/* 0x0589: i2c_sense_scl_done */ +/* 0x058b: i2c_sense_sda */ + 0xf400f801, + 0xc4430132, + 0x0033cf07, + 0xf40432fd, + 0x31f4060b, +/* 0x059d: i2c_sense_sda_done */ +/* 0x059f: i2c_raise_scl */ + 0xf900f801, + 0x08984440, + 0x437e0103, +/* 0x05aa: i2c_raise_scl_wait */ + 0xe84e0005, + 0x005d7e03, + 0x05777e00, + 0x0901f400, + 0xf40142b6, +/* 0x05be: i2c_raise_scl_done */ + 0x40fcef1b, +/* 0x05c2: i2c_start */ + 0x777e00f8, 0x11f40005, - 0x2e0ef406, -/* 0x05d4: i2c_start_rep */ - 0x447e0003, - 0x01030005, - 0x00055e7e, + 0x058b7e0d, + 0x0611f400, +/* 0x05d3: i2c_start_rep */ + 0x032e0ef4, + 0x05437e00, + 0x7e010300, + 0xbb00055d, + 0x65b60076, + 0x9450f904, + 0x56bb0465, + 0xfd50bd02, + 0x50fc0475, + 0x00059f7e, + 0xf40464b6, +/* 0x05fe: i2c_start_send */ + 0x00031d11, + 0x00055d7e, + 0x7e13884e, + 0x0300005d, + 0x05437e00, + 0x13884e00, + 0x00005d7e, +/* 0x0618: i2c_start_out */ +/* 0x061a: i2c_stop */ + 0x000300f8, + 0x0005437e, + 0x5d7e0003, + 0xe84e0005, + 0x005d7e03, + 0x7e010300, + 0x4e000543, + 0x5d7e1388, + 0x01030000, + 0x00055d7e, + 0x7e13884e, + 0xf800005d, +/* 0x0649: i2c_bitw */ + 0x055d7e00, + 0x03e84e00, + 0x00005d7e, 0xb60076bb, 0x50f90465, 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0x05a07e50, + 0x059f7e50, 0x0464b600, -/* 0x05ff: i2c_start_send */ - 0x031d11f4, - 0x055e7e00, - 0x13884e00, - 0x00005d7e, - 0x447e0003, - 0x884e0005, - 0x005d7e13, -/* 0x0619: i2c_start_out */ -/* 0x061b: i2c_stop */ - 0x0300f800, - 0x05447e00, - 0x7e000300, - 0x4e00055e, - 0x5d7e03e8, - 0x01030000, - 0x0005447e, + 0x4e1711f4, + 0x5d7e1388, + 0x00030000, + 0x0005437e, 0x7e13884e, - 0x0300005d, - 0x055e7e01, - 0x13884e00, - 0x00005d7e, -/* 0x064a: i2c_bitw */ - 0x5e7e00f8, - 0xe84e0005, - 0x005d7e03, - 0x0076bb00, +/* 0x0687: i2c_bitw_out */ + 0xf800005d, +/* 0x0689: i2c_bitr */ + 0x7e010300, + 0x4e00055d, + 0x5d7e03e8, + 0x76bb0000, + 0x0465b600, + 0x659450f9, + 0x0256bb04, + 0x75fd50bd, + 0x7e50fc04, + 0xb600059f, + 0x11f40464, + 0x058b7e1a, + 0x7e000300, + 0x4e000543, + 0x5d7e1388, + 0x3cf00000, + 0x0131f401, +/* 0x06cc: i2c_bitr_done */ +/* 0x06ce: i2c_get_byte */ + 0x000500f8, +/* 0x06d2: i2c_get_byte_next */ + 0x54b60804, + 0x0076bb01, 0xf90465b6, 0x04659450, 0xbd0256bb, 0x0475fd50, - 0xa07e50fc, - 0x64b60005, - 0x1711f404, - 0x7e13884e, - 0x0300005d, - 0x05447e00, - 0x13884e00, - 0x00005d7e, -/* 0x0688: i2c_bitw_out */ -/* 0x068a: i2c_bitr */ - 0x010300f8, - 0x00055e7e, - 0x7e03e84e, - 0xbb00005d, + 0x897e50fc, + 0x64b60006, + 0x2a11f404, + 0xb60553fd, + 0x1bf40142, + 0xbb0103d8, 0x65b60076, 0x9450f904, 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x0005a07e, - 0xf40464b6, - 0x8c7e1a11, - 0x00030005, - 0x0005447e, - 0x7e13884e, - 0xf000005d, - 0x31f4013c, -/* 0x06cd: i2c_bitr_done */ -/* 0x06cf: i2c_get_byte */ - 0x0500f801, -/* 0x06d3: i2c_get_byte_next */ + 0x0006497e, +/* 0x071b: i2c_get_byte_done */ + 0xf80464b6, +/* 0x071d: i2c_put_byte */ +/* 0x071f: i2c_put_byte_next */ 0xb6080400, - 0x76bb0154, - 0x0465b600, - 0x659450f9, - 0x0256bb04, - 0x75fd50bd, - 0x7e50fc04, - 0xb600068a, - 0x11f40464, - 0x0553fd2a, - 0xf40142b6, - 0x0103d81b, - 0xb60076bb, - 0x50f90465, - 0xbb046594, - 0x50bd0256, - 0xfc0475fd, - 0x064a7e50, - 0x0464b600, -/* 0x071c: i2c_get_byte_done */ -/* 0x071e: i2c_put_byte */ - 0x080400f8, -/* 0x0720: i2c_put_byte_next */ - 0xff0142b6, - 0x76bb3854, + 0x54ff0142, + 0x0076bb38, + 0xf90465b6, + 0x04659450, + 0xbd0256bb, + 0x0475fd50, + 0x497e50fc, + 0x64b60006, + 0x3411f404, + 0xf40046b0, + 0x76bbd81b, 0x0465b600, 0x659450f9, 0x0256bb04, 0x75fd50bd, 0x7e50fc04, - 0xb600064a, + 0xb6000689, 0x11f40464, - 0x0046b034, - 0xbbd81bf4, + 0x0076bb0f, + 0xf40136b0, + 0x32f4061b, +/* 0x0775: i2c_put_byte_done */ +/* 0x0777: i2c_addr */ + 0xbb00f801, 0x65b60076, 0x9450f904, 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x00068a7e, + 0x0005c27e, 0xf40464b6, - 0x76bb0f11, - 0x0136b000, - 0xf4061bf4, -/* 0x0776: i2c_put_byte_done */ - 0x00f80132, -/* 0x0778: i2c_addr */ + 0xc3e72911, + 0x34b6012e, + 0x0553fd01, 0xb60076bb, 0x50f90465, 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0x05c37e50, + 0x071d7e50, 0x0464b600, - 0xe72911f4, - 0xb6012ec3, - 0x53fd0134, - 0x0076bb05, - 0xf90465b6, - 0x04659450, - 0xbd0256bb, - 0x0475fd50, - 0x1e7e50fc, - 0x64b60007, -/* 0x07bd: i2c_addr_done */ -/* 0x07bf: i2c_acquire_addr */ - 0xc700f804, - 0xe4b6f8ce, - 0x14e0b705, -/* 0x07cb: i2c_acquire */ - 0x7e00f8d0, - 0x7e0007bf, +/* 0x07bc: i2c_addr_done */ +/* 0x07be: i2c_acquire_addr */ + 0xcec700f8, + 0x05e4b6f8, + 0xd014e0b7, +/* 0x07ca: i2c_acquire */ + 0xbe7e00f8, + 0x047e0007, + 0xd9f00000, + 0x002e7e03, +/* 0x07db: i2c_release */ + 0x7e00f800, + 0x7e0007be, 0xf0000004, - 0x2e7e03d9, + 0x2e7e03da, 0x00f80000, -/* 0x07dc: i2c_release */ - 0x0007bf7e, - 0x0000047e, - 0x7e03daf0, - 0xf800002e, -/* 0x07ed: i2c_recv */ - 0x0132f400, - 0xb6f8c1c7, - 0x16b00214, - 0x371ff528, - 0xd413b801, - 0x3298000b, - 0xac13b800, - 0x3198000b, - 0x0231f400, - 0xe0f9d0f9, - 0x67f1d0f9, - 0x63f10000, - 0x67921000, - 0x0076bb01, - 0xf90465b6, - 0x04659450, - 0xbd0256bb, - 0x0475fd50, - 0xcb7e50fc, - 0x64b60007, - 0xb0d0fc04, - 0x1bf500d6, - 0x000500b0, +/* 0x07ec: i2c_recv */ + 0xc70132f4, + 0x14b6f8c1, + 0x2816b002, + 0x01371ff5, + 0x0be013b8, + 0x00329800, + 0x0bb813b8, + 0x00319800, + 0xf90231f4, + 0xf9e0f9d0, + 0x0067f1d0, + 0x0063f100, + 0x01679210, 0xb60076bb, 0x50f90465, 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0x07787e50, + 0x07ca7e50, 0x0464b600, - 0x00cc11f5, - 0xbbe0c5c7, + 0xd6b0d0fc, + 0xb01bf500, + 0xbb000500, 0x65b60076, 0x9450f904, 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x00071e7e, + 0x0007777e, 0xf50464b6, - 0x0500a911, - 0x0076bb01, - 0xf90465b6, - 0x04659450, - 0xbd0256bb, - 0x0475fd50, - 0x787e50fc, - 0x64b60007, - 0x8711f504, - 0x0076bb00, - 0xf90465b6, - 0x04659450, - 0xbd0256bb, - 0x0475fd50, - 0xcf7e50fc, - 0x64b60006, - 0x6711f404, - 0xbbe05bcb, - 0x65b60076, - 0x9450f904, - 0x56bb0465, - 0xfd50bd02, - 0x50fc0475, - 0x00061b7e, - 0xb20464b6, - 0xf474bd5b, -/* 0x08f2: i2c_recv_not_rd08 */ - 0xd6b0410e, - 0x3b1bf401, - 0x787e0005, + 0xc700cc11, + 0x76bbe0c5, + 0x0465b600, + 0x659450f9, + 0x0256bb04, + 0x75fd50bd, + 0x7e50fc04, + 0xb600071d, + 0x11f50464, + 0x010500a9, + 0xb60076bb, + 0x50f90465, + 0xbb046594, + 0x50bd0256, + 0xfc0475fd, + 0x07777e50, + 0x0464b600, + 0x008711f5, + 0xb60076bb, + 0x50f90465, + 0xbb046594, + 0x50bd0256, + 0xfc0475fd, + 0x06ce7e50, + 0x0464b600, + 0xcb6711f4, + 0x76bbe05b, + 0x0465b600, + 0x659450f9, + 0x0256bb04, + 0x75fd50bd, + 0x7e50fc04, + 0xb600061a, + 0x5bb20464, + 0x0ef474bd, +/* 0x08f1: i2c_recv_not_rd08 */ + 0x01d6b041, + 0x053b1bf4, + 0x07777e00, + 0x3211f400, + 0x7ee0c5c7, + 0xf400071d, + 0x00052811, + 0x0007777e, + 0xc71f11f4, + 0x1d7ee0b5, 0x11f40007, - 0xe0c5c732, - 0x00071e7e, - 0x052811f4, - 0x07787e00, - 0x1f11f400, - 0x7ee0b5c7, - 0xf400071e, - 0x1b7e1511, - 0x74bd0006, - 0xf408c5c7, - 0x32f4091b, - 0x030ef402, -/* 0x0930: i2c_recv_not_wr08 */ -/* 0x0930: i2c_recv_done */ - 0x7ef8cec7, - 0xfc0007dc, - 0xf4d0fce0, - 0x7cb20912, - 0x0002c27e, -/* 0x0944: i2c_recv_exit */ -/* 0x0946: i2c_init */ - 0x00f800f8, -/* 0x0948: test_recv */ - 0xcf045841, + 0x061a7e15, + 0xc774bd00, + 0x1bf408c5, + 0x0232f409, +/* 0x092f: i2c_recv_not_wr08 */ +/* 0x092f: i2c_recv_done */ + 0xc7030ef4, + 0xdb7ef8ce, + 0xe0fc0007, + 0x12f4d0fc, + 0x7e7cb209, +/* 0x0943: i2c_recv_exit */ + 0xf80002c2, +/* 0x0945: i2c_init */ +/* 0x0947: test_recv */ + 0x4100f800, + 0x11cf0458, + 0x0110b600, + 0xf6045840, + 0x04bd0001, + 0xd900e7f1, + 0x134fe3f1, + 0x0002017e, +/* 0x0966: test_init */ + 0x004e00f8, + 0x02017e08, +/* 0x096f: idle_recv */ + 0xf800f800, +/* 0x0971: idle */ + 0x0031f400, + 0xcf045441, 0x10b60011, - 0x04584001, + 0x04544001, 0xbd0001f6, - 0x00e7f104, - 0x4fe3f1d9, - 0x02017e13, -/* 0x0967: test_init */ - 0x4e00f800, - 0x017e0800, - 0x00f80002, -/* 0x0970: idle_recv */ -/* 0x0972: idle */ - 0x31f400f8, - 0x04544100, - 0xb60011cf, - 0x54400110, - 0x0001f604, -/* 0x0986: idle_loop */ - 0x580104bd, -/* 0x098b: idle_proc */ -/* 0x098b: idle_proc_exec */ - 0xf90232f4, - 0x7e1eb210, - 0xfc0002cb, - 0x0911f410, - 0xf40231f4, -/* 0x099e: idle_proc_next */ - 0x10b6f00e, - 0xf41fa658, - 0x02f4e81b, - 0x0028f4e0, - 0x00c60ef4, +/* 0x0985: idle_loop */ + 0xf4580104, +/* 0x098a: idle_proc */ +/* 0x098a: idle_proc_exec */ + 0x10f90232, + 0xcb7e1eb2, + 0x10fc0002, + 0xf40911f4, + 0x0ef40231, +/* 0x099d: idle_proc_next */ + 0x5810b6f0, + 0x1bf41fa6, + 0xe002f4e8, + 0xf40028f4, + 0x0000c60e, 0x00000000, 0x00000000, 0x00000000, diff --git a/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nva3.fuc.h b/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nva3.fuc.h index 21000e5..d0e5a7b 100644 --- a/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nva3.fuc.h +++ b/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nva3.fuc.h @@ -46,8 +46,8 @@ uint32_t nva3_pwr_data[] = { 0x00000000, 0x00000000, 0x584d454d, - 0x00000624, - 0x00000616, + 0x00000660, + 0x00000652, 0x00000000, 0x00000000, 0x00000000, @@ -68,8 +68,8 @@ uint32_t nva3_pwr_data[] = { 0x00000000, 0x00000000, 0x46524550, - 0x00000628, - 0x00000626, + 0x00000664, + 0x00000662, 0x00000000, 0x00000000, 0x00000000, @@ -90,8 +90,8 @@ uint32_t nva3_pwr_data[] = { 0x00000000, 0x00000000, 0x5f433249, - 0x00000a58, - 0x000008fb, + 0x00000a94, + 0x00000937, 0x00000000, 0x00000000, 0x00000000, @@ -112,8 +112,8 @@ uint32_t nva3_pwr_data[] = { 0x00000000, 0x00000000, 0x54534554, - 0x00000a81, - 0x00000a5a, + 0x00000abd, + 0x00000a96, 0x00000000, 0x00000000, 0x00000000, @@ -134,8 +134,8 @@ uint32_t nva3_pwr_data[] = { 0x00000000, 0x00000000, 0x454c4449, - 0x00000a8d, - 0x00000a8b, + 0x00000ac9, + 0x00000ac7, 0x00000000, 0x00000000, 0x00000000, @@ -227,25 +227,27 @@ uint32_t nva3_pwr_data[] = { 0x00000000, 0x00000000, /* 0x0370: memx_func_head */ - 0x00010000, + 0x00000000, 0x00000000, 0x00000551, /* 0x037c: memx_func_next */ 0x00000001, 0x00000000, - 0x00000578, + 0x00000572, 0x00000002, 0x00000002, - 0x00000599, + 0x000005d5, 0x00040003, 0x00000000, - 0x000005b5, + 0x000005f1, 0x00010004, 0x00000000, - 0x000005d2, -/* 0x03ac: memx_func_tail */ -/* 0x03ac: memx_data_head */ + 0x0000060e, + 0x00010005, 0x00000000, + 0x00000593, +/* 0x03b8: memx_func_tail */ +/* 0x03b8: memx_data_head */ 0x00000000, 0x00000000, 0x00000000, @@ -757,8 +759,9 @@ uint32_t nva3_pwr_data[] = { 0x00000000, 0x00000000, 0x00000000, -/* 0x0bac: memx_data_tail */ -/* 0x0bac: i2c_scl_map */ + 0x00000000, +/* 0x0bb8: memx_data_tail */ +/* 0x0bb8: i2c_scl_map */ 0x00001000, 0x00004000, 0x00010000, @@ -769,7 +772,7 @@ uint32_t nva3_pwr_data[] = { 0x01000000, 0x04000000, 0x10000000, -/* 0x0bd4: i2c_sda_map */ +/* 0x0be0: i2c_sda_map */ 0x00002000, 0x00008000, 0x00020000, @@ -780,7 +783,7 @@ uint32_t nva3_pwr_data[] = { 0x02000000, 0x08000000, 0x20000000, -/* 0x0bfc: i2c_ctrl */ +/* 0x0c08: i2c_ctrl */ 0x0000e138, 0x0000e150, 0x0000e168, @@ -843,9 +846,6 @@ uint32_t nva3_pwr_data[] = { 0x00000000, 0x00000000, 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, }; uint32_t nva3_pwr_code[] = { @@ -1243,19 +1243,40 @@ uint32_t nva3_pwr_code[] = { 0xcf0664b6, 0x64f00066, 0xf30bf404, - 0xb6001698, - 0x00f80410, -/* 0x0578: memx_func_leave */ - 0xf10467f0, - 0xb607e407, - 0x06d00604, -/* 0x0587: memx_func_leave_wait */ - 0xf104bd00, - 0xb607c067, - 0x66cf0664, - 0x0464f000, - 0xf8f31bf4, -/* 0x0599: memx_func_wr32 */ +/* 0x0572: memx_func_leave */ + 0x67f000f8, + 0xe407f104, + 0x0604b607, + 0xbd0006d0, +/* 0x0581: memx_func_leave_wait */ + 0xc067f104, + 0x0664b607, + 0xf00066cf, + 0x1bf40464, +/* 0x0593: memx_func_wait_vblank */ + 0x9800f8f3, + 0x66b00016, + 0x130bf400, + 0xf40166b0, + 0x0ef4060b, +/* 0x05a5: memx_func_wait_vblank_head1 */ + 0x2077f12e, + 0x070ef400, +/* 0x05ac: memx_func_wait_vblank_head0 */ + 0x000877f1, +/* 0x05b0: memx_func_wait_vblank_0 */ + 0x07c467f1, + 0xcf0664b6, + 0x67fd0066, + 0xf31bf404, +/* 0x05c0: memx_func_wait_vblank_1 */ + 0x07c467f1, + 0xcf0664b6, + 0x67fd0066, + 0xf30bf404, +/* 0x05d0: memx_func_wait_vblank_fini */ + 0xf80410b6, +/* 0x05d5: memx_func_wr32 */ 0x00169800, 0xb6011598, 0x60f90810, @@ -1263,7 +1284,7 @@ uint32_t nva3_pwr_code[] = { 0x21f4e0fc, 0x0242b63f, 0xf8e91bf4, -/* 0x05b5: memx_func_wait */ +/* 0x05f1: memx_func_wait */ 0x2c87f000, 0xcf0684b6, 0x1e980088, @@ -1271,14 +1292,14 @@ uint32_t nva3_pwr_code[] = { 0x98021c98, 0x10b6031b, 0xa421f410, -/* 0x05d2: memx_func_delay */ +/* 0x060e: memx_func_delay */ 0x1e9800f8, 0x0410b600, 0xf87f21f4, -/* 0x05dd: memx_exec */ +/* 0x0619: memx_exec */ 0xf9e0f900, 0x02c1b9d0, -/* 0x05e7: memx_exec_next */ +/* 0x0623: memx_exec_next */ 0x9802b2b9, 0x10b60013, 0x10349504, @@ -1288,112 +1309,112 @@ uint32_t nva3_pwr_code[] = { 0xd0fcec1e, 0x21f5e0fc, 0x00f80342, -/* 0x0608: memx_info */ - 0x03acc7f1, +/* 0x0644: memx_info */ + 0x03b8c7f1, 0x0800b7f1, 0x034221f5, -/* 0x0616: memx_recv */ +/* 0x0652: memx_recv */ 0xd6b000f8, 0xc40bf401, 0xf400d6b0, 0x00f8e90b, -/* 0x0624: memx_init */ -/* 0x0626: perf_recv */ +/* 0x0660: memx_init */ +/* 0x0662: perf_recv */ 0x00f800f8, -/* 0x0628: perf_init */ -/* 0x062a: i2c_drive_scl */ +/* 0x0664: perf_init */ +/* 0x0666: i2c_drive_scl */ 0x36b000f8, 0x110bf400, 0x07e007f1, 0xd00604b6, 0x04bd0001, -/* 0x063e: i2c_drive_scl_lo */ +/* 0x067a: i2c_drive_scl_lo */ 0x07f100f8, 0x04b607e4, 0x0001d006, 0x00f804bd, -/* 0x064c: i2c_drive_sda */ +/* 0x0688: i2c_drive_sda */ 0xf40036b0, 0x07f1110b, 0x04b607e0, 0x0002d006, 0x00f804bd, -/* 0x0660: i2c_drive_sda_lo */ +/* 0x069c: i2c_drive_sda_lo */ 0x07e407f1, 0xd00604b6, 0x04bd0002, -/* 0x066e: i2c_sense_scl */ +/* 0x06aa: i2c_sense_scl */ 0x32f400f8, 0xc437f101, 0x0634b607, 0xfd0033cf, 0x0bf40431, 0x0131f406, -/* 0x0684: i2c_sense_scl_done */ -/* 0x0686: i2c_sense_sda */ +/* 0x06c0: i2c_sense_scl_done */ +/* 0x06c2: i2c_sense_sda */ 0x32f400f8, 0xc437f101, 0x0634b607, 0xfd0033cf, 0x0bf40432, 0x0131f406, -/* 0x069c: i2c_sense_sda_done */ -/* 0x069e: i2c_raise_scl */ +/* 0x06d8: i2c_sense_sda_done */ +/* 0x06da: i2c_raise_scl */ 0x40f900f8, 0x089847f1, 0xf50137f0, -/* 0x06ab: i2c_raise_scl_wait */ - 0xf1062a21, +/* 0x06e7: i2c_raise_scl_wait */ + 0xf1066621, 0xf403e8e7, 0x21f57f21, - 0x01f4066e, + 0x01f406aa, 0x0142b609, -/* 0x06bf: i2c_raise_scl_done */ +/* 0x06fb: i2c_raise_scl_done */ 0xfcef1bf4, -/* 0x06c3: i2c_start */ +/* 0x06ff: i2c_start */ 0xf500f840, - 0xf4066e21, + 0xf406aa21, 0x21f50d11, - 0x11f40686, + 0x11f406c2, 0x300ef406, -/* 0x06d4: i2c_start_rep */ +/* 0x0710: i2c_start_rep */ 0xf50037f0, - 0xf0062a21, + 0xf0066621, 0x21f50137, - 0x76bb064c, + 0x76bb0688, 0x0465b600, 0x659450f9, 0x0256bb04, 0x75fd50bd, 0xf550fc04, - 0xb6069e21, + 0xb606da21, 0x11f40464, -/* 0x0701: i2c_start_send */ +/* 0x073d: i2c_start_send */ 0x0037f01f, - 0x064c21f5, + 0x068821f5, 0x1388e7f1, 0xf07f21f4, 0x21f50037, - 0xe7f1062a, + 0xe7f10666, 0x21f41388, -/* 0x071d: i2c_start_out */ -/* 0x071f: i2c_stop */ +/* 0x0759: i2c_start_out */ +/* 0x075b: i2c_stop */ 0xf000f87f, 0x21f50037, - 0x37f0062a, - 0x4c21f500, + 0x37f00666, + 0x8821f500, 0xe8e7f106, 0x7f21f403, 0xf50137f0, - 0xf1062a21, + 0xf1066621, 0xf41388e7, 0x37f07f21, - 0x4c21f501, + 0x8821f501, 0x88e7f106, 0x7f21f413, -/* 0x0752: i2c_bitw */ +/* 0x078e: i2c_bitw */ 0x21f500f8, - 0xe7f1064c, + 0xe7f10688, 0x21f403e8, 0x0076bb7f, 0xf90465b6, @@ -1401,18 +1422,18 @@ uint32_t nva3_pwr_code[] = { 0xbd0256bb, 0x0475fd50, 0x21f550fc, - 0x64b6069e, + 0x64b606da, 0x1811f404, 0x1388e7f1, 0xf07f21f4, 0x21f50037, - 0xe7f1062a, + 0xe7f10666, 0x21f41388, -/* 0x0791: i2c_bitw_out */ -/* 0x0793: i2c_bitr */ +/* 0x07cd: i2c_bitw_out */ +/* 0x07cf: i2c_bitr */ 0xf000f87f, 0x21f50137, - 0xe7f1064c, + 0xe7f10688, 0x21f403e8, 0x0076bb7f, 0xf90465b6, @@ -1420,26 +1441,26 @@ uint32_t nva3_pwr_code[] = { 0xbd0256bb, 0x0475fd50, 0x21f550fc, - 0x64b6069e, + 0x64b606da, 0x1b11f404, - 0x068621f5, + 0x06c221f5, 0xf50037f0, - 0xf1062a21, + 0xf1066621, 0xf41388e7, 0x3cf07f21, 0x0131f401, -/* 0x07d8: i2c_bitr_done */ -/* 0x07da: i2c_get_byte */ +/* 0x0814: i2c_bitr_done */ +/* 0x0816: i2c_get_byte */ 0x57f000f8, 0x0847f000, -/* 0x07e0: i2c_get_byte_next */ +/* 0x081c: i2c_get_byte_next */ 0xbb0154b6, 0x65b60076, 0x9450f904, 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x079321f5, + 0x07cf21f5, 0xf40464b6, 0x53fd2b11, 0x0142b605, @@ -1450,11 +1471,11 @@ uint32_t nva3_pwr_code[] = { 0x0256bb04, 0x75fd50bd, 0xf550fc04, - 0xb6075221, -/* 0x082a: i2c_get_byte_done */ + 0xb6078e21, +/* 0x0866: i2c_get_byte_done */ 0x00f80464, -/* 0x082c: i2c_put_byte */ -/* 0x082f: i2c_put_byte_next */ +/* 0x0868: i2c_put_byte */ +/* 0x086b: i2c_put_byte_next */ 0xb60847f0, 0x54ff0142, 0x0076bb38, @@ -1463,7 +1484,7 @@ uint32_t nva3_pwr_code[] = { 0xbd0256bb, 0x0475fd50, 0x21f550fc, - 0x64b60752, + 0x64b6078e, 0x3411f404, 0xf40046b0, 0x76bbd81b, @@ -1472,20 +1493,20 @@ uint32_t nva3_pwr_code[] = { 0x0256bb04, 0x75fd50bd, 0xf550fc04, - 0xb6079321, + 0xb607cf21, 0x11f40464, 0x0076bb0f, 0xf40136b0, 0x32f4061b, -/* 0x0885: i2c_put_byte_done */ -/* 0x0887: i2c_addr */ +/* 0x08c1: i2c_put_byte_done */ +/* 0x08c3: i2c_addr */ 0xbb00f801, 0x65b60076, 0x9450f904, 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x06c321f5, + 0x06ff21f5, 0xf40464b6, 0xc3e72911, 0x34b6012e, @@ -1495,32 +1516,32 @@ uint32_t nva3_pwr_code[] = { 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0x2c21f550, + 0x6821f550, 0x0464b608, -/* 0x08cc: i2c_addr_done */ -/* 0x08ce: i2c_acquire_addr */ +/* 0x0908: i2c_addr_done */ +/* 0x090a: i2c_acquire_addr */ 0xcec700f8, 0x02e4b6f8, - 0x0bfce0b7, + 0x0c08e0b7, 0xf800ee98, -/* 0x08dd: i2c_acquire */ - 0xce21f500, - 0x0421f408, +/* 0x0919: i2c_acquire */ + 0x0a21f500, + 0x0421f409, 0xf403d9f0, 0x00f83f21, -/* 0x08ec: i2c_release */ - 0x08ce21f5, +/* 0x0928: i2c_release */ + 0x090a21f5, 0xf00421f4, 0x21f403da, -/* 0x08fb: i2c_recv */ +/* 0x0937: i2c_recv */ 0xf400f83f, 0xc1c70132, 0x0214b6f8, 0xf52816b0, 0xa0013a1f, - 0x980bd413, + 0x980be013, 0x13a00032, - 0x31980bac, + 0x31980bb8, 0x0231f400, 0xe0f9d0f9, 0x67f1d0f9, @@ -1532,7 +1553,7 @@ uint32_t nva3_pwr_code[] = { 0xbd0256bb, 0x0475fd50, 0x21f550fc, - 0x64b608dd, + 0x64b60919, 0xb0d0fc04, 0x1bf500d6, 0x57f000b3, @@ -1542,7 +1563,7 @@ uint32_t nva3_pwr_code[] = { 0xbd0256bb, 0x0475fd50, 0x21f550fc, - 0x64b60887, + 0x64b608c3, 0xd011f504, 0xe0c5c700, 0xb60076bb, @@ -1550,7 +1571,7 @@ uint32_t nva3_pwr_code[] = { 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0x2c21f550, + 0x6821f550, 0x0464b608, 0x00ad11f5, 0xbb0157f0, @@ -1559,7 +1580,7 @@ uint32_t nva3_pwr_code[] = { 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x088721f5, + 0x08c321f5, 0xf50464b6, 0xbb008a11, 0x65b60076, @@ -1567,7 +1588,7 @@ uint32_t nva3_pwr_code[] = { 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x07da21f5, + 0x081621f5, 0xf40464b6, 0x5bcb6a11, 0x0076bbe0, @@ -1576,37 +1597,37 @@ uint32_t nva3_pwr_code[] = { 0xbd0256bb, 0x0475fd50, 0x21f550fc, - 0x64b6071f, + 0x64b6075b, 0x025bb904, 0x0ef474bd, -/* 0x0a01: i2c_recv_not_rd08 */ +/* 0x0a3d: i2c_recv_not_rd08 */ 0x01d6b043, 0xf03d1bf4, 0x21f50057, - 0x11f40887, + 0x11f408c3, 0xe0c5c733, - 0x082c21f5, + 0x086821f5, 0xf02911f4, 0x21f50057, - 0x11f40887, + 0x11f408c3, 0xe0b5c71f, - 0x082c21f5, + 0x086821f5, 0xf51511f4, - 0xbd071f21, + 0xbd075b21, 0x08c5c774, 0xf4091bf4, 0x0ef40232, -/* 0x0a41: i2c_recv_not_wr08 */ -/* 0x0a41: i2c_recv_done */ +/* 0x0a7d: i2c_recv_not_wr08 */ +/* 0x0a7d: i2c_recv_done */ 0xf8cec703, - 0x08ec21f5, + 0x092821f5, 0xd0fce0fc, 0xb90a12f4, 0x21f5027c, -/* 0x0a56: i2c_recv_exit */ +/* 0x0a92: i2c_recv_exit */ 0x00f80342, -/* 0x0a58: i2c_init */ -/* 0x0a5a: test_recv */ +/* 0x0a94: i2c_init */ +/* 0x0a96: test_recv */ 0x17f100f8, 0x14b605d8, 0x0011cf06, @@ -1617,12 +1638,12 @@ uint32_t nva3_pwr_code[] = { 0xf1d900e7, 0xf5134fe3, 0xf8026221, -/* 0x0a81: test_init */ +/* 0x0abd: test_init */ 0x00e7f100, 0x6221f508, -/* 0x0a8b: idle_recv */ +/* 0x0ac7: idle_recv */ 0xf800f802, -/* 0x0a8d: idle */ +/* 0x0ac9: idle */ 0x0031f400, 0x05d417f1, 0xcf0614b6, @@ -1630,16 +1651,16 @@ uint32_t nva3_pwr_code[] = { 0xd407f101, 0x0604b605, 0xbd0001d0, -/* 0x0aa9: idle_loop */ +/* 0x0ae5: idle_loop */ 0x5817f004, -/* 0x0aaf: idle_proc */ -/* 0x0aaf: idle_proc_exec */ +/* 0x0aeb: idle_proc */ +/* 0x0aeb: idle_proc_exec */ 0xf90232f4, 0x021eb910, 0x034b21f5, 0x11f410fc, 0x0231f409, -/* 0x0ac3: idle_proc_next */ +/* 0x0aff: idle_proc_next */ 0xb6ef0ef4, 0x1fb85810, 0xe61bf406, @@ -1656,4 +1677,53 @@ uint32_t nva3_pwr_code[] = { 0x00000000, 0x00000000, 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, }; diff --git a/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvc0.fuc.h b/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvc0.fuc.h index df83284..cbc9bde 100644 --- a/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvc0.fuc.h +++ b/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvc0.fuc.h @@ -46,8 +46,8 @@ uint32_t nvc0_pwr_data[] = { 0x00000000, 0x00000000, 0x584d454d, - 0x00000624, - 0x00000616, + 0x00000660, + 0x00000652, 0x00000000, 0x00000000, 0x00000000, @@ -68,8 +68,8 @@ uint32_t nvc0_pwr_data[] = { 0x00000000, 0x00000000, 0x46524550, - 0x00000628, - 0x00000626, + 0x00000664, + 0x00000662, 0x00000000, 0x00000000, 0x00000000, @@ -90,8 +90,8 @@ uint32_t nvc0_pwr_data[] = { 0x00000000, 0x00000000, 0x5f433249, - 0x00000a58, - 0x000008fb, + 0x00000a94, + 0x00000937, 0x00000000, 0x00000000, 0x00000000, @@ -112,8 +112,8 @@ uint32_t nvc0_pwr_data[] = { 0x00000000, 0x00000000, 0x54534554, - 0x00000a81, - 0x00000a5a, + 0x00000abd, + 0x00000a96, 0x00000000, 0x00000000, 0x00000000, @@ -134,8 +134,8 @@ uint32_t nvc0_pwr_data[] = { 0x00000000, 0x00000000, 0x454c4449, - 0x00000a8d, - 0x00000a8b, + 0x00000ac9, + 0x00000ac7, 0x00000000, 0x00000000, 0x00000000, @@ -227,25 +227,27 @@ uint32_t nvc0_pwr_data[] = { 0x00000000, 0x00000000, /* 0x0370: memx_func_head */ - 0x00010000, + 0x00000000, 0x00000000, 0x00000551, /* 0x037c: memx_func_next */ 0x00000001, 0x00000000, - 0x00000578, + 0x00000572, 0x00000002, 0x00000002, - 0x00000599, + 0x000005d5, 0x00040003, 0x00000000, - 0x000005b5, + 0x000005f1, 0x00010004, 0x00000000, - 0x000005d2, -/* 0x03ac: memx_func_tail */ -/* 0x03ac: memx_data_head */ + 0x0000060e, + 0x00010005, 0x00000000, + 0x00000593, +/* 0x03b8: memx_func_tail */ +/* 0x03b8: memx_data_head */ 0x00000000, 0x00000000, 0x00000000, @@ -757,8 +759,9 @@ uint32_t nvc0_pwr_data[] = { 0x00000000, 0x00000000, 0x00000000, -/* 0x0bac: memx_data_tail */ -/* 0x0bac: i2c_scl_map */ + 0x00000000, +/* 0x0bb8: memx_data_tail */ +/* 0x0bb8: i2c_scl_map */ 0x00001000, 0x00004000, 0x00010000, @@ -769,7 +772,7 @@ uint32_t nvc0_pwr_data[] = { 0x01000000, 0x04000000, 0x10000000, -/* 0x0bd4: i2c_sda_map */ +/* 0x0be0: i2c_sda_map */ 0x00002000, 0x00008000, 0x00020000, @@ -780,7 +783,7 @@ uint32_t nvc0_pwr_data[] = { 0x02000000, 0x08000000, 0x20000000, -/* 0x0bfc: i2c_ctrl */ +/* 0x0c08: i2c_ctrl */ 0x0000e138, 0x0000e150, 0x0000e168, @@ -843,9 +846,6 @@ uint32_t nvc0_pwr_data[] = { 0x00000000, 0x00000000, 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, }; uint32_t nvc0_pwr_code[] = { @@ -1243,19 +1243,40 @@ uint32_t nvc0_pwr_code[] = { 0xcf0664b6, 0x64f00066, 0xf30bf404, - 0xb6001698, - 0x00f80410, -/* 0x0578: memx_func_leave */ - 0xf10467f0, - 0xb607e407, - 0x06d00604, -/* 0x0587: memx_func_leave_wait */ - 0xf104bd00, - 0xb607c067, - 0x66cf0664, - 0x0464f000, - 0xf8f31bf4, -/* 0x0599: memx_func_wr32 */ +/* 0x0572: memx_func_leave */ + 0x67f000f8, + 0xe407f104, + 0x0604b607, + 0xbd0006d0, +/* 0x0581: memx_func_leave_wait */ + 0xc067f104, + 0x0664b607, + 0xf00066cf, + 0x1bf40464, +/* 0x0593: memx_func_wait_vblank */ + 0x9800f8f3, + 0x66b00016, + 0x130bf400, + 0xf40166b0, + 0x0ef4060b, +/* 0x05a5: memx_func_wait_vblank_head1 */ + 0x2077f12e, + 0x070ef400, +/* 0x05ac: memx_func_wait_vblank_head0 */ + 0x000877f1, +/* 0x05b0: memx_func_wait_vblank_0 */ + 0x07c467f1, + 0xcf0664b6, + 0x67fd0066, + 0xf31bf404, +/* 0x05c0: memx_func_wait_vblank_1 */ + 0x07c467f1, + 0xcf0664b6, + 0x67fd0066, + 0xf30bf404, +/* 0x05d0: memx_func_wait_vblank_fini */ + 0xf80410b6, +/* 0x05d5: memx_func_wr32 */ 0x00169800, 0xb6011598, 0x60f90810, @@ -1263,7 +1284,7 @@ uint32_t nvc0_pwr_code[] = { 0x21f4e0fc, 0x0242b63f, 0xf8e91bf4, -/* 0x05b5: memx_func_wait */ +/* 0x05f1: memx_func_wait */ 0x2c87f000, 0xcf0684b6, 0x1e980088, @@ -1271,14 +1292,14 @@ uint32_t nvc0_pwr_code[] = { 0x98021c98, 0x10b6031b, 0xa421f410, -/* 0x05d2: memx_func_delay */ +/* 0x060e: memx_func_delay */ 0x1e9800f8, 0x0410b600, 0xf87f21f4, -/* 0x05dd: memx_exec */ +/* 0x0619: memx_exec */ 0xf9e0f900, 0x02c1b9d0, -/* 0x05e7: memx_exec_next */ +/* 0x0623: memx_exec_next */ 0x9802b2b9, 0x10b60013, 0x10349504, @@ -1288,112 +1309,112 @@ uint32_t nvc0_pwr_code[] = { 0xd0fcec1e, 0x21f5e0fc, 0x00f80342, -/* 0x0608: memx_info */ - 0x03acc7f1, +/* 0x0644: memx_info */ + 0x03b8c7f1, 0x0800b7f1, 0x034221f5, -/* 0x0616: memx_recv */ +/* 0x0652: memx_recv */ 0xd6b000f8, 0xc40bf401, 0xf400d6b0, 0x00f8e90b, -/* 0x0624: memx_init */ -/* 0x0626: perf_recv */ +/* 0x0660: memx_init */ +/* 0x0662: perf_recv */ 0x00f800f8, -/* 0x0628: perf_init */ -/* 0x062a: i2c_drive_scl */ +/* 0x0664: perf_init */ +/* 0x0666: i2c_drive_scl */ 0x36b000f8, 0x110bf400, 0x07e007f1, 0xd00604b6, 0x04bd0001, -/* 0x063e: i2c_drive_scl_lo */ +/* 0x067a: i2c_drive_scl_lo */ 0x07f100f8, 0x04b607e4, 0x0001d006, 0x00f804bd, -/* 0x064c: i2c_drive_sda */ +/* 0x0688: i2c_drive_sda */ 0xf40036b0, 0x07f1110b, 0x04b607e0, 0x0002d006, 0x00f804bd, -/* 0x0660: i2c_drive_sda_lo */ +/* 0x069c: i2c_drive_sda_lo */ 0x07e407f1, 0xd00604b6, 0x04bd0002, -/* 0x066e: i2c_sense_scl */ +/* 0x06aa: i2c_sense_scl */ 0x32f400f8, 0xc437f101, 0x0634b607, 0xfd0033cf, 0x0bf40431, 0x0131f406, -/* 0x0684: i2c_sense_scl_done */ -/* 0x0686: i2c_sense_sda */ +/* 0x06c0: i2c_sense_scl_done */ +/* 0x06c2: i2c_sense_sda */ 0x32f400f8, 0xc437f101, 0x0634b607, 0xfd0033cf, 0x0bf40432, 0x0131f406, -/* 0x069c: i2c_sense_sda_done */ -/* 0x069e: i2c_raise_scl */ +/* 0x06d8: i2c_sense_sda_done */ +/* 0x06da: i2c_raise_scl */ 0x40f900f8, 0x089847f1, 0xf50137f0, -/* 0x06ab: i2c_raise_scl_wait */ - 0xf1062a21, +/* 0x06e7: i2c_raise_scl_wait */ + 0xf1066621, 0xf403e8e7, 0x21f57f21, - 0x01f4066e, + 0x01f406aa, 0x0142b609, -/* 0x06bf: i2c_raise_scl_done */ +/* 0x06fb: i2c_raise_scl_done */ 0xfcef1bf4, -/* 0x06c3: i2c_start */ +/* 0x06ff: i2c_start */ 0xf500f840, - 0xf4066e21, + 0xf406aa21, 0x21f50d11, - 0x11f40686, + 0x11f406c2, 0x300ef406, -/* 0x06d4: i2c_start_rep */ +/* 0x0710: i2c_start_rep */ 0xf50037f0, - 0xf0062a21, + 0xf0066621, 0x21f50137, - 0x76bb064c, + 0x76bb0688, 0x0465b600, 0x659450f9, 0x0256bb04, 0x75fd50bd, 0xf550fc04, - 0xb6069e21, + 0xb606da21, 0x11f40464, -/* 0x0701: i2c_start_send */ +/* 0x073d: i2c_start_send */ 0x0037f01f, - 0x064c21f5, + 0x068821f5, 0x1388e7f1, 0xf07f21f4, 0x21f50037, - 0xe7f1062a, + 0xe7f10666, 0x21f41388, -/* 0x071d: i2c_start_out */ -/* 0x071f: i2c_stop */ +/* 0x0759: i2c_start_out */ +/* 0x075b: i2c_stop */ 0xf000f87f, 0x21f50037, - 0x37f0062a, - 0x4c21f500, + 0x37f00666, + 0x8821f500, 0xe8e7f106, 0x7f21f403, 0xf50137f0, - 0xf1062a21, + 0xf1066621, 0xf41388e7, 0x37f07f21, - 0x4c21f501, + 0x8821f501, 0x88e7f106, 0x7f21f413, -/* 0x0752: i2c_bitw */ +/* 0x078e: i2c_bitw */ 0x21f500f8, - 0xe7f1064c, + 0xe7f10688, 0x21f403e8, 0x0076bb7f, 0xf90465b6, @@ -1401,18 +1422,18 @@ uint32_t nvc0_pwr_code[] = { 0xbd0256bb, 0x0475fd50, 0x21f550fc, - 0x64b6069e, + 0x64b606da, 0x1811f404, 0x1388e7f1, 0xf07f21f4, 0x21f50037, - 0xe7f1062a, + 0xe7f10666, 0x21f41388, -/* 0x0791: i2c_bitw_out */ -/* 0x0793: i2c_bitr */ +/* 0x07cd: i2c_bitw_out */ +/* 0x07cf: i2c_bitr */ 0xf000f87f, 0x21f50137, - 0xe7f1064c, + 0xe7f10688, 0x21f403e8, 0x0076bb7f, 0xf90465b6, @@ -1420,26 +1441,26 @@ uint32_t nvc0_pwr_code[] = { 0xbd0256bb, 0x0475fd50, 0x21f550fc, - 0x64b6069e, + 0x64b606da, 0x1b11f404, - 0x068621f5, + 0x06c221f5, 0xf50037f0, - 0xf1062a21, + 0xf1066621, 0xf41388e7, 0x3cf07f21, 0x0131f401, -/* 0x07d8: i2c_bitr_done */ -/* 0x07da: i2c_get_byte */ +/* 0x0814: i2c_bitr_done */ +/* 0x0816: i2c_get_byte */ 0x57f000f8, 0x0847f000, -/* 0x07e0: i2c_get_byte_next */ +/* 0x081c: i2c_get_byte_next */ 0xbb0154b6, 0x65b60076, 0x9450f904, 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x079321f5, + 0x07cf21f5, 0xf40464b6, 0x53fd2b11, 0x0142b605, @@ -1450,11 +1471,11 @@ uint32_t nvc0_pwr_code[] = { 0x0256bb04, 0x75fd50bd, 0xf550fc04, - 0xb6075221, -/* 0x082a: i2c_get_byte_done */ + 0xb6078e21, +/* 0x0866: i2c_get_byte_done */ 0x00f80464, -/* 0x082c: i2c_put_byte */ -/* 0x082f: i2c_put_byte_next */ +/* 0x0868: i2c_put_byte */ +/* 0x086b: i2c_put_byte_next */ 0xb60847f0, 0x54ff0142, 0x0076bb38, @@ -1463,7 +1484,7 @@ uint32_t nvc0_pwr_code[] = { 0xbd0256bb, 0x0475fd50, 0x21f550fc, - 0x64b60752, + 0x64b6078e, 0x3411f404, 0xf40046b0, 0x76bbd81b, @@ -1472,20 +1493,20 @@ uint32_t nvc0_pwr_code[] = { 0x0256bb04, 0x75fd50bd, 0xf550fc04, - 0xb6079321, + 0xb607cf21, 0x11f40464, 0x0076bb0f, 0xf40136b0, 0x32f4061b, -/* 0x0885: i2c_put_byte_done */ -/* 0x0887: i2c_addr */ +/* 0x08c1: i2c_put_byte_done */ +/* 0x08c3: i2c_addr */ 0xbb00f801, 0x65b60076, 0x9450f904, 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x06c321f5, + 0x06ff21f5, 0xf40464b6, 0xc3e72911, 0x34b6012e, @@ -1495,32 +1516,32 @@ uint32_t nvc0_pwr_code[] = { 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0x2c21f550, + 0x6821f550, 0x0464b608, -/* 0x08cc: i2c_addr_done */ -/* 0x08ce: i2c_acquire_addr */ +/* 0x0908: i2c_addr_done */ +/* 0x090a: i2c_acquire_addr */ 0xcec700f8, 0x02e4b6f8, - 0x0bfce0b7, + 0x0c08e0b7, 0xf800ee98, -/* 0x08dd: i2c_acquire */ - 0xce21f500, - 0x0421f408, +/* 0x0919: i2c_acquire */ + 0x0a21f500, + 0x0421f409, 0xf403d9f0, 0x00f83f21, -/* 0x08ec: i2c_release */ - 0x08ce21f5, +/* 0x0928: i2c_release */ + 0x090a21f5, 0xf00421f4, 0x21f403da, -/* 0x08fb: i2c_recv */ +/* 0x0937: i2c_recv */ 0xf400f83f, 0xc1c70132, 0x0214b6f8, 0xf52816b0, 0xa0013a1f, - 0x980bd413, + 0x980be013, 0x13a00032, - 0x31980bac, + 0x31980bb8, 0x0231f400, 0xe0f9d0f9, 0x67f1d0f9, @@ -1532,7 +1553,7 @@ uint32_t nvc0_pwr_code[] = { 0xbd0256bb, 0x0475fd50, 0x21f550fc, - 0x64b608dd, + 0x64b60919, 0xb0d0fc04, 0x1bf500d6, 0x57f000b3, @@ -1542,7 +1563,7 @@ uint32_t nvc0_pwr_code[] = { 0xbd0256bb, 0x0475fd50, 0x21f550fc, - 0x64b60887, + 0x64b608c3, 0xd011f504, 0xe0c5c700, 0xb60076bb, @@ -1550,7 +1571,7 @@ uint32_t nvc0_pwr_code[] = { 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0x2c21f550, + 0x6821f550, 0x0464b608, 0x00ad11f5, 0xbb0157f0, @@ -1559,7 +1580,7 @@ uint32_t nvc0_pwr_code[] = { 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x088721f5, + 0x08c321f5, 0xf50464b6, 0xbb008a11, 0x65b60076, @@ -1567,7 +1588,7 @@ uint32_t nvc0_pwr_code[] = { 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x07da21f5, + 0x081621f5, 0xf40464b6, 0x5bcb6a11, 0x0076bbe0, @@ -1576,37 +1597,37 @@ uint32_t nvc0_pwr_code[] = { 0xbd0256bb, 0x0475fd50, 0x21f550fc, - 0x64b6071f, + 0x64b6075b, 0x025bb904, 0x0ef474bd, -/* 0x0a01: i2c_recv_not_rd08 */ +/* 0x0a3d: i2c_recv_not_rd08 */ 0x01d6b043, 0xf03d1bf4, 0x21f50057, - 0x11f40887, + 0x11f408c3, 0xe0c5c733, - 0x082c21f5, + 0x086821f5, 0xf02911f4, 0x21f50057, - 0x11f40887, + 0x11f408c3, 0xe0b5c71f, - 0x082c21f5, + 0x086821f5, 0xf51511f4, - 0xbd071f21, + 0xbd075b21, 0x08c5c774, 0xf4091bf4, 0x0ef40232, -/* 0x0a41: i2c_recv_not_wr08 */ -/* 0x0a41: i2c_recv_done */ +/* 0x0a7d: i2c_recv_not_wr08 */ +/* 0x0a7d: i2c_recv_done */ 0xf8cec703, - 0x08ec21f5, + 0x092821f5, 0xd0fce0fc, 0xb90a12f4, 0x21f5027c, -/* 0x0a56: i2c_recv_exit */ +/* 0x0a92: i2c_recv_exit */ 0x00f80342, -/* 0x0a58: i2c_init */ -/* 0x0a5a: test_recv */ +/* 0x0a94: i2c_init */ +/* 0x0a96: test_recv */ 0x17f100f8, 0x14b605d8, 0x0011cf06, @@ -1617,12 +1638,12 @@ uint32_t nvc0_pwr_code[] = { 0xf1d900e7, 0xf5134fe3, 0xf8026221, -/* 0x0a81: test_init */ +/* 0x0abd: test_init */ 0x00e7f100, 0x6221f508, -/* 0x0a8b: idle_recv */ +/* 0x0ac7: idle_recv */ 0xf800f802, -/* 0x0a8d: idle */ +/* 0x0ac9: idle */ 0x0031f400, 0x05d417f1, 0xcf0614b6, @@ -1630,16 +1651,16 @@ uint32_t nvc0_pwr_code[] = { 0xd407f101, 0x0604b605, 0xbd0001d0, -/* 0x0aa9: idle_loop */ +/* 0x0ae5: idle_loop */ 0x5817f004, -/* 0x0aaf: idle_proc */ -/* 0x0aaf: idle_proc_exec */ +/* 0x0aeb: idle_proc */ +/* 0x0aeb: idle_proc_exec */ 0xf90232f4, 0x021eb910, 0x034b21f5, 0x11f410fc, 0x0231f409, -/* 0x0ac3: idle_proc_next */ +/* 0x0aff: idle_proc_next */ 0xb6ef0ef4, 0x1fb85810, 0xe61bf406, @@ -1656,4 +1677,53 @@ uint32_t nvc0_pwr_code[] = { 0x00000000, 0x00000000, 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, }; diff --git a/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvd0.fuc.h b/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvd0.fuc.h index a8e65e7..5131590 100644 --- a/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvd0.fuc.h +++ b/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvd0.fuc.h @@ -46,8 +46,8 @@ uint32_t nvd0_pwr_data[] = { 0x00000000, 0x00000000, 0x584d454d, - 0x00000597, - 0x00000589, + 0x00000596, + 0x00000588, 0x00000000, 0x00000000, 0x00000000, @@ -68,8 +68,8 @@ uint32_t nvd0_pwr_data[] = { 0x00000000, 0x00000000, 0x46524550, - 0x0000059b, - 0x00000599, + 0x0000059a, + 0x00000598, 0x00000000, 0x00000000, 0x00000000, @@ -90,8 +90,8 @@ uint32_t nvd0_pwr_data[] = { 0x00000000, 0x00000000, 0x5f433249, - 0x000009b6, - 0x00000859, + 0x000009b5, + 0x00000858, 0x00000000, 0x00000000, 0x00000000, @@ -112,8 +112,8 @@ uint32_t nvd0_pwr_data[] = { 0x00000000, 0x00000000, 0x54534554, - 0x000009d9, - 0x000009b8, + 0x000009d8, + 0x000009b7, 0x00000000, 0x00000000, 0x00000000, @@ -134,8 +134,8 @@ uint32_t nvd0_pwr_data[] = { 0x00000000, 0x00000000, 0x454c4449, - 0x000009e5, - 0x000009e3, + 0x000009e4, + 0x000009e2, 0x00000000, 0x00000000, 0x00000000, @@ -227,25 +227,27 @@ uint32_t nvd0_pwr_data[] = { 0x00000000, 0x00000000, /* 0x0370: memx_func_head */ - 0x00010000, + 0x00000000, 0x00000000, 0x000004d3, /* 0x037c: memx_func_next */ 0x00000001, 0x00000000, - 0x000004f4, + 0x000004ee, 0x00000002, 0x00000002, - 0x0000050f, + 0x0000050e, 0x00040003, 0x00000000, - 0x0000052b, + 0x0000052a, 0x00010004, 0x00000000, - 0x00000545, -/* 0x03ac: memx_func_tail */ -/* 0x03ac: memx_data_head */ + 0x00000544, + 0x00010005, 0x00000000, + 0x00000509, +/* 0x03b8: memx_func_tail */ +/* 0x03b8: memx_data_head */ 0x00000000, 0x00000000, 0x00000000, @@ -757,8 +759,9 @@ uint32_t nvd0_pwr_data[] = { 0x00000000, 0x00000000, 0x00000000, -/* 0x0bac: memx_data_tail */ -/* 0x0bac: i2c_scl_map */ + 0x00000000, +/* 0x0bb8: memx_data_tail */ +/* 0x0bb8: i2c_scl_map */ 0x00000400, 0x00000800, 0x00001000, @@ -769,7 +772,7 @@ uint32_t nvd0_pwr_data[] = { 0x00020000, 0x00040000, 0x00080000, -/* 0x0bd4: i2c_sda_map */ +/* 0x0be0: i2c_sda_map */ 0x00100000, 0x00200000, 0x00400000, @@ -781,6 +784,67 @@ uint32_t nvd0_pwr_data[] = { 0x10000000, 0x20000000, 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, }; uint32_t nvd0_pwr_code[] = { @@ -1145,398 +1209,399 @@ uint32_t nvd0_pwr_code[] = { 0xcf07c067, 0x64f00066, 0xf60bf404, - 0xb6001698, - 0x00f80410, -/* 0x04f4: memx_func_leave */ - 0xf10467f0, - 0xd007e407, - 0x04bd0006, -/* 0x0500: memx_func_leave_wait */ - 0x07c067f1, - 0xf00066cf, - 0x1bf40464, -/* 0x050f: memx_func_wr32 */ - 0x9800f8f6, - 0x15980016, - 0x0810b601, - 0x50f960f9, - 0xe0fcd0fc, - 0xb63321f4, - 0x1bf40242, -/* 0x052b: memx_func_wait */ - 0xf000f8e9, - 0x88cf2c87, - 0x001e9800, - 0x98011d98, - 0x1b98021c, - 0x1010b603, - 0xf88621f4, -/* 0x0545: memx_func_delay */ - 0x001e9800, - 0xf40410b6, - 0x00f86721, -/* 0x0550: memx_exec */ - 0xd0f9e0f9, - 0xb902c1b9, -/* 0x055a: memx_exec_next */ - 0x139802b2, +/* 0x04ee: memx_func_leave */ + 0x67f000f8, + 0xe407f104, + 0x0006d007, +/* 0x04fa: memx_func_leave_wait */ + 0x67f104bd, + 0x66cf07c0, + 0x0464f000, + 0xf8f61bf4, +/* 0x0509: memx_func_wait_vblank */ 0x0410b600, - 0xf0103495, - 0x35980c30, - 0xb855f9de, - 0x1ef40612, - 0xfcd0fcec, - 0xf121f5e0, -/* 0x057b: memx_info */ - 0xf100f802, - 0xf103acc7, - 0xf50800b7, - 0xf802f121, -/* 0x0589: memx_recv */ - 0x01d6b000, - 0xb0c40bf4, - 0x0bf400d6, -/* 0x0597: memx_init */ - 0xf800f8e9, -/* 0x0599: perf_recv */ -/* 0x059b: perf_init */ - 0xf800f800, -/* 0x059d: i2c_drive_scl */ - 0x0036b000, - 0xf10e0bf4, - 0xd007e007, - 0x04bd0001, -/* 0x05ae: i2c_drive_scl_lo */ - 0x07f100f8, - 0x01d007e4, +/* 0x050e: memx_func_wr32 */ + 0x169800f8, + 0x01159800, + 0xf90810b6, + 0xfc50f960, + 0xf4e0fcd0, + 0x42b63321, + 0xe91bf402, +/* 0x052a: memx_func_wait */ + 0x87f000f8, + 0x0088cf2c, + 0x98001e98, + 0x1c98011d, + 0x031b9802, + 0xf41010b6, + 0x00f88621, +/* 0x0544: memx_func_delay */ + 0xb6001e98, + 0x21f40410, +/* 0x054f: memx_exec */ + 0xf900f867, + 0xb9d0f9e0, + 0xb2b902c1, +/* 0x0559: memx_exec_next */ + 0x00139802, + 0x950410b6, + 0x30f01034, + 0xde35980c, + 0x12b855f9, + 0xec1ef406, + 0xe0fcd0fc, + 0x02f121f5, +/* 0x057a: memx_info */ + 0xc7f100f8, + 0xb7f103b8, + 0x21f50800, + 0x00f802f1, +/* 0x0588: memx_recv */ + 0xf401d6b0, + 0xd6b0c40b, + 0xe90bf400, +/* 0x0596: memx_init */ + 0x00f800f8, +/* 0x0598: perf_recv */ +/* 0x059a: perf_init */ + 0x00f800f8, +/* 0x059c: i2c_drive_scl */ + 0xf40036b0, + 0x07f10e0b, + 0x01d007e0, 0xf804bd00, -/* 0x05b9: i2c_drive_sda */ - 0x0036b000, - 0xf10e0bf4, - 0xd007e007, - 0x04bd0002, -/* 0x05ca: i2c_drive_sda_lo */ - 0x07f100f8, - 0x02d007e4, +/* 0x05ad: i2c_drive_scl_lo */ + 0xe407f100, + 0x0001d007, + 0x00f804bd, +/* 0x05b8: i2c_drive_sda */ + 0xf40036b0, + 0x07f10e0b, + 0x02d007e0, 0xf804bd00, -/* 0x05d5: i2c_sense_scl */ +/* 0x05c9: i2c_drive_sda_lo */ + 0xe407f100, + 0x0002d007, + 0x00f804bd, +/* 0x05d4: i2c_sense_scl */ + 0xf10132f4, + 0xcf07c437, + 0x31fd0033, + 0x060bf404, +/* 0x05e7: i2c_sense_scl_done */ + 0xf80131f4, +/* 0x05e9: i2c_sense_sda */ 0x0132f400, 0x07c437f1, 0xfd0033cf, - 0x0bf40431, + 0x0bf40432, 0x0131f406, -/* 0x05e8: i2c_sense_scl_done */ -/* 0x05ea: i2c_sense_sda */ - 0x32f400f8, - 0xc437f101, - 0x0033cf07, - 0xf40432fd, - 0x31f4060b, -/* 0x05fd: i2c_sense_sda_done */ -/* 0x05ff: i2c_raise_scl */ - 0xf900f801, - 0x9847f140, - 0x0137f008, - 0x059d21f5, -/* 0x060c: i2c_raise_scl_wait */ - 0x03e8e7f1, - 0xf56721f4, - 0xf405d521, - 0x42b60901, - 0xef1bf401, -/* 0x0620: i2c_raise_scl_done */ - 0x00f840fc, -/* 0x0624: i2c_start */ - 0x05d521f5, - 0xf50d11f4, - 0xf405ea21, - 0x0ef40611, -/* 0x0635: i2c_start_rep */ - 0x0037f030, - 0x059d21f5, +/* 0x05fc: i2c_sense_sda_done */ +/* 0x05fe: i2c_raise_scl */ + 0x40f900f8, + 0x089847f1, 0xf50137f0, - 0xbb05b921, - 0x65b60076, - 0x9450f904, - 0x56bb0465, - 0xfd50bd02, - 0x50fc0475, - 0x05ff21f5, - 0xf40464b6, -/* 0x0662: i2c_start_send */ - 0x37f01f11, - 0xb921f500, - 0x88e7f105, - 0x6721f413, - 0xf50037f0, - 0xf1059d21, - 0xf41388e7, -/* 0x067e: i2c_start_out */ - 0x00f86721, -/* 0x0680: i2c_stop */ +/* 0x060b: i2c_raise_scl_wait */ + 0xf1059c21, + 0xf403e8e7, + 0x21f56721, + 0x01f405d4, + 0x0142b609, +/* 0x061f: i2c_raise_scl_done */ + 0xfcef1bf4, +/* 0x0623: i2c_start */ + 0xf500f840, + 0xf405d421, + 0x21f50d11, + 0x11f405e9, + 0x300ef406, +/* 0x0634: i2c_start_rep */ 0xf50037f0, - 0xf0059d21, - 0x21f50037, - 0xe7f105b9, - 0x21f403e8, - 0x0137f067, - 0x059d21f5, - 0x1388e7f1, - 0xf06721f4, + 0xf0059c21, 0x21f50137, - 0xe7f105b9, - 0x21f41388, -/* 0x06b3: i2c_bitw */ - 0xf500f867, - 0xf105b921, - 0xf403e8e7, - 0x76bb6721, + 0x76bb05b8, 0x0465b600, 0x659450f9, 0x0256bb04, 0x75fd50bd, 0xf550fc04, - 0xb605ff21, + 0xb605fe21, 0x11f40464, - 0x88e7f118, - 0x6721f413, - 0xf50037f0, - 0xf1059d21, - 0xf41388e7, -/* 0x06f2: i2c_bitw_out */ - 0x00f86721, -/* 0x06f4: i2c_bitr */ +/* 0x0661: i2c_start_send */ + 0x0037f01f, + 0x05b821f5, + 0x1388e7f1, + 0xf06721f4, + 0x21f50037, + 0xe7f1059c, + 0x21f41388, +/* 0x067d: i2c_start_out */ +/* 0x067f: i2c_stop */ + 0xf000f867, + 0x21f50037, + 0x37f0059c, + 0xb821f500, + 0xe8e7f105, + 0x6721f403, 0xf50137f0, - 0xf105b921, - 0xf403e8e7, - 0x76bb6721, - 0x0465b600, - 0x659450f9, - 0x0256bb04, - 0x75fd50bd, - 0xf550fc04, - 0xb605ff21, - 0x11f40464, - 0xea21f51b, - 0x0037f005, - 0x059d21f5, + 0xf1059c21, + 0xf41388e7, + 0x37f06721, + 0xb821f501, + 0x88e7f105, + 0x6721f413, +/* 0x06b2: i2c_bitw */ + 0x21f500f8, + 0xe7f105b8, + 0x21f403e8, + 0x0076bb67, + 0xf90465b6, + 0x04659450, + 0xbd0256bb, + 0x0475fd50, + 0x21f550fc, + 0x64b605fe, + 0x1811f404, 0x1388e7f1, 0xf06721f4, - 0x31f4013c, -/* 0x0739: i2c_bitr_done */ -/* 0x073b: i2c_get_byte */ - 0xf000f801, - 0x47f00057, -/* 0x0741: i2c_get_byte_next */ - 0x0154b608, - 0xb60076bb, - 0x50f90465, - 0xbb046594, - 0x50bd0256, - 0xfc0475fd, - 0xf421f550, - 0x0464b606, - 0xfd2b11f4, - 0x42b60553, - 0xd81bf401, - 0xbb0137f0, + 0x21f50037, + 0xe7f1059c, + 0x21f41388, +/* 0x06f1: i2c_bitw_out */ +/* 0x06f3: i2c_bitr */ + 0xf000f867, + 0x21f50137, + 0xe7f105b8, + 0x21f403e8, + 0x0076bb67, + 0xf90465b6, + 0x04659450, + 0xbd0256bb, + 0x0475fd50, + 0x21f550fc, + 0x64b605fe, + 0x1b11f404, + 0x05e921f5, + 0xf50037f0, + 0xf1059c21, + 0xf41388e7, + 0x3cf06721, + 0x0131f401, +/* 0x0738: i2c_bitr_done */ +/* 0x073a: i2c_get_byte */ + 0x57f000f8, + 0x0847f000, +/* 0x0740: i2c_get_byte_next */ + 0xbb0154b6, 0x65b60076, 0x9450f904, 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x06b321f5, -/* 0x078b: i2c_get_byte_done */ - 0xf80464b6, -/* 0x078d: i2c_put_byte */ - 0x0847f000, -/* 0x0790: i2c_put_byte_next */ - 0xff0142b6, - 0x76bb3854, + 0x06f321f5, + 0xf40464b6, + 0x53fd2b11, + 0x0142b605, + 0xf0d81bf4, + 0x76bb0137, 0x0465b600, 0x659450f9, 0x0256bb04, 0x75fd50bd, 0xf550fc04, - 0xb606b321, + 0xb606b221, +/* 0x078a: i2c_get_byte_done */ + 0x00f80464, +/* 0x078c: i2c_put_byte */ +/* 0x078f: i2c_put_byte_next */ + 0xb60847f0, + 0x54ff0142, + 0x0076bb38, + 0xf90465b6, + 0x04659450, + 0xbd0256bb, + 0x0475fd50, + 0x21f550fc, + 0x64b606b2, + 0x3411f404, + 0xf40046b0, + 0x76bbd81b, + 0x0465b600, + 0x659450f9, + 0x0256bb04, + 0x75fd50bd, + 0xf550fc04, + 0xb606f321, 0x11f40464, - 0x0046b034, - 0xbbd81bf4, + 0x0076bb0f, + 0xf40136b0, + 0x32f4061b, +/* 0x07e5: i2c_put_byte_done */ +/* 0x07e7: i2c_addr */ + 0xbb00f801, 0x65b60076, 0x9450f904, 0x56bb0465, 0xfd50bd02, 0x50fc0475, - 0x06f421f5, + 0x062321f5, 0xf40464b6, - 0x76bb0f11, - 0x0136b000, - 0xf4061bf4, -/* 0x07e6: i2c_put_byte_done */ - 0x00f80132, -/* 0x07e8: i2c_addr */ + 0xc3e72911, + 0x34b6012e, + 0x0553fd01, 0xb60076bb, 0x50f90465, 0xbb046594, 0x50bd0256, 0xfc0475fd, - 0x2421f550, - 0x0464b606, - 0xe72911f4, - 0xb6012ec3, - 0x53fd0134, - 0x0076bb05, - 0xf90465b6, - 0x04659450, - 0xbd0256bb, - 0x0475fd50, - 0x21f550fc, - 0x64b6078d, -/* 0x082d: i2c_addr_done */ -/* 0x082f: i2c_acquire_addr */ - 0xc700f804, - 0xe4b6f8ce, - 0x14e0b705, -/* 0x083b: i2c_acquire */ - 0xf500f8d0, - 0xf4082f21, - 0xd9f00421, - 0x3321f403, -/* 0x084a: i2c_release */ + 0x8c21f550, + 0x0464b607, +/* 0x082c: i2c_addr_done */ +/* 0x082e: i2c_acquire_addr */ + 0xcec700f8, + 0x05e4b6f8, + 0xd014e0b7, +/* 0x083a: i2c_acquire */ 0x21f500f8, - 0x21f4082f, - 0x03daf004, + 0x21f4082e, + 0x03d9f004, 0xf83321f4, -/* 0x0859: i2c_recv */ - 0x0132f400, - 0xb6f8c1c7, - 0x16b00214, - 0x3a1ff528, - 0xd413a001, - 0x0032980b, - 0x0bac13a0, - 0xf4003198, - 0xd0f90231, - 0xd0f9e0f9, - 0x000067f1, - 0x100063f1, - 0xbb016792, - 0x65b60076, - 0x9450f904, - 0x56bb0465, - 0xfd50bd02, - 0x50fc0475, - 0x083b21f5, - 0xfc0464b6, - 0x00d6b0d0, - 0x00b31bf5, - 0xbb0057f0, - 0x65b60076, - 0x9450f904, - 0x56bb0465, - 0xfd50bd02, - 0x50fc0475, - 0x07e821f5, - 0xf50464b6, - 0xc700d011, - 0x76bbe0c5, +/* 0x0849: i2c_release */ + 0x2e21f500, + 0x0421f408, + 0xf403daf0, + 0x00f83321, +/* 0x0858: i2c_recv */ + 0xc70132f4, + 0x14b6f8c1, + 0x2816b002, + 0x013a1ff5, + 0x0be013a0, + 0xa0003298, + 0x980bb813, + 0x31f40031, + 0xf9d0f902, + 0xf1d0f9e0, + 0xf1000067, + 0x92100063, + 0x76bb0167, + 0x0465b600, + 0x659450f9, + 0x0256bb04, + 0x75fd50bd, + 0xf550fc04, + 0xb6083a21, + 0xd0fc0464, + 0xf500d6b0, + 0xf000b31b, + 0x76bb0057, 0x0465b600, 0x659450f9, 0x0256bb04, 0x75fd50bd, 0xf550fc04, - 0xb6078d21, + 0xb607e721, 0x11f50464, - 0x57f000ad, - 0x0076bb01, + 0xc5c700d0, + 0x0076bbe0, 0xf90465b6, 0x04659450, 0xbd0256bb, 0x0475fd50, 0x21f550fc, - 0x64b607e8, - 0x8a11f504, - 0x0076bb00, - 0xf90465b6, - 0x04659450, - 0xbd0256bb, - 0x0475fd50, - 0x21f550fc, - 0x64b6073b, - 0x6a11f404, - 0xbbe05bcb, - 0x65b60076, - 0x9450f904, - 0x56bb0465, - 0xfd50bd02, - 0x50fc0475, - 0x068021f5, - 0xb90464b6, - 0x74bd025b, -/* 0x095f: i2c_recv_not_rd08 */ - 0xb0430ef4, - 0x1bf401d6, - 0x0057f03d, - 0x07e821f5, - 0xc73311f4, - 0x21f5e0c5, - 0x11f4078d, - 0x0057f029, - 0x07e821f5, - 0xc71f11f4, - 0x21f5e0b5, - 0x11f4078d, - 0x8021f515, - 0xc774bd06, - 0x1bf408c5, - 0x0232f409, -/* 0x099f: i2c_recv_not_wr08 */ -/* 0x099f: i2c_recv_done */ - 0xc7030ef4, - 0x21f5f8ce, - 0xe0fc084a, - 0x12f4d0fc, - 0x027cb90a, - 0x02f121f5, -/* 0x09b4: i2c_recv_exit */ -/* 0x09b6: i2c_init */ + 0x64b6078c, + 0xad11f504, + 0x0157f000, + 0xb60076bb, + 0x50f90465, + 0xbb046594, + 0x50bd0256, + 0xfc0475fd, + 0xe721f550, + 0x0464b607, + 0x008a11f5, + 0xb60076bb, + 0x50f90465, + 0xbb046594, + 0x50bd0256, + 0xfc0475fd, + 0x3a21f550, + 0x0464b607, + 0xcb6a11f4, + 0x76bbe05b, + 0x0465b600, + 0x659450f9, + 0x0256bb04, + 0x75fd50bd, + 0xf550fc04, + 0xb6067f21, + 0x5bb90464, + 0xf474bd02, +/* 0x095e: i2c_recv_not_rd08 */ + 0xd6b0430e, + 0x3d1bf401, + 0xf50057f0, + 0xf407e721, + 0xc5c73311, + 0x8c21f5e0, + 0x2911f407, + 0xf50057f0, + 0xf407e721, + 0xb5c71f11, + 0x8c21f5e0, + 0x1511f407, + 0x067f21f5, + 0xc5c774bd, + 0x091bf408, + 0xf40232f4, +/* 0x099e: i2c_recv_not_wr08 */ +/* 0x099e: i2c_recv_done */ + 0xcec7030e, + 0x4921f5f8, + 0xfce0fc08, + 0x0a12f4d0, + 0xf5027cb9, +/* 0x09b3: i2c_recv_exit */ + 0xf802f121, +/* 0x09b5: i2c_init */ +/* 0x09b7: test_recv */ + 0xf100f800, + 0xcf05d817, + 0x10b60011, + 0xd807f101, + 0x0001d005, + 0xe7f104bd, + 0xe3f1d900, + 0x21f5134f, + 0x00f80223, +/* 0x09d8: test_init */ + 0x0800e7f1, + 0x022321f5, +/* 0x09e2: idle_recv */ 0x00f800f8, -/* 0x09b8: test_recv */ - 0x05d817f1, - 0xb60011cf, - 0x07f10110, - 0x01d005d8, - 0xf104bd00, - 0xf1d900e7, - 0xf5134fe3, - 0xf8022321, -/* 0x09d9: test_init */ - 0x00e7f100, - 0x2321f508, -/* 0x09e3: idle_recv */ - 0xf800f802, -/* 0x09e5: idle */ - 0x0031f400, - 0x05d417f1, - 0xb60011cf, - 0x07f10110, - 0x01d005d4, -/* 0x09fb: idle_loop */ - 0xf004bd00, - 0x32f45817, -/* 0x0a01: idle_proc */ -/* 0x0a01: idle_proc_exec */ - 0xb910f902, - 0x21f5021e, - 0x10fc02fa, - 0xf40911f4, - 0x0ef40231, -/* 0x0a15: idle_proc_next */ - 0x5810b6ef, - 0xf4061fb8, - 0x02f4e61b, - 0x0028f4dd, - 0x00c10ef4, +/* 0x09e4: idle */ + 0xf10031f4, + 0xcf05d417, + 0x10b60011, + 0xd407f101, + 0x0001d005, +/* 0x09fa: idle_loop */ + 0x17f004bd, + 0x0232f458, +/* 0x0a00: idle_proc */ +/* 0x0a00: idle_proc_exec */ + 0x1eb910f9, + 0xfa21f502, + 0xf410fc02, + 0x31f40911, + 0xef0ef402, +/* 0x0a14: idle_proc_next */ + 0xb85810b6, + 0x1bf4061f, + 0xdd02f4e6, + 0xf40028f4, + 0x0000c10e, 0x00000000, 0x00000000, 0x00000000, diff --git a/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/os.h b/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/os.h index 574acfa..80f8328 100644 --- a/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/os.h +++ b/drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/os.h @@ -24,6 +24,7 @@ #define MEMX_WR32 2 #define MEMX_WAIT 3 #define MEMX_DELAY 4 +#define MEMX_VBLANK 5 /* I2C_: message identifiers */ #define I2C__MSG_RD08 0 diff --git a/drivers/gpu/drm/nouveau/core/subdev/pwr/memx.c b/drivers/gpu/drm/nouveau/core/subdev/pwr/memx.c index def6a9a..68baa72 100644 --- a/drivers/gpu/drm/nouveau/core/subdev/pwr/memx.c +++ b/drivers/gpu/drm/nouveau/core/subdev/pwr/memx.c @@ -63,7 +63,7 @@ nouveau_memx_init(struct nouveau_pwr *ppwr, struct nouveau_memx **pmemx) } while (nv_rd32(ppwr, 0x10a580) != 0x00000003); nv_wr32(ppwr, 0x10a1c0, 0x01000000 | memx->base); nv_wr32(ppwr, 0x10a1c4, 0x00010000 | MEMX_ENTER); - nv_wr32(ppwr, 0x10a1c4, 0x00000000); + return 0; } @@ -117,4 +117,37 @@ nouveau_memx_nsec(struct nouveau_memx *memx, u32 nsec) memx_out(memx); /* fuc can't handle multiple */ } +void +nouveau_memx_wait_vblank(struct nouveau_memx *memx) +{ + struct nouveau_pwr *ppwr = memx->ppwr; + u32 heads, x, y, px = 0; + int i, head_sync; + + if (nv_device(ppwr)->chipset < 0xd0) { + heads = nv_rd32(ppwr, 0x610050); + for (i = 0; i < 2; i++) { + /* Heuristic: sync to head with biggest resolution */ + if (heads & (2 << (i << 3))) { + x = nv_rd32(ppwr, 0x610b40 + (0x540 * i)); + y = (x & 0xffff0000) >> 16; + x &= 0x0000ffff; + if ((x * y) > px) { + px = (x * y); + head_sync = i; + } + } + } + } + + if (px == 0) { + nv_debug(memx->ppwr, "WAIT VBLANK !NO ACTIVE HEAD\n"); + return; + } + + nv_debug(memx->ppwr, "WAIT VBLANK HEAD%d\n", head_sync); + memx_cmd(memx, MEMX_VBLANK, 1, (u32[]){ head_sync }); + memx_out(memx); /* fuc can't handle multiple */ +} + #endif -- 2.7.4