1 // SPDX-License-Identifier: GPL-2.0-or-later 2 3 #include <linux/module.h> 4 5 #include <drm/drm_gem_ttm_helper.h> 6 7 /** 8 * DOC: overview 9 * 10 * This library provides helper functions for gem objects backed by 11 * ttm. 12 */ 13 14 /** 15 * drm_gem_ttm_print_info() - Print &ttm_buffer_object info for debugfs 16 * @p: DRM printer 17 * @indent: Tab indentation level 18 * @gem: GEM object 19 * 20 * This function can be used as &drm_gem_object_funcs.print_info 21 * callback. 22 */ 23 void drm_gem_ttm_print_info(struct drm_printer *p, unsigned int indent, 24 const struct drm_gem_object *gem) 25 { 26 static const char * const plname[] = { 27 [ TTM_PL_SYSTEM ] = "system", 28 [ TTM_PL_TT ] = "tt", 29 [ TTM_PL_VRAM ] = "vram", 30 [ TTM_PL_PRIV ] = "priv", 31 32 [ 16 ] = "cached", 33 [ 17 ] = "uncached", 34 [ 18 ] = "wc", 35 [ 19 ] = "contig", 36 37 [ 21 ] = "pinned", /* NO_EVICT */ 38 [ 22 ] = "topdown", 39 }; 40 const struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem); 41 42 drm_printf_indent(p, indent, "placement="); 43 drm_print_bits(p, bo->mem.placement, plname, ARRAY_SIZE(plname)); 44 drm_printf(p, "\n"); 45 46 if (bo->mem.bus.is_iomem) 47 drm_printf_indent(p, indent, "bus.offset=%lx\n", 48 (unsigned long)bo->mem.bus.offset); 49 } 50 EXPORT_SYMBOL(drm_gem_ttm_print_info); 51 52 /** 53 * drm_gem_ttm_mmap() - mmap &ttm_buffer_object 54 * @gem: GEM object. 55 * @vma: vm area. 56 * 57 * This function can be used as &drm_gem_object_funcs.mmap 58 * callback. 59 */ 60 int drm_gem_ttm_mmap(struct drm_gem_object *gem, 61 struct vm_area_struct *vma) 62 { 63 struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem); 64 int ret; 65 66 ret = ttm_bo_mmap_obj(vma, bo); 67 if (ret < 0) 68 return ret; 69 70 /* 71 * ttm has its own object refcounting, so drop gem reference 72 * to avoid double accounting counting. 73 */ 74 drm_gem_object_put(gem); 75 76 return 0; 77 } 78 EXPORT_SYMBOL(drm_gem_ttm_mmap); 79 80 MODULE_DESCRIPTION("DRM gem ttm helpers"); 81 MODULE_LICENSE("GPL"); 82