[PATCH] drm/amd/amdgpu: Fix wave mask in amdgpu_debugfs_wave_read() (v2)

Christian König ckoenig.leichtzumerken at gmail.com
Mon Nov 13 11:53:37 UTC 2017


Am 10.11.2017 um 20:37 schrieb Tom St Denis:
> The bottom two bits of the simd value were being put into
> the upper bits of the wave value which was likely working due
> to the bits being ignored (or aliased).
>
> Eitherway, now we mask it correctly.
>
> Signed-off-by: Tom St Denis <tom.stdenis at amd.com>

Reviewed-by: Christian König <christian.koenig at amd.com>

>
> (v2) Touch up using GENMASK_ULL to a couple of other functions too
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 40 +++++++++++++++---------------
>   1 file changed, 20 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index c1f1b8f15395..4944f8e1577b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -3336,9 +3336,9 @@ static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user *buf,
>   	pm_pg_lock = (*pos >> 23) & 1;
>   
>   	if (*pos & (1ULL << 62)) {
> -		se_bank = (*pos >> 24) & 0x3FF;
> -		sh_bank = (*pos >> 34) & 0x3FF;
> -		instance_bank = (*pos >> 44) & 0x3FF;
> +		se_bank = (*pos & GENMASK_ULL(33, 24)) >> 24;
> +		sh_bank = (*pos & GENMASK_ULL(43, 34)) >> 34;
> +		instance_bank = (*pos & GENMASK_ULL(53, 44)) >> 44;
>   
>   		if (se_bank == 0x3FF)
>   			se_bank = 0xFFFFFFFF;
> @@ -3412,9 +3412,9 @@ static ssize_t amdgpu_debugfs_regs_write(struct file *f, const char __user *buf,
>   	pm_pg_lock = (*pos >> 23) & 1;
>   
>   	if (*pos & (1ULL << 62)) {
> -		se_bank = (*pos >> 24) & 0x3FF;
> -		sh_bank = (*pos >> 34) & 0x3FF;
> -		instance_bank = (*pos >> 44) & 0x3FF;
> +		se_bank = (*pos & GENMASK_ULL(33, 24)) >> 24;
> +		sh_bank = (*pos & GENMASK_ULL(43, 34)) >> 34;
> +		instance_bank = (*pos & GENMASK_ULL(53, 44)) >> 44;
>   
>   		if (se_bank == 0x3FF)
>   			se_bank = 0xFFFFFFFF;
> @@ -3762,12 +3762,12 @@ static ssize_t amdgpu_debugfs_wave_read(struct file *f, char __user *buf,
>   		return -EINVAL;
>   
>   	/* decode offset */
> -	offset = (*pos & 0x7F);
> -	se = ((*pos >> 7) & 0xFF);
> -	sh = ((*pos >> 15) & 0xFF);
> -	cu = ((*pos >> 23) & 0xFF);
> -	wave = ((*pos >> 31) & 0xFF);
> -	simd = ((*pos >> 37) & 0xFF);
> +	offset = (*pos & GENMASK_ULL(6, 0));
> +	se = (*pos & GENMASK_ULL(14, 7)) >> 7;
> +	sh = (*pos & GENMASK_ULL(22, 15)) >> 15;
> +	cu = (*pos & GENMASK_ULL(30, 23)) >> 23;
> +	wave = (*pos & GENMASK_ULL(36, 31)) >> 31;
> +	simd = (*pos & GENMASK_ULL(44, 37)) >> 37;
>   
>   	/* switch to the specific se/sh/cu */
>   	mutex_lock(&adev->grbm_idx_mutex);
> @@ -3812,14 +3812,14 @@ static ssize_t amdgpu_debugfs_gpr_read(struct file *f, char __user *buf,
>   		return -EINVAL;
>   
>   	/* decode offset */
> -	offset = (*pos & 0xFFF);       /* in dwords */
> -	se = ((*pos >> 12) & 0xFF);
> -	sh = ((*pos >> 20) & 0xFF);
> -	cu = ((*pos >> 28) & 0xFF);
> -	wave = ((*pos >> 36) & 0xFF);
> -	simd = ((*pos >> 44) & 0xFF);
> -	thread = ((*pos >> 52) & 0xFF);
> -	bank = ((*pos >> 60) & 1);
> +	offset = *pos & GENMASK_ULL(11, 0);
> +	se = (*pos & GENMASK_ULL(19, 12)) >> 12;
> +	sh = (*pos & GENMASK_ULL(27, 20)) >> 20;
> +	cu = (*pos & GENMASK_ULL(35, 28)) >> 28;
> +	wave = (*pos & GENMASK_ULL(43, 36)) >> 36;
> +	simd = (*pos & GENMASK_ULL(51, 44)) >> 44;
> +	thread = (*pos & GENMASK_ULL(59, 52)) >> 52;
> +	bank = (*pos & GENMASK_ULL(61, 60)) >> 60;
>   
>   	data = kmalloc_array(1024, sizeof(*data), GFP_KERNEL);
>   	if (!data)




More information about the amd-gfx mailing list