diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2016-03-29 18:28:50 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-03-29 23:53:37 -0400 |
commit | d766e6a393383c60a55bdcc72586f21a1ff12509 (patch) | |
tree | 2850bdf21e89a7bd48c8d08cd7ff6463ad955214 /drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h | |
parent | 832be4041d4999e008839d12d1efe118da27bd99 (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.h | 10 |
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 | ||
32 | struct amdgpu_device; | 33 | struct amdgpu_device; |
33 | struct amdgpu_iv_entry; | 34 | struct amdgpu_iv_entry; |
@@ -44,6 +45,10 @@ struct amdgpu_irq_src { | |||
44 | void *data; | 45 | void *data; |
45 | }; | 46 | }; |
46 | 47 | ||
48 | struct 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 */ |
48 | struct amdgpu_irq_src_funcs { | 53 | struct 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 | ||
81 | int amdgpu_irq_init(struct amdgpu_device *adev); | 86 | int amdgpu_irq_init(struct amdgpu_device *adev); |
82 | void amdgpu_irq_fini(struct amdgpu_device *adev); | 87 | void amdgpu_irq_fini(struct amdgpu_device *adev); |
83 | int amdgpu_irq_add_id(struct amdgpu_device *adev, unsigned src_id, | 88 | int 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); |
85 | void amdgpu_irq_dispatch(struct amdgpu_device *adev, | 91 | void amdgpu_irq_dispatch(struct amdgpu_device *adev, |
86 | struct amdgpu_iv_entry *entry); | 92 | struct amdgpu_iv_entry *entry); |