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

Commit 093fa5d0 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge branch 'drm-nouveau-next' of...

Merge branch 'drm-nouveau-next' of git://anongit.freedesktop.org/git/nouveau/linux-2.6 into drm-fixes

A couple of DP regression fixes, kepler memory reclocking fixes, and a fix for an annoying display issue that can pop up on resume.

* 'drm-nouveau-next' of git://anongit.freedesktop.org/git/nouveau/linux-2.6:
  drm/nouveau/ram: fix test for gpio presence
  drm/nouveau/dp: workaround broken display
  drm/nouveau/dp: fix required link bandwidth calculations
  drm/nouveau/kms: restore fbcon after display has been resumed
  drm/nv50-/kms: pass a non-zero value for head to sor dpms methods
  drm/nouveau/fb: Prevent inlining of ramfuc_reg
  drm/gk104/ram: bash mpll bit 31 on
parents 4f440cd5 0b4e8e7f
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -1516,11 +1516,11 @@ nv50_disp_intr_unk20_2(struct nv50_disp_priv *priv, int head)
		}

		switch ((ctrl & 0x000f0000) >> 16) {
		case 6: datarate = pclk * 30 / 8; break;
		case 5: datarate = pclk * 24 / 8; break;
		case 6: datarate = pclk * 30; break;
		case 5: datarate = pclk * 24; break;
		case 2:
		default:
			datarate = pclk * 18 / 8;
			datarate = pclk * 18;
			break;
		}

+3 −3
Original line number Diff line number Diff line
@@ -1159,11 +1159,11 @@ nvd0_disp_intr_unk2_2(struct nv50_disp_priv *priv, int head)
	if (outp->info.type == DCB_OUTPUT_DP) {
		u32 sync = nv_rd32(priv, 0x660404 + (head * 0x300));
		switch ((sync & 0x000003c0) >> 6) {
		case 6: pclk = pclk * 30 / 8; break;
		case 5: pclk = pclk * 24 / 8; break;
		case 6: pclk = pclk * 30; break;
		case 5: pclk = pclk * 24; break;
		case 2:
		default:
			pclk = pclk * 18 / 8;
			pclk = pclk * 18;
			break;
		}

+5 −3
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ nvkm_output_dp_train(struct nvkm_output *base, u32 datarate, bool wait)
	struct nvkm_output_dp *outp = (void *)base;
	bool retrain = true;
	u8 link[2], stat[3];
	u32 rate;
	u32 linkrate;
	int ret, i;

	/* check that the link is trained at a high enough rate */
@@ -44,8 +44,10 @@ nvkm_output_dp_train(struct nvkm_output *base, u32 datarate, bool wait)
		goto done;
	}

	rate = link[0] * 27000 * (link[1] & DPCD_LC01_LANE_COUNT_SET);
	if (rate < ((datarate / 8) * 10)) {
	linkrate = link[0] * 27000 * (link[1] & DPCD_LC01_LANE_COUNT_SET);
	linkrate = (linkrate * 8) / 10; /* 8B/10B coding overhead */
	datarate = (datarate + 9) / 10; /* -> decakilobits */
	if (linkrate < datarate) {
		DBG("link not trained at sufficient rate\n");
		goto done;
	}
+1 −0
Original line number Diff line number Diff line
@@ -87,6 +87,7 @@ nv50_sor_mthd(struct nouveau_object *object, u32 mthd, void *args, u32 size)
			struct nvkm_output_dp *outpdp = (void *)outp;
			switch (data) {
			case NV94_DISP_SOR_DP_PWR_STATE_OFF:
				nouveau_event_put(outpdp->irq);
				((struct nvkm_output_dp_impl *)nv_oclass(outp))
					->lnk_pwr(outpdp, 0);
				atomic_set(&outpdp->lt.done, 0);
+2 −2
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ ramfuc_reg2(u32 addr1, u32 addr2)
	};
}

static inline struct ramfuc_reg
static noinline struct ramfuc_reg
ramfuc_reg(u32 addr)
{
	return ramfuc_reg2(addr, addr);
@@ -107,7 +107,7 @@ ramfuc_nsec(struct ramfuc *ram, u32 nsec)

#define ram_init(s,p)       ramfuc_init(&(s)->base, (p))
#define ram_exec(s,e)       ramfuc_exec(&(s)->base, (e))
#define ram_have(s,r)       ((s)->r_##r.addr != 0x000000)
#define ram_have(s,r)       ((s)->r_##r.addr[0] != 0x000000)
#define ram_rd32(s,r)       ramfuc_rd32(&(s)->base, &(s)->r_##r)
#define ram_wr32(s,r,d)     ramfuc_wr32(&(s)->base, &(s)->r_##r, (d))
#define ram_nuke(s,r)       ramfuc_nuke(&(s)->base, &(s)->r_##r)
Loading