Commit cb3ec8cb authored by Ben Skeggs's avatar Ben Skeggs Committed by Lyude Paul
Browse files

drm/nouveau/disp: move outp init/fini paths to chipset code



- pre-nv5x doesn't use any of this
- preparation for GSP-RM

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
Acked-by: default avatarDanilo Krummrich <me@dakr.org>
Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230919220442.202488-38-lyude@redhat.com
parent 62b0eef2
Loading
Loading
Loading
Loading
+4 −27
Original line number Diff line number Diff line
@@ -102,18 +102,14 @@ static int
nvkm_disp_fini(struct nvkm_engine *engine, bool suspend)
{
	struct nvkm_disp *disp = nvkm_disp(engine);
	struct nvkm_conn *conn;
	struct nvkm_outp *outp;

	if (disp->func->fini)
		disp->func->fini(disp);

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

	list_for_each_entry(conn, &disp->conns, head) {
		nvkm_conn_fini(conn);
		if (outp->func->fini)
			outp->func->fini(outp);
	}

	return 0;
@@ -123,16 +119,12 @@ static int
nvkm_disp_init(struct nvkm_engine *engine)
{
	struct nvkm_disp *disp = nvkm_disp(engine);
	struct nvkm_conn *conn;
	struct nvkm_outp *outp;
	struct nvkm_ior *ior;

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

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

	if (disp->func->init) {
@@ -156,9 +148,7 @@ nvkm_disp_oneinit(struct nvkm_engine *engine)
{
	struct nvkm_disp *disp = nvkm_disp(engine);
	struct nvkm_subdev *subdev = &disp->engine.subdev;
	struct nvkm_outp *outp;
	struct nvkm_head *head;
	struct nvkm_ior *ior;
	int ret, i;

	if (disp->func->oneinit) {
@@ -167,19 +157,6 @@ nvkm_disp_oneinit(struct nvkm_engine *engine)
			return ret;
	}

	/* 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->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);
			if (!WARN_ON(!ior))
				ior->identity = true;
			outp->identity = true;
		}
	}

	i = 0;
	list_for_each_entry(head, &disp->heads, head)
		i = max(i, head->id + 1);
+0 −10
Original line number Diff line number Diff line
@@ -29,16 +29,6 @@

#include <nvif/event.h>

void
nvkm_conn_fini(struct nvkm_conn *conn)
{
}

void
nvkm_conn_init(struct nvkm_conn *conn)
{
}

void
nvkm_conn_del(struct nvkm_conn **pconn)
{
+0 −2
Original line number Diff line number Diff line
@@ -19,8 +19,6 @@ struct nvkm_conn {
int nvkm_conn_new(struct nvkm_disp *, int index, struct nvbios_connE *,
		  struct nvkm_conn **);
void nvkm_conn_del(struct nvkm_conn **);
void nvkm_conn_init(struct nvkm_conn *);
void nvkm_conn_fini(struct nvkm_conn *);

#define CONN_MSG(c,l,f,a...) do {                                              \
	struct nvkm_conn *_conn = (c);                                    \
+1 −0
Original line number Diff line number Diff line
@@ -603,6 +603,7 @@ nvkm_dp_fini(struct nvkm_outp *outp)
static void
nvkm_dp_init(struct nvkm_outp *outp)
{
	nvkm_outp_init(outp);
	nvkm_dp_enable(outp, outp->dp.enabled);
}

+14 −0
Original line number Diff line number Diff line
@@ -1586,6 +1586,7 @@ nv50_disp_oneinit(struct nvkm_disp *disp)
	struct nvkm_bios *bios = device->bios;
	struct nvkm_outp *outp, *outt, *pair;
	struct nvkm_conn *conn;
	struct nvkm_ior *ior;
	int ret, i;
	u8  ver, hdr;
	u32 data;
@@ -1747,6 +1748,19 @@ nv50_disp_oneinit(struct nvkm_disp *disp)
		list_add_tail(&outp->conn->head, &disp->conns);
	}

	/* 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->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);
			if (!WARN_ON(!ior))
				ior->identity = true;
			outp->identity = true;
		}
	}

	return 0;
}

Loading