mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-16 04:27:57 -05:00
drm/nouveau/gsp: add hal for gsp.set_rmargs()
555.42.02 has incompatible changes to GSP_ARGUMENTS_CACHED. Signed-off-by: Ben Skeggs <bskeggs@nvidia.com> Reviewed-by: Dave Airlie <airlied@redhat.com> Reviewed-by: Timur Tabi <ttabi@nvidia.com> Tested-by: Timur Tabi <ttabi@nvidia.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -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 **);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user