diff options
author | Ben Skeggs <darktama@iinet.net.au> | 2007-01-02 15:56:10 +1100 |
---|---|---|
committer | Ben Skeggs <darktama@iinet.net.au> | 2007-01-02 15:56:10 +1100 |
commit | 861017e6d50f5724c179717f995322c498ee15db (patch) | |
tree | 3e8551d9d7e4efce8449ab4aa0f72d5f5c3f2782 /shared-core | |
parent | 41da9fd2e59b2af295c8f345586030e5a70d7a83 (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.
Diffstat (limited to 'shared-core')
-rw-r--r-- | shared-core/nouveau_state.c | 13 | ||||
-rw-r--r-- | shared-core/nv40_graph.c | 9 |
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; } |