nouveau/gsp: add some basic registry entries.
The nvidia driver sets these two basic registry entries always, so copy it. Reviewed-by: Danilo Krummrich <dakr@redhat.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
5177e5fa6e
commit
8d55b0a940
@ -1029,26 +1029,51 @@ r535_gsp_rpc_unloading_guest_driver(struct nvkm_gsp *gsp, bool suspend)
|
|||||||
return nvkm_gsp_rpc_wr(gsp, rpc, true);
|
return nvkm_gsp_rpc_wr(gsp, rpc, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* dword only */
|
||||||
|
struct nv_gsp_registry_entries {
|
||||||
|
const char *name;
|
||||||
|
u32 value;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct nv_gsp_registry_entries r535_registry_entries[] = {
|
||||||
|
{ "RMSecBusResetEnable", 1 },
|
||||||
|
{ "RMForcePcieConfigSave", 1 },
|
||||||
|
};
|
||||||
|
#define NV_GSP_REG_NUM_ENTRIES ARRAY_SIZE(r535_registry_entries)
|
||||||
|
|
||||||
static int
|
static int
|
||||||
r535_gsp_rpc_set_registry(struct nvkm_gsp *gsp)
|
r535_gsp_rpc_set_registry(struct nvkm_gsp *gsp)
|
||||||
{
|
{
|
||||||
PACKED_REGISTRY_TABLE *rpc;
|
PACKED_REGISTRY_TABLE *rpc;
|
||||||
char *strings;
|
char *strings;
|
||||||
|
int str_offset;
|
||||||
|
int i;
|
||||||
|
size_t rpc_size = sizeof(*rpc) + sizeof(rpc->entries[0]) * NV_GSP_REG_NUM_ENTRIES;
|
||||||
|
|
||||||
rpc = nvkm_gsp_rpc_get(gsp, NV_VGPU_MSG_FUNCTION_SET_REGISTRY,
|
/* add strings + null terminator */
|
||||||
sizeof(*rpc) + sizeof(rpc->entries[0]) + 1);
|
for (i = 0; i < NV_GSP_REG_NUM_ENTRIES; i++)
|
||||||
|
rpc_size += strlen(r535_registry_entries[i].name) + 1;
|
||||||
|
|
||||||
|
rpc = nvkm_gsp_rpc_get(gsp, NV_VGPU_MSG_FUNCTION_SET_REGISTRY, rpc_size);
|
||||||
if (IS_ERR(rpc))
|
if (IS_ERR(rpc))
|
||||||
return PTR_ERR(rpc);
|
return PTR_ERR(rpc);
|
||||||
|
|
||||||
rpc->size = sizeof(*rpc);
|
rpc->size = sizeof(*rpc);
|
||||||
rpc->numEntries = 1;
|
rpc->numEntries = NV_GSP_REG_NUM_ENTRIES;
|
||||||
rpc->entries[0].nameOffset = offsetof(typeof(*rpc), entries[1]);
|
|
||||||
rpc->entries[0].type = 1;
|
|
||||||
rpc->entries[0].data = 0;
|
|
||||||
rpc->entries[0].length = 4;
|
|
||||||
|
|
||||||
strings = (char *)&rpc->entries[1];
|
str_offset = offsetof(typeof(*rpc), entries[NV_GSP_REG_NUM_ENTRIES]);
|
||||||
strings[0] = '\0';
|
strings = (char *)&rpc->entries[NV_GSP_REG_NUM_ENTRIES];
|
||||||
|
for (i = 0; i < NV_GSP_REG_NUM_ENTRIES; i++) {
|
||||||
|
int name_len = strlen(r535_registry_entries[i].name) + 1;
|
||||||
|
|
||||||
|
rpc->entries[i].nameOffset = str_offset;
|
||||||
|
rpc->entries[i].type = 1;
|
||||||
|
rpc->entries[i].data = r535_registry_entries[i].value;
|
||||||
|
rpc->entries[i].length = 4;
|
||||||
|
memcpy(strings, r535_registry_entries[i].name, name_len);
|
||||||
|
strings += name_len;
|
||||||
|
str_offset += name_len;
|
||||||
|
}
|
||||||
|
|
||||||
return nvkm_gsp_rpc_wr(gsp, rpc, false);
|
return nvkm_gsp_rpc_wr(gsp, rpc, false);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user