summaryrefslogtreecommitdiff
path: root/nvkm/core
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2013-04-25 17:56:03 +1000
committerBen Skeggs <bskeggs@redhat.com>2013-04-26 00:36:59 +1000
commit66a75090726d59f9d3dfa95d3062c13e28b533a7 (patch)
tree48f13c49860449e4abcccece809c14ca64a51bc7 /nvkm/core
parent3a9a2bc46c9df865ffd7dbc010a9186cea744c7b (diff)
downloadnouveau-66a75090726d59f9d3dfa95d3062c13e28b533a7.tar.gz
device: have engine object initialised before creation
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'nvkm/core')
-rw-r--r--nvkm/core/client.c5
-rw-r--r--nvkm/core/parent.c8
2 files changed, 10 insertions, 3 deletions
diff --git a/nvkm/core/client.c b/nvkm/core/client.c
index 2be389d72..9079c0ac5 100644
--- a/nvkm/core/client.c
+++ b/nvkm/core/client.c
@@ -58,8 +58,9 @@ nouveau_client_create_(const char *name, u64 devname, const char *cfg,
return -ENODEV;
ret = nouveau_namedb_create_(NULL, NULL, &nouveau_client_oclass,
- NV_CLIENT_CLASS, nouveau_device_sclass,
- 0, length, pobject);
+ NV_CLIENT_CLASS, NULL,
+ (1ULL << NVDEV_ENGINE_DEVICE),
+ length, pobject);
client = *pobject;
if (ret)
return ret;
diff --git a/nvkm/core/parent.c b/nvkm/core/parent.c
index db7c54943..313380ce6 100644
--- a/nvkm/core/parent.c
+++ b/nvkm/core/parent.c
@@ -24,6 +24,7 @@
#include <core/object.h>
#include <core/parent.h>
+#include <core/client.h>
int
nouveau_parent_sclass(struct nouveau_object *parent, u16 handle,
@@ -50,7 +51,12 @@ nouveau_parent_sclass(struct nouveau_object *parent, u16 handle,
while (mask) {
int i = ffsll(mask) - 1;
- if ((engine = nouveau_engine(parent, i))) {
+ if (nv_iclass(parent, NV_CLIENT_CLASS))
+ engine = nv_engine(nv_client(parent)->device);
+ else
+ engine = nouveau_engine(parent, i);
+
+ if (engine) {
oclass = engine->sclass;
while (oclass->ofuncs) {
if ((oclass->handle & 0xffff) == handle) {