[PATCH 2/3] drm/amd/amdgpu: Add gca config debug entry

Christian König deathsimple at vodafone.de
Tue Jun 28 15:11:02 UTC 2016


Am 28.06.2016 um 16:43 schrieb Tom St Denis:
> A binary entry that lists GCA configuration data (and can be
> read by umr).
>
> Signed-off-by: Tom St Denis <tom.stdenis at amd.com>

Uff exporting the internal structures of the driver through a binary 
debugfs entry...

We don't need to be backward compatible because it is debugfs, but I 
don't think that is such a good idea.

Regards,
Christian.

> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 70 ++++++++++++++++++++++++++++++
>   1 file changed, 70 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index 4598093ad50b..7f08ac02f9de 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -2464,6 +2464,68 @@ static ssize_t amdgpu_debugfs_regs_smc_write(struct file *f, const char __user *
>   	return result;
>   }
>   
> +static ssize_t amdgpu_debugfs_gca_config_read(struct file *f, char __user *buf,
> +					size_t size, loff_t *pos)
> +{
> +	struct amdgpu_device *adev = f->f_inode->i_private;
> +	ssize_t result = 0;
> +	int r;
> +	uint32_t *config, no_regs = 0;
> +
> +	if (size & 0x3 || *pos & 0x3)
> +		return -EINVAL;
> +
> +	config = vmalloc(256*sizeof(*config));
> +	if (!config)
> +		return -ENOMEM;
> +
> +	/* version, increment each time something is added */
> +	config[no_regs++] = 0;
> +	config[no_regs++] = adev->gfx.config.max_shader_engines;
> +	config[no_regs++] = adev->gfx.config.max_tile_pipes;
> +	config[no_regs++] = adev->gfx.config.max_cu_per_sh;
> +	config[no_regs++] = adev->gfx.config.max_sh_per_se;
> +	config[no_regs++] = adev->gfx.config.max_backends_per_se;
> +	config[no_regs++] = adev->gfx.config.max_texture_channel_caches;
> +	config[no_regs++] = adev->gfx.config.max_gprs;
> +	config[no_regs++] = adev->gfx.config.max_gs_threads;
> +	config[no_regs++] = adev->gfx.config.max_hw_contexts;
> +	config[no_regs++] = adev->gfx.config.sc_prim_fifo_size_frontend;
> +	config[no_regs++] = adev->gfx.config.sc_prim_fifo_size_backend;
> +	config[no_regs++] = adev->gfx.config.sc_hiz_tile_fifo_size;
> +	config[no_regs++] = adev->gfx.config.sc_earlyz_tile_fifo_size;
> +	config[no_regs++] = adev->gfx.config.num_tile_pipes;
> +	config[no_regs++] = adev->gfx.config.backend_enable_mask;
> +	config[no_regs++] = adev->gfx.config.mem_max_burst_length_bytes;
> +	config[no_regs++] = adev->gfx.config.mem_row_size_in_kb;
> +	config[no_regs++] = adev->gfx.config.shader_engine_tile_size;
> +	config[no_regs++] = adev->gfx.config.num_gpus;
> +	config[no_regs++] = adev->gfx.config.multi_gpu_tile_size;
> +	config[no_regs++] = adev->gfx.config.mc_arb_ramcfg;
> +	config[no_regs++] = adev->gfx.config.gb_addr_config;
> +	config[no_regs++] = adev->gfx.config.num_rbs;
> +
> +	while (size && (*pos < no_regs*4)) {
> +		uint32_t value;
> +
> +		value = config[*pos >> 2];
> +		r = put_user(value, (uint32_t *)buf);
> +		if (r) {
> +			vfree(config);
> +			return r;
> +		}
> +
> +		result += 4;
> +		buf += 4;
> +		*pos += 4;
> +		size -= 4;
> +	}
> +
> +	vfree(config);
> +	return result;
> +}
> +
> +
>   static const struct file_operations amdgpu_debugfs_regs_fops = {
>   	.owner = THIS_MODULE,
>   	.read = amdgpu_debugfs_regs_read,
> @@ -2489,11 +2551,18 @@ static const struct file_operations amdgpu_debugfs_regs_smc_fops = {
>   	.llseek = default_llseek
>   };
>   
> +static const struct file_operations amdgpu_debugfs_gca_config_fops = {
> +	.owner = THIS_MODULE,
> +	.read = amdgpu_debugfs_gca_config_read,
> +	.llseek = default_llseek
> +};
> +
>   static const struct file_operations *debugfs_regs[] = {
>   	&amdgpu_debugfs_regs_fops,
>   	&amdgpu_debugfs_regs_didt_fops,
>   	&amdgpu_debugfs_regs_pcie_fops,
>   	&amdgpu_debugfs_regs_smc_fops,
> +	&amdgpu_debugfs_gca_config_fops,
>   };
>   
>   static const char *debugfs_regs_names[] = {
> @@ -2501,6 +2570,7 @@ static const char *debugfs_regs_names[] = {
>   	"amdgpu_regs_didt",
>   	"amdgpu_regs_pcie",
>   	"amdgpu_regs_smc",
> +	"amdgpu_gca_config",
>   };
>   
>   static int amdgpu_debugfs_regs_init(struct amdgpu_device *adev)



More information about the amd-gfx mailing list