Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f3234706 authored by Keith Packard's avatar Keith Packard
Browse files

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: default avatarKeith Packard <keithp@keithp.com>
Cc: stable@kernel.org
parent 842d4529
Loading
Loading
Loading
Loading
+2 −4
Original line number Original line Diff line number Diff line
@@ -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);


+3 −0
Original line number Original line Diff line number Diff line
@@ -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);