[PATCH 1/4] drm/amdgpu: add stride to calculate oss ring offsets

Felix Kuehling felix.kuehling at amd.com
Fri Mar 20 14:30:35 UTC 2020


On 2020-03-19 20:22, Alex Sierra wrote:
> Arcturus and vega10 share the same vega10_ih, however both
> have different register offsets at the ih ring section.
> This variable is used to help calculate ih ring register addresses
> from the osssys, that corresponds to the current asic type.
>
> Signed-off-by: Alex Sierra <alex.sierra at amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 4 ++++
>   drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h | 1 +
>   2 files changed, 5 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> index 5ed4227f304b..fa384ae9a9bc 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> @@ -279,6 +279,10 @@ int amdgpu_irq_init(struct amdgpu_device *adev)
>   				amdgpu_hotplug_work_func);
>   	}
>   
> +	if (adev->asic_type == CHIP_ARCTURUS)
> +		adev->irq.ring_stride = 1;
> +	else
> +		adev->irq.ring_stride = 0;

This can't be right. ring_stride==0 would result in all mmIH_RING(...) 
register access to map to the same physical registers. So effectively 
everything would go to ring0.

Regards,
   Felix


>   	INIT_WORK(&adev->irq.ih1_work, amdgpu_irq_handle_ih1);
>   	INIT_WORK(&adev->irq.ih2_work, amdgpu_irq_handle_ih2);
>   
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
> index c718e94a55c9..1ec5b735cd9e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
> @@ -97,6 +97,7 @@ struct amdgpu_irq {
>   	struct irq_domain		*domain; /* GPU irq controller domain */
>   	unsigned			virq[AMDGPU_MAX_IRQ_SRC_ID];
>   	uint32_t                        srbm_soft_reset;
> +	unsigned			ring_stride;
>   };
>   
>   void amdgpu_irq_disable_all(struct amdgpu_device *adev);


More information about the amd-gfx mailing list