mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-28 07:04:00 +08:00
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: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Reviewed-by: Dave Gordon <david.s.gordon@intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Link: http://patchwork.freedesktop.org/patch/msgid/1470842530-35854-1-git-send-email-tvrtko.ursulin@linux.intel.com
This commit is contained in:
parent
17f298cf54
commit
c1bb11451e
@ -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;
|
||||
|
||||
|
@ -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];
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user