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

Commit c1bb1145 authored by Tvrtko Ursulin's avatar Tvrtko Ursulin
Browse files

drm/i915: Store number of active engines in device info



Until now code was calling hweight32 to figure out the
number from device_info->ring_mask at runtime. Instead
we can cache it at engine init time and use directly.

Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: default avatarDave Gordon <david.s.gordon@intel.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: http://patchwork.freedesktop.org/patch/msgid/1470842530-35854-1-git-send-email-tvrtko.ursulin@linux.intel.com
parent 17f298cf
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3226,7 +3226,7 @@ static int i915_semaphore_status(struct seq_file *m, void *unused)
	struct drm_device *dev = node->minor->dev;
	struct drm_i915_private *dev_priv = to_i915(dev);
	struct intel_engine_cs *engine;
	int num_rings = hweight32(INTEL_INFO(dev)->ring_mask);
	int num_rings = INTEL_INFO(dev)->num_rings;
	enum intel_engine_id id;
	int j, ret;

+1 −0
Original line number Diff line number Diff line
@@ -793,6 +793,7 @@ struct intel_device_info {
	u8 gen;
	u16 gen_mask;
	u8 ring_mask; /* Rings supported by the HW */
	u8 num_rings;
	DEV_INFO_FOR_EACH_FLAG(DEFINE_FLAG, SEP_SEMICOLON);
	/* Register offsets for the various display pipes and transcoders */
	int pipe_offsets[I915_MAX_TRANSCODERS];
+1 −1
Original line number Diff line number Diff line
@@ -568,7 +568,7 @@ mi_set_context(struct drm_i915_gem_request *req, u32 hw_flags)
	const int num_rings =
		/* Use an extended w/a on ivb+ if signalling from other rings */
		i915.semaphores ?
		hweight32(INTEL_INFO(dev_priv)->ring_mask) - 1 :
		INTEL_INFO(dev_priv)->num_rings - 1 :
		0;
	int len, ret;

+5 −5
Original line number Diff line number Diff line
@@ -109,6 +109,7 @@ intel_engine_setup(struct drm_i915_private *dev_priv,
int intel_engines_init(struct drm_device *dev)
{
	struct drm_i915_private *dev_priv = to_i915(dev);
	struct intel_device_info *device_info = mkwrite_device_info(dev_priv);
	unsigned int mask = 0;
	int (*init)(struct intel_engine_cs *engine);
	unsigned int i;
@@ -142,11 +143,10 @@ int intel_engines_init(struct drm_device *dev)
	 * are added to the driver by a warning and disabling the forgotten
	 * engines.
	 */
	if (WARN_ON(mask != INTEL_INFO(dev_priv)->ring_mask)) {
		struct intel_device_info *info =
			(struct intel_device_info *)&dev_priv->info;
		info->ring_mask = mask;
	}
	if (WARN_ON(mask != INTEL_INFO(dev_priv)->ring_mask))
		device_info->ring_mask = mask;

	device_info->num_rings = hweight32(mask);

	return 0;

+3 −3
Original line number Diff line number Diff line
@@ -1317,7 +1317,7 @@ static int gen8_rcs_signal(struct drm_i915_gem_request *req)
	enum intel_engine_id id;
	int ret, num_rings;

	num_rings = hweight32(INTEL_INFO(dev_priv)->ring_mask);
	num_rings = INTEL_INFO(dev_priv)->num_rings;
	ret = intel_ring_begin(req, (num_rings-1) * 8);
	if (ret)
		return ret;
@@ -1354,7 +1354,7 @@ static int gen8_xcs_signal(struct drm_i915_gem_request *req)
	enum intel_engine_id id;
	int ret, num_rings;

	num_rings = hweight32(INTEL_INFO(dev_priv)->ring_mask);
	num_rings = INTEL_INFO(dev_priv)->num_rings;
	ret = intel_ring_begin(req, (num_rings-1) * 6);
	if (ret)
		return ret;
@@ -1389,7 +1389,7 @@ static int gen6_signal(struct drm_i915_gem_request *req)
	enum intel_engine_id id;
	int ret, num_rings;

	num_rings = hweight32(INTEL_INFO(dev_priv)->ring_mask);
	num_rings = INTEL_INFO(dev_priv)->num_rings;
	ret = intel_ring_begin(req, round_up((num_rings-1) * 3, 2));
	if (ret)
		return ret;