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

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
...@@ -651,6 +651,7 @@ nouveau_mem_gart_init(struct drm_device *dev) ...@@ -651,6 +651,7 @@ nouveau_mem_gart_init(struct drm_device *dev)
void void
nouveau_mem_timing_init(struct drm_device *dev) nouveau_mem_timing_init(struct drm_device *dev)
{ {
/* cards < NVC0 only */
struct drm_nouveau_private *dev_priv = dev->dev_private; struct drm_nouveau_private *dev_priv = dev->dev_private;
struct nouveau_pm_engine *pm = &dev_priv->engine.pm; struct nouveau_pm_engine *pm = &dev_priv->engine.pm;
struct nouveau_pm_memtimings *memtimings = &pm->memtimings; struct nouveau_pm_memtimings *memtimings = &pm->memtimings;
...@@ -717,14 +718,14 @@ nouveau_mem_timing_init(struct drm_device *dev) ...@@ -717,14 +718,14 @@ nouveau_mem_timing_init(struct drm_device *dev)
tUNK_19 = 1; tUNK_19 = 1;
tUNK_20 = 0; tUNK_20 = 0;
tUNK_21 = 0; tUNK_21 = 0;
switch (min(recordlen, 21)) { switch (min(recordlen, 22)) {
case 21: case 22:
tUNK_21 = entry[21]; tUNK_21 = entry[21];
case 20: case 21:
tUNK_20 = entry[20]; tUNK_20 = entry[20];
case 19: case 20:
tUNK_19 = entry[19]; tUNK_19 = entry[19];
case 18: case 19:
tUNK_18 = entry[18]; tUNK_18 = entry[18];
default: default:
tUNK_0 = entry[0]; tUNK_0 = entry[0];
...@@ -754,24 +755,30 @@ nouveau_mem_timing_init(struct drm_device *dev) ...@@ -754,24 +755,30 @@ nouveau_mem_timing_init(struct drm_device *dev)
timing->reg_100228 = (tUNK_12 << 16 | tUNK_11 << 8 | tUNK_10); timing->reg_100228 = (tUNK_12 << 16 | tUNK_11 << 8 | tUNK_10);
if(recordlen > 19) { if(recordlen > 19) {
timing->reg_100228 += (tUNK_19 - 1) << 24; timing->reg_100228 += (tUNK_19 - 1) << 24;
} else { }/* I cannot back-up this else-statement right now
else {
timing->reg_100228 += tUNK_12 << 24; timing->reg_100228 += tUNK_12 << 24;
} }*/
/* XXX: reg_10022c */ /* XXX: reg_10022c */
timing->reg_10022c = tUNK_2 - 1;
timing->reg_100230 = (tUNK_20 << 24 | tUNK_21 << 16 | timing->reg_100230 = (tUNK_20 << 24 | tUNK_21 << 16 |
tUNK_13 << 8 | tUNK_13); tUNK_13 << 8 | tUNK_13);
/* XXX: +6? */ /* XXX: +6? */
timing->reg_100234 = (tRAS << 24 | (tUNK_19 + 6) << 8 | tRC); timing->reg_100234 = (tRAS << 24 | (tUNK_19 + 6) << 8 | tRC);
if(tUNK_10 > tUNK_11) { timing->reg_100234 += max(tUNK_10,tUNK_11) << 16;
timing->reg_100234 += tUNK_10 << 16;
} else { /* XXX; reg_100238, reg_10023c
timing->reg_100234 += tUNK_11 << 16; * 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, NV_DEBUG(dev, "Entry %d: 220: %08x %08x %08x %08x\n", i,
timing->reg_100220, timing->reg_100224, timing->reg_100220, timing->reg_100224,
timing->reg_100228, timing->reg_10022c); timing->reg_100228, timing->reg_10022c);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment