diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_object.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 74 | 
1 files changed, 74 insertions, 0 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c index 07e81aca9c34..b191701098f0 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c @@ -1528,3 +1528,77 @@ uint32_t amdgpu_bo_get_preferred_pin_domain(struct amdgpu_device *adev,  	}  	return domain;  } + +#if defined(CONFIG_DEBUG_FS) +#define amdgpu_bo_print_flag(m, bo, flag)		        \ +	do {							\ +		if (bo->flags & (AMDGPU_GEM_CREATE_ ## flag)) {	\ +			seq_printf((m), " " #flag);		\ +		}						\ +	} while (0) + +/** + * amdgpu_debugfs_print_bo_info - print BO info in debugfs file + * + * @id: Index or Id of the BO + * @bo: Requested BO for printing info + * @m: debugfs file + * + * Print BO information in debugfs file + * + * Returns: + * Size of the BO in bytes. + */ +u64 amdgpu_bo_print_info(int id, struct amdgpu_bo *bo, struct seq_file *m) +{ +	struct dma_buf_attachment *attachment; +	struct dma_buf *dma_buf; +	unsigned int domain; +	const char *placement; +	unsigned int pin_count; +	u64 size; + +	domain = amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type); +	switch (domain) { +	case AMDGPU_GEM_DOMAIN_VRAM: +		placement = "VRAM"; +		break; +	case AMDGPU_GEM_DOMAIN_GTT: +		placement = " GTT"; +		break; +	case AMDGPU_GEM_DOMAIN_CPU: +	default: +		placement = " CPU"; +		break; +	} + +	size = amdgpu_bo_size(bo); +	seq_printf(m, "\t\t0x%08x: %12lld byte %s", +			id, size, placement); + +	pin_count = READ_ONCE(bo->pin_count); +	if (pin_count) +		seq_printf(m, " pin count %d", pin_count); + +	dma_buf = READ_ONCE(bo->tbo.base.dma_buf); +	attachment = READ_ONCE(bo->tbo.base.import_attach); + +	if (attachment) +		seq_printf(m, " imported from %p", dma_buf); +	else if (dma_buf) +		seq_printf(m, " exported as %p", dma_buf); + +	amdgpu_bo_print_flag(m, bo, CPU_ACCESS_REQUIRED); +	amdgpu_bo_print_flag(m, bo, NO_CPU_ACCESS); +	amdgpu_bo_print_flag(m, bo, CPU_GTT_USWC); +	amdgpu_bo_print_flag(m, bo, VRAM_CLEARED); +	amdgpu_bo_print_flag(m, bo, SHADOW); +	amdgpu_bo_print_flag(m, bo, VRAM_CONTIGUOUS); +	amdgpu_bo_print_flag(m, bo, VM_ALWAYS_VALID); +	amdgpu_bo_print_flag(m, bo, EXPLICIT_SYNC); + +	seq_puts(m, "\n"); + +	return size; +} +#endif | 
