hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
....@@ -25,17 +25,36 @@
2525 #define __AMDGPU_IRQ_H__
2626
2727 #include <linux/irqdomain.h>
28
+#include "soc15_ih_clientid.h"
2829 #include "amdgpu_ih.h"
2930
30
-#define AMDGPU_MAX_IRQ_SRC_ID 0x100
31
+#define AMDGPU_MAX_IRQ_SRC_ID 0x100
3132 #define AMDGPU_MAX_IRQ_CLIENT_ID 0x100
3233
34
+#define AMDGPU_IRQ_CLIENTID_LEGACY 0
35
+#define AMDGPU_IRQ_CLIENTID_MAX SOC15_IH_CLIENTID_MAX
36
+
37
+#define AMDGPU_IRQ_SRC_DATA_MAX_SIZE_DW 4
38
+
3339 struct amdgpu_device;
34
-struct amdgpu_iv_entry;
3540
3641 enum amdgpu_interrupt_state {
3742 AMDGPU_IRQ_STATE_DISABLE,
3843 AMDGPU_IRQ_STATE_ENABLE,
44
+};
45
+
46
+struct amdgpu_iv_entry {
47
+ unsigned client_id;
48
+ unsigned src_id;
49
+ unsigned ring_id;
50
+ unsigned vmid;
51
+ unsigned vmid_src;
52
+ uint64_t timestamp;
53
+ unsigned timestamp_src;
54
+ unsigned pasid;
55
+ unsigned pasid_src;
56
+ unsigned src_data[AMDGPU_IRQ_SRC_DATA_MAX_SIZE_DW];
57
+ const uint32_t *iv_entry;
3958 };
4059
4160 struct amdgpu_irq_src {
....@@ -63,14 +82,16 @@
6382 bool installed;
6483 spinlock_t lock;
6584 /* interrupt sources */
66
- struct amdgpu_irq_client client[AMDGPU_IH_CLIENTID_MAX];
85
+ struct amdgpu_irq_client client[AMDGPU_IRQ_CLIENTID_MAX];
6786
6887 /* status, etc. */
6988 bool msi_enabled; /* msi enabled */
7089
71
- /* interrupt ring */
72
- struct amdgpu_ih_ring ih;
73
- const struct amdgpu_ih_funcs *ih_funcs;
90
+ /* interrupt rings */
91
+ struct amdgpu_ih_ring ih, ih1, ih2;
92
+ const struct amdgpu_ih_funcs *ih_funcs;
93
+ struct work_struct ih1_work, ih2_work;
94
+ struct amdgpu_irq_src self_irq;
7495
7596 /* gen irq stuff */
7697 struct irq_domain *domain; /* GPU irq controller domain */
....@@ -87,7 +108,7 @@
87108 unsigned client_id, unsigned src_id,
88109 struct amdgpu_irq_src *source);
89110 void amdgpu_irq_dispatch(struct amdgpu_device *adev,
90
- struct amdgpu_iv_entry *entry);
111
+ struct amdgpu_ih_ring *ih);
91112 int amdgpu_irq_update(struct amdgpu_device *adev, struct amdgpu_irq_src *src,
92113 unsigned type);
93114 int amdgpu_irq_get(struct amdgpu_device *adev, struct amdgpu_irq_src *src,