Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea4718d1 authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau: move DP script invocation to nouveau_dp.c



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 87c0e0e5
Loading
Loading
Loading
Loading
+22 −2
Original line number Original line Diff line number Diff line
@@ -271,12 +271,26 @@ nouveau_dp_link_train(struct drm_encoder *encoder)
{
{
	struct drm_device *dev = encoder->dev;
	struct drm_device *dev = encoder->dev;
	struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
	struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
	uint8_t config[4];
	struct bit_displayport_encoder_table *dpe;
	uint8_t status[3];
	int dpe_headerlen;
	uint8_t config[4], status[3];
	bool cr_done, cr_max_vs, eq_done;
	bool cr_done, cr_max_vs, eq_done;
	int ret = 0, i, tries, voltage;
	int ret = 0, i, tries, voltage;


	NV_DEBUG_KMS(dev, "link training!!\n");
	NV_DEBUG_KMS(dev, "link training!!\n");

	dpe = nouveau_bios_dp_table(dev, nv_encoder->dcb, &dpe_headerlen);
	if (!dpe) {
		NV_ERROR(dev, "SOR-%d: no DP encoder table!\n", nv_encoder->or);
		return false;
	}

	if (dpe->script0) {
		NV_DEBUG_KMS(dev, "SOR-%d: running DP script 0\n", nv_encoder->or);
		nouveau_bios_run_init_table(dev, le16_to_cpu(dpe->script0),
					    nv_encoder->dcb);
	}

train:
train:
	cr_done = eq_done = false;
	cr_done = eq_done = false;


@@ -403,6 +417,12 @@ nouveau_dp_link_train(struct drm_encoder *encoder)
		}
		}
	}
	}


	if (dpe->script1) {
		NV_DEBUG_KMS(dev, "SOR-%d: running DP script 1\n", nv_encoder->or);
		nouveau_bios_run_init_table(dev, le16_to_cpu(dpe->script1),
					    nv_encoder->dcb);
	}

	return eq_done;
	return eq_done;
}
}


+1 −31
Original line number Original line Diff line number Diff line
@@ -65,36 +65,6 @@ nv50_sor_disconnect(struct drm_encoder *encoder)
	nv_encoder->last_dpms = DRM_MODE_DPMS_OFF;
	nv_encoder->last_dpms = DRM_MODE_DPMS_OFF;
}
}


static void
nv50_sor_dp_link_train(struct drm_encoder *encoder)
{
	struct drm_device *dev = encoder->dev;
	struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
	struct bit_displayport_encoder_table *dpe;
	int dpe_headerlen;

	dpe = nouveau_bios_dp_table(dev, nv_encoder->dcb, &dpe_headerlen);
	if (!dpe) {
		NV_ERROR(dev, "SOR-%d: no DP encoder table!\n", nv_encoder->or);
		return;
	}

	if (dpe->script0) {
		NV_DEBUG_KMS(dev, "SOR-%d: running DP script 0\n", nv_encoder->or);
		nouveau_bios_run_init_table(dev, le16_to_cpu(dpe->script0),
					    nv_encoder->dcb);
	}

	if (!nouveau_dp_link_train(encoder))
		NV_ERROR(dev, "SOR-%d: link training failed\n", nv_encoder->or);

	if (dpe->script1) {
		NV_DEBUG_KMS(dev, "SOR-%d: running DP script 1\n", nv_encoder->or);
		nouveau_bios_run_init_table(dev, le16_to_cpu(dpe->script1),
					    nv_encoder->dcb);
	}
}

static void
static void
nv50_sor_dpms(struct drm_encoder *encoder, int mode)
nv50_sor_dpms(struct drm_encoder *encoder, int mode)
{
{
@@ -146,7 +116,7 @@ nv50_sor_dpms(struct drm_encoder *encoder, int mode)
	}
	}


	if (nv_encoder->dcb->type == OUTPUT_DP && mode == DRM_MODE_DPMS_ON)
	if (nv_encoder->dcb->type == OUTPUT_DP && mode == DRM_MODE_DPMS_ON)
		nv50_sor_dp_link_train(encoder);
		nouveau_dp_link_train(encoder);
}
}


static void
static void