aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2016-03-29 18:28:50 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-03-29 23:53:37 -0400
commitd766e6a393383c60a55bdcc72586f21a1ff12509 (patch)
tree2850bdf21e89a7bd48c8d08cd7ff6463ad955214 /drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
parent832be4041d4999e008839d12d1efe118da27bd99 (diff)
drm/amdgpu: switch ih handling to two levels (v3)
Newer asics have a two levels of irq ids now: client id - the IP src id - the interrupt src within the IP v2: integrated Christian's comments. v3: fix rebase fail in SI and CIK Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Ken Wang <Qingqing.Wang@amd.com> Reviewed-by: Ken Wang <Qingqing.Wang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
index 1642f4108297..0610cc4a9788 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
@@ -28,6 +28,7 @@
28#include "amdgpu_ih.h" 28#include "amdgpu_ih.h"
29 29
30#define AMDGPU_MAX_IRQ_SRC_ID 0x100 30#define AMDGPU_MAX_IRQ_SRC_ID 0x100
31#define AMDGPU_MAX_IRQ_CLIENT_ID 0x100
31 32
32struct amdgpu_device; 33struct amdgpu_device;
33struct amdgpu_iv_entry; 34struct amdgpu_iv_entry;
@@ -44,6 +45,10 @@ struct amdgpu_irq_src {
44 void *data; 45 void *data;
45}; 46};
46 47
48struct amdgpu_irq_client {
49 struct amdgpu_irq_src **sources;
50};
51
47/* provided by interrupt generating IP blocks */ 52/* provided by interrupt generating IP blocks */
48struct amdgpu_irq_src_funcs { 53struct amdgpu_irq_src_funcs {
49 int (*set)(struct amdgpu_device *adev, struct amdgpu_irq_src *source, 54 int (*set)(struct amdgpu_device *adev, struct amdgpu_irq_src *source,
@@ -58,7 +63,7 @@ struct amdgpu_irq {
58 bool installed; 63 bool installed;
59 spinlock_t lock; 64 spinlock_t lock;
60 /* interrupt sources */ 65 /* interrupt sources */
61 struct amdgpu_irq_src *sources[AMDGPU_MAX_IRQ_SRC_ID]; 66 struct amdgpu_irq_client client[AMDGPU_IH_CLIENTID_MAX];
62 67
63 /* status, etc. */ 68 /* status, etc. */
64 bool msi_enabled; /* msi enabled */ 69 bool msi_enabled; /* msi enabled */
@@ -80,7 +85,8 @@ irqreturn_t amdgpu_irq_handler(int irq, void *arg);
80 85
81int amdgpu_irq_init(struct amdgpu_device *adev); 86int amdgpu_irq_init(struct amdgpu_device *adev);
82void amdgpu_irq_fini(struct amdgpu_device *adev); 87void amdgpu_irq_fini(struct amdgpu_device *adev);
83int amdgpu_irq_add_id(struct amdgpu_device *adev, unsigned src_id, 88int amdgpu_irq_add_id(struct amdgpu_device *adev,
89 unsigned client_id, unsigned src_id,
84 struct amdgpu_irq_src *source); 90 struct amdgpu_irq_src *source);
85void amdgpu_irq_dispatch(struct amdgpu_device *adev, 91void amdgpu_irq_dispatch(struct amdgpu_device *adev,
86 struct amdgpu_iv_entry *entry); 92 struct amdgpu_iv_entry *entry);