Commit 1c6aab75 authored by Ben Skeggs's avatar Ben Skeggs Committed by Dave Airlie
Browse files

drm/nouveau/disp: merge nv50_disp_new_() and nvkm_disp_new()



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 3517e6b6
Loading
Loading
Loading
Loading
+28 −13
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@

#include <core/client.h>
#include <core/notify.h>
#include <core/ramht.h>
#include <subdev/bios.h>
#include <subdev/bios/dcb.h>

@@ -394,8 +395,12 @@ nvkm_disp_dtor(struct nvkm_engine *engine)
	struct nvkm_head *head;
	void *data = disp;

	if (disp->func->dtor)
		data = disp->func->dtor(disp);
	nvkm_ramht_del(&disp->ramht);
	nvkm_gpuobj_del(&disp->inst);

	nvkm_event_fini(&disp->uevent);
	if (disp->super.wq)
		destroy_workqueue(disp->super.wq);

	nvkm_event_fini(&disp->vblank);
	nvkm_event_fini(&disp->hpd);
@@ -436,23 +441,33 @@ nvkm_disp = {
};

int
nvkm_disp_ctor(const struct nvkm_disp_func *func, struct nvkm_device *device,
	       enum nvkm_subdev_type type, int inst, struct nvkm_disp *disp)
nvkm_disp_new_(const struct nvkm_disp_func *func, struct nvkm_device *device,
	       enum nvkm_subdev_type type, int inst, struct nvkm_disp **pdisp)
{
	struct nvkm_disp *disp;
	int ret;

	if (!(disp = *pdisp = kzalloc(sizeof(**pdisp), GFP_KERNEL)))
		return -ENOMEM;

	disp->func = func;
	INIT_LIST_HEAD(&disp->heads);
	INIT_LIST_HEAD(&disp->iors);
	INIT_LIST_HEAD(&disp->outps);
	INIT_LIST_HEAD(&disp->conns);
	spin_lock_init(&disp->client.lock);
	return nvkm_engine_ctor(&nvkm_disp, device, type, inst, true, &disp->engine);
}

int
nvkm_disp_new_(const struct nvkm_disp_func *func, struct nvkm_device *device,
	       enum nvkm_subdev_type type, int inst, struct nvkm_disp **pdisp)
{
	if (!(*pdisp = kzalloc(sizeof(**pdisp), GFP_KERNEL)))
	ret = nvkm_engine_ctor(&nvkm_disp, device, type, inst, true, &disp->engine);
	if (ret)
		return ret;

	if (func->super) {
		disp->super.wq = create_singlethread_workqueue("nvkm-disp");
		if (!disp->super.wq)
			return -ENOMEM;
	return nvkm_disp_ctor(func, device, type, inst, *pdisp);

		INIT_WORK(&disp->super.work, func->super);
	}

	return nvkm_event_init(func->uevent, 1, ARRAY_SIZE(disp->chan), &disp->uevent);
}
+1 −2
Original line number Diff line number Diff line
@@ -298,7 +298,6 @@ g84_disp_core_new(const struct nvkm_oclass *oclass, void *argv, u32 argc,

static const struct nvkm_disp_func
g84_disp = {
	.dtor = nv50_disp_dtor,
	.oneinit = nv50_disp_oneinit,
	.init = nv50_disp_init,
	.fini = nv50_disp_fini,
@@ -324,5 +323,5 @@ int
g84_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
	     struct nvkm_disp **pdisp)
{
	return nv50_disp_new_(&g84_disp, device, type, inst, pdisp);
	return nvkm_disp_new_(&g84_disp, device, type, inst, pdisp);
}
+1 −2
Original line number Diff line number Diff line
@@ -345,7 +345,6 @@ g94_disp_core_new(const struct nvkm_oclass *oclass, void *argv, u32 argc,

static const struct nvkm_disp_func
g94_disp = {
	.dtor = nv50_disp_dtor,
	.oneinit = nv50_disp_oneinit,
	.init = nv50_disp_init,
	.fini = nv50_disp_fini,
@@ -371,5 +370,5 @@ int
g94_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
	     struct nvkm_disp **pdisp)
{
	return nv50_disp_new_(&g94_disp, device, type, inst, pdisp);
	return nvkm_disp_new_(&g94_disp, device, type, inst, pdisp);
}
+1 −2
Original line number Diff line number Diff line
@@ -152,7 +152,6 @@ ga102_sor_new(struct nvkm_disp *disp, int id)

static const struct nvkm_disp_func
ga102_disp = {
	.dtor = nv50_disp_dtor,
	.oneinit = nv50_disp_oneinit,
	.init = tu102_disp_init,
	.fini = gv100_disp_fini,
@@ -178,5 +177,5 @@ int
ga102_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
	       struct nvkm_disp **pdisp)
{
	return nv50_disp_new_(&ga102_disp, device, type, inst, pdisp);
	return nvkm_disp_new_(&ga102_disp, device, type, inst, pdisp);
}
+1 −2
Original line number Diff line number Diff line
@@ -1202,7 +1202,6 @@ gf119_disp_init(struct nvkm_disp *disp)

static const struct nvkm_disp_func
gf119_disp = {
	.dtor = nv50_disp_dtor,
	.oneinit = nv50_disp_oneinit,
	.init = gf119_disp_init,
	.fini = gf119_disp_fini,
@@ -1228,5 +1227,5 @@ int
gf119_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
	       struct nvkm_disp **pdisp)
{
	return nv50_disp_new_(&gf119_disp, device, type, inst, pdisp);
	return nvkm_disp_new_(&gf119_disp, device, type, inst, pdisp);
}
Loading