mirror of https://gitee.com/openkylin/linux.git
drm/i915: Initialize RCS ring status page address in intel_render_ring_init_dri
Physically-addressed hardware status pages are initialized early in the driver load process by i915_init_phys_hws. For UMS environments, the ring structure is not initialized until the X server starts. At that point, the entire ring structure is re-initialized with all new values. Any values set in the ring structure (including ring->status_page.page_addr) will be lost when the ring is re-initialized. This patch moves the initialization of the status_page.page_addr value to intel_render_ring_init_dri. Signed-off-by: Keith Packard <keithp@keithp.com> Cc: stable@kernel.org
This commit is contained in:
parent
842d452985
commit
f3234706a7
|
@ -61,7 +61,6 @@ static void i915_write_hws_pga(struct drm_device *dev)
|
||||||
static int i915_init_phys_hws(struct drm_device *dev)
|
static int i915_init_phys_hws(struct drm_device *dev)
|
||||||
{
|
{
|
||||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||||
struct intel_ring_buffer *ring = LP_RING(dev_priv);
|
|
||||||
|
|
||||||
/* Program Hardware Status Page */
|
/* Program Hardware Status Page */
|
||||||
dev_priv->status_page_dmah =
|
dev_priv->status_page_dmah =
|
||||||
|
@ -71,10 +70,9 @@ static int i915_init_phys_hws(struct drm_device *dev)
|
||||||
DRM_ERROR("Can not allocate hardware status page\n");
|
DRM_ERROR("Can not allocate hardware status page\n");
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
ring->status_page.page_addr =
|
|
||||||
(void __force __iomem *)dev_priv->status_page_dmah->vaddr;
|
|
||||||
|
|
||||||
memset_io(ring->status_page.page_addr, 0, PAGE_SIZE);
|
memset_io((void __force __iomem *)dev_priv->status_page_dmah->vaddr,
|
||||||
|
0, PAGE_SIZE);
|
||||||
|
|
||||||
i915_write_hws_pga(dev);
|
i915_write_hws_pga(dev);
|
||||||
|
|
||||||
|
|
|
@ -1319,6 +1319,9 @@ int intel_render_ring_init_dri(struct drm_device *dev, u64 start, u32 size)
|
||||||
ring->get_seqno = pc_render_get_seqno;
|
ring->get_seqno = pc_render_get_seqno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!I915_NEED_GFX_HWS(dev))
|
||||||
|
ring->status_page.page_addr = dev_priv->status_page_dmah->vaddr;
|
||||||
|
|
||||||
ring->dev = dev;
|
ring->dev = dev;
|
||||||
INIT_LIST_HEAD(&ring->active_list);
|
INIT_LIST_HEAD(&ring->active_list);
|
||||||
INIT_LIST_HEAD(&ring->request_list);
|
INIT_LIST_HEAD(&ring->request_list);
|
||||||
|
|
Loading…
Reference in New Issue