drm/nouveau/object: store object type data outside of handle
authorBen Skeggs <bskeggs@redhat.com>
Thu, 20 Aug 2015 04:54:15 +0000 (14:54 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Fri, 28 Aug 2015 02:40:31 +0000 (12:40 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/include/nvkm/core/engctx.h
drivers/gpu/drm/nouveau/include/nvkm/core/engine.h
drivers/gpu/drm/nouveau/include/nvkm/core/object.h
drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h
drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h
drivers/gpu/drm/nouveau/nvkm/core/object.c

index e4bf298..aa465de 100644 (file)
@@ -4,7 +4,7 @@
 
 #include <subdev/mmu.h>
 
-#define NV_ENGCTX_(eng,var) (NV_ENGCTX_CLASS | ((var) << 8) | (eng))
+#define NV_ENGCTX_(eng,var) (((var) << 8) | (eng))
 #define NV_ENGCTX(name,var)  NV_ENGCTX_(NVDEV_ENGINE_##name, (var))
 
 struct nvkm_engctx {
index 67e3afc..0b5f05a 100644 (file)
@@ -2,7 +2,7 @@
 #define __NVKM_ENGINE_H__
 #include <core/subdev.h>
 
-#define NV_ENGINE_(eng,var) (NV_ENGINE_CLASS | ((var) << 8) | (eng))
+#define NV_ENGINE_(eng,var) (((var) << 8) | (eng))
 #define NV_ENGINE(name,var)  NV_ENGINE_(NVDEV_ENGINE_##name, (var))
 
 struct nvkm_engine {
index 04e8a62..ef0ff9e 100644 (file)
 #define NV_MEMOBJ_CLASS 0x04000000
 #define NV_GPUOBJ_CLASS 0x02000000
 #define NV_ENGCTX_CLASS 0x01000000
-#define NV_OBJECT_CLASS 0x0000ffff
 
 struct nvkm_object {
        struct nvkm_oclass *oclass;
+       u32 pclass;
        struct nvkm_object *parent;
        struct nvkm_engine *engine;
        atomic_t refcount;
@@ -70,8 +70,8 @@ struct nvkm_oclass {
 
 #define nv_oclass(o)    nv_object(o)->oclass
 #define nv_hclass(o)    nv_oclass(o)->handle
-#define nv_iclass(o,i) (nv_hclass(o) & (i))
-#define nv_mclass(o)    nv_iclass(o, NV_OBJECT_CLASS)
+#define nv_iclass(o,i) (nv_object(o)->pclass & (i))
+#define nv_mclass(o)    nv_oclass(o)->handle
 
 static inline struct nvkm_object *
 nv_pclass(struct nvkm_object *parent, u32 oclass)
index 8e76283..ce5f1b9 100644 (file)
@@ -2,7 +2,7 @@
 #define __NVKM_SUBDEV_H__
 #include <core/object.h>
 
-#define NV_SUBDEV_(sub,var) (NV_SUBDEV_CLASS | ((var) << 8) | (sub))
+#define NV_SUBDEV_(sub,var) (((var) << 8) | (sub))
 #define NV_SUBDEV(name,var)  NV_SUBDEV_(NVDEV_SUBDEV_##name, (var))
 
 struct nvkm_subdev {
index 3e77c92..0ec929e 100644 (file)
@@ -50,7 +50,7 @@ struct nvkm_fifo_base {
 };
 
 #define nvkm_fifo_context_create(p,e,c,g,s,a,f,d)                           \
-       nvkm_gpuobj_create((p), (e), (c), 0, (g), (s), (a), (f), (d))
+       nvkm_gpuobj_create((p), (e), (c), NV_ENGCTX_CLASS, (g), (s), (a), (f), (d))
 #define nvkm_fifo_context_destroy(p)                                        \
        nvkm_gpuobj_destroy(&(p)->gpuobj)
 #define nvkm_fifo_context_init(p)                                           \
index b32a041..98ba58e 100644 (file)
@@ -107,7 +107,7 @@ nvkm_object_create_(struct nvkm_object *parent, struct nvkm_object *engine,
        nvkm_object_ref(parent, &object->parent);
        nvkm_object_ref(engine, (struct nvkm_object **)&object->engine);
        object->oclass = oclass;
-       object->oclass->handle |= pclass;
+       object->pclass = pclass;
        atomic_set(&object->refcount, 1);
        atomic_set(&object->usecount, 0);