2019-10-25 16:37:22 +01:00
// SPDX-License-Identifier: MIT
/*
* Copyright © 2019 Intel Corporation
*/
# include "intel_memory_region.h"
# include "gem/i915_gem_region.h"
# include "gem/i915_gem_lmem.h"
# include "i915_drv.h"
const struct drm_i915_gem_object_ops i915_gem_lmem_obj_ops = {
2020-05-29 19:32:04 +01:00
. name = " i915_gem_object_lmem " ,
2019-10-25 16:37:24 +01:00
. flags = I915_GEM_OBJECT_HAS_IOMEM ,
2019-10-25 16:37:22 +01:00
. get_pages = i915_gem_object_get_pages_buddy ,
. put_pages = i915_gem_object_put_pages_buddy ,
. release = i915_gem_object_release_memory_region ,
} ;
bool i915_gem_object_is_lmem ( struct drm_i915_gem_object * obj )
{
2021-04-21 11:46:56 +01:00
struct intel_memory_region * mr = obj - > mm . region ;
return mr & & ( mr - > type = = INTEL_MEMORY_LOCAL | |
mr - > type = = INTEL_MEMORY_STOLEN_LOCAL ) ;
2019-10-25 16:37:22 +01:00
}
struct drm_i915_gem_object *
i915_gem_object_create_lmem ( struct drm_i915_private * i915 ,
resource_size_t size ,
unsigned int flags )
{
return i915_gem_object_create_region ( i915 - > mm . regions [ INTEL_REGION_LMEM ] ,
size , flags ) ;
}
2021-01-14 18:24:02 +00:00
int __i915_gem_lmem_object_init ( struct intel_memory_region * mem ,
struct drm_i915_gem_object * obj ,
resource_size_t size ,
unsigned int flags )
2019-10-25 16:37:22 +01:00
{
static struct lock_class_key lock_class ;
struct drm_i915_private * i915 = mem - > i915 ;
drm_gem_private_object_init ( & i915 - > drm , & obj - > base , size ) ;
2021-03-23 16:49:56 +01:00
i915_gem_object_init ( obj , & i915_gem_lmem_obj_ops , & lock_class , flags ) ;
2019-10-25 16:37:22 +01:00
obj - > read_domains = I915_GEM_DOMAIN_WC | I915_GEM_DOMAIN_GTT ;
i915_gem_object_set_cache_coherency ( obj , I915_CACHE_NONE ) ;
2021-03-23 16:49:56 +01:00
i915_gem_object_init_memory_region ( obj , mem ) ;
2019-10-25 16:37:22 +01:00
2021-01-14 18:24:02 +00:00
return 0 ;
2019-10-25 16:37:22 +01:00
}