Commit 207c445b authored by Ben Skeggs's avatar Ben Skeggs Committed by Dave Airlie
Browse files

drm/nouveau/gsp: add hal for gsp.set_rmargs()



555.42.02 has incompatible changes to GSP_ARGUMENTS_CACHED.

Signed-off-by: default avatarBen Skeggs <bskeggs@nvidia.com>
Reviewed-by: default avatarDave Airlie <airlied@redhat.com>
Reviewed-by: default avatarTimur Tabi <ttabi@nvidia.com>
Tested-by: default avatarTimur Tabi <ttabi@nvidia.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 2f9974fd
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -71,7 +71,6 @@ void r535_gsp_dtor(struct nvkm_gsp *);
int r535_gsp_oneinit(struct nvkm_gsp *);
int r535_gsp_init(struct nvkm_gsp *);
int r535_gsp_fini(struct nvkm_gsp *, bool suspend);
int r535_gsp_rmargs_init(struct nvkm_gsp *gsp, bool resume);

int nvkm_gsp_new_(const struct nvkm_gsp_fwif *, struct nvkm_device *, enum nvkm_subdev_type, int,
		  struct nvkm_gsp **);
+21 −15
Original line number Diff line number Diff line
@@ -1196,23 +1196,11 @@ r535_gsp_shared_init(struct nvkm_gsp *gsp)
	return 0;
}

int
r535_gsp_rmargs_init(struct nvkm_gsp *gsp, bool resume)
static void
r535_gsp_set_rmargs(struct nvkm_gsp *gsp, bool resume)
{
	GSP_ARGUMENTS_CACHED *args;
	int ret;
	GSP_ARGUMENTS_CACHED *args = gsp->rmargs.data;

	if (!resume) {
		ret = r535_gsp_shared_init(gsp);
		if (ret)
			return ret;

		ret = nvkm_gsp_mem_ctor(gsp, 0x1000, &gsp->rmargs);
		if (ret)
			return ret;
	}

	args = gsp->rmargs.data;
	args->messageQueueInitArguments.sharedMemPhysAddr = gsp->shm.mem.addr;
	args->messageQueueInitArguments.pageTableEntryCount = gsp->shm.ptes.nr;
	args->messageQueueInitArguments.cmdQueueOffset =
@@ -1229,7 +1217,24 @@ r535_gsp_rmargs_init(struct nvkm_gsp *gsp, bool resume)
		args->srInitArguments.flags = 0;
		args->srInitArguments.bInPMTransition = 1;
	}
}

static int
r535_gsp_rmargs_init(struct nvkm_gsp *gsp, bool resume)
{
	int ret;

	if (!resume) {
		ret = r535_gsp_shared_init(gsp);
		if (ret)
			return ret;

		ret = nvkm_gsp_mem_ctor(gsp, 0x1000, &gsp->rmargs);
		if (ret)
			return ret;
	}

	gsp->rm->api->gsp->set_rmargs(gsp, resume);
	return 0;
}

@@ -2174,6 +2179,7 @@ r535_gsp_oneinit(struct nvkm_gsp *gsp)

const struct nvkm_rm_api_gsp
r535_gsp = {
	.set_rmargs = r535_gsp_set_rmargs,
	.set_system_info = r535_gsp_set_system_info,
	.get_static_info = r535_gsp_get_static_info,
	.xlat_mc_engine_idx = r535_gsp_xlat_mc_engine_idx,
+1 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ struct nvkm_rm_wpr {

struct nvkm_rm_api {
	const struct nvkm_rm_api_gsp {
		void (*set_rmargs)(struct nvkm_gsp *, bool resume);
		int (*set_system_info)(struct nvkm_gsp *);
		int (*get_static_info)(struct nvkm_gsp *);
		bool (*xlat_mc_engine_idx)(u32 mc_engine_idx, enum nvkm_subdev_type *, int *inst);
+1 −1
Original line number Diff line number Diff line
@@ -183,7 +183,7 @@ tu102_gsp_init(struct nvkm_gsp *gsp)
		mbox0 = lower_32_bits(gsp->wpr_meta.addr);
		mbox1 = upper_32_bits(gsp->wpr_meta.addr);
	} else {
		r535_gsp_rmargs_init(gsp, true);
		gsp->rm->api->gsp->set_rmargs(gsp, true);

		mbox0 = lower_32_bits(gsp->sr.meta.addr);
		mbox1 = upper_32_bits(gsp->sr.meta.addr);