Commit 8d55b0a9 authored by Dave Airlie's avatar Dave Airlie

nouveau/gsp: add some basic registry entries.

The nvidia driver sets these two basic registry entries always,
so copy it.
Reviewed-by: default avatarDanilo Krummrich <dakr@redhat.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 5177e5fa
...@@ -1029,26 +1029,51 @@ r535_gsp_rpc_unloading_guest_driver(struct nvkm_gsp *gsp, bool suspend) ...@@ -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; str_offset = offsetof(typeof(*rpc), entries[NV_GSP_REG_NUM_ENTRIES]);
rpc->entries[0].data = 0; strings = (char *)&rpc->entries[NV_GSP_REG_NUM_ENTRIES];
rpc->entries[0].length = 4; for (i = 0; i < NV_GSP_REG_NUM_ENTRIES; i++) {
int name_len = strlen(r535_registry_entries[i].name) + 1;
strings = (char *)&rpc->entries[1];
strings[0] = '\0'; 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);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment