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

drm/nouveau/flcn: specify EMEM address from subdev



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent ca3190e3
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@ struct nvkm_falcon {
	u8 version;
	u8 secret;
	bool debug;
	bool has_emem;

	struct nvkm_memory *core;
	bool external;
@@ -84,6 +83,7 @@ struct nvkm_falcon_func {
	void (*load_imem)(struct nvkm_falcon *, void *, u32, u32, u16, u8, bool);
	void (*load_dmem)(struct nvkm_falcon *, void *, u32, u32, u8);
	void (*read_dmem)(struct nvkm_falcon *, u32, u32, u8, void *);
	u32 emem_addr;
	void (*bind_context)(struct nvkm_falcon *, struct nvkm_memory *);
	int (*wait_for_halt)(struct nvkm_falcon *, u32);
	int (*clear_interrupt)(struct nvkm_falcon *, u32);
+1 −0
Original line number Diff line number Diff line
@@ -92,6 +92,7 @@ gp102_sec2_flcn = {
	.load_imem = nvkm_falcon_v1_load_imem,
	.load_dmem = nvkm_falcon_v1_load_dmem,
	.read_dmem = nvkm_falcon_v1_read_dmem,
	.emem_addr = 0x01000000,
	.bind_context = gp102_sec2_flcn_bind_context,
	.wait_for_halt = nvkm_falcon_v1_wait_for_halt,
	.clear_interrupt = nvkm_falcon_v1_clear_interrupt,
+1 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ tu102_sec2_flcn = {
	.load_imem = nvkm_falcon_v1_load_imem,
	.load_dmem = nvkm_falcon_v1_load_dmem,
	.read_dmem = nvkm_falcon_v1_read_dmem,
	.emem_addr = 0x01000000,
	.bind_context = gp102_sec2_flcn_bind_context,
	.wait_for_halt = nvkm_falcon_v1_wait_for_halt,
	.clear_interrupt = nvkm_falcon_v1_clear_interrupt,
+0 −1
Original line number Diff line number Diff line
@@ -170,7 +170,6 @@ nvkm_falcon_oneinit(struct nvkm_falcon *falcon)
		break;
	case NVKM_ENGINE_SEC2:
		debug_reg = 0x408;
		falcon->has_emem = true;
		break;
	case NVKM_SUBDEV_GSP:
		debug_reg = 0x0; /*XXX*/
+6 −6
Original line number Diff line number Diff line
@@ -89,18 +89,17 @@ nvkm_falcon_v1_load_emem(struct nvkm_falcon *falcon, void *data, u32 start,
	}
}

static const u32 EMEM_START_ADDR = 0x1000000;

void
nvkm_falcon_v1_load_dmem(struct nvkm_falcon *falcon, void *data, u32 start,
			 u32 size, u8 port)
{
	const struct nvkm_falcon_func *func = falcon->func;
	u8 rem = size % 4;
	int i;

	if (start >= EMEM_START_ADDR && falcon->has_emem)
	if (func->emem_addr && start >= func->emem_addr)
		return nvkm_falcon_v1_load_emem(falcon, data,
						start - EMEM_START_ADDR, size,
						start - func->emem_addr, size,
						port);

	size -= rem;
@@ -152,11 +151,12 @@ void
nvkm_falcon_v1_read_dmem(struct nvkm_falcon *falcon, u32 start, u32 size,
			 u8 port, void *data)
{
	const struct nvkm_falcon_func *func = falcon->func;
	u8 rem = size % 4;
	int i;

	if (start >= EMEM_START_ADDR && falcon->has_emem)
		return nvkm_falcon_v1_read_emem(falcon, start - EMEM_START_ADDR,
	if (func->emem_addr && start >= func->emem_addr)
		return nvkm_falcon_v1_read_emem(falcon, start - func->emem_addr,
						size, port, data);

	size -= rem;