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

Commit cac8f05b authored by Roy Spliet's avatar Roy Spliet Committed by Ben Skeggs
Browse files

drm/nouveau/pm: improve memtiming mappings



Improvements:
 - Fix bug in switch statement
 - Add parts of 0x10022c, 0x10023c
 - Clean up 0x100234
 - Comment out assumption in 0x100228 until verified

Signed-off-by: default avatarRoy Spliet <r.spliet@student.tudelft.nl>
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 9d5a6c43
Loading
Loading
Loading
Loading
+19 −12
Original line number Diff line number Diff line
@@ -651,6 +651,7 @@ nouveau_mem_gart_init(struct drm_device *dev)
void
nouveau_mem_timing_init(struct drm_device *dev)
{
	/* cards < NVC0 only */
	struct drm_nouveau_private *dev_priv = dev->dev_private;
	struct nouveau_pm_engine *pm = &dev_priv->engine.pm;
	struct nouveau_pm_memtimings *memtimings = &pm->memtimings;
@@ -717,14 +718,14 @@ nouveau_mem_timing_init(struct drm_device *dev)
		tUNK_19 = 1;
		tUNK_20 = 0;
		tUNK_21 = 0;
		switch (min(recordlen, 21)) {
		case 21:
		switch (min(recordlen, 22)) {
		case 22:
			tUNK_21 = entry[21];
		case 20:
		case 21:
			tUNK_20 = entry[20];
		case 19:
		case 20:
			tUNK_19 = entry[19];
		case 18:
		case 19:
			tUNK_18 = entry[18];
		default:
			tUNK_0  = entry[0];
@@ -754,24 +755,30 @@ nouveau_mem_timing_init(struct drm_device *dev)
		timing->reg_100228 = (tUNK_12 << 16 | tUNK_11 << 8 | tUNK_10);
		if(recordlen > 19) {
			timing->reg_100228 += (tUNK_19 - 1) << 24;
		} else {
		}/* I cannot back-up this else-statement right now
			 else {
			timing->reg_100228 += tUNK_12 << 24;
		}
		}*/

		/* XXX: reg_10022c */
		timing->reg_10022c = tUNK_2 - 1;

		timing->reg_100230 = (tUNK_20 << 24 | tUNK_21 << 16 |
				      tUNK_13 << 8  | tUNK_13);

		/* XXX: +6? */
		timing->reg_100234 = (tRAS << 24 | (tUNK_19 + 6) << 8 | tRC);
		if(tUNK_10 > tUNK_11) {
			timing->reg_100234 += tUNK_10 << 16;
		} else {
			timing->reg_100234 += tUNK_11 << 16;
		timing->reg_100234 += max(tUNK_10,tUNK_11) << 16;

		/* XXX; reg_100238, reg_10023c
		 * reg: 0x00??????
		 * reg_10023c:
		 *      0 for pre-NV50 cards
		 *      0x????0202 for NV50+ cards (empirical evidence) */
		if(dev_priv->card_type >= NV_50) {
			timing->reg_10023c = 0x202;
		}

		/* XXX; reg_100238, reg_10023c */
		NV_DEBUG(dev, "Entry %d: 220: %08x %08x %08x %08x\n", i,
			 timing->reg_100220, timing->reg_100224,
			 timing->reg_100228, timing->reg_10022c);