Loading drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c +11 −0 Original line number Diff line number Diff line Loading @@ -178,6 +178,17 @@ nvkm_fifo_class_get(struct nvkm_oclass *oclass, int index, const struct nvkm_fifo_chan_oclass *sclass; int c = 0; if (fifo->func->class_get) { int ret = fifo->func->class_get(fifo, index, &sclass); if (ret == 0) { oclass->base = sclass->base; oclass->engn = sclass; *class = &nvkm_fifo_class; return 0; } return ret; } while ((sclass = fifo->func->chan[c])) { if (c++ == index) { oclass->base = sclass->base; Loading drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +38 −17 Original line number Diff line number Diff line Loading @@ -33,14 +33,29 @@ #include <nvif/class.h> void static int gk104_fifo_class_get(struct nvkm_fifo *base, int index, const struct nvkm_fifo_chan_oclass **psclass) { struct gk104_fifo *fifo = gk104_fifo(base); int c = 0; while ((*psclass = fifo->func->chan[c])) { if (c++ == index) return 0; } return c; } static void gk104_fifo_uevent_fini(struct nvkm_fifo *fifo) { struct nvkm_device *device = fifo->engine.subdev.device; nvkm_mask(device, 0x002140, 0x80000000, 0x00000000); } void static void gk104_fifo_uevent_init(struct nvkm_fifo *fifo) { struct nvkm_device *device = fifo->engine.subdev.device; Loading Loading @@ -558,7 +573,7 @@ gk104_fifo_intr_engine(struct gk104_fifo *fifo) nvkm_fifo_uevent(&fifo->base); } void static void gk104_fifo_intr(struct nvkm_fifo *base) { struct gk104_fifo *fifo = gk104_fifo(base); Loading Loading @@ -650,7 +665,7 @@ gk104_fifo_intr(struct nvkm_fifo *base) } } void static void gk104_fifo_fini(struct nvkm_fifo *base) { struct gk104_fifo *fifo = gk104_fifo(base); Loading @@ -660,7 +675,7 @@ gk104_fifo_fini(struct nvkm_fifo *base) nvkm_mask(device, 0x002140, 0x10000000, 0x10000000); } int static int gk104_fifo_oneinit(struct nvkm_fifo *base) { struct gk104_fifo *fifo = gk104_fifo(base); Loading Loading @@ -739,7 +754,7 @@ gk104_fifo_oneinit(struct nvkm_fifo *base) return 0; } void static void gk104_fifo_init(struct nvkm_fifo *base) { struct gk104_fifo *fifo = gk104_fifo(base); Loading Loading @@ -768,7 +783,7 @@ gk104_fifo_init(struct nvkm_fifo *base) nvkm_wr32(device, 0x002140, 0x7fffffff); } void * static void * gk104_fifo_dtor(struct nvkm_fifo *base) { struct gk104_fifo *fifo = gk104_fifo(base); Loading @@ -785,29 +800,35 @@ gk104_fifo_dtor(struct nvkm_fifo *base) return fifo; } static const struct nvkm_fifo_func gk104_fifo_ = { .dtor = gk104_fifo_dtor, .oneinit = gk104_fifo_oneinit, .init = gk104_fifo_init, .fini = gk104_fifo_fini, .intr = gk104_fifo_intr, .uevent_init = gk104_fifo_uevent_init, .uevent_fini = gk104_fifo_uevent_fini, .class_get = gk104_fifo_class_get, }; int gk104_fifo_new_(const struct nvkm_fifo_func *func, struct nvkm_device *device, gk104_fifo_new_(const struct gk104_fifo_func *func, struct nvkm_device *device, int index, int nr, struct nvkm_fifo **pfifo) { struct gk104_fifo *fifo; if (!(fifo = kzalloc(sizeof(*fifo), GFP_KERNEL))) return -ENOMEM; fifo->func = func; INIT_WORK(&fifo->recover.work, gk104_fifo_recover_work); *pfifo = &fifo->base; return nvkm_fifo_ctor(func, device, index, nr, &fifo->base); return nvkm_fifo_ctor(&gk104_fifo_, device, index, nr, &fifo->base); } static const struct nvkm_fifo_func static const struct gk104_fifo_func gk104_fifo = { .dtor = gk104_fifo_dtor, .oneinit = gk104_fifo_oneinit, .init = gk104_fifo_init, .fini = gk104_fifo_fini, .intr = gk104_fifo_intr, .uevent_init = gk104_fifo_uevent_init, .uevent_fini = gk104_fifo_uevent_fini, .chan = { &gk104_fifo_gpfifo_oclass, NULL Loading drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h +7 −8 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ struct gk104_fifo_chan; struct gk104_fifo { const struct gk104_fifo_func *func; struct nvkm_fifo base; struct { Loading Loading @@ -39,15 +40,13 @@ struct gk104_fifo { } user; }; int gk104_fifo_new_(const struct nvkm_fifo_func *, struct nvkm_device *, struct gk104_fifo_func { int dummy; const struct nvkm_fifo_chan_oclass *chan[]; }; int gk104_fifo_new_(const struct gk104_fifo_func *, struct nvkm_device *, int index, int nr, struct nvkm_fifo **); void *gk104_fifo_dtor(struct nvkm_fifo *); int gk104_fifo_oneinit(struct nvkm_fifo *); void gk104_fifo_init(struct nvkm_fifo *); void gk104_fifo_fini(struct nvkm_fifo *); void gk104_fifo_intr(struct nvkm_fifo *); void gk104_fifo_uevent_init(struct nvkm_fifo *); void gk104_fifo_uevent_fini(struct nvkm_fifo *); void gk104_fifo_runlist_insert(struct gk104_fifo *, struct gk104_fifo_chan *); void gk104_fifo_runlist_remove(struct gk104_fifo *, struct gk104_fifo_chan *); void gk104_fifo_runlist_commit(struct gk104_fifo *, int runl); Loading drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk110.c +1 −8 Original line number Diff line number Diff line Loading @@ -24,15 +24,8 @@ #include "gk104.h" #include "changk104.h" static const struct nvkm_fifo_func static const struct gk104_fifo_func gk110_fifo = { .dtor = gk104_fifo_dtor, .oneinit = gk104_fifo_oneinit, .init = gk104_fifo_init, .fini = gk104_fifo_fini, .intr = gk104_fifo_intr, .uevent_init = gk104_fifo_uevent_init, .uevent_fini = gk104_fifo_uevent_fini, .chan = { &gk110_fifo_gpfifo_oclass, NULL Loading drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk208.c +1 −8 Original line number Diff line number Diff line Loading @@ -24,15 +24,8 @@ #include "gk104.h" #include "changk104.h" static const struct nvkm_fifo_func static const struct gk104_fifo_func gk208_fifo = { .dtor = gk104_fifo_dtor, .oneinit = gk104_fifo_oneinit, .init = gk104_fifo_init, .fini = gk104_fifo_fini, .intr = gk104_fifo_intr, .uevent_init = gk104_fifo_uevent_init, .uevent_fini = gk104_fifo_uevent_fini, .chan = { &gk104_fifo_gpfifo_oclass, NULL Loading Loading
drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c +11 −0 Original line number Diff line number Diff line Loading @@ -178,6 +178,17 @@ nvkm_fifo_class_get(struct nvkm_oclass *oclass, int index, const struct nvkm_fifo_chan_oclass *sclass; int c = 0; if (fifo->func->class_get) { int ret = fifo->func->class_get(fifo, index, &sclass); if (ret == 0) { oclass->base = sclass->base; oclass->engn = sclass; *class = &nvkm_fifo_class; return 0; } return ret; } while ((sclass = fifo->func->chan[c])) { if (c++ == index) { oclass->base = sclass->base; Loading
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +38 −17 Original line number Diff line number Diff line Loading @@ -33,14 +33,29 @@ #include <nvif/class.h> void static int gk104_fifo_class_get(struct nvkm_fifo *base, int index, const struct nvkm_fifo_chan_oclass **psclass) { struct gk104_fifo *fifo = gk104_fifo(base); int c = 0; while ((*psclass = fifo->func->chan[c])) { if (c++ == index) return 0; } return c; } static void gk104_fifo_uevent_fini(struct nvkm_fifo *fifo) { struct nvkm_device *device = fifo->engine.subdev.device; nvkm_mask(device, 0x002140, 0x80000000, 0x00000000); } void static void gk104_fifo_uevent_init(struct nvkm_fifo *fifo) { struct nvkm_device *device = fifo->engine.subdev.device; Loading Loading @@ -558,7 +573,7 @@ gk104_fifo_intr_engine(struct gk104_fifo *fifo) nvkm_fifo_uevent(&fifo->base); } void static void gk104_fifo_intr(struct nvkm_fifo *base) { struct gk104_fifo *fifo = gk104_fifo(base); Loading Loading @@ -650,7 +665,7 @@ gk104_fifo_intr(struct nvkm_fifo *base) } } void static void gk104_fifo_fini(struct nvkm_fifo *base) { struct gk104_fifo *fifo = gk104_fifo(base); Loading @@ -660,7 +675,7 @@ gk104_fifo_fini(struct nvkm_fifo *base) nvkm_mask(device, 0x002140, 0x10000000, 0x10000000); } int static int gk104_fifo_oneinit(struct nvkm_fifo *base) { struct gk104_fifo *fifo = gk104_fifo(base); Loading Loading @@ -739,7 +754,7 @@ gk104_fifo_oneinit(struct nvkm_fifo *base) return 0; } void static void gk104_fifo_init(struct nvkm_fifo *base) { struct gk104_fifo *fifo = gk104_fifo(base); Loading Loading @@ -768,7 +783,7 @@ gk104_fifo_init(struct nvkm_fifo *base) nvkm_wr32(device, 0x002140, 0x7fffffff); } void * static void * gk104_fifo_dtor(struct nvkm_fifo *base) { struct gk104_fifo *fifo = gk104_fifo(base); Loading @@ -785,29 +800,35 @@ gk104_fifo_dtor(struct nvkm_fifo *base) return fifo; } static const struct nvkm_fifo_func gk104_fifo_ = { .dtor = gk104_fifo_dtor, .oneinit = gk104_fifo_oneinit, .init = gk104_fifo_init, .fini = gk104_fifo_fini, .intr = gk104_fifo_intr, .uevent_init = gk104_fifo_uevent_init, .uevent_fini = gk104_fifo_uevent_fini, .class_get = gk104_fifo_class_get, }; int gk104_fifo_new_(const struct nvkm_fifo_func *func, struct nvkm_device *device, gk104_fifo_new_(const struct gk104_fifo_func *func, struct nvkm_device *device, int index, int nr, struct nvkm_fifo **pfifo) { struct gk104_fifo *fifo; if (!(fifo = kzalloc(sizeof(*fifo), GFP_KERNEL))) return -ENOMEM; fifo->func = func; INIT_WORK(&fifo->recover.work, gk104_fifo_recover_work); *pfifo = &fifo->base; return nvkm_fifo_ctor(func, device, index, nr, &fifo->base); return nvkm_fifo_ctor(&gk104_fifo_, device, index, nr, &fifo->base); } static const struct nvkm_fifo_func static const struct gk104_fifo_func gk104_fifo = { .dtor = gk104_fifo_dtor, .oneinit = gk104_fifo_oneinit, .init = gk104_fifo_init, .fini = gk104_fifo_fini, .intr = gk104_fifo_intr, .uevent_init = gk104_fifo_uevent_init, .uevent_fini = gk104_fifo_uevent_fini, .chan = { &gk104_fifo_gpfifo_oclass, NULL Loading
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h +7 −8 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ struct gk104_fifo_chan; struct gk104_fifo { const struct gk104_fifo_func *func; struct nvkm_fifo base; struct { Loading Loading @@ -39,15 +40,13 @@ struct gk104_fifo { } user; }; int gk104_fifo_new_(const struct nvkm_fifo_func *, struct nvkm_device *, struct gk104_fifo_func { int dummy; const struct nvkm_fifo_chan_oclass *chan[]; }; int gk104_fifo_new_(const struct gk104_fifo_func *, struct nvkm_device *, int index, int nr, struct nvkm_fifo **); void *gk104_fifo_dtor(struct nvkm_fifo *); int gk104_fifo_oneinit(struct nvkm_fifo *); void gk104_fifo_init(struct nvkm_fifo *); void gk104_fifo_fini(struct nvkm_fifo *); void gk104_fifo_intr(struct nvkm_fifo *); void gk104_fifo_uevent_init(struct nvkm_fifo *); void gk104_fifo_uevent_fini(struct nvkm_fifo *); void gk104_fifo_runlist_insert(struct gk104_fifo *, struct gk104_fifo_chan *); void gk104_fifo_runlist_remove(struct gk104_fifo *, struct gk104_fifo_chan *); void gk104_fifo_runlist_commit(struct gk104_fifo *, int runl); Loading
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk110.c +1 −8 Original line number Diff line number Diff line Loading @@ -24,15 +24,8 @@ #include "gk104.h" #include "changk104.h" static const struct nvkm_fifo_func static const struct gk104_fifo_func gk110_fifo = { .dtor = gk104_fifo_dtor, .oneinit = gk104_fifo_oneinit, .init = gk104_fifo_init, .fini = gk104_fifo_fini, .intr = gk104_fifo_intr, .uevent_init = gk104_fifo_uevent_init, .uevent_fini = gk104_fifo_uevent_fini, .chan = { &gk110_fifo_gpfifo_oclass, NULL Loading
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk208.c +1 −8 Original line number Diff line number Diff line Loading @@ -24,15 +24,8 @@ #include "gk104.h" #include "changk104.h" static const struct nvkm_fifo_func static const struct gk104_fifo_func gk208_fifo = { .dtor = gk104_fifo_dtor, .oneinit = gk104_fifo_oneinit, .init = gk104_fifo_init, .fini = gk104_fifo_fini, .intr = gk104_fifo_intr, .uevent_init = gk104_fifo_uevent_init, .uevent_fini = gk104_fifo_uevent_fini, .chan = { &gk104_fifo_gpfifo_oclass, NULL Loading