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.base=%lx\n", 48 (unsigned long)bo->mem.bus.base); 49 drm_printf_indent(p, indent, "bus.offset=%lx\n", 50 (unsigned long)bo->mem.bus.offset); 51 } 52 } 53 EXPORT_SYMBOL(drm_gem_ttm_print_info); 54 55 /** 56 * drm_gem_ttm_mmap() - mmap &ttm_buffer_object 57 * @gem: GEM object. 58 * @vma: vm area. 59 * 60 * This function can be used as &drm_gem_object_funcs.mmap 61 * callback. 62 */ 63 int drm_gem_ttm_mmap(struct drm_gem_object *gem, 64 struct vm_area_struct *vma) 65 { 66 struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem); 67 int ret; 68 69 ret = ttm_bo_mmap_obj(vma, bo); 70 if (ret < 0) 71 return ret; 72 73 /* 74 * ttm has its own object refcounting, so drop gem reference 75 * to avoid double accounting counting. 76 */ 77 drm_gem_object_put_unlocked(gem); 78 79 return 0; 80 } 81 EXPORT_SYMBOL(drm_gem_ttm_mmap); 82 83 MODULE_DESCRIPTION("DRM gem ttm helpers"); 84 MODULE_LICENSE("GPL"); 85