From 315a8b2edf51711857795ba6e02b843d7792b59c Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 20 Aug 2015 14:54:16 +1000 Subject: [PATCH] drm/nouveau/nvif: use negative oclass identifier for internal classes Signed-off-by: Ben Skeggs --- drivers/gpu/drm/nouveau/include/nvif/device.h | 2 +- drivers/gpu/drm/nouveau/include/nvif/ioctl.h | 10 +++++----- drivers/gpu/drm/nouveau/include/nvif/object.h | 6 +++--- drivers/gpu/drm/nouveau/include/nvkm/core/client.h | 11 +---------- drivers/gpu/drm/nouveau/include/nvkm/core/object.h | 2 +- drivers/gpu/drm/nouveau/include/nvkm/core/parent.h | 4 ++-- drivers/gpu/drm/nouveau/nouveau_bo.c | 2 +- drivers/gpu/drm/nouveau/nouveau_drm.c | 2 +- drivers/gpu/drm/nouveau/nv50_display.c | 18 +++++++++--------- drivers/gpu/drm/nouveau/nvif/device.c | 2 +- drivers/gpu/drm/nouveau/nvif/object.c | 5 ++--- drivers/gpu/drm/nouveau/nvkm/core/parent.c | 4 ++-- 12 files changed, 29 insertions(+), 39 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvif/device.h b/drivers/gpu/drm/nouveau/include/nvif/device.h index 1973e65f21a6..68b431b24ae6 100644 --- a/drivers/gpu/drm/nouveau/include/nvif/device.h +++ b/drivers/gpu/drm/nouveau/include/nvif/device.h @@ -9,7 +9,7 @@ struct nvif_device { struct nv_device_info_v0 info; }; -int nvif_device_init(struct nvif_object *, u32 handle, u32 oclass, void *, u32, +int nvif_device_init(struct nvif_object *, u32 handle, s32 oclass, void *, u32, struct nvif_device *); void nvif_device_fini(struct nvif_device *); u64 nvif_device_time(struct nvif_device *); diff --git a/drivers/gpu/drm/nouveau/include/nvif/ioctl.h b/drivers/gpu/drm/nouveau/include/nvif/ioctl.h index 772db0de044a..193437c4a1f0 100644 --- a/drivers/gpu/drm/nouveau/include/nvif/ioctl.h +++ b/drivers/gpu/drm/nouveau/include/nvif/ioctl.h @@ -40,7 +40,7 @@ struct nvif_ioctl_sclass_v0 { __u8 version; __u8 count; __u8 pad02[6]; - __u32 oclass[]; + __s32 oclass[]; }; struct nvif_ioctl_new_v0 { @@ -52,10 +52,10 @@ struct nvif_ioctl_new_v0 { __u64 object; __u32 handle; /* these class numbers are made up by us, and not nvidia-assigned */ -#define NVIF_IOCTL_NEW_V0_PERFMON 0x0000ffff -#define NVIF_IOCTL_NEW_V0_PERFDOM 0x0000fffe -#define NVIF_IOCTL_NEW_V0_CONTROL 0x0000fffd - __u32 oclass; +#define NVIF_IOCTL_NEW_V0_CONTROL -1 +#define NVIF_IOCTL_NEW_V0_PERFMON -2 +#define NVIF_IOCTL_NEW_V0_PERFDOM -3 + __s32 oclass; __u8 data[]; /* class data (class.h) */ }; diff --git a/drivers/gpu/drm/nouveau/include/nvif/object.h b/drivers/gpu/drm/nouveau/include/nvif/object.h index b46c2f4aa0db..66d3425e4764 100644 --- a/drivers/gpu/drm/nouveau/include/nvif/object.h +++ b/drivers/gpu/drm/nouveau/include/nvif/object.h @@ -6,7 +6,7 @@ struct nvif_object { struct nvif_client *client; u32 handle; - u32 oclass; + s32 oclass; void *priv; /*XXX: hack */ struct { void __iomem *ptr; @@ -14,11 +14,11 @@ struct nvif_object { } map; }; -int nvif_object_init(struct nvif_object *, u32 handle, u32 oclass, void *, u32, +int nvif_object_init(struct nvif_object *, u32 handle, s32 oclass, void *, u32, struct nvif_object *); void nvif_object_fini(struct nvif_object *); int nvif_object_ioctl(struct nvif_object *, void *, u32, void **); -int nvif_object_sclass(struct nvif_object *, u32 *, int); +int nvif_object_sclass(struct nvif_object *, s32 *, int); u32 nvif_object_rd(struct nvif_object *, int, u64); void nvif_object_wr(struct nvif_object *, int, u64, u32); int nvif_object_mthd(struct nvif_object *, u32, void *, u32); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/client.h b/drivers/gpu/drm/nouveau/include/nvkm/core/client.h index d70d28f90285..977c8a85e119 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/client.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/client.h @@ -23,19 +23,10 @@ void nvkm_client_remove(struct nvkm_client *, struct nvkm_handle *); struct nvkm_handle *nvkm_client_search(struct nvkm_client *, u64 handle); static inline struct nvkm_client * -nv_client(void *obj) -{ -#if CONFIG_NOUVEAU_DEBUG >= NV_DBG_PARANOIA - BUG_ON(!nv_iclass(obj, NV_CLIENT_CLASS)); -#endif - return obj; -} - -static inline struct nvkm_client * nvkm_client(void *obj) { struct nvkm_object *client = nv_object(obj); - while (client && !(nv_iclass(client, NV_CLIENT_CLASS))) + while (client && client->parent) client = client->parent; return (void *)client; } diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/object.h b/drivers/gpu/drm/nouveau/include/nvkm/core/object.h index ef0ff9e1a948..005cd4a86849 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/object.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/object.h @@ -62,7 +62,7 @@ extern struct nvkm_ofuncs nvkm_object_ofuncs; /* Don't allocate dynamically, because lockdep needs lock_class_keys to be in * ".data". */ struct nvkm_oclass { - u32 handle; + s32 handle; struct nvkm_ofuncs * const ofuncs; struct nvkm_omthds * const omthds; struct lock_class_key lock_class_key; diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/parent.h b/drivers/gpu/drm/nouveau/include/nvkm/core/parent.h index 2e5266fa7584..bc4dc1f2403f 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/parent.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/parent.h @@ -44,8 +44,8 @@ void _nvkm_parent_dtor(struct nvkm_object *); #define _nvkm_parent_init nvkm_object_init #define _nvkm_parent_fini nvkm_object_fini -int nvkm_parent_sclass(struct nvkm_object *, u16 handle, +int nvkm_parent_sclass(struct nvkm_object *, s32 handle, struct nvkm_object **pengine, struct nvkm_oclass **poclass); -int nvkm_parent_lclass(struct nvkm_object *, u32 *, int); +int nvkm_parent_lclass(struct nvkm_object *, s32 *, int); #endif diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c index 5529fc479d8a..496c00d585cd 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bo.c +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c @@ -1104,7 +1104,7 @@ nouveau_bo_move_init(struct nouveau_drm *drm) static const struct { const char *name; int engine; - u32 oclass; + s32 oclass; int (*exec)(struct nouveau_channel *, struct ttm_buffer_object *, struct ttm_mem_reg *, struct ttm_mem_reg *); diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c index 11cf52a7ff75..65ceb6fa4209 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c @@ -153,7 +153,7 @@ nouveau_accel_init(struct nouveau_drm *drm) { struct nvif_device *device = &drm->device; u32 arg0, arg1; - u32 sclass[16]; + s32 sclass[16]; int ret, i; if (nouveau_noaccel) diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c index c8e797404353..65e70f085325 100644 --- a/drivers/gpu/drm/nouveau/nv50_display.c +++ b/drivers/gpu/drm/nouveau/nv50_display.c @@ -65,11 +65,11 @@ struct nv50_chan { static int nv50_chan_create(struct nvif_device *device, struct nvif_object *disp, - const u32 *oclass, u8 head, void *data, u32 size, + const s32 *oclass, u8 head, void *data, u32 size, struct nv50_chan *chan) { const u32 handle = (oclass[0] << 16) | head; - u32 sclass[8]; + s32 sclass[8]; int ret, i; chan->device = device; @@ -117,7 +117,7 @@ nv50_pioc_destroy(struct nv50_pioc *pioc) static int nv50_pioc_create(struct nvif_device *device, struct nvif_object *disp, - const u32 *oclass, u8 head, void *data, u32 size, + const s32 *oclass, u8 head, void *data, u32 size, struct nv50_pioc *pioc) { return nv50_chan_create(device, disp, oclass, head, data, size, @@ -139,7 +139,7 @@ nv50_curs_create(struct nvif_device *device, struct nvif_object *disp, struct nv50_disp_cursor_v0 args = { .head = head, }; - static const u32 oclass[] = { + static const s32 oclass[] = { GK104_DISP_CURSOR, GF110_DISP_CURSOR, GT214_DISP_CURSOR, @@ -167,7 +167,7 @@ nv50_oimm_create(struct nvif_device *device, struct nvif_object *disp, struct nv50_disp_cursor_v0 args = { .head = head, }; - static const u32 oclass[] = { + static const s32 oclass[] = { GK104_DISP_OVERLAY, GF110_DISP_OVERLAY, GT214_DISP_OVERLAY, @@ -216,7 +216,7 @@ nv50_dmac_destroy(struct nv50_dmac *dmac, struct nvif_object *disp) static int nv50_dmac_create(struct nvif_device *device, struct nvif_object *disp, - const u32 *oclass, u8 head, void *data, u32 size, u64 syncbuf, + const s32 *oclass, u8 head, void *data, u32 size, u64 syncbuf, struct nv50_dmac *dmac) { struct nv50_disp_core_channel_dma_v0 *args = data; @@ -288,7 +288,7 @@ nv50_core_create(struct nvif_device *device, struct nvif_object *disp, struct nv50_disp_core_channel_dma_v0 args = { .pushbuf = 0xb0007d00, }; - static const u32 oclass[] = { + static const s32 oclass[] = { GM204_DISP_CORE_CHANNEL_DMA, GM107_DISP_CORE_CHANNEL_DMA, GK110_DISP_CORE_CHANNEL_DMA, @@ -324,7 +324,7 @@ nv50_base_create(struct nvif_device *device, struct nvif_object *disp, .pushbuf = 0xb0007c00 | head, .head = head, }; - static const u32 oclass[] = { + static const s32 oclass[] = { GK110_DISP_BASE_CHANNEL_DMA, GK104_DISP_BASE_CHANNEL_DMA, GF110_DISP_BASE_CHANNEL_DMA, @@ -355,7 +355,7 @@ nv50_ovly_create(struct nvif_device *device, struct nvif_object *disp, .pushbuf = 0xb0007e00 | head, .head = head, }; - static const u32 oclass[] = { + static const s32 oclass[] = { GK104_DISP_OVERLAY_CONTROL_DMA, GF110_DISP_OVERLAY_CONTROL_DMA, GT214_DISP_OVERLAY_CHANNEL_DMA, diff --git a/drivers/gpu/drm/nouveau/nvif/device.c b/drivers/gpu/drm/nouveau/nvif/device.c index f15d51a69df2..561fb9d7b155 100644 --- a/drivers/gpu/drm/nouveau/nvif/device.c +++ b/drivers/gpu/drm/nouveau/nvif/device.c @@ -37,7 +37,7 @@ nvif_device_fini(struct nvif_device *device) } int -nvif_device_init(struct nvif_object *parent, u32 handle, u32 oclass, +nvif_device_init(struct nvif_object *parent, u32 handle, s32 oclass, void *data, u32 size, struct nvif_device *device) { int ret = nvif_object_init(parent, handle, oclass, data, size, diff --git a/drivers/gpu/drm/nouveau/nvif/object.c b/drivers/gpu/drm/nouveau/nvif/object.c index b914e34a43c3..0c09e6433fbb 100644 --- a/drivers/gpu/drm/nouveau/nvif/object.c +++ b/drivers/gpu/drm/nouveau/nvif/object.c @@ -49,7 +49,7 @@ nvif_object_ioctl(struct nvif_object *object, void *data, u32 size, void **hack) } int -nvif_object_sclass(struct nvif_object *object, u32 *oclass, int count) +nvif_object_sclass(struct nvif_object *object, s32 *oclass, int count) { struct { struct nvif_ioctl_v0 ioctl; @@ -65,7 +65,6 @@ nvif_object_sclass(struct nvif_object *object, u32 *oclass, int count) args->sclass.version = 0; args->sclass.count = count; - memcpy(args->sclass.oclass, oclass, size); ret = nvif_object_ioctl(object, args, sizeof(*args) + size, NULL); ret = ret ? ret : args->sclass.count; memcpy(oclass, args->sclass.oclass, size); @@ -203,7 +202,7 @@ nvif_object_fini(struct nvif_object *object) } int -nvif_object_init(struct nvif_object *parent, u32 handle, u32 oclass, +nvif_object_init(struct nvif_object *parent, u32 handle, s32 oclass, void *data, u32 size, struct nvif_object *object) { struct { diff --git a/drivers/gpu/drm/nouveau/nvkm/core/parent.c b/drivers/gpu/drm/nouveau/nvkm/core/parent.c index 5c75c64f2270..43abd208b486 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/parent.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/parent.c @@ -26,7 +26,7 @@ #include int -nvkm_parent_sclass(struct nvkm_object *parent, u16 handle, +nvkm_parent_sclass(struct nvkm_object *parent, s32 handle, struct nvkm_object **pengine, struct nvkm_oclass **poclass) { @@ -66,7 +66,7 @@ nvkm_parent_sclass(struct nvkm_object *parent, u16 handle, } int -nvkm_parent_lclass(struct nvkm_object *parent, u32 *lclass, int size) +nvkm_parent_lclass(struct nvkm_object *parent, s32 *lclass, int size) { struct nvkm_oclass *sclass, *oclass; struct nvkm_engine *engine; -- 2.11.0