Commit 9dd60c4e authored by Christian König's avatar Christian König Committed by Alex Deucher

drm/amdgpu: add support for processing IH ring 1 & 2

Previously we only added the ring buffer memory, now add the handling as
well.
Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Acked-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Reviewed-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent ad710812
...@@ -176,6 +176,36 @@ irqreturn_t amdgpu_irq_handler(int irq, void *arg) ...@@ -176,6 +176,36 @@ irqreturn_t amdgpu_irq_handler(int irq, void *arg)
return ret; return ret;
} }
/**
* amdgpu_irq_handle_ih1 - kick of processing for IH1
*
* @work: work structure in struct amdgpu_irq
*
* Kick of processing IH ring 1.
*/
static void amdgpu_irq_handle_ih1(struct work_struct *work)
{
struct amdgpu_device *adev = container_of(work, struct amdgpu_device,
irq.ih1_work);
amdgpu_ih_process(adev, &adev->irq.ih1, amdgpu_irq_callback);
}
/**
* amdgpu_irq_handle_ih2 - kick of processing for IH2
*
* @work: work structure in struct amdgpu_irq
*
* Kick of processing IH ring 2.
*/
static void amdgpu_irq_handle_ih2(struct work_struct *work)
{
struct amdgpu_device *adev = container_of(work, struct amdgpu_device,
irq.ih2_work);
amdgpu_ih_process(adev, &adev->irq.ih2, amdgpu_irq_callback);
}
/** /**
* amdgpu_msi_ok - check whether MSI functionality is enabled * amdgpu_msi_ok - check whether MSI functionality is enabled
* *
...@@ -240,6 +270,9 @@ int amdgpu_irq_init(struct amdgpu_device *adev) ...@@ -240,6 +270,9 @@ int amdgpu_irq_init(struct amdgpu_device *adev)
amdgpu_hotplug_work_func); amdgpu_hotplug_work_func);
} }
INIT_WORK(&adev->irq.ih1_work, amdgpu_irq_handle_ih1);
INIT_WORK(&adev->irq.ih2_work, amdgpu_irq_handle_ih2);
adev->irq.installed = true; adev->irq.installed = true;
r = drm_irq_install(adev->ddev, adev->ddev->pdev->irq); r = drm_irq_install(adev->ddev, adev->ddev->pdev->irq);
if (r) { if (r) {
......
...@@ -89,7 +89,9 @@ struct amdgpu_irq { ...@@ -89,7 +89,9 @@ struct amdgpu_irq {
/* interrupt rings */ /* interrupt rings */
struct amdgpu_ih_ring ih, ih1, ih2; struct amdgpu_ih_ring ih, ih1, ih2;
const struct amdgpu_ih_funcs *ih_funcs; const struct amdgpu_ih_funcs *ih_funcs;
struct work_struct ih1_work, ih2_work;
struct amdgpu_irq_src self_irq;
/* gen irq stuff */ /* gen irq stuff */
struct irq_domain *domain; /* GPU irq controller domain */ struct irq_domain *domain; /* GPU irq controller domain */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment