Commit 92fba5d3 authored by Ben Skeggs's avatar Ben Skeggs Committed by Dave Airlie
Browse files

drm/nouveau/disp: collapse nv50_disp into nvkm_disp



Dump of one struct's members into another, with a couple of list
renames because of collisions.

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 0407b33f
Loading
Loading
Loading
Loading
+32 −4
Original line number Diff line number Diff line
@@ -9,14 +9,42 @@ struct nvkm_disp {
	const struct nvkm_disp_func *func;
	struct nvkm_engine engine;

	struct list_head head;
	struct list_head ior;
	struct list_head outp;
	struct list_head conn;
	struct list_head heads;
	struct list_head iors;
	struct list_head outps;
	struct list_head conns;

	struct nvkm_event hpd;
	struct nvkm_event vblank;

	struct workqueue_struct *wq;
	struct work_struct supervisor;
	u32 super;

	struct nvkm_event uevent;

	struct {
		unsigned long mask;
		int nr;
	} wndw, head, dac;

	struct {
		unsigned long mask;
		int nr;
		u32 lvdsconf;
	} sor;

	struct {
		unsigned long mask;
		int nr;
		u8 type[3];
	} pior;

	struct nvkm_gpuobj *inst;
	struct nvkm_ramht *ramht;

	struct nv50_disp_chan *chan[81];

	struct {
		spinlock_t lock;
		struct nvkm_oproxy *object;
+27 −27
Original line number Diff line number Diff line
@@ -108,7 +108,7 @@ nvkm_disp_hpd_ctor(struct nvkm_object *object, void *data, u32 size,

	if (!(ret = nvif_unpack(ret, &data, &size, req->v0, 0, 0, false))) {
		notify->size = sizeof(struct nvif_notify_conn_rep_v0);
		list_for_each_entry(outp, &disp->outp, head) {
		list_for_each_entry(outp, &disp->outps, head) {
			if (ret = -ENXIO, outp->conn->index == req->v0.conn) {
				if (ret = -ENODEV, outp->conn->hpd.event) {
					notify->types = req->v0.mask;
@@ -222,11 +222,11 @@ nvkm_disp_fini(struct nvkm_engine *engine, bool suspend)
	if (disp->func->fini)
		disp->func->fini(disp);

	list_for_each_entry(outp, &disp->outp, head) {
	list_for_each_entry(outp, &disp->outps, head) {
		nvkm_outp_fini(outp);
	}

	list_for_each_entry(conn, &disp->conn, head) {
	list_for_each_entry(conn, &disp->conns, head) {
		nvkm_conn_fini(conn);
	}

@@ -241,11 +241,11 @@ nvkm_disp_init(struct nvkm_engine *engine)
	struct nvkm_outp *outp;
	struct nvkm_ior *ior;

	list_for_each_entry(conn, &disp->conn, head) {
	list_for_each_entry(conn, &disp->conns, head) {
		nvkm_conn_init(conn);
	}

	list_for_each_entry(outp, &disp->outp, head) {
	list_for_each_entry(outp, &disp->outps, head) {
		nvkm_outp_init(outp);
	}

@@ -258,7 +258,7 @@ nvkm_disp_init(struct nvkm_engine *engine)
	/* Set 'normal' (ie. when it's attached to a head) state for
	 * each output resource to 'fully enabled'.
	 */
	list_for_each_entry(ior, &disp->ior, head) {
	list_for_each_entry(ior, &disp->iors, head) {
		ior->func->power(ior, true, true, true, true, true);
	}

@@ -325,12 +325,12 @@ nvkm_disp_oneinit(struct nvkm_engine *engine)
			continue;
		}

		list_add_tail(&outp->head, &disp->outp);
		list_add_tail(&outp->head, &disp->outps);
		hpd = max(hpd, (u8)(dcbE.connector + 1));
	}

	/* Create connector objects based on available output paths. */
	list_for_each_entry_safe(outp, outt, &disp->outp, head) {
	list_for_each_entry_safe(outp, outt, &disp->outps, head) {
		/* VBIOS data *should* give us the most useful information. */
		data = nvbios_connEp(bios, outp->info.connector, &ver, &hdr,
				     &connE);
@@ -344,7 +344,7 @@ nvkm_disp_oneinit(struct nvkm_engine *engine)
			 */
			int ccb_index = outp->info.i2c_index;
			if (ccb_index != 0xf) {
				list_for_each_entry(pair, &disp->outp, head) {
				list_for_each_entry(pair, &disp->outps, head) {
					if (pair->info.i2c_index == ccb_index) {
						outp->conn = pair->conn;
						break;
@@ -364,7 +364,7 @@ nvkm_disp_oneinit(struct nvkm_engine *engine)
		}

		/* Check that we haven't already created this connector. */
		list_for_each_entry(conn, &disp->conn, head) {
		list_for_each_entry(conn, &disp->conns, head) {
			if (conn->index == outp->info.connector) {
				outp->conn = conn;
				break;
@@ -386,7 +386,7 @@ nvkm_disp_oneinit(struct nvkm_engine *engine)
			continue;
		}

		list_add_tail(&outp->conn->head, &disp->conn);
		list_add_tail(&outp->conn->head, &disp->conns);
	}

	ret = nvkm_event_init(&nvkm_disp_hpd_func, 3, hpd, &disp->hpd);
@@ -402,7 +402,7 @@ nvkm_disp_oneinit(struct nvkm_engine *engine)
	/* Enforce identity-mapped SOR assignment for panels, which have
	 * certain bits (ie. backlight controls) wired to a specific SOR.
	 */
	list_for_each_entry(outp, &disp->outp, head) {
	list_for_each_entry(outp, &disp->outps, head) {
		if (outp->conn->info.type == DCB_CONNECTOR_LVDS ||
		    outp->conn->info.type == DCB_CONNECTOR_eDP) {
			ior = nvkm_ior_find(disp, SOR, ffs(outp->info.or) - 1);
@@ -413,7 +413,7 @@ nvkm_disp_oneinit(struct nvkm_engine *engine)
	}

	i = 0;
	list_for_each_entry(head, &disp->head, head)
	list_for_each_entry(head, &disp->heads, head)
		i = max(i, head->id + 1);

	return nvkm_event_init(&nvkm_disp_vblank_func, 1, i, &disp->vblank);
@@ -425,6 +425,8 @@ nvkm_disp_dtor(struct nvkm_engine *engine)
	struct nvkm_disp *disp = nvkm_disp(engine);
	struct nvkm_conn *conn;
	struct nvkm_outp *outp;
	struct nvkm_ior *ior;
	struct nvkm_head *head;
	void *data = disp;

	if (disp->func->dtor)
@@ -433,27 +435,25 @@ nvkm_disp_dtor(struct nvkm_engine *engine)
	nvkm_event_fini(&disp->vblank);
	nvkm_event_fini(&disp->hpd);

	while (!list_empty(&disp->conn)) {
		conn = list_first_entry(&disp->conn, typeof(*conn), head);
	while (!list_empty(&disp->conns)) {
		conn = list_first_entry(&disp->conns, typeof(*conn), head);
		list_del(&conn->head);
		nvkm_conn_del(&conn);
	}

	while (!list_empty(&disp->outp)) {
		outp = list_first_entry(&disp->outp, typeof(*outp), head);
	while (!list_empty(&disp->outps)) {
		outp = list_first_entry(&disp->outps, typeof(*outp), head);
		list_del(&outp->head);
		nvkm_outp_del(&outp);
	}

	while (!list_empty(&disp->ior)) {
		struct nvkm_ior *ior =
			list_first_entry(&disp->ior, typeof(*ior), head);
	while (!list_empty(&disp->iors)) {
		ior = list_first_entry(&disp->iors, typeof(*ior), head);
		nvkm_ior_del(&ior);
	}

	while (!list_empty(&disp->head)) {
		struct nvkm_head *head =
			list_first_entry(&disp->head, typeof(*head), head);
	while (!list_empty(&disp->heads)) {
		head = list_first_entry(&disp->heads, typeof(*head), head);
		nvkm_head_del(&head);
	}

@@ -475,10 +475,10 @@ nvkm_disp_ctor(const struct nvkm_disp_func *func, struct nvkm_device *device,
	       enum nvkm_subdev_type type, int inst, struct nvkm_disp *disp)
{
	disp->func = func;
	INIT_LIST_HEAD(&disp->head);
	INIT_LIST_HEAD(&disp->ior);
	INIT_LIST_HEAD(&disp->outp);
	INIT_LIST_HEAD(&disp->conn);
	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);
}
+1 −1
Original line number Diff line number Diff line
@@ -67,7 +67,7 @@ g84_disp_base_mthd = {

int
g84_disp_base_new(const struct nvkm_oclass *oclass, void *argv, u32 argc,
		  struct nv50_disp *disp, struct nvkm_object **pobject)
		  struct nvkm_disp *disp, struct nvkm_object **pobject)
{
	return nv50_disp_base_new_(&nv50_disp_dmac_func, &g84_disp_base_mthd,
				   disp, 1, oclass, argv, argc, pobject);
+1 −1
Original line number Diff line number Diff line
@@ -101,7 +101,7 @@ gf119_disp_base_mthd = {

int
gf119_disp_base_new(const struct nvkm_oclass *oclass, void *argv, u32 argc,
		    struct nv50_disp *disp, struct nvkm_object **pobject)
		    struct nvkm_disp *disp, struct nvkm_object **pobject)
{
	return nv50_disp_base_new_(&gf119_disp_dmac_func, &gf119_disp_base_mthd,
				   disp, 1, oclass, argv, argc, pobject);
+1 −1
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@

int
gp102_disp_base_new(const struct nvkm_oclass *oclass, void *argv, u32 argc,
		    struct nv50_disp *disp, struct nvkm_object **pobject)
		    struct nvkm_disp *disp, struct nvkm_object **pobject)
{
	return nv50_disp_base_new_(&gp102_disp_dmac_func, &gf119_disp_base_mthd,
				   disp, 1, oclass, argv, argc, pobject);
Loading