mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2025-12-25 11:50:17 +01:00
i915: setup hardware status page if physical addrs are required
Needed for the modesetting case where we initialize the ring at load time.
This commit is contained in:
parent
b8724ae647
commit
1c6abcefdc
1 changed files with 31 additions and 0 deletions
|
|
@ -100,6 +100,32 @@ int i915_probe_agp(struct pci_dev *pdev, unsigned long *aperture_size,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
i915_init_hws_phys(struct drm_device *dev)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||
int ret = 0;
|
||||
|
||||
dev_priv->status_page_dmah = drm_pci_alloc(dev, PAGE_SIZE, PAGE_SIZE,
|
||||
0xffffffff);
|
||||
|
||||
if (!dev_priv->status_page_dmah) {
|
||||
DRM_ERROR("Can not allocate hardware status page\n");
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
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);
|
||||
|
||||
I915_WRITE(HWS_PGA, dev_priv->dma_status_page);
|
||||
DRM_DEBUG("hws kernel virt: 0x%p\n", dev_priv->hw_status_page);
|
||||
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int i915_load_modeset_init(struct drm_device *dev)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||
|
|
@ -113,6 +139,9 @@ static int i915_load_modeset_init(struct drm_device *dev)
|
|||
/* Let GEM Manage from end of prealloc space to end of aperture */
|
||||
i915_gem_do_init(dev, prealloc_size, agp_size);
|
||||
|
||||
if (!I915_NEED_GFX_HWS(dev))
|
||||
i915_init_hws_phys(dev);
|
||||
|
||||
ret = i915_gem_init_ringbuffer(dev);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
|
@ -354,6 +383,8 @@ int i915_driver_unload(struct drm_device *dev)
|
|||
mutex_unlock(&dev->struct_mutex);
|
||||
drm_mm_takedown(&dev_priv->vram);
|
||||
i915_gem_lastclose(dev);
|
||||
if (!I915_NEED_GFX_HWS(dev))
|
||||
drm_pci_free(dev, dev_priv->status_page_dmah);
|
||||
}
|
||||
|
||||
drm_rmmap(dev, dev_priv->mmio_map);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue