Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d93e996a authored by Roy Spliet's avatar Roy Spliet Committed by Ben Skeggs
Browse files

drm/nouveau/pwr/memx: Make FB disable and enable explicit



Needs to be done after wait-for-VBLANK, and NVA3 requires register writes
in between.

Rather than hard-coding register writes, just split out fb_disable and
fb_enable.

v2. Squashed "fb/ramnve0: disable fb before reclocking"

Signed-off-by: default avatarRoy Spliet <rspliet@eclipso.eu>
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent e1a6f7da
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -48,5 +48,7 @@ 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 *);
void nouveau_memx_fb_disable(struct nouveau_memx *);
void nouveau_memx_fb_enable(struct nouveau_memx *);

#endif
+14 −0
Original line number Diff line number Diff line
@@ -111,6 +111,18 @@ ramfuc_wait_vblank(struct ramfuc *ram)
	nouveau_memx_wait_vblank(ram->memx);
}

static inline void
ramfuc_fb_disable(struct ramfuc *ram)
{
	nouveau_memx_fb_disable(ram->memx);
}

static inline void
ramfuc_fb_enable(struct ramfuc *ram)
{
	nouveau_memx_fb_enable(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)
@@ -121,5 +133,7 @@ ramfuc_wait_vblank(struct ramfuc *ram)
#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)
#define ram_fb_disable(s)    ramfuc_fb_disable(&(s)->base)
#define ram_fb_enable(s)     ramfuc_fb_enable(&(s)->base)

#endif
+5 −0
Original line number Diff line number Diff line
@@ -998,6 +998,8 @@ nve0_ram_calc_xits(struct nouveau_fb *pfb, struct nouveau_ram_data *next)
	if (ret)
		return ret;

	ram_fb_disable(fuc);

	ram->mode = (next->freq > fuc->refpll.vco1.max_freq) ? 2 : 1;
	ram->from = ram_rd32(fuc, 0x1373f4) & 0x0000000f;

@@ -1061,6 +1063,9 @@ nve0_ram_calc_xits(struct nouveau_fb *pfb, struct nouveau_ram_data *next)
		break;
	}

	if (!ret)
		ram_fb_enable(fuc);

	return ret;
}

+2 −2
Original line number Diff line number Diff line
@@ -43,9 +43,9 @@ process(PROC_MEMX, #memx_init, #memx_recv)
*/	.b32 func

memx_func_head:
handler(ENTER , 0x0000, 0x0000, #memx_func_enter)
handler(FB_OFF, 0x0000, 0x0000, #memx_func_enter)
memx_func_next:
handler(LEAVE , 0x0000, 0x0000, #memx_func_leave)
handler(FB_ON , 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)
+2 −2
Original line number Diff line number Diff line
@@ -19,8 +19,8 @@
#define MEMX_MSG_EXEC 1

/* MEMX: script opcode definitions */
#define MEMX_ENTER  0
#define MEMX_LEAVE  1
#define MEMX_FB_OFF 0
#define MEMX_FB_ON  1
#define MEMX_WR32   2
#define MEMX_WAIT   3
#define MEMX_DELAY  4
Loading