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

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

drm/nouveau/core/memory: distinguish between coherent/non-coherent targets



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 134fdc1a
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -6,9 +6,10 @@ struct nvkm_vma;
struct nvkm_vm;

enum nvkm_memory_target {
	NVKM_MEM_TARGET_INST,
	NVKM_MEM_TARGET_VRAM,
	NVKM_MEM_TARGET_HOST,
	NVKM_MEM_TARGET_INST, /* instance memory */
	NVKM_MEM_TARGET_VRAM, /* video memory */
	NVKM_MEM_TARGET_HOST, /* coherent system memory */
	NVKM_MEM_TARGET_NCOH, /* non-coherent system memory */
};

struct nvkm_memory {
+8 −1
Original line number Diff line number Diff line
@@ -68,7 +68,14 @@ gf100_fifo_runlist_commit(struct gf100_fifo *fifo)
	}
	nvkm_done(cur);

	target = (nvkm_memory_target(cur) == NVKM_MEM_TARGET_HOST) ? 0x3 : 0x0;
	switch (nvkm_memory_target(cur)) {
	case NVKM_MEM_TARGET_VRAM: target = 0; break;
	case NVKM_MEM_TARGET_NCOH: target = 3; break;
	default:
		mutex_unlock(&subdev->mutex);
		WARN_ON(1);
		return;
	}

	nvkm_wr32(device, 0x002270, (nvkm_memory_addr(cur) >> 12) |
				    (target << 28));
+7 −4
Original line number Diff line number Diff line
@@ -83,10 +83,13 @@ gk104_fifo_runlist_commit(struct gk104_fifo *fifo, int runl)
	}
	nvkm_done(mem);

	if (nvkm_memory_target(mem) == NVKM_MEM_TARGET_VRAM)
		target = 0;
	else
		target = 3;
	switch (nvkm_memory_target(mem)) {
	case NVKM_MEM_TARGET_VRAM: target = 0; break;
	case NVKM_MEM_TARGET_NCOH: target = 3; break;
	default:
		WARN_ON(1);
		return;
	}

	nvkm_wr32(device, 0x002270, (nvkm_memory_addr(mem) >> 12) |
				    (target << 28));
+7 −4
Original line number Diff line number Diff line
@@ -136,10 +136,13 @@ nvkm_falcon_v1_bind_context(struct nvkm_falcon *falcon, struct nvkm_gpuobj *ctx)
	nvkm_falcon_wr32(falcon, 0xe00 + 4 * FALCON_DMAIDX_PHYS_SYS_NCOH, 0x6);

	/* Set context */
	if (nvkm_memory_target(ctx->memory) == NVKM_MEM_TARGET_VRAM)
		inst_loc = 0x0; /* FB */
	else
		inst_loc = 0x3; /* Non-coherent sysmem */
	switch (nvkm_memory_target(ctx->memory)) {
	case NVKM_MEM_TARGET_VRAM: inst_loc = 0; break;
	case NVKM_MEM_TARGET_NCOH: inst_loc = 3; break;
	default:
		WARN_ON(1);
		return;
	}

	/* Enable context */
	nvkm_falcon_mask(falcon, 0x048, 0x1, 0x1);
+1 −1
Original line number Diff line number Diff line
@@ -116,7 +116,7 @@ struct gk20a_instmem {
static enum nvkm_memory_target
gk20a_instobj_target(struct nvkm_memory *memory)
{
	return NVKM_MEM_TARGET_HOST;
	return NVKM_MEM_TARGET_NCOH;
}

static u64