diff options
author | Alan Hourihane <alanh@fairlite.demon.co.uk> | 2007-05-18 13:48:56 +0100 |
---|---|---|
committer | Alan Hourihane <alanh@fairlite.demon.co.uk> | 2007-05-18 13:48:56 +0100 |
commit | 315cf14af814da60285adb95238181de430c6f68 (patch) | |
tree | 0474fc6591ffb1d4c76c3feb1f34df9ab6286eac /shared-core/i915_dma.c | |
parent | 95945bbf226610ba4f41381fd0436722082397ec (diff) | |
parent | ea98d7e79657469545b865a353784d79fc8cff9d (diff) |
Merge branch 'master' of git+ssh://git.freedesktop.org/git/mesa/drm into modesetting-101
Conflicts:
shared-core/i915_dma.c
Diffstat (limited to 'shared-core/i915_dma.c')
-rw-r--r-- | shared-core/i915_dma.c | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/shared-core/i915_dma.c b/shared-core/i915_dma.c index f4761da9..a5e51de4 100644 --- a/shared-core/i915_dma.c +++ b/shared-core/i915_dma.c @@ -98,10 +98,13 @@ static int i915_initialize(drm_device_t * dev, drm_i915_private_t * dev_priv, drm_i915_init_t * init) { - - /* reset ring pointers */ - I915_WRITE(LP_RING + RING_LEN, 0); - mb(); + dev_priv->sarea = drm_getsarea(dev); + if (!dev_priv->sarea) { + DRM_ERROR("can not find sarea!\n"); + dev->dev_private = (void *)dev_priv; + i915_dma_cleanup(dev); + return DRM_ERR(EINVAL); + } memset((void *)(dev_priv->ring.virtual_start), 0, dev_priv->ring.Size); @@ -121,6 +124,29 @@ static int i915_initialize(drm_device_t * dev, */ dev_priv->allow_batchbuffer = 1; + /* Enable vblank on pipe A for older X servers + */ + dev_priv->vblank_pipe = DRM_I915_VBLANK_PIPE_A; + + /* Program Hardware Status Page */ + dev_priv->status_page_dmah = drm_pci_alloc(dev, PAGE_SIZE, PAGE_SIZE, + 0xffffffff); + + if (!dev_priv->status_page_dmah) { + dev->dev_private = (void *)dev_priv; + i915_dma_cleanup(dev); + DRM_ERROR("Can not allocate hardware status page\n"); + return DRM_ERR(ENOMEM); + } + dev_priv->hw_status_page = dev_priv->status_page_dmah->vaddr; + dev_priv->dma_status_page = dev_priv->status_page_dmah->busaddr; + + memset(dev_priv->hw_status_page, 0, PAGE_SIZE); + DRM_DEBUG("hw status page @ %p\n", dev_priv->hw_status_page); + + I915_WRITE(0x02080, dev_priv->dma_status_page); + DRM_DEBUG("Enabled hardware status page\n"); + dev->dev_private = (void *)dev_priv; return 0; } |