diff options
Diffstat (limited to 'drivers/gpu/drm/i915/gt/intel_gt.c')
| -rw-r--r-- | drivers/gpu/drm/i915/gt/intel_gt.c | 47 | 
1 files changed, 45 insertions, 2 deletions
| diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c b/drivers/gpu/drm/i915/gt/intel_gt.c index d8e1ab412634..8d77dcbad059 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt.c +++ b/drivers/gpu/drm/i915/gt/intel_gt.c @@ -4,6 +4,8 @@   */  #include "debugfs_gt.h" + +#include "gem/i915_gem_lmem.h"  #include "i915_drv.h"  #include "intel_context.h"  #include "intel_gt.h" @@ -29,6 +31,9 @@ void intel_gt_init_early(struct intel_gt *gt, struct drm_i915_private *i915)  	INIT_LIST_HEAD(>->closed_vma);  	spin_lock_init(>->closed_lock); +	init_llist_head(>->watchdog.list); +	INIT_WORK(>->watchdog.work, intel_gt_watchdog_work); +  	intel_gt_init_buffer_pool(gt);  	intel_gt_init_reset(gt);  	intel_gt_init_requests(gt); @@ -39,6 +44,42 @@ void intel_gt_init_early(struct intel_gt *gt, struct drm_i915_private *i915)  	intel_uc_init_early(>->uc);  } +int intel_gt_probe_lmem(struct intel_gt *gt) +{ +	struct drm_i915_private *i915 = gt->i915; +	struct intel_memory_region *mem; +	int id; +	int err; + +	mem = intel_gt_setup_lmem(gt); +	if (mem == ERR_PTR(-ENODEV)) +		mem = intel_gt_setup_fake_lmem(gt); +	if (IS_ERR(mem)) { +		err = PTR_ERR(mem); +		if (err == -ENODEV) +			return 0; + +		drm_err(&i915->drm, +			"Failed to setup region(%d) type=%d\n", +			err, INTEL_MEMORY_LOCAL); +		return err; +	} + +	id = INTEL_REGION_LMEM; + +	mem->id = id; +	mem->type = INTEL_MEMORY_LOCAL; +	mem->instance = 0; + +	intel_memory_region_set_name(mem, "local%u", mem->instance); + +	GEM_BUG_ON(!HAS_REGION(i915, id)); +	GEM_BUG_ON(i915->mm.regions[id]); +	i915->mm.regions[id] = mem; + +	return 0; +} +  void intel_gt_init_hw_early(struct intel_gt *gt, struct i915_ggtt *ggtt)  {  	gt->ggtt = ggtt; @@ -344,11 +385,13 @@ static int intel_gt_init_scratch(struct intel_gt *gt, unsigned int size)  	struct i915_vma *vma;  	int ret; -	obj = i915_gem_object_create_stolen(i915, size); +	obj = i915_gem_object_create_lmem(i915, size, I915_BO_ALLOC_VOLATILE); +	if (IS_ERR(obj)) +		obj = i915_gem_object_create_stolen(i915, size);  	if (IS_ERR(obj))  		obj = i915_gem_object_create_internal(i915, size);  	if (IS_ERR(obj)) { -		DRM_ERROR("Failed to allocate scratch page\n"); +		drm_err(&i915->drm, "Failed to allocate scratch page\n");  		return PTR_ERR(obj);  	} | 
