summaryrefslogtreecommitdiff
path: root/shared-core
diff options
context:
space:
mode:
authorBen Skeggs <darktama@iinet.net.au>2006-10-17 12:33:49 +1100
committerBen Skeggs <darktama@iinet.net.au>2006-10-17 12:33:49 +1100
commit4b43ee63f90c93701c9f1cdf7fefd1816b316d33 (patch)
tree6e2ebb4df24a7dff7d6ad85ae435792ab1d3f88a /shared-core
parent98e718d48fcd166accf1af3c017c34e331ab09cb (diff)
NV40: *Now* fifo ctx switching works for me..
Ok, I lied before.. it was a fluke it worked and required magic to repeat it.. It actually helps to fill in RAMFC entries in the correct place. The code also clears RAMIN entirely instead of just the hash-table.
Diffstat (limited to 'shared-core')
-rw-r--r--shared-core/nouveau_fifo.c7
-rw-r--r--shared-core/nouveau_object.c6
2 files changed, 7 insertions, 6 deletions
diff --git a/shared-core/nouveau_fifo.c b/shared-core/nouveau_fifo.c
index d015d420..5a7b8638 100644
--- a/shared-core/nouveau_fifo.c
+++ b/shared-core/nouveau_fifo.c
@@ -92,12 +92,15 @@ static void nouveau_fifo_init(drm_device_t* dev)
((dev_priv->objs.ht_bits - 9) << 16) |
(dev_priv->objs.ht_base >> 8)
);
- dev_priv->ramfc_offset=0x12000;
- dev_priv->ramro_offset=0x11200;
+ /* RAMFC needs to be at RAMIN+0x20000 on NV40, I currently don't know
+ * how to move it..
+ */
+ dev_priv->ramfc_offset=0x20000;
if (dev_priv->card_type < NV_40)
NV_WRITE(NV_PFIFO_RAMFC, dev_priv->ramfc_offset>>8); /* RAMIN+0x11000 0.5k */
else
NV_WRITE(0x2220, 0x30002);
+ dev_priv->ramro_offset=0x11200;
NV_WRITE(NV_PFIFO_RAMRO, dev_priv->ramro_offset>>8); /* RAMIN+0x11200 0.5k */
NV_WRITE(NV_PFIFO_CACH0_PUL1, 0x00000001);
NV_WRITE(NV_PFIFO_CACH1_DMAC, 0x00000000);
diff --git a/shared-core/nouveau_object.c b/shared-core/nouveau_object.c
index 5f11cfa7..18c50763 100644
--- a/shared-core/nouveau_object.c
+++ b/shared-core/nouveau_object.c
@@ -303,10 +303,8 @@ void nouveau_hash_table_init(drm_device_t* dev)
dev_priv->objs.inst_bmap = drm_calloc
(1, dev_priv->objs.num_instance/32, DRM_MEM_DRIVER);
- /* clear the hash table */
- ht_start = NV_RAMIN+dev_priv->objs.ht_base;
- ht_end = ht_start + dev_priv->objs.ht_size;
- for (i=ht_start; i<ht_end; i+=4)
+ /* clear all of RAMIN */
+ for (i=0x00700000; i<0x00800000; i+=4)
NV_WRITE(i, 0x00000000);
}