summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Skeggs <darktama@iinet.net.au>2007-01-02 15:56:10 +1100
committerBen Skeggs <darktama@iinet.net.au>2007-01-02 15:56:10 +1100
commit861017e6d50f5724c179717f995322c498ee15db (patch)
tree3e8551d9d7e4efce8449ab4aa0f72d5f5c3f2782
parent41da9fd2e59b2af295c8f345586030e5a70d7a83 (diff)
nouveau: Hookup nv40_graph_init.
Now I can get 3D + working grctx switching on my NV40 without the binary driver initialising the card first. However, this change also breaks 3D on my C51 even *with* the binary driver's help. So, it's likely that the weird voodoo is card-specific.
-rw-r--r--shared-core/nouveau_state.c13
-rw-r--r--shared-core/nv40_graph.c9
2 files changed, 11 insertions, 11 deletions
diff --git a/shared-core/nouveau_state.c b/shared-core/nouveau_state.c
index 914d1453..c66ecd4e 100644
--- a/shared-core/nouveau_state.c
+++ b/shared-core/nouveau_state.c
@@ -72,17 +72,8 @@ int nouveau_firstopen(struct drm_device *dev)
if (ret) return ret;
/* FIXME: doesn't belong here, and have no idea what it's for.. */
- if (dev_priv->card_type >= NV_40) {
- uint32_t pg0220_inst;
-
- dev_priv->fb_obj = nouveau_dma_object_create(dev,
- 0, nouveau_mem_fb_amount(dev),
- NV_DMA_ACCESS_RW, NV_DMA_TARGET_VIDMEM);
-
- pg0220_inst = nouveau_chip_instance_get(dev,
- dev_priv->fb_obj->instance);
- NV_WRITE(NV_PGRAPH_NV40_UNK220, pg0220_inst);
- }
+ if (dev_priv->card_type >= NV_40)
+ nv40_graph_init(dev);
return 0;
}
diff --git a/shared-core/nv40_graph.c b/shared-core/nv40_graph.c
index 14379fdd..6e3ef2c2 100644
--- a/shared-core/nv40_graph.c
+++ b/shared-core/nv40_graph.c
@@ -426,6 +426,7 @@ nv40_graph_init(drm_device_t *dev)
drm_nouveau_private_t *dev_priv =
(drm_nouveau_private_t *)dev->dev_private;
uint32_t *ctx_voodoo;
+ uint32_t pg0220_inst;
int i;
switch (dev_priv->card_type) {
@@ -452,6 +453,14 @@ nv40_graph_init(drm_device_t *dev)
/* No context present currently */
NV_WRITE(0x40032C, 0x00000000);
+ /* No idea what this is for.. */
+ dev_priv->fb_obj = nouveau_dma_object_create(dev,
+ 0, nouveau_mem_fb_amount(dev),
+ NV_DMA_ACCESS_RW, NV_DMA_TARGET_VIDMEM);
+ pg0220_inst = nouveau_chip_instance_get(dev,
+ dev_priv->fb_obj->instance);
+ NV_WRITE(NV_PGRAPH_NV40_UNK220, pg0220_inst);
+
return 0;
}