mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-28 15:13:55 +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_device *dev = node->minor->dev;
|
||||||
struct drm_i915_private *dev_priv = to_i915(dev);
|
struct drm_i915_private *dev_priv = to_i915(dev);
|
||||||
struct intel_engine_cs *engine;
|
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;
|
enum intel_engine_id id;
|
||||||
int j, ret;
|
int j, ret;
|
||||||
|
|
||||||
|
@ -793,6 +793,7 @@ struct intel_device_info {
|
|||||||
u8 gen;
|
u8 gen;
|
||||||
u16 gen_mask;
|
u16 gen_mask;
|
||||||
u8 ring_mask; /* Rings supported by the HW */
|
u8 ring_mask; /* Rings supported by the HW */
|
||||||
|
u8 num_rings;
|
||||||
DEV_INFO_FOR_EACH_FLAG(DEFINE_FLAG, SEP_SEMICOLON);
|
DEV_INFO_FOR_EACH_FLAG(DEFINE_FLAG, SEP_SEMICOLON);
|
||||||
/* Register offsets for the various display pipes and transcoders */
|
/* Register offsets for the various display pipes and transcoders */
|
||||||
int pipe_offsets[I915_MAX_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 =
|
const int num_rings =
|
||||||
/* Use an extended w/a on ivb+ if signalling from other rings */
|
/* Use an extended w/a on ivb+ if signalling from other rings */
|
||||||
i915.semaphores ?
|
i915.semaphores ?
|
||||||
hweight32(INTEL_INFO(dev_priv)->ring_mask) - 1 :
|
INTEL_INFO(dev_priv)->num_rings - 1 :
|
||||||
0;
|
0;
|
||||||
int len, ret;
|
int len, ret;
|
||||||
|
|
||||||
|
@ -109,6 +109,7 @@ intel_engine_setup(struct drm_i915_private *dev_priv,
|
|||||||
int intel_engines_init(struct drm_device *dev)
|
int intel_engines_init(struct drm_device *dev)
|
||||||
{
|
{
|
||||||
struct drm_i915_private *dev_priv = to_i915(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;
|
unsigned int mask = 0;
|
||||||
int (*init)(struct intel_engine_cs *engine);
|
int (*init)(struct intel_engine_cs *engine);
|
||||||
unsigned int i;
|
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
|
* are added to the driver by a warning and disabling the forgotten
|
||||||
* engines.
|
* engines.
|
||||||
*/
|
*/
|
||||||
if (WARN_ON(mask != INTEL_INFO(dev_priv)->ring_mask)) {
|
if (WARN_ON(mask != INTEL_INFO(dev_priv)->ring_mask))
|
||||||
struct intel_device_info *info =
|
device_info->ring_mask = mask;
|
||||||
(struct intel_device_info *)&dev_priv->info;
|
|
||||||
info->ring_mask = mask;
|
device_info->num_rings = hweight32(mask);
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -1317,7 +1317,7 @@ static int gen8_rcs_signal(struct drm_i915_gem_request *req)
|
|||||||
enum intel_engine_id id;
|
enum intel_engine_id id;
|
||||||
int ret, num_rings;
|
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);
|
ret = intel_ring_begin(req, (num_rings-1) * 8);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
@ -1354,7 +1354,7 @@ static int gen8_xcs_signal(struct drm_i915_gem_request *req)
|
|||||||
enum intel_engine_id id;
|
enum intel_engine_id id;
|
||||||
int ret, num_rings;
|
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);
|
ret = intel_ring_begin(req, (num_rings-1) * 6);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
@ -1389,7 +1389,7 @@ static int gen6_signal(struct drm_i915_gem_request *req)
|
|||||||
enum intel_engine_id id;
|
enum intel_engine_id id;
|
||||||
int ret, num_rings;
|
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));
|
ret = intel_ring_begin(req, round_up((num_rings-1) * 3, 2));
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
Loading…
Reference in New Issue
Block a user