Commit b7f713b8 authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/gr/gf100-: move fecs bind_pointer into a function



Makes the code somewhat less magic.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 8c7db768
Loading
Loading
Loading
Loading
+3 −7
Original line number Diff line number Diff line
@@ -1523,13 +1523,9 @@ gf100_grctx_generate(struct gf100_gr *gr)
	/* Make channel current. */
	addr = nvkm_memory_addr(inst) >> 12;
	if (gr->firmware) {
		nvkm_wr32(device, 0x409840, 0x00000030);
		nvkm_wr32(device, 0x409500, 0x80000000 | addr);
		nvkm_wr32(device, 0x409504, 0x00000003);
		nvkm_msec(device, 2000,
			if (nvkm_rd32(device, 0x409800) & 0x00000010)
				break;
		);
		ret = gf100_gr_fecs_bind_pointer(gr, 0x80000000 | addr);
		if (ret)
			goto done;

		nvkm_kmap(data);
		nvkm_wo32(data, 0x1c, 1);
+19 −0
Original line number Diff line number Diff line
@@ -715,6 +715,25 @@ gf100_gr_pack_mmio[] = {
 * PGRAPH engine/subdev functions
 ******************************************************************************/

int
gf100_gr_fecs_bind_pointer(struct gf100_gr *gr, u32 inst)
{
	struct nvkm_device *device = gr->base.engine.subdev.device;

	nvkm_wr32(device, 0x409840, 0x00000030);
	nvkm_wr32(device, 0x409500, inst);
	nvkm_wr32(device, 0x409504, 0x00000003);
	nvkm_msec(device, 2000,
		u32 stat = nvkm_rd32(device, 0x409800);
		if (stat & 0x00000020)
			return -EIO;
		if (stat & 0x00000010)
			return 0;
	);

	return -ETIMEDOUT;
}

static int
gf100_gr_fecs_set_reglist_virtual_address(struct gf100_gr *gr, u64 addr)
{
+2 −0
Original line number Diff line number Diff line
@@ -138,6 +138,8 @@ int gf100_gr_new_(const struct gf100_gr_func *, struct nvkm_device *,
		  int, struct nvkm_gr **);
void *gf100_gr_dtor(struct nvkm_gr *);

int gf100_gr_fecs_bind_pointer(struct gf100_gr *, u32 inst);

struct gf100_gr_func_zbc {
	void (*clear_color)(struct gf100_gr *, int zbc);
	void (*clear_depth)(struct gf100_gr *, int zbc);